X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketType.ct;h=bdd2e88f5e9039eed8feebe23d6f606dfe4f5a87;hb=0734bd14c709ca5ba1d0ed69c5b9f5d1487e5faa;hp=d3cc0855df7715a39780d31ce48e21ae172c3e65;hpb=0990bd1c4f917855f3645e7329a84b00e54ccd7d;p=senf.git diff --git a/Packets/PacketType.ct b/Packets/PacketType.ct index d3cc085..bdd2e88 100644 --- a/Packets/PacketType.ct +++ b/Packets/PacketType.ct @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -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)); }