X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2F80221Bundle%2FTLVParser.cc;h=729b1ece583706b2247f715f54a849d628afe42b;hb=57daeae6f2e924ce3f16f9677c3474f531cba9e5;hp=5d6a20c01aa644a2f9513c3e2ebe04466802c8d9;hpb=d0c31526ac12869eed085891e3ae13e8b21072e6;p=senf.git diff --git a/senf/Packets/80221Bundle/TLVParser.cc b/senf/Packets/80221Bundle/TLVParser.cc index 5d6a20c..729b1ec 100644 --- a/senf/Packets/80221Bundle/TLVParser.cc +++ b/senf/Packets/80221Bundle/TLVParser.cc @@ -29,7 +29,6 @@ // Custom includes #include #include -#include #define prefix_ //-///////////////////////////////////////////////////////////////////////////////////////////////// @@ -42,16 +41,21 @@ SENF_PACKET_TLV_REGISTRY_REGISTER( senf::MIHValidTimeIntervalTLVParser ); //-///////////////////////////////////////////////////////////////////////////////////////////////// // MIHBaseTLVParser -prefix_ std::pair senf::MIHBaseTLVParser::validateTL(boost::uint8_t expectedType, MIHTLVLengthParser::value_type expectedLength) +prefix_ void senf::MIHBaseTLVParser::validateType(boost::uint8_t expectedType) const { if (! check( 1 + senf::bytes(length_()) + length()) ) - return std::make_pair(false, "truncated TLV. Type: " + senf::str(type())); + throw InvalidMIHPacketException("truncated TLV.") << " Type: " << unsigned(type()); if (type() != expectedType) - return std::make_pair(false, "invalid TLV type: " + senf::str(type())); + throw InvalidMIHPacketException("wrong TLV type. expected ") << unsigned(expectedType) << " got " << unsigned(type()); +} + +prefix_ void senf::MIHBaseTLVParser::validateTypeLength(boost::uint8_t expectedType, MIHTLVLengthParser::value_type expectedLength) + const +{ + validateType( expectedType); if (length() != expectedLength) - return std::make_pair(false, "invalid length in TLV. Type: " + senf::str(type())); - return std::make_pair(true, ""); + throw InvalidMIHPacketException("invalid length in TLV.") << " Type: " << unsigned(type()); } //-///////////////////////////////////////////////////////////////////////////////////////////////// @@ -64,7 +68,6 @@ prefix_ void senf::MIHBaseListTLVParser::maxListSize(MIHTLVLengthParser::value_t maxLength( maxl + senf::bytes(listSize_())); } - //-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::MIHFIdTLVParser @@ -183,14 +186,10 @@ prefix_ void senf::MIHFSrcIdTLVParser::dump(std::ostream & os) MIHFIdTLVParser::dump(os); } -prefix_ std::pair senf::MIHFSrcIdTLVParser::validate() +prefix_ void senf::MIHFSrcIdTLVParser::validate() const { - if (! check( 1 + senf::bytes(length_()) + length()) ) - return std::make_pair(false, "truncated TLV. Type: " + senf::str(type())); - if (type() != typeId) - return std::make_pair(false, "invalid TLV type: " + senf::str(type())); - return std::make_pair(true, ""); + validateType( typeId); } @@ -205,14 +204,10 @@ prefix_ void senf::MIHFDstIdTLVParser::dump(std::ostream & os) MIHFIdTLVParser::dump(os); } -prefix_ std::pair senf::MIHFDstIdTLVParser::validate() +prefix_ void senf::MIHFDstIdTLVParser::validate() const { - if (! check( 1 + senf::bytes(length_()) + length()) ) - return std::make_pair(false, "truncated TLV. Type: " + senf::str(type())); - if (type() != typeId) - return std::make_pair(false, "invalid TLV type: " + senf::str(type())); - return std::make_pair(true, ""); + validateType( typeId); } //-///////////////////////////////////////////////////////////////////////////////////////////////// @@ -247,14 +242,12 @@ prefix_ void senf::MIHStatusTLVParser::dump(std::ostream & os) os << " (???; invalid value!)" << std::endl; } -prefix_ std::pair senf::MIHStatusTLVParser::validate() +prefix_ void senf::MIHStatusTLVParser::validate() const { - if (! validateTL( typeId, 1).first) - return validateTL( typeId, 1); + validateTypeLength( typeId, 1); if (value() >= 4) - return std::make_pair(false, "invalid value in MIHStatusTLV " + senf::str(value())); - return std::make_pair(true, ""); + throw InvalidMIHPacketException("invalid value in MIHStatusTLV ") << unsigned( value()); } //-///////////////////////////////////////////////////////////////////////////////////////////////// @@ -280,14 +273,12 @@ prefix_ void senf::MIHRegisterReqCodeTLVParser::dump(std::ostream & os) os << " (???; invalid value!)" << std::endl; } -prefix_ std::pair senf::MIHRegisterReqCodeTLVParser::validate() +prefix_ void senf::MIHRegisterReqCodeTLVParser::validate() const { - if (! validateTL( typeId, 1).first) - return validateTL( typeId, 1); + validateTypeLength( typeId, 1); if (value() >= 2) - return std::make_pair(false, "invalid value in MIHRegisterReqCodeTLV " + senf::str(value())); - return std::make_pair(true, ""); + throw InvalidMIHPacketException("invalid value in MIHRegisterReqCodeTLV ") << unsigned( value()); } //-///////////////////////////////////////////////////////////////////////////////////////////////// @@ -305,11 +296,10 @@ prefix_ void senf::MIHValidTimeIntervalTLVParser::dump(std::ostream & os) << ( value()==0 ? " (infinite)" : " seconds") << std::endl; } -prefix_ std::pair senf::MIHValidTimeIntervalTLVParser::validate() +prefix_ void senf::MIHValidTimeIntervalTLVParser::validate() const { - if (! validateTL( typeId, 4).first) return validateTL( typeId, 4); - return std::make_pair(true, ""); + validateTypeLength( typeId, 4); } //-/////////////////////////////////////////////////////////////////////////////////////////////////