📄 idsnmp.pas
字号:
{ $HDR$}
{**********************************************************************}
{ Unit archived using Team Coherence }
{ Team Coherence is Copyright 2002 by Quality Software Components }
{ }
{ For further information / comments, visit our WEB site at }
{ http://www.TeamCoherence.com }
{**********************************************************************}
{}
{ $Log: 11751: IdSNMP.pas
{
{ Rev 1.3 10/26/2004 11:08:04 PM JPMugaas
{ Updated refs.
}
{
{ Rev 1.2 2004.02.03 5:44:22 PM czhower
{ Name changes
}
{
{ Rev 1.1 1/21/2004 4:03:36 PM JPMugaas
{ InitComponent
}
{
{ Rev 1.0 11/13/2002 08:01:02 AM JPMugaas
}
unit IdSNMP;
{
-2001.02.13 - Kudzu - Misc "Indy" Changes.
-Contributions also by: Hernan Sanchez (hernan.sanchez@iname.com)
-Original Author: Lukas Gebauer
The Synapse SNMP component was converted for use in INDY.
| The Original Code is Synapse Delphi Library. |
|==============================================================================|
| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).|
| Portions created by Lukas Gebauer are Copyright (c)2000. |
| All Rights Reserved. |
|==============================================================================|
| Contributor(s): |
| Hernan Sanchez (hernan.sanchez@iname.com) Original author |
| Colin Wilson (colin@wilsonc.demon.co.uk) Fixed some bugs & added support |
| for Value types |
|==============================================================================|
| History: see HISTORY.HTM from distribution package |
| (Found at URL: http://www.ararat.cz/synapse/) |
|==============================================================================}
interface
uses
Classes,
SysUtils,
IdUDPBase,
IdUDPClient,
IdException,
IdASN1Util,
IdTStrings;
const
//PDU type
PDUGetRequest=$a0;
PDUGetNextRequest=$a1;
PDUGetResponse=$a2;
PDUSetRequest=$a3;
PDUTrap=$a4;
//errors
ENoError=0;
ETooBig=1;
ENoSuchName=2;
EBadValue=3;
EReadOnly=4;
EGenErr=5;
type
TIdSNMP = class;
TSNMPInfo=class(TObject)
private
fOwner : TIdSNMP;
fCommunity: string;
function GetValue (idx : Integer) : string;
function GetValueCount: Integer;
function GetValueType (idx : Integer) : Integer;
function GetValueOID(idx: Integer): string;
procedure SetCommunity(const Value: string);
protected
Buffer: string;
procedure SyncMIB;
public
Host : string;
Port : integer;
Enterprise: string;
GenTrap: integer;
SpecTrap: integer;
Version : integer;
PDUType : integer;
TimeTicks : integer;
ID : integer;
ErrorStatus : integer;
ErrorIndex : integer;
MIBOID : TIdStringList;
MIBValue : TIdStringList;
constructor Create (AOwner : TIdSNMP);
destructor Destroy; override;
function EncodeTrap: integer;
function DecodeTrap: integer;
procedure DecodeBuf(Buffer:string);
function EncodeBuf:string;
procedure Clear;
procedure MIBAdd(MIB,Value:string; valueType : Integer = ASN1_OCTSTR);
procedure MIBDelete(Index:integer);
function MIBGet(MIB:string):string;
property Owner : TIdSNMP read fOwner;
property Community : string read fCommunity write SetCommunity;
property ValueCount : Integer read GetValueCount;
property Value [idx : Integer] : string read GetValue;
property ValueOID [idx : Integer] : string read GetValueOID;
property ValueType [idx : Integer] : Integer read GetValueType;
end;
TIdSNMP = class(TIdUDPClient)
protected
fCommunity: string;
fTrapPort: Integer;
procedure SetCommunity(const Value: string);
procedure InitComponent; override;
public
Query : TSNMPInfo;
Reply : TSNMPInfo;
Trap : TSNMPInfo;
destructor Destroy; override;
function SendQuery : boolean;
function QuickSend(const Mib, Community, Host:string; var Value:string):Boolean;
function QuickSendTrap(const Dest, Enterprise, Community: string;
Port, Generic, Specific: integer; MIBName, MIBValue: TIdStringList): integer;
function QuickReceiveTrap(var Source, Enterprise, Community: string;
var Port, Generic, Specific, Seconds: integer; var MIBName, MIBValue: TIdStringList): integer;
function SendTrap: integer;
function ReceiveTrap: integer;
published
property Port default 161;
property TrapPort : Integer read fTrapPort Write fTrapPort default 162;
property Community : string read fCommunity write SetCommunity;
end;
implementation
uses
IdStack;
//Hernan Sanchez
function IPToID(Host: string): string;
var
s, t: string;
i, x: integer;
begin
Result := ''; {Do not Localize}
for x:= 1 to 3 do
begin
t := ''; {Do not Localize}
s := StrScan(PChar(Host), '.'); {Do not Localize}
t := Copy(Host, 1, (Length(Host) - Length(s)));
Delete(Host, 1, (Length(Host) - Length(s) + 1));
i := StrTointDef(t, 0);
Result := Result + Chr(i);
end;
i := StrTointDef(Host, 0);
Result := Result + Chr(i);
end;
{========================== SNMP INFO OBJECT ==================================}
{ TIdSNMPInfo }
(*----------------------------------------------------------------------------*
| constructor TSNMPInfo.Create () |
| |
| Constructor for TSNMPInfo |
| |
| Parameters: |
| AOwner : TIdSNMP The owning IdSNMP Component |
| |
*----------------------------------------------------------------------------*)
constructor TSNMPInfo.Create(AOwner : TIdSNMP);
begin
inherited Create;
fOwner := AOwner;
MIBOID:=TIdStringList.create;
MIBValue:=TIdStringList.create;
fCommunity := AOwner.Community;
Port := AOwner.Port;
end;
(*----------------------------------------------------------------------------*
| destructor TSNMPInfo.Destroy |
| |
| Destructor for TSNMPInfo |
*----------------------------------------------------------------------------*)
destructor TSNMPInfo.Destroy;
begin
MIBValue.Free;
MIBOID.Free;
inherited destroy;
end;
(*----------------------------------------------------------------------------*
| procedure TSNMPInfo.SyncMIB |
| |
| Ensure that there are as many 'values' as 'oids' | {Do not Localize}
*----------------------------------------------------------------------------*)
procedure TSNMPInfo.SyncMIB;
var
n,x:integer;
begin
x:=MIBValue.Count;
for n:=x to MIBOID.Count-1 do
MIBValue.Add(''); {Do not Localize}
end;
(*----------------------------------------------------------------------------*
| procedure TSNMPInfo.DecodeBuf |
| |
| Decode an ASN buffer into version, community, MIB OID/Value pairs, etc. |
| |
| Parameters: |
| Buffer:string The ASN buffer to decode |
*----------------------------------------------------------------------------*)
procedure TSNMPInfo.DecodeBuf(Buffer:string);
var
Pos:integer;
endpos,vt:integer;
sm,sv:string;
begin
Pos:=2;
Endpos:=ASNDecLen(Pos,buffer);
Self.version:=StrToIntDef(ASNItem(Pos,buffer,vt),0);
Self.community:=ASNItem(Pos,buffer,vt);
Self.PDUType:=StrToIntDef(ASNItem(Pos,buffer,vt),0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -