class Poco::Net::MultipartReader

Overview

This class is used to split a MIME multipart message into its single parts. More…

#include <MultipartReader.h>

class MultipartReader
{
public:
    // construction

    MultipartReader(std::istream& istr);

    MultipartReader(
        std::istream& istr,
        const std::string& boundary
        );

    // methods

    void
    nextPart(MessageHeader& messageHeader);

    bool
    hasNextPart();

    std::istream&
    stream() const;

    const std::string&
    boundary() const;

protected:
    // methods

    void
    findFirstBoundary();

    void
    guessBoundary();

    void
    parseHeader(MessageHeader& messageHeader);

    bool
    readLine(
        std::string& line,
        std::string::size_type n
        );
};

Detailed Documentation

This class is used to split a MIME multipart message into its single parts.

The format of multipart messages is described in section 5.1 of RFC 2046.

To split a multipart message into its parts, do the following:

- Create a MultipartReader object, passing it
  an input stream and optionally a boundary string.
- while hasNextPart() returns true, call nextPart()
  and read the part from stream().

Always ensure that you read all data from the part stream, otherwise the MultipartReader will fail to find the next part.

Construction

MultipartReader(std::istream& istr)

Creates the MultipartReader and attaches it to the given input stream.

The boundary string is determined from the input stream. The message must not contain a preamble preceding the first encapsulation boundary.

MultipartReader(
    std::istream& istr,
    const std::string& boundary
    )

Creates the MultipartReader and attaches it to the given input stream.

The given boundary string is used to find message boundaries.

Methods

void
nextPart(MessageHeader& messageHeader)

Moves to the next part in the message and stores the part’s header fields in messageHeader.

Throws an MultipartException if there are no more parts available, or if no boundary line can be found in the input stream.

bool
hasNextPart()

Returns true iff more parts are available.

Before the first call to nextPart(), returns always true.

std::istream&
stream() const

Returns a reference to the reader’s stream that can be used to read the current part.

The returned reference will be valid until nextPart() is called or the MultipartReader object is destroyed.

const std::string&
boundary() const

Returns the multipart boundary used by this reader.