X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FDefaultBundle%2FIPv6ExtOptionType.ct;h=cc5f9f2448c47f7720e6e9190476d16f5d29ea8f;hb=17b707d5ed5741bcbeba233eeb1efacecd990176;hp=3aa4f2a89828509789868e06a72ea80998598060;hpb=84bd150c667e693c7ba6c31819b3f155f53e514a;p=senf.git diff --git a/senf/Packets/DefaultBundle/IPv6ExtOptionType.ct b/senf/Packets/DefaultBundle/IPv6ExtOptionType.ct index 3aa4f2a..cc5f9f2 100644 --- a/senf/Packets/DefaultBundle/IPv6ExtOptionType.ct +++ b/senf/Packets/DefaultBundle/IPv6ExtOptionType.ct @@ -30,8 +30,22 @@ template prefix_ void senf::GenericOptTypeTLVPacketParser::value(ForwardReadableRange const &range) { - safe_data_iterator si = resizeValueField( boost::size(range) ); - std::copy( boost::begin(range), boost::end(range), si); + safe_data_iterator si( data(), boost::next(data().begin()+2) ); + unsigned int rangeSize = boost::size(range); +// std::cout << "tmpl. method - optLength =" << (unsigned) optionLength() +// << ", rangeSize: " << rangeSize +// << ", optionType: " << (unsigned) optionType() << std::endl; + if ( rangeSize > optionLength() ){ +// std::cout << "rangeSize > optionLength()" << std::endl; + data().insert(si, rangeSize - optionLength(),0 ); + } + if (rangeSize < optionLength() ){ +// std::cout << "rangeSize < optionLength()" << std::endl; + data().erase(si, si + (optionLength() - rangeSize)); + } + std::copy(( boost::begin(range)), boost::end(range), si); + optionLength() = 2u; +// std::cout << "optLength AFTER =" << (unsigned) optionLength() << ", rangeSize: " << rangeSize << std::endl; } ///////////////////////////////ct.e////////////////////////////////////////