diff options
Diffstat (limited to 'ACE/ASNMP/asnmp/pdu.h')
-rw-r--r-- | ACE/ASNMP/asnmp/pdu.h | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/ACE/ASNMP/asnmp/pdu.h b/ACE/ASNMP/asnmp/pdu.h new file mode 100644 index 00000000000..a2d84388da0 --- /dev/null +++ b/ACE/ASNMP/asnmp/pdu.h @@ -0,0 +1,219 @@ +/* -*-C++-*- */ +#ifndef PDU_CLS_ +#define PDU_CLS_ +//============================================================================= +/** + * @file pdu.h + * + * $Id$ + * + * Pdu class definition. Encapsulation of an SMI Protocol + * Data Unit (PDU) aka Packet in C++. + * + * + * @author Peter E Mellquist original code Michael MacFaden mrm@cisco.com ACE port + * @author add iterator class for pdus + */ +//============================================================================= + +/*=================================================================== + Copyright (c) 1996 + Hewlett-Packard Company + + ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS. + Permission to use, copy, modify, distribute and/or sell this software + and/or its documentation is hereby granted without fee. User agrees + to display the above copyright notice and this license notice in all + copies of the software and any documentation of the software. User + agrees to assume all liability for the use of the software; Hewlett-Packard + makes no representations about the suitability of this software for any + purpose. It is provided "AS-IS without warranty of any kind,either express + or implied. User hereby grants a royalty-free license to any and all + derivatives based upon this software code base. +=====================================================================*/ + +// TODO: this needs to be moved into the CLASS and modifyable at runtime +// TODO: define an iterator object to traverse the vbs in a pdu + +#define MAX_VBS 25 +#include "asnmp/vb.h" // include Vb class definition + +/** + * @class Pdu + * + * @brief Protocol Data Unit (PDU) concrete class. An abstraction of the + * data packet used to by two SNMP sessions to communicate. + */ +class ASNMP_Export Pdu +{ +public: + /// constructor no args + Pdu( void); + + /// constructor with vbs and count + Pdu( Vb* pvbs, const int pvb_count); + + /// constructor with another Pdu instance + Pdu( const Pdu &pdu); + + /// destructor + ~Pdu(); + + /// assignment to another Pdu object overloaded + Pdu& operator=( const Pdu &pdu); + + /// append a vb to the pdu + Pdu& operator+=( Vb &vb); + + // TODO: add Pdu& operator-=(const Vb &vb); + + /// extract all Vbs from Pdu + int get_vblist( Vb* pvbs, const int pvb_count); + + /// deposit all Vbs to Pdu + int set_vblist( Vb* pvbs, const int pvb_count); + + /// get a particular vb + /// where 0 is the first vb + int get_vb( Vb &vb, const int index = 0) const; + + /// set a particular vb + /// where 0 is the first vb + int set_vb( Vb &vb, const int index); + + /// return number of vbs + int get_vb_count() const; + + /// return the error status + int get_error_status() const; + + /// return the complete error info from this pdu + const char *agent_error_reason(); + + /// set the error status + friend ASNMP_Export void set_error_status( Pdu *pdu, const int status); + + /// return the error index + int get_error_index() const; + + /// set the error index + friend ASNMP_Export void set_error_index( Pdu *pdu, const int index); + + /// clear error status + friend ASNMP_Export void clear_error_status( Pdu *pdu); + + /// clear error index + friend ASNMP_Export void clear_error_index( Pdu *pdu); + + /// return the request id + unsigned long get_request_id() const; + + /// set the request id + friend void set_request_id( Pdu *pdu, const unsigned long rid); + + /// get the pdu type + unsigned short get_type() const; + + /// set the pdu type + void set_type( unsigned short type); + + /// returns validity of Pdu instance + int valid() const; + + /// trim off count vbs from the end of the vb list + int trim(const int count=1); + + /// delete a Vb anywhere within the Pdu + int delete_vb( const int position); + + /// delete_all vbs in pdu + void delete_all_vbs(); + + /// set notify timestamp + void set_notify_timestamp( const TimeTicks & timestamp); + + /// get notify timestamp + void get_notify_timestamp( TimeTicks & timestamp) const; + + /// set the notify id + void set_notify_id( const Oid id); + + /// get the notify id + void get_notify_id( Oid &id) const; + + /// set the notify enterprise + void set_notify_enterprise( const Oid &enterprise); + + /// get the notify enterprise + void get_notify_enterprise( Oid & enterprise) const; + + /// return fomatted version of this object + const char *to_string(); + + + protected: + /// pointer to array of Vbs + Vb *vbs_[MAX_VBS]; + + /// count of Vbs + int vb_count_; + + /// SMI error status + int error_status_; + + /// SMI error index + int error_index_; + + /// valid boolean status of object construction + /// SMI request id + int validity_; + unsigned long request_id_; + + /// derived at run time based on request type + unsigned short pdu_type_; + + /** + * a timestamp associated with an infor + * for notify Pdu objects only + * traps & notifies + */ + TimeTicks notify_timestamp_; + + /// an id + Oid notify_id_; + + Oid notify_enterprise_; + + private: + /// buffer for to_string() + char *output_; +}; + + +/** + * @class VbIter + * + * @brief Utility class to iterate once through a PDU varbind list + */ +class ASNMP_Export VbIter +{ + public: + /// default constructor + VbIter(Pdu& pdu); + + /// returns 1 if ok, else 0 if none left + int next(Vb& vb); + + private: + /// disallow copy constructor use + VbIter(const VbIter&); + + /// current object in list + int idx_; + + /// ptr to pdu being interated over + Pdu *pdu_; +}; + +#endif //PDU_CLS_ + |