⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdu_cont.h

📁 JdonFramework need above jdk 1.4.0 This version has passed under Tomcat 4.x/5.x JBoss 3.x/JBoss 4.0
💻 H
字号:
/*===================================================================  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 Specificclass 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -