X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketType.ct;h=5443c1db106c5dff4480216a6b7089b244081914;hb=e57e1ec99a16261d1f436d1ea42f60dda6aae5cc;hp=d3cc0855df7715a39780d31ce48e21ae172c3e65;hpb=0990bd1c4f917855f3645e7329a84b00e54ccd7d;p=senf.git diff --git a/Packets/PacketType.ct b/Packets/PacketType.ct index d3cc085..5443c1d 100644 --- a/Packets/PacketType.ct +++ b/Packets/PacketType.ct @@ -43,9 +43,16 @@ senf::PacketTypeMixin::nextPacketRange(Packet p) ///\idea This if condition could be replaced with a compile time switch by checking, wether /// (the function address) Self::initHeadSize is different from PacketTypeBase::initHeadSize if (sz == PacketTypeBase::size_type(-1)) - return PacketTypeBase::range(boost::next(p.data().begin(),Self::initSize()), + return PacketTypeBase::range(boost::next(p.data().begin(), + bytes(p.as< ConcretePacket >().parser())), p.data().end()); else + // If we have a trailer, we do *not* use the 'bytes' value but initSize/initHeadSize, this + // is much safer since the bytes() value will probably not be very correct anyways (what + // should it return ? the size of the header only, the combined size of header and trailer + // or the size of the packet from header to trailer including payload?). + // + // So, the helper only works with fixed-size parsers if the packet has a trailer. return PacketTypeBase::range(boost::next(p.data().begin(),sz), boost::prior(p.data().end(),Self::initSize()-sz)); }