// $Id$
//
// Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-// Thorsten Horstmann <thorsten.horstmann@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Thorsten Horstmann <tho@berlios.de>
//
// 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
#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<Parse_UInt8>( 1 ).value();
+ return parse<UInt8Parser>( 1 ).value();
case 3:
- return parse<Parse_UInt16>( 1 ).value();
+ return parse<UInt16Parser>( 1 ).value();
case 4:
- return parse<Parse_UInt24>( 1 ).value();
+ return parse<UInt24Parser>( 1 ).value();
case 5:
- return parse<Parse_UInt32>( 1 ).value();
+ return parse<UInt32Parser>( 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<Parse_TLVPacketLength> safeThis (*this);
+ SafePacketParserWrapper<DynamicTLVLengthParser> safeThis (*this);
if (v < 128u) {
if (bytes() != 1) {
resize(1);
safeThis->extended_length_flag() = true;
safeThis->fixed_length_field() = 1;
}
- safeThis->parse<Parse_UInt8>(1) = v;
+ safeThis->parse<UInt8Parser>(1) = v;
return;
}
if (v < 65536u) {
safeThis->extended_length_flag() = true;
safeThis->fixed_length_field() = 2;
}
- safeThis->parse<Parse_UInt16>(1) = v;
+ safeThis->parse<UInt16Parser>(1) = v;
return;
}
if (v < 16777216u) {
safeThis->extended_length_flag() = true;
safeThis->fixed_length_field() = 3;
}
- safeThis->parse<Parse_UInt24>(1) = v;
+ safeThis->parse<UInt24Parser>(1) = v;
return;
}
if (v <= 4294967295u) {
safeThis->extended_length_flag() = true;
safeThis->fixed_length_field() = 4;
}
- safeThis->parse<Parse_UInt32>(1) = v;
+ safeThis->parse<UInt32Parser>(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();
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());
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_