X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FMPEGDVBBundle%2FTLVPacket.cc;h=de06d6181dc5066ffc4b2184415200fde1456154;hb=c0b5c560da72983939b286632ac481e076649ddb;hp=628bf550144d2b1b7c2ca781021c87a77e1cdb8f;hpb=759f89cf0952cbc42207e5c4cf059d3906a37e59;p=senf.git diff --git a/Packets/MPEGDVBBundle/TLVPacket.cc b/Packets/MPEGDVBBundle/TLVPacket.cc index 628bf55..de06d61 100644 --- a/Packets/MPEGDVBBundle/TLVPacket.cc +++ b/Packets/MPEGDVBBundle/TLVPacket.cc @@ -1,9 +1,9 @@ // $Id$ // // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Thorsten Horstmann +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Thorsten Horstmann // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -33,83 +33,83 @@ #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -prefix_ senf::Parse_TLVPacketLength::value_type senf::Parse_TLVPacketLength::value() const +prefix_ senf::DynamicTLVLengthParser::value_type senf::DynamicTLVLengthParser::value() const { switch (bytes() ) { case 1: return fixed_length_field().value(); case 2: - return parse( 1 ).value(); + return parse( 1 ).value(); case 3: - return parse( 1 ).value(); + return parse( 1 ).value(); case 4: - return parse( 1 ).value(); + return parse( 1 ).value(); case 5: - return parse( 1 ).value(); + return parse( 1 ).value(); default: throw(UnsuportedTLVPacketException()); }; } -prefix_ void senf::Parse_TLVPacketLength::value(value_type const & v) +prefix_ void senf::DynamicTLVLengthParser::value(value_type const & v) { if (v > 4294967295u) throw(UnsuportedTLVPacketException()); - SafePacketParser safeThis (*this); + SafePacketParserWrapper safeThis (*this); if (v < 128u) { if (bytes() != 1) { resize(1); - safeThis->extended_length_flag() = false; - } + safeThis->extended_length_flag() = false; + } safeThis->fixed_length_field() = v; return; } if (v < 256u) { if (bytes() != 2) { - resize(2); + resize(2); safeThis->extended_length_flag() = true; - safeThis->fixed_length_field() = 1; - } - safeThis->parse(1) = v; + safeThis->fixed_length_field() = 1; + } + safeThis->parse(1) = v; return; } if (v < 65536u) { if (bytes() != 3) { - resize(3); - safeThis->extended_length_flag() = true; - safeThis->fixed_length_field() = 2; - } - safeThis->parse(1) = v; + resize(3); + safeThis->extended_length_flag() = true; + safeThis->fixed_length_field() = 2; + } + safeThis->parse(1) = v; return; } if (v < 16777216u) { if (bytes() != 4) { - resize(4); - safeThis->extended_length_flag() = true; - safeThis->fixed_length_field() = 3; - } - safeThis->parse(1) = v; + resize(4); + safeThis->extended_length_flag() = true; + safeThis->fixed_length_field() = 3; + } + safeThis->parse(1) = v; return; } if (v <= 4294967295u) { if (bytes() != 5) { - resize(5); - safeThis->extended_length_flag() = true; - safeThis->fixed_length_field() = 4; - } - safeThis->parse(1) = v; + resize(5); + safeThis->extended_length_flag() = true; + safeThis->fixed_length_field() = 4; + } + safeThis->parse(1) = v; return; } } -prefix_ senf::Parse_TLVPacketLength const & senf::Parse_TLVPacketLength::operator= (value_type other) +prefix_ senf::DynamicTLVLengthParser const & senf::DynamicTLVLengthParser::operator= (value_type other) { value(other); return *this; } -prefix_ senf::Parse_TLVPacketLength::size_type senf::Parse_TLVPacketLength::bytes() const +prefix_ senf::DynamicTLVLengthParser::size_type senf::DynamicTLVLengthParser::bytes() const { if ( extended_length_flag() ) return 1 + fixed_length_field(); @@ -117,13 +117,13 @@ prefix_ senf::Parse_TLVPacketLength::size_type senf::Parse_TLVPacketLength::byte return 1; } -prefix_ void senf::Parse_TLVPacketLength::init() const +prefix_ void senf::DynamicTLVLengthParser::init() const { defaultInit(); extended_length_flag() = 0; } -prefix_ void senf::Parse_TLVPacketLength::resize(size_type size) +prefix_ void senf::DynamicTLVLengthParser::resize(size_type size) { size_type current_size (bytes()); safe_data_iterator si (data(), i()); @@ -134,39 +134,6 @@ prefix_ void senf::Parse_TLVPacketLength::resize(size_type size) data().insert( si, size-current_size, 0); } -prefix_ void senf::TLVPacketType::dump(packet p, std::ostream & os) -{ - os << "TLVPacket:\n" - << std::dec - << " type: " << unsigned(p->type()) << "\n" - << " length: " << unsigned(p->length()) << "\n"; -} - -prefix_ senf::PacketParserBase::size_type senf::TLVPacketType::initSize() -{ - return 5; // 4 bytes type + 1 byte length -} - -prefix_ void senf::TLVPacketType::init(packet p) -{ - p->init(); -} - -prefix_ void senf::TLVPacketType::finalize(packet p) -{ - p->length() = p.next().data().size(); -} - -prefix_ senf::PacketInterpreterBase::optional_range -senf::TLVPacketType::nextPacketRange(packet p) -{ - if (p.data().size() < 5) - return no_range(); - return range( - boost::next(p.data().begin(), 4 + senf::bytes(p->length()) ), - p.data().end() ); -} - ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_