00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
#ifndef _PSNMP_H
00076
#define _PSNMP_H
00077
00078
#ifdef P_USE_PRAGMA
00079
#pragma interface
00080
#endif
00081
00082
#include <ptlib/sockets.h>
00083
#include <ptclib/pasn.h>
00084
00085
00087
00090 class PSNMPVarBindingList :
public PObject
00091 {
00092
PCLASSINFO(
PSNMPVarBindingList,
PObject)
00093
public:
00094
00095
void Append(
const PString & objectID);
00096
void Append(
const PString & objectID,
PASNObject * obj);
00097
void AppendString(
const PString & objectID,
const PString & str);
00098
00099
void RemoveAll();
00100
00101 PINDEX
GetSize()
const;
00102
00103
PString GetObjectID(PINDEX idx)
const;
00104
PASNObject &
operator[](PINDEX idx)
const;
00105
00106
void PrintOn(ostream & strm)
const;
00107
00108
protected:
00109 PStringList objectIds;
00110 PASNObjectList
values;
00111 };
00112
00114
00117 class PSNMP :
public PIndirectChannel
00118 {
00119
PCLASSINFO(
PSNMP,
PIndirectChannel)
00120
public:
00121 enum ErrorType {
00122
00123
NoError = 0,
00124
TooBig = 1,
00125
NoSuchName = 2,
00126
BadValue = 3,
00127
ReadOnly = 4,
00128
GenErr = 5,
00129
00130
00131
NoResponse,
00132
MalformedResponse,
00133
SendFailed,
00134
RxBufferTooSmall,
00135
TxDataTooBig,
00136
NumErrors
00137 };
00138
00139 enum RequestType {
00140
GetRequest = 0,
00141
GetNextRequest = 1,
00142
GetResponse = 2,
00143
SetRequest = 3,
00144
Trap = 4,
00145 };
00146
00147
enum { TrapPort = 162 };
00148
00149 enum TrapType {
00150
ColdStart = 0,
00151
WarmStart = 1,
00152
LinkDown = 2,
00153
LinkUp = 3,
00154
AuthenticationFailure = 4,
00155
EGPNeighbourLoss = 5,
00156
EnterpriseSpecific = 6,
00157
NumTrapTypes
00158 };
00159
00160
static PString GetErrorText(ErrorType err);
00161
00162
static PString GetTrapTypeText(PINDEX code);
00163
00164
static void SendEnterpriseTrap (
00165
const PIPSocket::Address & addr,
00166
const PString & community,
00167
const PString & enterprise,
00168 PINDEX specificTrap,
00169 PASNUnsigned timeTicks,
00170 WORD sendPort = TrapPort);
00171
00172
static void SendEnterpriseTrap (
00173
const PIPSocket::Address & addr,
00174
const PString & community,
00175
const PString & enterprise,
00176 PINDEX specificTrap,
00177 PASNUnsigned timeTicks,
00178
const PSNMPVarBindingList & vars,
00179 WORD sendPort = TrapPort);
00180
00181
static void SendTrap (
00182
const PIPSocket::Address & addr,
00183 PSNMP::TrapType trapType,
00184
const PString & community,
00185
const PString & enterprise,
00186 PINDEX specificTrap,
00187 PASNUnsigned timeTicks,
00188
const PSNMPVarBindingList & vars,
00189 WORD sendPort = TrapPort);
00190
00191
static void SendTrap (
00192
const PIPSocket::Address & addr,
00193 PSNMP::TrapType trapType,
00194
const PString & community,
00195
const PString & enterprise,
00196 PINDEX specificTrap,
00197 PASNUnsigned timeTicks,
00198
const PSNMPVarBindingList & vars,
00199
const PIPSocket::Address & agentAddress,
00200 WORD sendPort = TrapPort);
00201
00202
static void WriteTrap (
PChannel & channel,
00203 PSNMP::TrapType trapType,
00204
const PString & community,
00205
const PString & enterprise,
00206 PINDEX specificTrap,
00207 PASNUnsigned timeTicks,
00208
const PSNMPVarBindingList & vars,
00209
const PIPSocket::Address & agentAddress);
00210
00211
static BOOL DecodeTrap(
const PBYTEArray & readBuffer,
00212 PINDEX & version,
00213
PString & community,
00214
PString & enterprise,
00215
PIPSocket::Address & address,
00216 PINDEX & genericTrapType,
00217 PINDEX & specificTrapType,
00218 PASNUnsigned & timeTicks,
00219
PSNMPVarBindingList & varsOut);
00220 };
00221
00222
00224
00227 class PSNMPClient :
public PSNMP
00228 {
00229
PCLASSINFO(
PSNMPClient,
PSNMP)
00230
public:
00231
PSNMPClient(
const PString & host,
00232 PINDEX
retryMax = 5,
00233 PINDEX timeoutMax = 5,
00234 PINDEX rxBufferSize = 1500,
00235 PINDEX txSize = 484);
00236
00237
PSNMPClient(PINDEX retryMax = 5,
00238 PINDEX timeoutMax = 5,
00239 PINDEX rxBufferSize = 1500,
00240 PINDEX txSize = 484);
00241
00242
void SetVersion(
PASNInt version);
00243
PASNInt GetVersion()
const;
00244
00245
void SetCommunity(
const PString & str);
00246
PString GetCommunity()
const;
00247
00248
void SetRequestID(
PASNInt requestID);
00249
PASNInt GetRequestID()
const;
00250
00251 BOOL
WriteGetRequest (
PSNMPVarBindingList & varsIn,
00252
PSNMPVarBindingList & varsOut);
00253
00254 BOOL
WriteGetNextRequest (
PSNMPVarBindingList & varsIn,
00255
PSNMPVarBindingList & varsOut);
00256
00257 BOOL
WriteSetRequest (
PSNMPVarBindingList & varsIn,
00258
PSNMPVarBindingList & varsOut);
00259
00260 ErrorType
GetLastErrorCode()
const;
00261 PINDEX
GetLastErrorIndex()
const;
00262
PString GetLastErrorText()
const;
00263
00264
protected:
00265 BOOL
WriteRequest (
PASNInt requestCode,
00266
PSNMPVarBindingList & varsIn,
00267
PSNMPVarBindingList & varsOut);
00268
00269
00270 BOOL
ReadRequest(
PBYTEArray &
readBuffer);
00271
00272 PString hostName;
00273 PString community;
00274 PASNInt requestId;
00275 PASNInt version;
00276 PINDEX retryMax;
00277 PINDEX
lastErrorIndex;
00278 ErrorType
lastErrorCode;
00279 PBYTEArray readBuffer;
00280 PINDEX
maxRxSize;
00281 PINDEX
maxTxSize;
00282 };
00283
00284
00286
00289 class PSNMPServer :
public PSNMP
00290 {
00291
PCLASSINFO(
PSNMPServer,
PSNMP)
00292
public:
00293
00294
virtual void OnGetRequest (
PSNMPVarBindingList & vars);
00295
virtual void OnGetNextRequest (
PSNMPVarBindingList & vars);
00296
virtual void OnSetRequest (
PSNMPVarBindingList & vars);
00297
00298 BOOL
SendGetResponse (
PSNMPVarBindingList & vars);
00299 };
00300
00301
#endif
00302
00303
00304