NAME

DwFieldBody -- Class representing a MIME header field body

SYNOPSIS

class DW_EXPORT DwFieldBody : public DwMessageComponent {

    friend class DwField;

public:

    DwFieldBody();
    DwFieldBody(const DwFieldBody& aFieldBody);
    DwFieldBody(const DwString& aStr, DwMessageComponent* aParent=0);
    virtual ~DwFieldBody();
    const DwFieldBody& operator = (const DwFieldBody& aFieldBody);
    void SetOffset(int aOffset);
    void SetFolding(DwBool aTrueOrFalse);
    DwBool IsFolding() const;

protected:

    int mLineOffset;
    DwBool mDoFolding;

public:

    virtual void PrintDebugInfo(ostream& aStrm, int aDepth=0) const;
    virtual void CheckInvariants() const;

protected:

    void _PrintDebugInfo(ostream& aStrm) const;
};

DESCRIPTION

DwFieldBody represents the field-body element in the BNF grammar specified by RFC-822. It is an abstract base class that defines the interface common to all structured field bodies.

In the tree (broken-down) representation of a message, a DwFieldBody object may be either a leaf node, having a parent but no child nodes, or an intermediate node, having a parent and one or more child nodes. The parent node is the DwField object that contains it. Child nodes, if present, depend on the particular subclass of DwFieldBody that is instantiated. A DwAddressList object, for example, has DwAddress objects as its child nodes.

Since DwFieldBody is an abstract base class, you cannot create instances of it directly. Normally, objects of classes derived from DwFieldBody are obtained by calling convenience member functions in the class DwHeaders.

Some MIME parsers are broken in that they do not handle the folding of some fields properly. DwFieldBody folds its string representation by default. You can disable folding, however, by calling the SetFolding() member function. To determine if folding is enabled, call IsFolding().

Public Member Functions

DwFieldBody()
DwFieldBody(const DwFieldBody& aFieldBody)
DwFieldBody(const DwString& aStr, DwMessageComponent* aParent=0)

The first constructor is the default constructor, which sets the DwFieldBody object's string representation to the empty string and sets its parent to NULL.

The second constructor is the copy constructor, which performs a deep copy of aFieldBody. The parent of the new DwFieldBody object is set to NULL.

The third constructor copies aStr to the DwFieldBody object's string representation and sets aParent as its parent. The virtual member function Parse() should be called immediately after this constructor in order to parse the string representation. Unless it is NULL, aParent should point to an object of a class derived from DwField.

const DwFieldBody& operator = (const DwFieldBody& aFieldBody)

This is the assignment operator, which performs a deep copy of aFieldBody. The parent node of the DwFieldBody object is not changed.

void SetOffset(int aOffset)

Sets the offset to aOffset. The offset is used when folding lines. It indicates how much the first line should be offset to account for the field name, colon, and initial white space.

void SetFolding(DwBool aTrueOrFalse)

Enables (aTrueOrFalse = DwTrue) or disables (aTrueOrFalse = DwFalse) the folding of fields. The default is to fold fields. Unfortunately, some parsers are broke and do not handle folded lines properly. This function allows a kludge to deal with these broken parsers.

DwBool IsFolding() const

Returns a boolean indicating if folding of fields is enabled.

virtual void PrintDebugInfo(ostream& aStrm, int aDepth=0) const

This virtual function, inherited from DwMessageComponent, prints debugging information about this object to aStrm. It will also call PrintDebugInfo() for any of its child components down to a level of aDepth.

This member function is available only in the debug version of the library.

virtual void CheckInvariants() const

Aborts if one of the invariants of the object fails. Use this member function to track down bugs.

This member function is available only in the debug version of the library.