www.pudn.com > 6manager_server.rar > asn1.h
#ifndef _ASN1 #define _ASN1 #ifdef WIN32 #ifndef __unix #include#endif #endif #include "snmp_pp.h" #ifndef EIGHTBIT_SUBIDS typedef unsigned long oid; #define MAX_SUBID 0xFFFFFFFF #else typedef unsigned char oid; #define MAX_SUBID 0xFF #endif #define MAX_OID_LEN 64 /* max subid's in an oid */ // asn.1 values #define ASN_BOOLEAN (0x01) #define ASN_INTEGER (0x02) #define ASN_BIT_STR (0x03) #define ASN_OCTET_STR (0x04) #define ASN_NULL (0x05) #define ASN_OBJECT_ID (0x06) #define ASN_SEQUENCE (0x10) #define ASN_SET (0x11) #define ASN_UNIVERSAL (0x00) #define ASN_APPLICATION (0x40) #define ASN_CONTEXT (0x80) #define ASN_PRIVATE (0xC0) #define ASN_PRIMITIVE (0x00) #define ASN_CONSTRUCTOR (0x20) #define ASN_LONG_LEN (0x80) #define ASN_EXTENSION_ID (0x1F) #define ASN_BIT8 (0x80) #define IS_CONSTRUCTOR(byte) ((byte) & ASN_CONSTRUCTOR) #define IS_EXTENSION_ID(byte) (((byte) & ASN_EXTENSION_ID) == ASN_EXTENSION_ID) #define ASNERROR( string) #define MAX_NAME_LEN 64 #define SNMP_VERSION_1 0 #define SNMP_VERSION_2C 1 // defined types (from the SMI, RFC 1065) #define SMI_IPADDRESS (ASN_APPLICATION | 0) #define SMI_COUNTER (ASN_APPLICATION | 1) #define SMI_GAUGE (ASN_APPLICATION | 2) #define SMI_TIMETICKS (ASN_APPLICATION | 3) #define SMI_OPAQUE (ASN_APPLICATION | 4) #define SMI_NSAP (ASN_APPLICATION | 5) #define SMI_COUNTER64 (ASN_APPLICATION | 6) #define SMI_UINTEGER (ASN_APPLICATION | 7) #define GET_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0) #define GETNEXT_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1) #define GET_RSP_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2) #define SET_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3) #define TRP_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4) #define GETBULK_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5) #define INFORM_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6) #define TRP2_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7) #define REPORT_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x8) #define SNMP_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x0) #define SNMP_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x1) #define SNMP_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x2) #define SNMP_MSG_LENGTH 1500 typedef struct sockaddr_in ipaddr; // pdu struct snmp_pdu { int command; // pdu type unsigned long reqid; // Request id unsigned long errstat; // Error status unsigned long errindex; // Error index // Trap information oid *enterprise; // System OID int enterprise_length; ipaddr agent_addr; // address of object generating trap int trap_type; // trap type int specific_type; // specific type unsigned long time; // Uptime // vb list struct variable_list *variables; }; // vb list struct variable_list { struct variable_list *next_variable; // NULL for last variable oid *name; // Object identifier of variable int name_length; // number of subid's in name unsigned char type; // ASN type of variable union { // value of variable long *integer; unsigned char *string; oid *objid; unsigned char *bitstring; struct counter64 *counter64; } val; int val_len; }; // prototypes for encoding routines unsigned char * asn_parse_int( unsigned char *data, int *datalength, unsigned char *type, long int *intp, int intsize); unsigned char * asn_parse_unsigned_int( unsigned char *data, int *datalength, unsigned char *type, unsigned long *intp, int intsize); unsigned char * asn_build_int( unsigned char *data, int *datalength, unsigned char type, long *intp, int intsize); unsigned char * asn_build_unsigned_int( unsigned char *data, int *datalength, unsigned char type, unsigned long *intp, int intsize); unsigned char * asn_parse_string( unsigned char *data, int *datalength, unsigned char *type, unsigned char *string, int *strlength); unsigned char * asn_build_string( unsigned char *data, int *datalength, unsigned char type, unsigned char *string, int strlength); unsigned char *asn_parse_header( unsigned char *data, int *datalength, unsigned char *type); unsigned char * asn_build_header( unsigned char *data, int *datalength, unsigned char type, int length); unsigned char * asn_build_sequence( unsigned char *data, int *datalength, unsigned char type, int length); unsigned char * asn_parse_length( unsigned char *data, unsigned long *length); unsigned char *asn_build_length( unsigned char *data, int *datalength, int length); unsigned char *asn_parse_objid( unsigned char *data, int *datalength, unsigned char *type, oid *objid, int *objidlength); unsigned char *asn_build_objid( unsigned char *data, int *datalength, unsigned char type, oid *objid, int objidlength); unsigned char *asn_parse_null(unsigned char *data, int *datalength, unsigned char *type); unsigned char *asn_build_null( unsigned char *data, int *datalength, unsigned char type); unsigned char *asn_parse_bitstring( unsigned char *data, int *datalength, unsigned char *type, unsigned char *string, int *strlength); unsigned char *asn_build_bitstring( unsigned char *data, int *datalength, unsigned char type, unsigned char *string, int strlength); unsigned char * asn_parse_unsigned_int64( unsigned char *data, int *datalength, unsigned char *type, struct counter64 *cp, int countersize); unsigned char * asn_build_unsigned_int64( unsigned char *data, int *datalength, unsigned char type, struct counter64 *cp, int countersize); struct counter64 { unsigned long high; unsigned long low; }; struct snmp_pdu * snmp_pdu_create( int command); void snmp_free_pdu( struct snmp_pdu *pdu); int snmp_build( struct snmp_pdu *pdu, unsigned char *packet, int *out_length, long version, unsigned char* community, int community_len); void snmp_add_var(struct snmp_pdu *pdu, oid *name, int name_length, SmiVALUE *smival); int snmp_parse( struct snmp_pdu *pdu, unsigned char *data, unsigned char *community_name, unsigned long &community_len, snmp_version &version, int length); #endif // _ASN1