#define HH_SENF_Packets_80221Bundle_TLVParser_ 1
// Custom includes
-#include <algorithm>
#include <senf/Packets/Packets.hh>
#include "MIHTypes.hh"
//#include "TLVParser.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
namespace senf {
: senf::Exception("MIHTLVLengthException") {}
};
+ struct InvalidMIHPacketException : public senf::Exception {
+ InvalidMIHPacketException(std::string const & description)
+ : senf::Exception("Invalid MIH message: ") { append(description); }
+ };
+
class MIHTLVLengthParser
: public detail::packet::IntParserOps<MIHTLVLengthParser, boost::uint32_t>,
\param v maximum value of length field
*/
void maxLength(MIHTLVLengthParser::value_type maxl) const;
+
+ void validateType(boost::uint8_t type) const;
+ void validateTypeLength(boost::uint8_t type, MIHTLVLengthParser::value_type length) const;
};
public:
///\name Value setters
- ///@{
+ //\{
void value( MIHFId const & id);
void value( std::string const & id );
void value( senf::INet4Address const & addr);
void value( senf::INet6Address const & addr);
void value( senf::EUI64 const & addr);
- ///@}
+ //\}
///\name Value getters
- ///@{
+ //\{
MIHFId valueAs( MIHFId::Type type) const;
std::string valueAsString() const;
senf::INet4Address valueAsINet4Address() const;
senf::INet6Address valueAsINet6Address() const;
senf::EUI64 valueAsEUI64() const;
- ///@}
+ //\}
///\name Value comparisons
- ///@{
+ //\{
bool valueEquals( MIHFId const & id) const;
bool valueEquals( std::string const & id ) const;
bool valueEquals( senf::INet4Address const & addr) const;
bool valueEquals( senf::INet6Address const & addr) const;
bool valueEquals( senf::EUI64 const & addr) const;
- ///@}
+ //\}
void dump(std::ostream & os) const;
void maxIdLength(boost::uint8_t maxl) const;
}
static type_t::value_type const typeId = 1;
void dump(std::ostream & os) const;
+ void validate() const;
};
/** \brief Parser for 802.21 destination MIHF_ID TLV
}
static type_t::value_type const typeId = 2;
void dump(std::ostream & os) const;
+ void validate() const;
};
/** \brief Parser for 802.21 Status TLV
}
static type_t::value_type const typeId = 3;
void dump(std::ostream & os) const; ///< dump string representation to given stream
+ void validate() const;
enum StatusCode {
Success, UnspecifiedFailure, Rejected, AuthorizationFailure, NetworkError };
}
static type_t::value_type const typeId = 11;
void dump(std::ostream & os) const; ///< dump string representation to given stream
+ void validate() const;
enum RequestCode { Registration, ReRegistration };
};
}
static type_t::value_type const typeId = 12;
void dump(std::ostream & os) const; ///< dump string representation to given stream
+ void validate() const;
};
}
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#include "TLVParser.cci"
#include "TLVParser.ct"
#include "TLVParser.cti"