X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FDefaultBundle%2FIPv6ExtOptionType.ct;h=95dc08539829408d156c015b4013e5f1f04960fb;hb=309d78606f59617de0cfb1469b22111c846891ad;hp=201ccbde2c4df69b0ce16bfc69c27ef1e5d3be2c;hpb=79615f135540eb93e24ac7720a9fecb08fba2842;p=senf.git diff --git a/senf/Packets/DefaultBundle/IPv6ExtOptionType.ct b/senf/Packets/DefaultBundle/IPv6ExtOptionType.ct index 201ccbd..95dc085 100644 --- a/senf/Packets/DefaultBundle/IPv6ExtOptionType.ct +++ b/senf/Packets/DefaultBundle/IPv6ExtOptionType.ct @@ -1,6 +1,6 @@ // $Id: IPv6ExtOptionType.ct 869 2008-06-09 13:57:27Z pug $ // -// Copyright (C) 2007 +// Copyright (C) 2009 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Philipp.Batroff@fokus.fraunhofer.de @@ -31,18 +31,10 @@ ///////////////////////////////ct.p//////////////////////////////////////// template -prefix_ void senf::GenericOptTypeTLVPacketParser::value(ForwardReadableRange const &range) +prefix_ void senf::IPv6GenericOptionTLVParser::value(ForwardReadableRange const &range) { unsigned int rangeSize = boost::size(range); safe_data_iterator si( data(), boost::next(i(), 2 + optionLength() ) ); -// 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)); -// } if ( (rangeSize-2) != optionLength() ) resize(optionLength()+2, rangeSize); @@ -57,6 +49,38 @@ prefix_ void senf::GenericOptTypeTLVPacketParser::value(ForwardReadableRange con optionLength() = *(boost::next( boost::begin(range), 1)); } +template +prefix_ void senf::IPv6GenericOptionTLVParser::setPayload(ForwardReadableRange const &range) +{ + unsigned int rangeSize = boost::size(range); + if ( rangeSize != optionLength() ) + resize( (optionLength() + 2), (rangeSize + 2) ); + safe_data_iterator si( data(), boost::next( i(), 2) ); + std::copy( boost::begin(range), boost::end(range), si); + optionLength() = rangeSize; +} + + +template +prefix_ Parser& senf::IPv6GenericOptionTLVParser::init() +{ + size_type oldSize ( bytes() ); + safe_data_iterator j( data(), i() ); + resize( oldSize, senf::init_bytes::value); + std::advance(j, senf::init_bytes::value); + std::fill(safe_data_iterator(data(), i()) , j, 0u); + Parser::optionType() = typeCode; + return *(this); +} + +// template +// prefix_ Parser& senf::GenericOptTypeTLVParser::get() +// { +// SENF_ASSERT (optionType() == typeCode); +// return *(this); +// } + + ///////////////////////////////ct.e//////////////////////////////////////// #undef prefix_