Packet Sniffer SDK DLL Edition

HNFileAdapter wrapper for Delphi

 Previous Next

File: HNFileAdapter.pas

{****************************************************************************
**                                                                         **
**                         PSSDK HNFileAdapter module                      **
**            Copyright (c) 1997 - 2007 microOLAP Technologies LTD,        **
**                       Khalturin A.P., Naumov D.A.                       **
**                                                                         **
****************************************************************************}

unit HNFileAdapter;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  HNPSManager, HNPsSdkDef;

type
  TOnPacketReceive = procedure (Sender : TObject; ThParam: Pointer; hPacket: Pointer; pPacketData: Pointer; IncPacketSize: DWORD) of object;
  TOnFileClose     = procedure (Sender : TObject; ThParam: Pointer; Status: DWORD) of object;
  TOnThreadBegin   = procedure (Sender : TObject; Var ThParam: Pointer) of object;
  TOnThreadEnd     = procedure (Sender : TObject; ThParam: Pointer) of object;

  //---------------------------------------------------------------------------
  // Class THNFileAdapter
  //---------------------------------------------------------------------------
  THNFileAdapter = class
  private
    hFAdp    : Pointer;
    FOnPacketReceive: TOnPacketReceive;
    FOnFileClose: TOnFileClose;
    FOnThreadBegin: TOnThreadBegin;
    FOnThreadEnd: TOnThreadEnd;
    procedure SetUserFilter(Value: Pointer);
    function GetUserFilter: Pointer;
    procedure SetUserFilterActive(Value: BOOL);
    function GetUserFilterActive: BOOL;
    procedure SetUseFastUserFilter(Value: BOOL);
    function GetUseFastUserFilter: BOOL;
    procedure DoOnPacketReceive(ThParam: Pointer; hPacket: Pointer; pPacketData: Pointer; IncPacketSize: DWORD);
    procedure DoOnFileClose(ThParam: Pointer; Status: DWORD);
    procedure DoOnThreadBegin(Var ThParam: Pointer);
    procedure DoOnThreadEnd(ThParam: Pointer);
    procedure SetQueue(Value: Pointer);
    function GetQueue: Pointer;
    function GetMaxPacketSize: DWORD;
    procedure SetMaxPacketSize(Value : DWORD);
    function GetAutoMode: BOOL;
    procedure SetAutoMode(Value : BOOL);
    function GetSizeLimit: DWORD;
    procedure SetSizeLimit(Value : DWORD);
    function GetMediumType: DWORD;
    procedure SetMediumType(Value : DWORD);
    function GetCapFormat: DWORD;
    procedure SetCapFormat(Value : DWORD);

  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    property UserFilter: Pointer read GetUserFilter write SetUserFilter;
    property Queue: Pointer read GetQueue write SetQueue;

    function IsValid: BOOL;
    function OpenFile(lpFileName : String): DWORD;
    function CreateFile(lpFileName : String): DWORD;
    function CloseFile: DWORD;
    function IsOpened: BOOL;
    function Get_RecvCount(HiValue: PUINT): UINT;
    function Get_AcceptCount(HiValue: PUINT): UINT;
    function Get_RejectCount(HiValue: PUINT): UINT;
    function Get_ProcessCount(HiValue: PUINT): UINT;
    function Get_OpenTime(HiValue: PUINT): UINT;
    function Get_FileSize(HiValue: PUINT): UINT;
    function Get_GetNextPacket(hPacket: Pointer): DWORD;
    function RewindFile(): DWORD;
    function SyncSend(pPacket: Pointer; PacketSize: DWORD): DWORD;
    function SyncSendEx(hPacket: Pointer): DWORD;

  published
    property AutoMode: BOOL read GetAutoMode write SetAutoMode;
    property CapFormat: DWORD read GetCapFormat write SetCapFormat;
    property MaxPacketSize: DWORD read GetMaxPacketSize write SetMaxPacketSize;
    property MediumType: DWORD read GetMediumType write SetMediumType;
    property SizeLimit: DWORD read GetSizeLimit write SetSizeLimit;
    property UserFilterActive: BOOL read GetUserFilterActive write SetUserFilterActive;
    property UseFastUserFilter: BOOL read GetUseFastUserFilter write SetUseFastUserFilter;
    property OnPacketReceive: TOnPacketReceive read FOnPacketReceive write FOnPacketReceive;
    property OnFileClose: TOnFileClose read FOnFileClose write FOnFileClose;
    property OnThreadBegin: TOnThreadBegin read FOnThreadBegin write FOnThreadBegin;
    property OnThreadEnd: TOnThreadEnd read FOnThreadEnd write FOnThreadEnd;
  end;

implementation

{$INCLUDE 'HNPsSdkFun.pas'}

//---------------------------------------------------------------------------
// IntOnPacketReceive - OnPacketReceive event handler.
//---------------------------------------------------------------------------
procedure IntOnPacketReceive(Param: Pointer; ThParam: Pointer; hPacket: Pointer; pPacketData: Pointer; IncPacketSize: DWORD); stdcall;
 var
   pFAdp : THNFileAdapter;
 begin
   pFAdp := THNFileAdapter(Param);
   pFAdp.DoOnPacketReceive(ThParam,hPacket,pPacketData,IncPacketSize);
 end;

//---------------------------------------------------------------------------
// IntOnFileClose - OnFileClose event handler.
//---------------------------------------------------------------------------
procedure IntOnFileClose(Param: Pointer; ThParam: Pointer; Status: DWORD); stdcall;
 var
   pFAdp : THNFileAdapter;
 begin
   pFAdp := THNFileAdapter(Param);
   pFAdp.DoOnFileClose(ThParam, Status);
 end;

//---------------------------------------------------------------------------
// IntOnThreadBegin - OnThreadBegin event handler.
//---------------------------------------------------------------------------
procedure IntOnThreadBegin(Param: Pointer; Var ThParam: Pointer); stdcall;
 var
   pFAdp : THNFileAdapter;
 begin
   pFAdp := THNFileAdapter(Param);
   pFAdp.DoOnThreadBegin(ThParam);
 end;

//---------------------------------------------------------------------------
// IntOnThreadEnd - OnThreadEnd event handler.
//---------------------------------------------------------------------------
procedure IntOnThreadEnd(Param: Pointer; ThParam: Pointer); stdcall;
 var
   pFAdp : THNFileAdapter;
 begin
   pFAdp := THNFileAdapter(Param);
   pFAdp.DoOnThreadEnd(ThParam);
 end;

//---------------------------------------------------------------------------
// Create - constructor
//---------------------------------------------------------------------------
constructor THNFileAdapter.Create(AOwner: TComponent);
 begin
   inherited Create(AOwner);

   if(phn = nil) then Exit;

   hFAdp := FAdpCreate();

   FAdpSetOnPacketRecv  (hFAdp,@IntOnPacketReceive,Self);
   FAdpSetOnFileClose   (hFAdp,@IntOnFileClose,Self);
   FAdpSetOnThreadBegin (hFAdp,@IntOnThreadBegin,Self);
   FAdpSetOnThreadEnd   (hFAdp,@IntOnThreadEnd,Self);

 end;

//---------------------------------------------------------------------------
// Destroy - destructor
//---------------------------------------------------------------------------
destructor THNFileAdapter.Destroy;
 begin
   if(phn = nil) then begin inherited Destroy; Exit; end;

   FAdpSetOnPacketRecv  (hFAdp,nil,nil);
   FAdpSetOnFileClose   (hFAdp,nil,nil);
   FAdpSetOnThreadBegin (hFAdp,nil,nil);
   FAdpSetOnThreadEnd   (hFAdp,nil,nil);

   FAdpDestroy(hFAdp);

   inherited Destroy;
 end;

//---------------------------------------------------------------------------
// Method - IsValid - Checks if the HNFileAdapter object is created correctly.
//---------------------------------------------------------------------------
function THNFileAdapter.IsValid: BOOL;
 begin
   Result := (hFAdp <> nil);
 end;

//---------------------------------------------------------------------------
// Method - OpenFile - Opens the CAP file.
//---------------------------------------------------------------------------
function THNFileAdapter.OpenFile(lpFileName : String): DWORD;
 begin
   Result := FAdpOpenFileA(hFAdp,PChar(lpFileName));
 end;

//---------------------------------------------------------------------------
// Method - CreateFile - Creates a CAP file.
//---------------------------------------------------------------------------
function THNFileAdapter.CreateFile(lpFileName : String): DWORD;
 begin
   Result := FAdpCreateFileA(hFAdp,PChar(lpFileName));
 end;

//---------------------------------------------------------------------------
// Method - CloseFile - Close the CAP file.
//---------------------------------------------------------------------------
function THNFileAdapter.CloseFile: DWORD;
 begin
   Result := FAdpCloseFile(hFAdp);
 end;

//---------------------------------------------------------------------------
// Method - Get_OpenTime - Return the timestamp of the first packet stored in a CAP file.
//---------------------------------------------------------------------------
function THNFileAdapter.Get_OpenTime(HiValue: PUINT): UINT;
 begin
   Result := FAdpGetOpenTime(hFAdp,PDWORD(HiValue));
 end;

