PTLib  Version 2.18.8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
psnmp.h
Go to the documentation of this file.
1 /*
2  * psnmp.h
3  *
4  * Simple Network Management Protocol classes.
5  *
6  * Portable Windows Library
7  *
8  * Copyright (c) 1993-2002 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  * Contributor(s): ______________________________________.
25  */
26 
27 #ifndef PTLIB_PSNMP_H
28 #define PTLIB_PSNMP_H
29 
30 #ifdef P_USE_PRAGMA
31 #pragma interface
32 #endif
33 
34 #ifdef P_SNMP
35 
36 #include <ptlib/sockets.h>
37 #include <ptclib/snmp.h>
38 #include <ptclib/pasn.h>
39 
40 #include <list>
41 #include <vector>
42 
44 
48 {
50  public:
51 
52  void Append(const PString & objectID);
53  void Append(const PString & objectID, PASNObject * obj);
54  void AppendString(const PString & objectID, const PString & str);
55 
56  void RemoveAll();
57 
58  PINDEX GetSize() const;
59 
60  PINDEX GetIndex(const PString & objectID) const;
61  PString GetObjectID(PINDEX idx) const;
62  PASNObject & operator[](PINDEX idx) const;
63 
64  void PrintOn(ostream & strm) const;
65 
66  protected:
68  PASNObjectArray values;
69 };
70 
72 
75 class PSNMP : public PIndirectChannel
76 {
78  public:
79  enum ErrorType {
80  // Standard RFC1157 errors
81  NoError = 0,
82  TooBig = 1,
84  BadValue = 3,
85  ReadOnly = 4,
86  GenErr = 5,
87 
88  // Additional errors
95  };
96 
97  enum RequestType {
102  Trap = 4,
103  };
104 
105  enum { TrapPort = 162 };
106 
107  enum TrapType {
110  LinkDown = 2,
111  LinkUp = 3,
116  };
117 
118  static PString GetErrorText(ErrorType err);
119 
120  static PString GetTrapTypeText(PINDEX code);
121 
122  static void SendEnterpriseTrap (
123  const PIPSocket::Address & addr,
124  const PString & community,
125  const PString & enterprise,
126  PINDEX specificTrap,
127  PASNUnsigned timeTicks,
128  WORD sendPort = TrapPort);
129 
130  static void SendEnterpriseTrap (
131  const PIPSocket::Address & addr,
132  const PString & community,
133  const PString & enterprise,
134  PINDEX specificTrap,
135  PASNUnsigned timeTicks,
136  const PSNMPVarBindingList & vars,
137  WORD sendPort = TrapPort);
138 
139  static void SendTrap (
140  const PIPSocket::Address & addr,
141  PSNMP::TrapType trapType,
142  const PString & community,
143  const PString & enterprise,
144  PINDEX specificTrap,
145  PASNUnsigned timeTicks,
146  const PSNMPVarBindingList & vars,
147  WORD sendPort = TrapPort);
148 
149  static void SendTrap (
150  const PIPSocket::Address & addr,
151  PSNMP::TrapType trapType,
152  const PString & community,
153  const PString & enterprise,
154  PINDEX specificTrap,
155  PASNUnsigned timeTicks,
156  const PSNMPVarBindingList & vars,
157  const PIPSocket::Address & agentAddress,
158  WORD sendPort = TrapPort);
159 
160  static void WriteTrap ( PChannel & channel,
161  PSNMP::TrapType trapType,
162  const PString & community,
163  const PString & enterprise,
164  PINDEX specificTrap,
165  PASNUnsigned timeTicks,
166  const PSNMPVarBindingList & vars,
167  const PIPSocket::Address & agentAddress);
168 
169 /*
170  static PBoolean DecodeTrap(const PBYTEArray & readBuffer,
171  PINDEX & version,
172  PString & community,
173  PString & enterprise,
174  PIPSocket::Address & address,
175  PINDEX & genericTrapType,
176  PINDEX & specificTrapType,
177  PASNUnsigned & timeTicks,
178  PSNMPVarBindingList & varsOut);
179 */
180 
181  typedef list<pair<PString,PRFC1155_ObjectSyntax> > BindingList;
182 };
183 
184 
186 
189 class PSNMPClient : public PSNMP
190 {
192  public:
193  PSNMPClient(const PString & host,
194  PINDEX retryMax = 5,
195  PINDEX timeoutMax = 5,
196  PINDEX rxBufferSize = 1500,
197  PINDEX txSize = 484);
198 
199  PSNMPClient(PINDEX retryMax = 5,
200  PINDEX timeoutMax = 5,
201  PINDEX rxBufferSize = 1500,
202  PINDEX txSize = 484);
203 
204  void SetVersion(PASNInt version);
205  PASNInt GetVersion() const;
206 
207  void SetCommunity(const PString & str);
208  PString GetCommunity() const;
209 
210  void SetRequestID(PASNInt requestID);
211  PASNInt GetRequestID() const;
212 
214  PSNMPVarBindingList & varsOut);
215 
217  PSNMPVarBindingList & varsOut);
218 
220  PSNMPVarBindingList & varsOut);
221 
222  ErrorType GetLastErrorCode() const;
223  PINDEX GetLastErrorIndex() const;
224  PString GetLastErrorText() const;
225 
226  protected:
227  PBoolean WriteRequest (PASNInt requestCode,
228  PSNMPVarBindingList & varsIn,
229  PSNMPVarBindingList & varsOut);
230 
231 
232  PBoolean ReadRequest(PBYTEArray & readBuffer);
233 
238  PINDEX m_retryMax;
242  PINDEX m_maxRxSize;
243  PINDEX m_maxTxSize;
244 };
245 
246 
248 
251 class PSNMPServer : public PSNMP
252 {
254  public:
255 
257  WORD localPort = 161,
258  PINDEX timeout = 5000,
259  PINDEX rxSize = 10000,
260  PINDEX txSize = 10000);
261 
262  ~PSNMPServer();
263 
264  void Main();
265 
266  void SetVersion(PASNInt newVersion);
268  PBoolean ProcessPDU(const PBYTEArray & readBuffer, PBYTEArray & writeBuffer);
269 
270  virtual PBoolean Authorise(const PIPSocket::Address & received);
271  virtual PBoolean ConfirmVersion(PASN_Integer vers);
272  virtual PBoolean ConfirmCommunity(PASN_OctetString & community);
273 
274  virtual PBoolean MIB_LocalMatch(PSNMP_PDU & pdu);
275 
276  virtual PBoolean OnGetRequest (PINDEX reqID, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode);
277  virtual PBoolean OnGetNextRequest (PINDEX reqID, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode);
278  virtual PBoolean OnSetRequest (PINDEX reqID, PSNMP::BindingList & vars, PSNMP::ErrorType & errCode);
279 
281 
282  protected:
285  PASN_Integer m_version;
289  PINDEX m_maxRxSize;
290  PINDEX m_maxTxSize;
293 };
294 
295 #endif // P_SNMP
296 
297 #endif // PTLIB_PSNMP_H
298 
299 
300 // End Of File ///////////////////////////////////////////////////////////////
list< pair< PString, PRFC1155_ObjectSyntax > > BindingList
Definition: psnmp.h:181
PASNObject & operator[](PINDEX idx) const
PString GetObjectID(PINDEX idx) const
Definition: psnmp.h:84
ErrorType m_lastErrorCode
Definition: psnmp.h:287
PString m_community
Definition: psnmp.h:284
#define PCLASSINFO(cls, par)
Declare all the standard PTLib class information.
Definition: object.h:2164
PString m_hostName
Definition: psnmp.h:234
PINDEX m_lastErrorIndex
Definition: psnmp.h:286
Definition: psnmp.h:110
virtual PBoolean ConfirmCommunity(PASN_OctetString &community)
PBoolean WriteGetRequest(PSNMPVarBindingList &varsIn, PSNMPVarBindingList &varsOut)
Definition: psnmp.h:115
Definition: psnmp.h:91
Definition: psnmp.h:94
A socket channel that uses the UDP transport on the Internet Protocol.
Definition: udpsock.h:42
static void SendTrap(const PIPSocket::Address &addr, PSNMP::TrapType trapType, const PString &community, const PString &enterprise, PINDEX specificTrap, PASNUnsigned timeTicks, const PSNMPVarBindingList &vars, WORD sendPort=TrapPort)
A descendant of PUDPSocket which can perform SNMP calls.
Definition: psnmp.h:75
Definition: psnmp.h:108
void SetVersion(PASNInt version)
This is a channel that operates indirectly through another channel(s).
Definition: indchan.h:45
PINDEX m_retryMax
Definition: psnmp.h:238
TrapType
Definition: psnmp.h:107
PASNInt m_requestId
Definition: psnmp.h:236
static PString GetTrapTypeText(PINDEX code)
PStringArray objectIds
Definition: psnmp.h:67
This is an array collection class of PString objects.
Definition: pstring.h:2365
void SetCommunity(const PString &str)
PASNInt m_version
Definition: psnmp.h:237
PINDEX m_maxRxSize
Definition: psnmp.h:242
Definition: psnmp.h:98
PINDEX m_maxTxSize
Definition: psnmp.h:243
PInt32 PASNInt
Definition: pasn.h:39
This class defines the common behviour of all ASN objects.
Definition: pasn.h:60
Class which gets SNMP data.
Definition: psnmp.h:189
PBoolean WriteRequest(PASNInt requestCode, PSNMPVarBindingList &varsIn, PSNMPVarBindingList &varsOut)
virtual PBoolean MIB_LocalMatch(PSNMP_PDU &pdu)
Definition: psnmp.h:112
Definition: psnmp.h:100
PINDEX m_maxRxSize
Definition: psnmp.h:289
void SetVersion(PASNInt newVersion)
PINDEX GetLastErrorIndex() const
void SetRequestID(PASNInt requestID)
Definition: psnmp.h:85
virtual PBoolean OnSetRequest(PINDEX reqID, PSNMP::BindingList &vars, PSNMP::ErrorType &errCode)
void AppendString(const PString &objectID, const PString &str)
Array of unsigned characters.
Definition: array.h:605
Definition: psnmp.h:109
Definition: psnmp.h:83
PBoolean ProcessPDU(const PBYTEArray &readBuffer, PBYTEArray &writeBuffer)
Definition: psnmp.h:92
PSNMPClient(const PString &host, PINDEX retryMax=5, PINDEX timeoutMax=5, PINDEX rxBufferSize=1500, PINDEX txSize=484)
static PString GetErrorText(ErrorType err)
Definition: psnmp.h:114
ErrorType
Definition: psnmp.h:79
void PrintOn(ostream &strm) const
Output the contents of the object to the stream.
Definition: psnmp.h:86
Definition: psnmp.h:102
PThreadObj< PSNMPServer > m_thread
Definition: psnmp.h:283
Definition: psnmp.h:93
virtual PBoolean Authorise(const PIPSocket::Address &received)
Abstract class defining I/O channel semantics.
Definition: channel.h:103
virtual PBoolean OnGetNextRequest(PINDEX reqID, PSNMP::BindingList &vars, PSNMP::ErrorType &errCode)
bool PBoolean
Definition: object.h:174
PASNObjectArray values
Definition: psnmp.h:68
static void SendEnterpriseTrap(const PIPSocket::Address &addr, const PString &community, const PString &enterprise, PINDEX specificTrap, PASNUnsigned timeTicks, WORD sendPort=TrapPort)
PASNInt GetRequestID() const
PINDEX GetSize() const
The character string class.
Definition: pstring.h:108
Definition: psnmp.h:89
virtual PBoolean ConfirmVersion(PASN_Integer vers)
PBYTEArray m_readBuffer
Definition: psnmp.h:288
PBoolean HandleChannel()
PSNMPServer(PIPSocket::Address binding=PIPSocket::GetDefaultIpAny(), WORD localPort=161, PINDEX timeout=5000, PINDEX rxSize=10000, PINDEX txSize=10000)
A list of object IDs and their values.
Definition: psnmp.h:47
Definition: psnmp.h:81
PINDEX m_lastErrorIndex
Definition: psnmp.h:239
ErrorType m_lastErrorCode
Definition: psnmp.h:240
PUDPSocket * m_baseSocket
Definition: psnmp.h:291
static void WriteTrap(PChannel &channel, PSNMP::TrapType trapType, const PString &community, const PString &enterprise, PINDEX specificTrap, PASNUnsigned timeTicks, const PSNMPVarBindingList &vars, const PIPSocket::Address &agentAddress)
PBYTEArray m_readBuffer
Definition: psnmp.h:241
void Append(const PString &objectID)
Definition: psnmp.h:82
A class describing an IP address.
Definition: ipsock.h:59
PINDEX GetIndex(const PString &objectID) const
PBoolean ReadRequest(PBYTEArray &readBuffer)
PBoolean WriteSetRequest(PSNMPVarBindingList &varsIn, PSNMPVarBindingList &varsOut)
static const PIPSocket::Address & GetDefaultIpAny()
PSNMP::ErrorType SendGetResponse(PSNMPVarBindingList &vars)
Definition: psnmp.h:111
virtual PBoolean OnGetRequest(PINDEX reqID, PSNMP::BindingList &vars, PSNMP::ErrorType &errCode)
PBoolean WriteGetNextRequest(PSNMPVarBindingList &varsIn, PSNMPVarBindingList &varsOut)
PINDEX m_maxTxSize
Definition: psnmp.h:290
Definition: psnmp.h:101
PString GetCommunity() const
RequestType
Definition: psnmp.h:97
Definition: psnmp.h:113
Definition: psnmp.h:105
PString GetLastErrorText() const
Definition: snmp.h:135
PASN_Integer m_version
Definition: psnmp.h:285
Class which supplies SNMP data.
Definition: psnmp.h:251
Definition: psnmp.h:99
Ultimate parent class for all objects in the class library.
Definition: object.h:2204
PASNInt GetVersion() const
DWORD PASNUnsigned
Definition: pasn.h:40
Definition: psnmp.h:90
PDictionary< PRFC1155_ObjectName, PRFC1155_ObjectSyntax > m_objList
Definition: psnmp.h:292
PString m_community
Definition: psnmp.h:235
ErrorType GetLastErrorCode() const