psnmp.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:9k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * psnmp.h
  3.  *
  4.  * Simple Network Management Protocol classes.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: psnmp.h,v $
  30.  * Revision 1.7  1999/03/09 08:01:46  robertj
  31.  * Changed comments for doc++ support (more to come).
  32.  *
  33.  * Revision 1.6  1999/02/16 08:07:10  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.5  1998/11/30 02:50:55  robertj
  37.  * New directory structure
  38.  *
  39.  * Revision 1.4  1998/09/23 06:27:38  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.3  1996/11/04 03:56:16  robertj
  43.  * Added selectable read buffer size.
  44.  *
  45.  * Revision 1.2  1996/09/20 12:19:36  robertj
  46.  * Used read timeout instead of member variable.
  47.  *
  48.  * Revision 1.1  1996/09/14 12:58:57  robertj
  49.  * Initial revision
  50.  *
  51.  * Revision 1.6  1996/05/09 13:23:49  craigs
  52.  * Added trap functions
  53.  *
  54.  * Revision 1.5  1996/04/23 12:12:46  craigs
  55.  * Changed to use GetErrorText function
  56.  *
  57.  * Revision 1.4  1996/04/16 13:20:43  craigs
  58.  * Final version prior to beta1 release
  59.  *
  60.  * Revision 1.3  1996/04/15 09:05:30  craigs
  61.  * Latest version prior to integration with Robert's changes
  62.  *
  63.  * Revision 1.2  1996/04/01 12:36:12  craigs
  64.  * Fixed RCS header, added IPAddress functions
  65.  *
  66.  * Revision 1.1  1996/03/02 06:49:51  craigs
  67.  * Initial revision
  68.  *
  69.  */
  70. #ifndef _PSNMP_H
  71. #define _PSNMP_H
  72. #ifdef __GNUC__
  73. #pragma interface
  74. #endif
  75. #include <ptlib/sockets.h>
  76. #include <ptclib/pasn.h>
  77. //////////////////////////////////////////////////////////////////////////
  78. /** A list of object IDs and their values
  79.  */
  80. class PSNMPVarBindingList : public PObject
  81. {
  82.   PCLASSINFO(PSNMPVarBindingList, PObject)
  83.   public:
  84.     void Append(const PString & objectID);
  85.     void Append(const PString & objectID, PASNObject * obj);
  86.     void AppendString(const PString & objectID, const PString & str);
  87.     void RemoveAll();
  88.     PINDEX GetSize() const;
  89.     PString GetObjectID(PINDEX idx) const;
  90.     PASNObject & operator[](PINDEX idx) const;
  91.     void PrintOn(ostream & strm) const;
  92.   protected:
  93.     PStringList     objectIds;
  94.     PASNObjectList  values;
  95. };
  96. //////////////////////////////////////////////////////////////////////////
  97. /** A descendant of PUDPSocket which can perform SNMP calls
  98.  */
  99. class PSNMP : public PIndirectChannel
  100. {
  101.   PCLASSINFO(PSNMP, PIndirectChannel)
  102.   public:
  103.     enum ErrorType {
  104.        // Standard RFC1157 errors
  105.        NoError        = 0,
  106.        TooBig         = 1,
  107.        NoSuchName     = 2,
  108.        BadValue       = 3,
  109.        ReadOnly       = 4,
  110.        GenErr         = 5,
  111.        // Additional errors
  112.        NoResponse,
  113.        MalformedResponse,
  114.        SendFailed,
  115.        RxBufferTooSmall,
  116.        TxDataTooBig,
  117.        NumErrors
  118.     };
  119.     enum RequestType {
  120.        GetRequest     = 0,
  121.        GetNextRequest = 1,
  122.        GetResponse    = 2,
  123.        SetRequest     = 3,
  124.        Trap           = 4,
  125.     };
  126.     enum { TrapPort = 162 };
  127.     enum TrapType {
  128.       ColdStart             = 0,
  129.       WarmStart             = 1,
  130.       LinkDown              = 2,
  131.       LinkUp                = 3,
  132.       AuthenticationFailure = 4,
  133.       EGPNeighbourLoss      = 5,
  134.       EnterpriseSpecific    = 6,
  135.       NumTrapTypes
  136.     };
  137.     static PString GetErrorText(ErrorType err);
  138.     static PString GetTrapTypeText(PINDEX code);
  139.     static void SendEnterpriseTrap (
  140.                  const PIPSocket::Address & addr,
  141.                             const PString & community,
  142.                             const PString & enterprise,
  143.                                      PINDEX specificTrap,
  144.                                PASNUnsigned timeTicks,
  145.                                        WORD sendPort = TrapPort);
  146.     static void SendEnterpriseTrap (
  147.                  const PIPSocket::Address & addr,
  148.                             const PString & community,
  149.                             const PString & enterprise,
  150.                                      PINDEX specificTrap,
  151.                                PASNUnsigned timeTicks,
  152.                 const PSNMPVarBindingList & vars,
  153.                                        WORD sendPort = TrapPort);
  154.     static void SendTrap (
  155.                        const PIPSocket::Address & addr,
  156.                                   PSNMP::TrapType trapType,
  157.                                   const PString & community,
  158.                                   const PString & enterprise,
  159.                                            PINDEX specificTrap,
  160.                                      PASNUnsigned timeTicks,
  161.                       const PSNMPVarBindingList & vars,
  162.                                              WORD sendPort = TrapPort);
  163.     static void SendTrap (
  164.                       const PIPSocket::Address & addr,
  165.                                   PSNMP::TrapType trapType,
  166.                                   const PString & community,
  167.                                   const PString & enterprise,
  168.                                            PINDEX specificTrap,
  169.                                      PASNUnsigned timeTicks,
  170.                       const PSNMPVarBindingList & vars,
  171.                        const PIPSocket::Address & agentAddress,
  172.                                              WORD sendPort = TrapPort);
  173.                             
  174.     static void WriteTrap (           PChannel & channel,
  175.                                   PSNMP::TrapType trapType,
  176.                                   const PString & community,
  177.                                   const PString & enterprise,
  178.                                            PINDEX specificTrap,
  179.                                      PASNUnsigned timeTicks,
  180.                       const PSNMPVarBindingList & vars,
  181.                        const PIPSocket::Address & agentAddress);
  182.     static BOOL DecodeTrap(const PBYTEArray & readBuffer,
  183.                                        PINDEX & version,
  184.                                       PString & community,
  185.                                       PString & enterprise,
  186.                            PIPSocket::Address & address,
  187.                                        PINDEX & genericTrapType,
  188.                                       PINDEX  & specificTrapType,
  189.                                  PASNUnsigned & timeTicks,
  190.                           PSNMPVarBindingList & varsOut);
  191. };
  192. //////////////////////////////////////////////////////////////////////////
  193. /** Class which gets SNMP data
  194.  */
  195. class PSNMPClient : public PSNMP
  196. {
  197.   PCLASSINFO(PSNMPClient, PSNMP)
  198.   public:
  199.     PSNMPClient(const PString & host,
  200.                 PINDEX retryMax = 5,
  201.                 PINDEX timeoutMax = 5,
  202.                 PINDEX rxBufferSize = 1500,
  203.                 PINDEX txSize = 484);
  204.     PSNMPClient(PINDEX retryMax = 5,
  205.                 PINDEX timeoutMax = 5,
  206.                 PINDEX rxBufferSize = 1500,
  207.                 PINDEX txSize = 484);
  208.     void SetVersion(PASNInt version);
  209.     PASNInt GetVersion() const;
  210.     void SetCommunity(const PString & str);
  211.     PString GetCommunity() const;
  212.     void SetRequestID(PASNInt requestID);
  213.     PASNInt GetRequestID() const;
  214.     BOOL WriteGetRequest (PSNMPVarBindingList & varsIn,
  215.                           PSNMPVarBindingList & varsOut);
  216.     BOOL WriteGetNextRequest (PSNMPVarBindingList & varsIn,
  217.                               PSNMPVarBindingList & varsOut);
  218.     BOOL WriteSetRequest (PSNMPVarBindingList & varsIn,
  219.                           PSNMPVarBindingList & varsOut);
  220.     ErrorType GetLastErrorCode() const;
  221.     PINDEX    GetLastErrorIndex() const;
  222.     PString   GetLastErrorText() const;
  223.   protected:
  224.     BOOL WriteRequest (PASNInt requestCode,
  225.                        PSNMPVarBindingList & varsIn,
  226.                        PSNMPVarBindingList & varsOut);
  227.     BOOL ReadRequest(PBYTEArray & readBuffer);
  228.     PString   hostName;
  229.     PString   community;
  230.     PASNInt   requestId;
  231.     PASNInt   version;
  232.     PINDEX    retryMax;
  233.     PINDEX    lastErrorIndex;
  234.     ErrorType lastErrorCode;
  235.     PBYTEArray readBuffer;
  236.     PINDEX     maxRxSize;
  237.     PINDEX     maxTxSize;
  238. };
  239. //////////////////////////////////////////////////////////////////////////
  240. /** Class which supplies SNMP data
  241.  */
  242. class PSNMPServer : public PSNMP
  243. {
  244.   PCLASSINFO(PSNMPServer, PSNMP)
  245.   public:
  246.     virtual void OnGetRequest     (PSNMPVarBindingList & vars);
  247.     virtual void OnGetNextRequest (PSNMPVarBindingList & vars);
  248.     virtual void OnSetRequest     (PSNMPVarBindingList & vars);
  249.     BOOL SendGetResponse          (PSNMPVarBindingList & vars);
  250. };
  251. #endif
  252. // End of File.