//---------------------------------------------------------------------------
// Method - IsOpened - Shows HNFileAdapter working status.
//---------------------------------------------------------------------------
function THNFileAdapter.IsOpened: BOOL;
 begin
   Result := FAdpIsOpened(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - MaxPacketSize - Return maximal size of packet to be dumped to a CAP file (needed for some formats).
//---------------------------------------------------------------------------
function THNFileAdapter.GetMaxPacketSize(): DWORD;
 begin
   Result := FAdpGetMaxPacketSize(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - MaxPacketSize - Set maximal size of packet to be dumped to a CAP file (needed for some formats).
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetMaxPacketSize(Value : DWORD);
 begin
   FAdpSetMaxPacketSize(hFAdp,Value);
 end;

 //---------------------------------------------------------------------------
// Property - AutoMode - Return HNFileAdapter object automatic mode flag status.
//---------------------------------------------------------------------------
function THNFileAdapter.GetAutoMode(): BOOL;
 begin
   Result := FAdpGetAutoMode(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - AutoMode - Set HNFileAdapter object automatic mode flag status.
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetAutoMode(Value : BOOL);
 begin
   FAdpSetAutoMode(hFAdp,Value);
 end;

 //---------------------------------------------------------------------------
// Property - SizeLimit - Return CAP size limit for data recording operations.
//---------------------------------------------------------------------------
function THNFileAdapter.GetSizeLimit(): DWORD;
 begin
   Result := FAdpGetSizeLimit(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - SizeLimit - Set CAP size limit for data recording operations.
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetSizeLimit(Value : DWORD);
 begin
   FAdpSetSizeLimit(hFAdp,Value);
 end;


//---------------------------------------------------------------------------
// Property - MediumType - Return network adapter type, in format of which the packets are dumped to a CAP file.
//---------------------------------------------------------------------------
function THNFileAdapter.GetMediumType(): DWORD;
 begin
   Result := FAdpGetMediumType(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - MediumType - Set network adapter type, in format of which the packets are dumped to a CAP file.
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetMediumType(Value : DWORD);
 begin
   FAdpSetMediumType(hFAdp,Value);
 end;


//---------------------------------------------------------------------------
// Property - CapFormat - Returns the CAP file type.
//---------------------------------------------------------------------------
function THNFileAdapter.GetCapFormat(): DWORD;
 begin
   Result := FAdpGetCapFormat(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - CapFormat - Sets the CAP file type.
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetCapFormat(Value : DWORD);
 begin
   FAdpSetCapFormat(hFAdp,Value);
 end;

//---------------------------------------------------------------------------
// Property - Queue - Sets the handle of HNQueue object.
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetQueue(Value: Pointer);
 begin
   FAdpSetQueue(hFAdp,Value);
 end;

//---------------------------------------------------------------------------
// Property - Queue - Returns the handle of HNQueue object.
//---------------------------------------------------------------------------
function THNFileAdapter.GetQueue: Pointer;
 begin
   Result := FAdpGetQueue(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - UserFilter - Returns the handle of HNUserFilter object.
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetUserFilter(Value: Pointer);
 begin
   FAdpSetUserFilter(hFAdp,Value);
 end;

//---------------------------------------------------------------------------
// Property - UserFilter - Sets the handle of HNUserFilter object.
//---------------------------------------------------------------------------
function THNFileAdapter.GetUserFilter: Pointer;
 begin
   Result := FAdpGetUserFilter(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - UserFilterActive - Sets the status flag of the user-settable packet filter using.
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetUserFilterActive(Value: BOOL);
 begin
   FAdpSetUserFilterActive(hFAdp,Value);
 end;

//---------------------------------------------------------------------------
// Property - UserFilterActive - Return the status flag of the user-settable packet filter using.
//---------------------------------------------------------------------------
function THNFileAdapter.GetUserFilterActive: BOOL;
 begin
   Result := FAdpGetUserFilterActive(hFAdp);
 end;

//---------------------------------------------------------------------------
// Property - UseFastUserFilter - Sets the status flag of the FastBPF using.
//---------------------------------------------------------------------------
procedure THNFileAdapter.SetUseFastUserFilter(Value: BOOL);
 begin
   FAdpSetUseFastUserFilter(hFAdp,Value);
 end;

//---------------------------------------------------------------------------
// Property - UseFastUserFilter - Returns the status flag of the FastBPF using.
//---------------------------------------------------------------------------
function THNFileAdapter.GetUseFastUserFilter: BOOL;
 begin
   Result := FAdpGetUseFastUserFilter(hFAdp);
 end;

//---------------------------------------------------------------------------
// Method - Get_RecvCount - Return the number of packets read from the CAP file and received by BPF filter.
//---------------------------------------------------------------------------
function THNFileAdapter.Get_RecvCount(HiValue: PUINT): UINT;
 begin
   Result := FAdpGetRecvCount(hFAdp,PDWORD(HiValue));
 end;

//---------------------------------------------------------------------------
// Method - Get_AcceptCount - Returns the number of the packets passed by the user-settable packet filter.
//---------------------------------------------------------------------------
function THNFileAdapter.Get_AcceptCount(HiValue: PUINT): UINT;
 begin
   Result := FAdpGetAcceptCount(hFAdp,PDWORD(HiValue));
 end;

//---------------------------------------------------------------------------
// Method - Get_RejectCount - Return the number of packets rejected by the user-settable packet filter.
//---------------------------------------------------------------------------
function THNFileAdapter.Get_RejectCount(HiValue: PUINT): UINT;
 begin
   Result := FAdpGetRejectCount(hFAdp,PDWORD(HiValue));
 end;

//---------------------------------------------------------------------------
// Method - Get_ProcessCount - Return the number of the packets transferred to the application.
//---------------------------------------------------------------------------
function THNFileAdapter.Get_ProcessCount(HiValue: PUINT): UINT;
 begin
   Result := FAdpGetProcessCount(hFAdp,PDWORD(HiValue));
 end;

//---------------------------------------------------------------------------
// Method - Get_FileSize - Return current size of CAP file.
//---------------------------------------------------------------------------
function THNFileAdapter.Get_FileSize(HiValue: PUINT): UINT;
 begin
   Result := FAdpGetFileSize(hFAdp,PDWORD(HiValue));
 end;

//---------------------------------------------------------------------------
// Method - Get_GetNextPacket - Retrieve next packet from CAP file opened for reading.
//---------------------------------------------------------------------------
function THNFileAdapter.Get_GetNextPacket(hPacket: Pointer): DWORD;
 begin
   Result := FAdpGetNextPacket(hFAdp,hPacket);
 end;

//---------------------------------------------------------------------------
// Method - RewindFile - Repositions the packet pointer to the beginning of a file.
//---------------------------------------------------------------------------
function THNFileAdapter.RewindFile(): DWORD;
 begin
   Result := FAdpRewindFile(hFAdp);
 end;

//---------------------------------------------------------------------------
// Method - SyncSend - Write packet to CAP file asynchronously.
//---------------------------------------------------------------------------
function THNFileAdapter.SyncSend(pPacket: Pointer; PacketSize: DWORD): DWORD;
 begin
   Result := FAdpSyncSend(hFAdp, pPacket,PacketSize);
 end;

//---------------------------------------------------------------------------
// Method - SyncSendEx - Write packet to CAP file synchronously.
//---------------------------------------------------------------------------
function THNFileAdapter.SyncSendEx(hPacket: Pointer): DWORD;
 begin
   Result := FAdpSyncSendEx(hFAdp, hPacket);
 end;

//---------------------------------------------------------------------------
// DoOnPacketReceive - Fire event handler OnPacketReceive
//---------------------------------------------------------------------------
procedure THNFileAdapter.DoOnPacketReceive(ThParam: Pointer; hPacket: Pointer; pPacketData: Pointer; IncPacketSize: DWORD);
 begin
   if Assigned(FOnPacketReceive) then FOnPacketReceive(Self,ThParam,hPacket,pPacketData,IncPacketSize);
 end;

//---------------------------------------------------------------------------
// DoOnFileClose - Fire event handler OnFileClose
//---------------------------------------------------------------------------
procedure THNFileAdapter.DoOnFileClose(ThParam: Pointer; Status: DWORD);
 begin
   if Assigned(FOnFileClose) then FOnFileClose(Self,ThParam,Status);
 end;

//---------------------------------------------------------------------------
// DoOnThreadBegin - Fire event handler OnThreadBegin
//---------------------------------------------------------------------------
procedure THNFileAdapter.DoOnThreadBegin(Var ThParam: Pointer);
 begin
   if Assigned(FOnThreadBegin) then FOnThreadBegin(Self,ThParam);
 end;

//---------------------------------------------------------------------------
// DoOnThreadEnd - Fire event handler OnThreadEnd
//---------------------------------------------------------------------------
procedure THNFileAdapter.DoOnThreadEnd(ThParam: Pointer);
 begin
   if Assigned(FOnThreadEnd) then FOnThreadEnd(Self,ThParam);
 end;
 
end.
See also:HNFileAdapter, All wrappers in one ZIP archive