snmp_pp.h
上传用户:czjinwang
上传日期:2007-01-12
资源大小:2484k
文件大小:11k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. /*===================================================================
  2.    Copyright (c) 1999
  3.    Hewlett-Packard Company
  4.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  5.   Permission to use, copy, modify, distribute and/or sell this software 
  6.   and/or its documentation is hereby granted without fee. User agrees 
  7.   to display the above copyright notice and this license notice in all 
  8.   copies of the software and any documentation of the software. User 
  9.   agrees to assume all liability for the use of the software; Hewlett-Packard 
  10.   makes no representations about the suitability of this software for any 
  11.   purpose. It is provided "AS-IS without warranty of any kind,either express 
  12.   or implied. User hereby grants a royalty-free license to any and all 
  13.   derivatives based upon this software code base. 
  14.      
  15.    SNMP++ S N M P_PP . H
  16.    SNMP CLASS DEFINITION
  17.    VERSION
  18.     2.8
  19.    RCS INFO:
  20.    $Header: snmp.h,v 1.22 96/09/11 14:01:35 hmgr Exp $
  21.    DESCRIPTION:
  22.    SNMP class defintion. The Snmp class provides an object oriented
  23.    approach to SNMP. The SNMP class is an encapsulation of SNMP
  24.    sessions, gets, sets and get nexts. The class manages all SNMP
  25.    resources and provides complete retry and timeout capability.
  26.    This file is portable. It does not rely on any WinSnmp or any
  27.    other snmp libraries. The matching implementation of this file
  28.    is platform specific.
  29.    DESIGN:
  30.    Peter E Mellquist
  31.   AUTHOR:
  32.   Peter E Mellquist
  33.   LANGUAGE:
  34.   ANSI C++
  35.   OPERATING SYSTEMS:
  36.    Win32
  37.    BSD UNIX
  38. =====================================================================*/
  39. #ifndef _SNMP_CLS
  40. #define _SNMP_CLS
  41. //------[ C externals ]------------------------------------------------
  42. extern "C"
  43. {
  44. #include <memory.h>               // memcpy's
  45. #include <string.h>               // strlen, etc..
  46. }
  47. //-----[ snmp++ classes ]------------------------------------------------
  48. #include "oid.h"                // snmp++ oid class
  49. #include "vb.h"                 // snbmp++ vb class
  50. #include "target.h"             // snmp++ target class
  51. #include "pdu.h"                // snmp++ pdu class
  52. #include "snmperrs.h"           // error macros and strings 
  53. #include "address.h"            // snmp++ address class defs
  54. #ifdef __unix
  55. #include /**/ "eventlist.h"
  56. #endif // __unix
  57. //-----[ internally used defines ]----------------------------------------
  58. #define MAXNAME 80                       // maximum name length
  59. #define MAX_ADDR_LEN 10                  // maximum address len, ipx is 4+6
  60. #define SNMP_SHUTDOWN_MSG 0x0400+177     // shut down msg for stoping a blocked message
  61. //-----[ async defines for engine ]---------------------------------------
  62. #define sNMP_PDU_GET_ASYNC       21
  63. #define sNMP_PDU_GETNEXT_ASYNC   22
  64. #define sNMP_PDU_SET_ASYNC       23
  65. #define sNMP_PDU_GETBULK_ASYNC   24
  66. #define sNMP_PDU_INFORM_ASYNC    25
  67. //-----[ trap / notify macros ]-------------------------------------------
  68. #define IP_NOTIFY  162     // IP notification
  69. #define IPX_NOTIFY 0x2121  // IPX notification
  70. //------[ forward declaration of Snmp class ]-----------------------------
  71. class Snmp;
  72. //-----------[ async methods callback ]-----------------------------------
  73. // async methods require the caller to provide a callback
  74. // address of a function with the following typedef
  75. typedef void (*snmp_callback)( int,             // reason
  76.                                Snmp*,           // session handle
  77.                                Pdu &,           // pdu passsed in
  78.                                SnmpTarget &,    // source target
  79.                                void * );        // optional callback data
  80. //------------[ SNMP Class Def ]---------------------------------------------
  81. //
  82. class DLLOPT Snmp {
  83.  public:
  84.   //------------------[ constructor,blocked usage ]---------------------
  85.   Snmp( int &status, unsigned short agent_port=0 ); // construction status
  86.   //-------------------[ destructor ]------------------------------------
  87.   ~Snmp();
  88.   //-------------------[ returns error string ]--------------------------
  89.   char * error_msg( const int c);
  90.   
  91.   //----------------------[ cancel a pending request ]--------------------
  92.   virtual int cancel( const unsigned long rid);
  93.   //------------------------[ get ]---------------------------------------
  94.   virtual int get( Pdu &pdu,             // pdu to get
  95.                    SnmpTarget &target);  // get target
  96.   //------------------------[ get async ]----------------------------------
  97.   virtual int get( Pdu &pdu,                       // pdu to get async
  98.                    SnmpTarget &target,             // destination target
  99.                    const snmp_callback callback,   // async callback to use
  100.                    const void * callback_data=0);  // callback data
  101.   //------------------------[ get next ]-----------------------------------
  102.   virtual int get_next( Pdu &pdu,             // pdu to get_next
  103.                         SnmpTarget &target);  // get target
  104.   //------------------------[ get next async ]-----------------------------
  105.   virtual int get_next( Pdu &pdu,                      // pdu to get_next async
  106.                         SnmpTarget &target,            // destination target
  107.                         const snmp_callback callback,  // async callback to use
  108.                         const void * callback_data=0); // callback data
  109.   //-------------------------[ set ]---------------------------------------
  110.   virtual int set( Pdu &pdu,            // pdu to set
  111.                    SnmpTarget &target); // target address
  112.   //------------------------[ set async ]----------------------------------
  113.   virtual int set( Pdu &pdu,                       // pdu to set async
  114.                    SnmpTarget &target,             // destination target
  115.                    const snmp_callback callback,   // async callback
  116.                    const void * callback_data=0);  // callback data
  117.   //-----------------------[ get bulk ]------------------------------------
  118.   virtual int get_bulk( Pdu &pdu,                // pdu to get_bulk
  119.                         SnmpTarget &target,      // destination target
  120.                         const int non_repeaters, // number of non repeaters
  121.                         const int max_reps);     // maximum number of repetitions
  122.   //-----------------------[ get bulk async ]------------------------------
  123.   virtual int get_bulk( Pdu &pdu,                      // pdu to get_bulk async
  124.                         SnmpTarget &target,            // destination target
  125.                         const int non_repeaters,       // number of non repeaters
  126.                         const int max_reps,            // max repeaters
  127.                         const snmp_callback callback,        // async callback
  128.                         const void *callback_data=0);        // callback data
  129.   //-----------------------[ send a trap ]----------------------------------
  130.   virtual int trap( Pdu &pdu,                     // pdu to send
  131.                     SnmpTarget &target);          // destination target
  132.   
  133.   //----------------------[ blocking inform, V2 only]------------------------
  134.   virtual int inform( Pdu &pdu,                // pdu to send
  135.                       SnmpTarget &target);     // destination target
  136.   //----------------------[ asynch inform, V2 only]------------------------
  137.   virtual int inform( Pdu &pdu,                      // pdu to send
  138.                       SnmpTarget &target,            // destination target
  139.                       const snmp_callback callback,  // callback function
  140.                       const void * callback_data=0); // callback data
  141.   //-----------------------[ register to get informs]-------------------------
  142.   virtual int notify_register( const OidCollection    &trapids,  // ids to listen for
  143.                                const TargetCollection &targets,  // targets to listen for
  144.                                const snmp_callback callback,     // callback to use
  145.                                const void *callback_data=0);     // callback data
  146.   //-----------------------[ register to get informs]-------------------------
  147.   virtual int notify_register( const OidCollection    &trapids,           // ids to listen for
  148.                                const TargetCollection &targets,           // targets to listen for
  149.                                const AddressCollection &listen_addresses, // interfaces to listen on
  150.                                const snmp_callback callback,              // callback to use
  151.                                const void *callback_data=0);              // callback data
  152.   //-----------------------[ un-register to get traps]----------------------
  153.   virtual int notify_unregister();
  154.   //-----------------------[ get notify register info ]---------------------
  155.   virtual int get_notify_filter( OidCollection &trapids, TargetCollection &targets);
  156.   //-----------------------[ access the trap reception info ]---------------
  157.   snmp_callback get_notify_callback();
  158.   void * get_notify_callback_data();
  159.  protected:
  160.    //---[ instance variables ]
  161.    SNMPHANDLE iv_snmp_session;             // session handle
  162.    SNMPHANDLE pdu_handler;                 // pdu handler win proc
  163.    int construct_status;                   // status of construction
  164.    // inform receive member variables
  165.    TargetCollection *notify_targets;
  166.    OidCollection *notify_ids;
  167.    AddressCollection *listen_addresses;
  168.    snmp_callback  notifycallback;
  169.    void * notifycallback_data;
  170.  
  171.    //-----------[ Snmp Engine ]----------------------------------------
  172.    // gets, sets and get nexts go through here....
  173.    // This mf does all snmp sending (using sendMsg) and reception
  174.    // except for traps which are sent using trap().
  175.    int snmp_engine( Pdu &pdu,                  // pdu to use
  176.                     long int non_reps,         // get bulk only
  177.                     long int max_reps,         // get bulk only
  178.                     SnmpTarget &target,        // destination target
  179.                     const snmp_callback cb,    // async callback function
  180.                     const void *cbd);          // callback data
  181.    //-----------[ Snmp sendMsg ]---------------------------------
  182.    // send a message using whatever underlying stack is available.
  183.    // 
  184.    int sendMsg( SnmpTarget &target,      // target of send
  185.                 Pdu &pdu,                // the pdu to send
  186. long int non_reps,       // # of non repititions
  187.                 long int max_reps,       // # of max repititions
  188.           long int request_id);    // id to use in send
  189. };
  190. #endif //_SNMP_CLS