/*
 * Copyright (C) IBM Corporation 2004.
 * All rights reserved.
 *
 * Redistribution and use of this software in source and binary forms, with
 * or without modification, are permitted provided that the following
 * conditions and disclaimer are agreed and accepted by the user:
 *
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 *
 * 3. Neither the names of the copyrighters, the name of the project which
 * is related to this software (hereinafter referred to as "project") nor
 * the names of the contributors may be used to endorse or promote products
 * derived from this software without specific prior written permission.
 *
 * 4. No merchantable use may be permitted without prior written
 * notification to the copyrighters. However, using this software for the
 * purpose of testing or evaluating any products including merchantable
 * products may be permitted without any notification to the copyrighters.
 *
 *
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
 * BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE
 * COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 *
 *    Author: Kazuo Hiekata <e30948@jp.ibm.com>
 *
 */

#if !defined(NOT_USE_SNMP)

#if !defined(__McSNMP_h__)
#define	__McSNMP_h__	1

#include "PvOctets.h"

#include "McSub.h"
#include "McUDP.h"

#if 0
#include <stdio.h>

#define dbg(file, fmt, args...) \
{ \
FILE *stream = fopen(file, "a"); \
if(stream) { \
fprintf(stream, "dbg: %s: %d: %s(): " fmt,  __FILE__, __LINE__, __FUNCTION__, ##args); \
fclose(stream); \
} \
}
#endif	/* for debug */

// ASN.1 type
const int32_t TP_SNMP_ASN_Boolean	= 1;
const int32_t TP_SNMP_ASN_Integer	= 2;
const int32_t TP_SNMP_ASN_BitString	= 3;
const int32_t TP_SNMP_ASN_OctString	= 4;
const int32_t TP_SNMP_ASN_Null	= 5;
const int32_t TP_SNMP_ASN_ObjectID	= 6;
const int32_t TP_SNMP_ASN_Sequence	= 16;	// 0x10
const int32_t TP_SNMP_ASN_Set	= 17;	// 0x11
const int32_t TP_SNMP_ASN_Opaque	= 48;	// 0x30
const int32_t TP_SNMP_ASN_IPAddress	= 64;	// 0x40
const int32_t TP_SNMP_ASN_Counter	= 65;	// 0x41
const int32_t TP_SNMP_ASN_Gauge	= 66;	// 0x42
const int32_t TP_SNMP_ASN_TimeTicks	= 67;	// 0x43

// RFC 1157: A Simple Network Management Protocol (SNMP)
// RFC 1905: Protocol Operations for Version 2 of the Simple
//          Network Management Protocol (SNMPv2)
const int32_t TP_SNMP_GetRequest		= 160;	// 0xa0 (RFC 1157 & 1905) 
const int32_t TP_SNMP_GetNextRequest		= 161;	// 0xa1 (RFC 1157 & 1905)
const int32_t TP_SNMP_GetResponse		= 162;	// 0xa2 (RFC 1157 & 1905)
const int32_t TP_SNMP_SetRequest		= 163;	// 0xa3 (RFC 1157 & 1905)
const int32_t TP_SNMP_Trap			= 164;	// 0xa4 (RFC 1157)
const int32_t TP_SNMP_GetBulk		= 165;	// 0xa5 (RFC 1905)
const int32_t TP_SNMP_Inform		= 166;	// 0xa6 (RFC 1905)
const int32_t TP_SNMP_Trap2			= 167;	// 0xa7 (RFC 1905)
const int32_t TP_SNMP_Report		= 168;	// 0xa8 (RFC 1905)

// SNMP type (aliases)
const int32_t TP_SNMP_Message		= 48;	// TP_SNMP_ASN_Opaque
const int32_t TP_SNMP_Version		= 2;	// TP_SNMP_ASN_Integer
const int32_t TP_SNMP_Community		= 4;	// TP_SNMP_ASN_OctString
const int32_t TP_SNMP_RequestID		= 2;	// TP_SNMP_ASN_Integer
const int32_t TP_SNMP_ErrorStatus		= 2;	// TP_SNMP_ASN_Integer
const int32_t TP_SNMP_ErrorIndex		= 2;	// TP_SNMP_ASN_Integer
const int32_t TP_SNMP_GenericTrap		= 2;	// TP_SNMP_ASN_Integer
const int32_t TP_SNMP_SpecificTrap		= 2;	// TP_SNMP_ASN_Integer
const int32_t TP_SNMP_VarBindList		= 48;	// TP_SNMP_ASN_Opaque
const int32_t TP_SNMP_VarBind		= 48;	// TP_SNMP_ASN_Opaque

////////////////////////////////////////////////////////////////
class McUdp_SNMP: public McHeader {
	protected:
		McUdp_SNMP(CSTR);
	public:
		virtual ~McUdp_SNMP();
		static McUdp_SNMP *create(CSTR);
		virtual uint32_t length_for_reverse(RControl &, ItPosition &,
			OCTBUF &) const;
		int32_t upperPort() const {
			return(TP_Udp_SNMP);
		}
		virtual RObject *reverse(RControl &, RObject *, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class McUdp_SNMPTrap: public McHeader {
	protected:
		McUdp_SNMPTrap(CSTR);
	public:
		virtual ~McUdp_SNMPTrap();
		static McUdp_SNMPTrap *create(CSTR);
		virtual uint32_t length_for_reverse(RControl &, ItPosition &,
			OCTBUF &) const;
		int32_t upperPort() const {
			return(TP_Udp_SNMPTRAP);
		}
		virtual RObject *reverse(RControl &, RObject *, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP: public McOption {
	protected:
		MmUint *type_;
		void type_member(MmUint *meta) {
			type_ = meta;
			member(meta);
		}
		MmUint *length_;
		void length_member(MmUint *meta) {
			length_ = meta;
			member(meta);
		}
		void common_member();
		McPdu_SNMP(CSTR);
	public:
		virtual ~McPdu_SNMP();
		virtual uint32_t length_for_reverse(RControl &, ItPosition &, OCTBUF &) const;
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
		//HardCording action method
		DEC_HCGENE(Length);
		DEC_HCGENE(Type);
		DEC_HCEVAL(Type);
		int32_t get_pduType(WObject *) const;
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_ANY: public McPdu_SNMP {
	public:
		McPdu_SNMP_ANY(CSTR);
		virtual ~McPdu_SNMP_ANY();
		static McPdu_SNMP_ANY *create(CSTR);
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Message: public McPdu_SNMP {
	public:
		McPdu_SNMP_Message(CSTR);
		virtual ~McPdu_SNMP_Message();
		static McPdu_SNMP_Message *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_Message);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Version: public McPdu_SNMP {
	public:
		McPdu_SNMP_Version(CSTR);
		virtual ~McPdu_SNMP_Version();
		static McPdu_SNMP_Version *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_Version);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Community: public McPdu_SNMP {
	public:
		McPdu_SNMP_Community(CSTR);
		virtual ~McPdu_SNMP_Community();
		static McPdu_SNMP_Community *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_Community);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_GetRequest: public McPdu_SNMP {
	public:
		McPdu_SNMP_GetRequest(CSTR);
		virtual ~McPdu_SNMP_GetRequest();
		static McPdu_SNMP_GetRequest *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_GetRequest);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_GetNextRequest: public McPdu_SNMP {
	public:
		McPdu_SNMP_GetNextRequest(CSTR);
		virtual ~McPdu_SNMP_GetNextRequest();
		static McPdu_SNMP_GetNextRequest *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_GetNextRequest);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_SetRequest: public McPdu_SNMP {
	public:
		McPdu_SNMP_SetRequest(CSTR);
		virtual ~McPdu_SNMP_SetRequest();
		static McPdu_SNMP_SetRequest *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_SetRequest);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_GetResponse: public McPdu_SNMP {
	public:
		McPdu_SNMP_GetResponse(CSTR);
		virtual ~McPdu_SNMP_GetResponse();
		static McPdu_SNMP_GetResponse *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_GetResponse);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Trap: public McPdu_SNMP {
	public:
		McPdu_SNMP_Trap(CSTR);
		virtual ~McPdu_SNMP_Trap();
		static McPdu_SNMP_Trap *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_Trap);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_GetBulk: public McPdu_SNMP {
	public:
		McPdu_SNMP_GetBulk(CSTR);
		virtual ~McPdu_SNMP_GetBulk();
		static McPdu_SNMP_GetBulk *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_GetBulk);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Inform: public McPdu_SNMP {
	public:
		McPdu_SNMP_Inform(CSTR);
		virtual ~McPdu_SNMP_Inform();
		static McPdu_SNMP_Inform *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_Inform);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Trap2: public McPdu_SNMP {
	public:
		McPdu_SNMP_Trap2(CSTR);
		virtual ~McPdu_SNMP_Trap2();
		static McPdu_SNMP_Trap2 *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_Trap2);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Report: public McPdu_SNMP {
	public:
		McPdu_SNMP_Report(CSTR);
		virtual ~McPdu_SNMP_Report();
		static McPdu_SNMP_Report *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_Report);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_RequestID: public McPdu_SNMP {
	public:
		McPdu_SNMP_RequestID(CSTR);
		virtual ~McPdu_SNMP_RequestID();
		static McPdu_SNMP_RequestID *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_RequestID);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_ErrorStatus: public McPdu_SNMP {
	public:
		McPdu_SNMP_ErrorStatus(CSTR);
		virtual ~McPdu_SNMP_ErrorStatus();
		static McPdu_SNMP_ErrorStatus *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ErrorStatus);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_ErrorIndex: public McPdu_SNMP {
	public:
		McPdu_SNMP_ErrorIndex(CSTR);
		virtual ~McPdu_SNMP_ErrorIndex();
		static McPdu_SNMP_ErrorIndex *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ErrorIndex);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_GenericTrap: public McPdu_SNMP {
	public:
		McPdu_SNMP_GenericTrap(CSTR);
		virtual ~McPdu_SNMP_GenericTrap();
		static McPdu_SNMP_GenericTrap *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_GenericTrap);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_SpecificTrap: public McPdu_SNMP {
	public:
		McPdu_SNMP_SpecificTrap(CSTR);
		virtual ~McPdu_SNMP_SpecificTrap();
		static McPdu_SNMP_SpecificTrap *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_SpecificTrap);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_VarBindList: public McPdu_SNMP {
	public:
		McPdu_SNMP_VarBindList(CSTR);
		virtual ~McPdu_SNMP_VarBindList();
		static McPdu_SNMP_VarBindList *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_VarBindList);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_VarBind: public McPdu_SNMP {
	public:
		McPdu_SNMP_VarBind(CSTR);
		virtual ~McPdu_SNMP_VarBind();
		static McPdu_SNMP_VarBind *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_VarBind);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Boolean: public McPdu_SNMP {
	public:
		McPdu_SNMP_Boolean(CSTR);
		virtual ~McPdu_SNMP_Boolean();
		static McPdu_SNMP_Boolean *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_Boolean);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Integer: public McPdu_SNMP {
	public:
		McPdu_SNMP_Integer(CSTR);
		virtual ~McPdu_SNMP_Integer();
		static McPdu_SNMP_Integer *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_Integer);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_BitString: public McPdu_SNMP {
	public:
		McPdu_SNMP_BitString(CSTR);
		virtual ~McPdu_SNMP_BitString();
		static McPdu_SNMP_BitString *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_BitString);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_OctString: public McPdu_SNMP {
	public:
		McPdu_SNMP_OctString(CSTR);
		virtual ~McPdu_SNMP_OctString();
		static McPdu_SNMP_OctString *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_OctString);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Null: public McPdu_SNMP {
	public:
		McPdu_SNMP_Null(CSTR);
		virtual ~McPdu_SNMP_Null();
		static McPdu_SNMP_Null *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_Null);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_ObjectID: public McPdu_SNMP {
	public:
		McPdu_SNMP_ObjectID(CSTR);
		virtual ~McPdu_SNMP_ObjectID();
		static McPdu_SNMP_ObjectID *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_ObjectID);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Sequence: public McPdu_SNMP {
	public:
		McPdu_SNMP_Sequence(CSTR);
		virtual ~McPdu_SNMP_Sequence();
		static McPdu_SNMP_Sequence *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_Sequence);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Set: public McPdu_SNMP {
	public:
		McPdu_SNMP_Set(CSTR);
		virtual ~McPdu_SNMP_Set();
		static McPdu_SNMP_Set *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_Set);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Opaque: public McPdu_SNMP {
	public:
		McPdu_SNMP_Opaque(CSTR);
		virtual ~McPdu_SNMP_Opaque();
		static McPdu_SNMP_Opaque *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_Opaque);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_IPAddress: public McPdu_SNMP {
	public:
		McPdu_SNMP_IPAddress(CSTR);
		virtual ~McPdu_SNMP_IPAddress();
		static McPdu_SNMP_IPAddress *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_IPAddress);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Counter: public McPdu_SNMP {
	public:
		McPdu_SNMP_Counter(CSTR);
		virtual ~McPdu_SNMP_Counter();
		static McPdu_SNMP_Counter *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_Counter);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_Gauge: public McPdu_SNMP {
	public:
		McPdu_SNMP_Gauge(CSTR);
		virtual ~McPdu_SNMP_Gauge();
		static McPdu_SNMP_Gauge *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_Gauge);
		}
};
////////////////////////////////////////////////////////////////
class McPdu_SNMP_TimeTicks: public McPdu_SNMP {
	public:
		McPdu_SNMP_TimeTicks(CSTR);
		virtual ~McPdu_SNMP_TimeTicks();
		static McPdu_SNMP_TimeTicks *create(CSTR);
		int32_t pduType() const {
			return(TP_SNMP_ASN_TimeTicks);
		}
};
////////////////////////////////////////////////////////////////
class MmPdu_SNMP_onSNMP: public MmReference_More0 {
	static TypevsMcDict dict_;
	public:
		MmPdu_SNMP_onSNMP(CSTR);
		virtual ~MmPdu_SNMP_onSNMP();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_Version_onSNMP_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_Version_onSNMP_Message(CSTR);
		virtual ~MmSNMP_Version_onSNMP_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_Community_onSNMP_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_Community_onSNMP_Message(CSTR);
		virtual ~MmSNMP_Community_onSNMP_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_RequestID_onSNMP_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_RequestID_onSNMP_Message(CSTR);
		virtual ~MmSNMP_RequestID_onSNMP_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_ErrorStatus_onSNMP_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_ErrorStatus_onSNMP_Message(CSTR);
		virtual ~MmSNMP_ErrorStatus_onSNMP_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_ErrorIndex_onSNMP_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_ErrorIndex_onSNMP_Message(CSTR);
		virtual ~MmSNMP_ErrorIndex_onSNMP_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_ObjectID_onTrap_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_ObjectID_onTrap_Message(CSTR);
		virtual ~MmSNMP_ObjectID_onTrap_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_IPAddress_onTrap_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_IPAddress_onTrap_Message(CSTR);
		virtual ~MmSNMP_IPAddress_onTrap_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_GenericTrap_onTrap_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_GenericTrap_onTrap_Message(CSTR);
		virtual ~MmSNMP_GenericTrap_onTrap_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_SpecificTrap_onTrap_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_SpecificTrap_onTrap_Message(CSTR);
		virtual ~MmSNMP_SpecificTrap_onTrap_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_TimeStamp_onTrap_Message: public MmReference_Must1 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_TimeStamp_onTrap_Message(CSTR);
		virtual ~MmSNMP_TimeStamp_onTrap_Message();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_VarBindList_onPDU: public MmReference_More0 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_VarBindList_onPDU(CSTR);
		virtual ~MmSNMP_VarBindList_onPDU();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMP_VarBind_onPDU: public MmReference_More0 {
	static TypevsMcDict dict_;
	public:
		MmSNMP_VarBind_onPDU(CSTR);
		virtual ~MmSNMP_VarBind_onPDU();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};

////////////////////////////////////////////////////////////////
class MmPdu_SNMP_onPDU: public MmReference_More0 {
	static TypevsMcDict dict_;
	public:
		MmPdu_SNMP_onPDU(CSTR);
		virtual ~MmPdu_SNMP_onPDU();
		int32_t token() const {
			return(metaToken(tkn_option_ref_));
		}
		const TypevsMcDict *get_dict() const {
			return(&dict_);
		}
		static void add(McPdu_SNMP *mc);
		static void add_other(McPdu_SNMP *mc);
		bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};

////////////////////////////////////////////////////////////////
class MmSNMPVersion: public MmUint {
public:
	MmSNMPVersion(CSTR,uint16_t,const PObject* =0,const PObject* =0,
		const ICVoverwriter* ow=0,METH_HC_ForIPinfo meth=0);
	virtual	~MmSNMPVersion();
	virtual PvObject* reversePv(RControl&,
		const ItPosition& at,const ItPosition& size,const OCTBUF&)const;
};
////////////////////////////////////////////////////////////////
class MmObjectID: public MmVarOctets {
	public:
		MmObjectID(CSTR, const PObject *, const PObject *);
		virtual ~MmObjectID();
		virtual PvObject *reversePv(RControl &, const ItPosition &,
			const ItPosition &, const OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmSNMPString: public MmVarOctets {
	public:
		MmSNMPString(CSTR, const PObject *, const PObject *);
		virtual ~MmSNMPString();
		virtual PvObject *reversePv(RControl &, const ItPosition &,
			const ItPosition &, const OCTBUF &) const;
};
////////////////////////////////////////////////////////////////
class MmErrorStatus: public MmUint {
public:
	MmErrorStatus(CSTR,uint16_t,const PObject* =0,const PObject* =0,
		const ICVoverwriter* ow=0,METH_HC_ForIPinfo meth=0);
	virtual	~MmErrorStatus();
	virtual PvObject* reversePv(RControl&,
		const ItPosition& at,const ItPosition& size,const OCTBUF&)const;
};
////////////////////////////////////////////////////////////////
class PvSNMPVersion:public PvNumber {
public:
	PvSNMPVersion();
	PvSNMPVersion(int32_t);
	PvSNMPVersion(const PvNumber&);
virtual	~PvSNMPVersion();
virtual	void print() const;
};
////////////////////////////////////////////////////////////////
class PvObjectID: public PvOctets {
public:
	PvObjectID();
	PvObjectID(uint32_t, OCTSTR = 0, bool = false);
	virtual ~PvObjectID();
	virtual PvObject *shallowCopy() const;
	virtual void print() const;
	virtual void log(uint32_t=0) const;
	virtual void dump(CSTR = 0) const;
};
////////////////////////////////////////////////////////////////
class PvSNMPString: public PvOctets {
public:
	PvSNMPString();
	PvSNMPString(uint32_t, OCTSTR = 0, bool = false);
	virtual ~PvSNMPString();
	virtual PvObject *shallowCopy() const;
	virtual void print() const;
	virtual void log(uint32_t=0) const;
	virtual void dump(CSTR = 0) const;
};
////////////////////////////////////////////////////////////////
class PvErrorStatus:public PvNumber {
public:
	PvErrorStatus();
	PvErrorStatus(int32_t);
	virtual	~PvErrorStatus();
	virtual	void print() const;
};
#endif

#endif //NOT_USE_SNMP


syntax highlighted by Code2HTML, v. 0.9.1