X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2F80221Bundle%2FTLVParser.hh;h=2362a10b206af4430d3e32acadcc52dfccfcf07d;hb=refs%2Fheads%2Fmaster;hp=601207f6cead7455ee208475322f906007502b64;hpb=ff305084cba283649a2c97e73d2608c3e4598683;p=senf.git diff --git a/senf/Packets/80221Bundle/TLVParser.hh b/senf/Packets/80221Bundle/TLVParser.hh index 601207f..2362a10 100644 --- a/senf/Packets/80221Bundle/TLVParser.hh +++ b/senf/Packets/80221Bundle/TLVParser.hh @@ -2,23 +2,28 @@ // // Copyright (C) 2007 // 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 -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Thorsten Horstmann /** \file \brief TLVParser public header */ @@ -35,19 +40,12 @@ namespace senf { - struct MIHTLVLengthException : public senf::Exception - { - MIHTLVLengthException() - : senf::Exception("MIHTLVLengthException") {} - }; - - - class MIHTLVLengthParser - : public detail::packet::IntParserOps, + class MIHLengthParser + : public detail::packet::IntParserOps, public PacketParserBase { public: - MIHTLVLengthParser(data_iterator i, state_type s) : PacketParserBase(i,s) {} + MIHLengthParser(data_iterator i, state_type s) : PacketParserBase(i,s) {} typedef boost::uint32_t value_type; static const size_type init_bytes = 1; @@ -55,9 +53,9 @@ namespace senf { static value_type const max_value = 4294967295u; value_type value() const; - void value(value_type const & v); + void value(value_type v); - MIHTLVLengthParser const & operator= (value_type other); + MIHLengthParser const & operator= (value_type other); size_type bytes() const; void init() const; @@ -81,7 +79,7 @@ namespace senf { MIHBaseTLVParser is the abstract base class for MIH TLV parsers. It defines the \ref type() field as an \ref senf::UInt8Parser and the \ref length() field as a - MIHTLVLengthParser. The length field is read-only. + MIHLengthParser. The length field is read-only. To create your own \c TLVParser you have to inherit from MIHBaseTLVParser (don't forget \ref SENF_PARSER_INHERIT) and define the \c value field. In the following example @@ -100,7 +98,7 @@ namespace senf { example adding more than 21 MACAddresses to the vector will throw a TLVLengthException if you don't call \c maxLength( \e some_value) before. - \see MIHTLVLengthParser \n + \see MIHLengthParser \n MIHGenericTLVParser \n */ class MIHBaseTLVParser : public PacketParserBase @@ -108,7 +106,7 @@ namespace senf { public: # include SENF_PARSER() SENF_PARSER_FIELD ( type, UInt8Parser ); - SENF_PARSER_FIELD_RO ( length, MIHTLVLengthParser ); + SENF_PARSER_FIELD_RO ( length, MIHLengthParser ); SENF_PARSER_FINALIZE ( MIHBaseTLVParser ); /** \brief shrink size of the TLV length field to minimum @@ -126,7 +124,10 @@ namespace senf { The size of the length field will be increased if necessary. \param v maximum value of length field */ - void maxLength(MIHTLVLengthParser::value_type maxl) const; + void maxLength(MIHLengthParser::value_type maxl) const; + + void validateType(boost::uint8_t type) const; + void validateTypeLength(boost::uint8_t type, MIHLengthParser::value_type length) const; }; @@ -141,7 +142,7 @@ namespace senf { void init() const { defaultInit(); - maxLength( MIHTLVLengthParser::max_value); + maxLength( MIHLengthParser::max_value); } using base::init; @@ -156,10 +157,10 @@ namespace senf { { # include SENF_PARSER() SENF_PARSER_INHERIT ( MIHBaseTLVParser ); - SENF_PARSER_FIELD_RO ( listSize, MIHTLVLengthParser ); + SENF_PARSER_FIELD_RO ( listSize, MIHLengthParser ); SENF_PARSER_FINALIZE ( MIHBaseListTLVParser ); - void maxListSize(MIHTLVLengthParser::value_type maxl) const; + void maxListSize(MIHLengthParser::value_type maxl = MIHLengthParser::max_value) const; }; template @@ -184,7 +185,7 @@ namespace senf { { # include SENF_PARSER() SENF_PARSER_INHERIT ( MIHBaseTLVParser ); - SENF_PARSER_FIELD_RO ( idLength, MIHTLVLengthParser ); + SENF_PARSER_FIELD_RO ( idLength, MIHLengthParser ); SENF_PARSER_LABEL ( idValue ); SENF_PARSER_SKIP ( idLength(), 0 ); SENF_PARSER_FINALIZE ( MIHFIdTLVParser ); @@ -229,7 +230,7 @@ namespace senf { private: /// resize the packet after the length field to given size - senf::safe_data_iterator resizeValueField(MIHTLVLengthParser::value_type size); + senf::safe_data_iterator resizeValueField(MIHLengthParser::value_type size); data_iterator valueBegin() const; data_iterator valueEnd() const; @@ -292,6 +293,7 @@ namespace senf { } 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 @@ -306,6 +308,7 @@ namespace senf { } static type_t::value_type const typeId = 2; void dump(std::ostream & os) const; + void validate() const; }; /** \brief Parser for 802.21 Status TLV @@ -324,6 +327,7 @@ namespace senf { } 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 }; @@ -343,7 +347,7 @@ namespace senf { } static type_t::value_type const typeId = 11; void dump(std::ostream & os) const; ///< dump string representation to given stream - std::pair validate() const; + void validate() const; enum RequestCode { Registration, ReRegistration }; }; @@ -362,7 +366,7 @@ namespace senf { } static type_t::value_type const typeId = 12; void dump(std::ostream & os) const; ///< dump string representation to given stream - std::pair validate() const; + void validate() const; }; }