pdu_cont.h
资源名称:hp_snmp3.zip [点击查看]
上传用户:czjinwang
上传日期:2007-01-12
资源大小:2484k
文件大小:9k
源码类别:
SNMP编程
开发平台:
Visual C++
- /*===================================================================
- Copyright (c) 1999
- 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.
- SNMP++ P D U _ C O N T . H
- PDU CONTAINER CLASS DEFINITION ( MS-WINDOWS 32 Only)
- VERSION
- 2.8
- RCS INFO:
- $Header: pdu_cont.h,v 1.12 96/03/16 15:55:22 hmgr Exp $
- DESCRIPTION:
- This module contains the class definition for the pdu
- container class. The pdu conatiner is specific to the
- windows 3.1 implementation to allow multiple outstanding
- pdu requests.
- DESIGN:
- Peter E Mellquist
- AUTHOR:
- Peter E Mellquist
- LANGUAGE:
- ANSI C++
- OPERATING SYSTEM(S):
- Win32
- BSD UNIX
- =====================================================================*/
- #ifndef _PDU_CONT
- #define _PDU_CONT
- #include "winsnmp.h" // windows snmp engine include
- #include "smi.h" // various smi defs
- //------[ forward declarations ]-----------------------------
- class Snmp;
- class Pdu;
- class SnmpTarget;
- //--------[ Note!! ]------------------------------------------------------
- // The following define determines the maximum number of outstanding
- // pdu requests that an app can have. A sinlge machine may have multiple
- // apps If an app has more than this number of outstanding requests, snmp access
- // member functions will fail with a SNMP_CLASS_QUEUE_FULL error.
- // This value may be increased depending on the apps demands.
- //
- #define MAX_PDU_SLOTS 300 // maximum queue length of pdu container
- #define MAX_REQUEST_ID 9000 // starting request id
- #define MIN_REQUEST_ID 10 // ending request id, before reset to max
- #ifdef _SNMPDEBUG
- #define SNMPDEBUG(s) OutputDebugString(s)
- #else
- #define SNMPDEBUG(s)
- #endif
- //-----------[ callback typedef ]------------------------------------------
- typedef void (WINFAR *snmpcallback)( int, // reason
- Snmp*, // session handle
- Pdu &, // pdu passsed in
- SnmpTarget &, // source target
- void * ); // optional personality
- //-----------[ pdu container class defs ]----------------------------------
- //
- // The pdu conatiner handles storage of all incoming pdus. Each Ssnmp object
- // instance creates its own hidden window. When the session is created,
- // the Win Snmp DLL is informed of the win proc. A common win proc is used
- // to feed the pdu conatiner class. In this manner multiple concurrent
- // blocked calls may be made.
- // pdu container slot struct
- // WinSnmp Specific
- class Pdu_Slot
- {
- public:
- long int request_id; // associated request id
- int pending; // is this slot filled?
- int pdu_arrived; // has the pdu arrived yet
- HSNMP_SESSION hSession; // WinSnmp Session handle
- HSNMP_ENTITY hSourceEntity; // Source Entity
- HSNMP_ENTITY hDestEntity; // Destination Entity
- HSNMP_CONTEXT hRecContext; // Receive Context
- smiINT PduType; // Type of pdu
- smiINT RequestId; // Request ID
- smiINT ErrorStatus; // Error Status
- smiINT ErrorIndex; // Error Index
- snmpcallback callback; // callback function for async calls
- void * callback_data; // callback data
- HSNMP_VBL hRecVbl; // Received Variable Binding List
- };
- //------[ pdu container class ]-----------------------------------
- class Pdu_Container {
- public:
- // constructor
- // initialize all the slots to not pending
- // clear all the statistic counters
- Pdu_Container();
- // destructor
- ~Pdu_Container();
- // statistic mutator methods
- void pdu_sent() { pdus_sent++;};
- void pdu_received() { pdus_received++;};
- void trap_received() { trap_count++;};
- void traps_sent() { trap_sent++; }
- void decode_err() { decode_errors++;};
- void stray_response() { stray_responses++;};
- void invalid_resp_pdu() { invalid_pdu_types++;};
- void receive_err() { pdus_received_err++;};
- void sent_err() { pdus_sent_err++;};
- void timeout() { timeout_count++; };
- void set_max_queue( int z)
- { if ( z > (int) max_queue_size)
- max_queue_size = ( unsigned long int) z; };
- // statistic accessor methods
- unsigned long int get_pdus_sent() { return pdus_sent; };
- unsigned long int get_pdus_received() { return pdus_received; };
- unsigned long int get_received_errs() { return pdus_received_err; };
- unsigned long int get_sent_errs() { return pdus_sent_err; };
- unsigned long int get_timeouts() { return timeout_count; };
- unsigned long int get_max_queue() { return max_queue_size; };
- unsigned long int get_trap_count() { return trap_count; };
- unsigned long int get_traps_sent() { return trap_sent; }
- unsigned long int get_decode_errs() { return decode_errors; };
- unsigned long int get_inval_resp() { return invalid_pdu_types; };
- unsigned long int get_stray_resp() { return stray_responses; };
- // get a request id
- // this mf finds the first available slot and returns its
- // index value. The value is changed to reflect it is now
- // occupied. an error value is returned when no slots are
- // available
- // passed in rid may be passed back unless it is non-zero
- // calling get_request_id with 0 will cause a new unique
- // rid to be generated
- long int get_request_id( HSNMP_SESSION hSession,
- snmpcallback cab,
- void * cbd);
- // return a rid, don't save it in the pending table
- // used when sending a trap or any other non responsed pdu
- long int get_request_id();
- // clear the slot to make it available again
- void clear_request_id( const long int rid);
- // check if a pending pdu has arrived
- int check_if_arrived( const long int rid);
- // determine if a pdu slot is pending
- // received pdus are only placed into a slot
- // if it is pending
- int check_if_pending( const long int rid, snmpcallback *cb);
- void search_and_destroy( HSNMP_SESSION hSession, Snmp *snmp);
- // set a slot with an arrived pdu
- void set_slot( long int rid, // rid to set as arrived
- HSNMP_SESSION hSession, // WinSnmp Session handle
- HSNMP_ENTITY hSourceEntity, // Source Entity
- HSNMP_ENTITY hDestEntity, // Destination Entity
- HSNMP_CONTEXT hRecContext, // Receive Context
- smiINT PduType, // Type of pdu
- smiINT RequestId, // Request ID
- smiINT ErrorStatus, // Error Status
- smiINT ErrorIndex, // Error Index
- HSNMP_VBL hRecVbl); // Received Variable Binding List
- // get the data from a slot
- //
- void get_slot( long int rid, // for this rid
- HSNMP_ENTITY *hSrcRecvEnt, // recieved source entity
- HSNMP_ENTITY *hDstRecvEnt, // recieved destination entity
- HSNMP_CONTEXT *hRecvContext, // recieved context
- smiINT *lnRecvPduType, // type of pdu
- smiINT *lnRecvRequestId, // request id
- smiINT *lnErrorStatus, // error status
- smiINT *lnErrorIndex, // error index
- snmpcallback *cb, // callback funstion ptr
- void * *cbd, // callback data
- HSNMP_VBL *hRecvVbl); // recieved variable binding list
- // get callback information from a
- // given async call entry
- // returns true if an entryt was found
- // else returns false indicating no entry
- // was found for the requested rid
- int get_cb_info( long int rid,
- snmpcallback *cb,
- void * *cbd);
- protected:
- Pdu_Slot *slots[MAX_PDU_SLOTS]; // slots for arrivals
- // statistics vars
- unsigned long int pdus_sent; // total # of pdus sent
- unsigned long int pdus_received; // total # of pdus received
- unsigned long int pdus_received_err; // received error count
- unsigned long int pdus_sent_err; // sent error count
- unsigned long int timeout_count; // # of timeouts
- unsigned long int max_queue_size; // maximum queue size
- unsigned long int trap_count; // number of traps received
- unsigned long int trap_sent; // number of traps sent
- unsigned long int decode_errors; // number of snmp decode errors
- unsigned long int stray_responses; // number of stray responses
- unsigned long int invalid_pdu_types; // number of unided pdu types
- long int current_request_id; // current request id
- };
- #endif //_PDU_CONT