X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketParser.hh;h=5248296b172d1f5cdb8206ef2cb135e6ae6918dc;hb=844ac7af0a15ed6c487bc9928148ac38a2ce4025;hp=a00da0d86cdd10dcd423e8f76bcb63b1231cd910;hpb=37c00b11c3d5c794463bbe7fc709674cca8579d3;p=senf.git diff --git a/Packets/PacketParser.hh b/Packets/PacketParser.hh index a00da0d..5248296 100644 --- a/Packets/PacketParser.hh +++ b/Packets/PacketParser.hh @@ -264,10 +264,23 @@ namespace senf { here. The size of the interpreted is given by senf::bytes(parser instance). */ + + data_iterator i(size_type offset) const; ///< Return iterator \a offset bytes from the start + /**< The return value is the same as i() + \a + offset. However, the parser checks, that the iterator is + still within range of the raw data + container. Otherwise a TruncatedPacketException is + thrown. + + \throws TruncatedPacketException if the raw data + container does not hold at least \a offset bytes + starting at i(). */ + state_type state() const; ///< Return state of this parser /**< The value returned should be interpreted as an opaque value provided just to be forwarded to other parsers. */ + PacketData & data() const; ///< Access the packets raw data container /**< This member will return the raw data container holding the data which is parsed by \c this parser. */ @@ -282,6 +295,7 @@ namespace senf { /**< This is the constructor used by most parsers. The parameters are just forwarded from the derived classes constructor parameters. */ + PacketParserBase(data_iterator i, state_type s, size_type size); ///< Size checking constructor /**< In addition to the standard constructor, this @@ -303,6 +317,7 @@ namespace senf { bool check(size_type size) const; ///< Check size of data container /**< \returns \c true, if the data container holds at least \a size beginning at i(), \c false otherwise. */ + void validate(size_type size) const; ///< Validate size of data container /**< \throws TruncatedPacketException if the raw data container does not hold at least \a size bytes @@ -312,6 +327,7 @@ namespace senf { /**< Creates a new instance of \a Parser to parse data beginning at \a i. Automatically passes \a state() to the new parser. */ + template Parser parse(size_type n) const; ///< Create sub-parser /**< Creates a new instance of \a Parser to parse data * beginning at i() + \a n. Automatically passes \a