199 lines
4.3 KiB
Plaintext
199 lines
4.3 KiB
Plaintext
{
|
|
$Project$
|
|
$Workfile$
|
|
$Revision$
|
|
$DateUTC$
|
|
$Id$
|
|
|
|
This file is part of the Indy (Internet Direct) project, and is offered
|
|
under the dual-licensing agreement described on the Indy website.
|
|
(http://www.indyproject.org/)
|
|
|
|
Copyright:
|
|
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
|
|
}
|
|
{
|
|
$Log$
|
|
}
|
|
{
|
|
Rev 1.5 2004.02.03 4:17:14 PM czhower
|
|
For unit name changes.
|
|
|
|
Rev 1.4 2004.01.20 10:03:28 PM czhower
|
|
InitComponent
|
|
|
|
Rev 1.3 2003.10.17 6:15:54 PM czhower
|
|
Upgrades
|
|
|
|
Rev 1.2 2003.10.14 1:27:08 PM czhower
|
|
Uupdates + Intercept support
|
|
|
|
Rev 1.1 6/16/2003 10:39:02 AM EHill
|
|
Done: Expose Open/Close as public in TIdLogBase
|
|
|
|
Rev 1.0 11/13/2002 07:55:58 AM JPMugaas
|
|
}
|
|
|
|
unit IdLogBase;
|
|
|
|
interface
|
|
|
|
{$I IdCompilerDefines.inc}
|
|
//Put FPC into Delphi mode
|
|
|
|
uses
|
|
Classes,
|
|
IdIntercept, IdGlobal, IdSocketHandle, IdBaseComponent;
|
|
|
|
type
|
|
TIdLogBase = class(TIdConnectionIntercept)
|
|
protected
|
|
FActive: Boolean;
|
|
FLogTime: Boolean;
|
|
FReplaceCRLF: Boolean;
|
|
FStreamedActive: Boolean;
|
|
//
|
|
procedure InitComponent; override;
|
|
procedure LogStatus(const AText: string); virtual; abstract;
|
|
procedure LogReceivedData(const AText, AData: string); virtual; abstract;
|
|
procedure LogSentData(const AText, AData: string); virtual; abstract;
|
|
procedure SetActive(AValue: Boolean); virtual;
|
|
procedure Loaded; override;
|
|
function ReplaceCR(const AString : String) : String;
|
|
public
|
|
procedure Open; virtual;
|
|
procedure Close; virtual;
|
|
procedure Connect(AConnection: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure Disconnect; override;
|
|
procedure Receive(var ABuffer: TIdBytes); override;
|
|
procedure Send(var ABuffer: TIdBytes); override;
|
|
published
|
|
property Active: Boolean read FActive write SetActive default False;
|
|
property LogTime: Boolean read FLogTime write FLogTime default True;
|
|
property ReplaceCRLF: Boolean read FReplaceCRLF write FReplaceCRLF default true;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
IdResourceStringsCore, SysUtils;
|
|
|
|
const
|
|
LOldStr : array [0..2] of string =
|
|
( EOL, CR, LF );
|
|
LNewStr : array [0..2] of string =
|
|
( RSLogEOL, RSLogCR, RSLogLF );
|
|
|
|
{ TIdLogBase }
|
|
|
|
procedure TIdLogBase.Close;
|
|
begin
|
|
end;
|
|
|
|
procedure TIdLogBase.Connect(AConnection: TComponent);
|
|
begin
|
|
inherited Connect(AConnection);
|
|
if FActive then begin
|
|
LogStatus(RSLogConnected);
|
|
end;
|
|
end;
|
|
|
|
destructor TIdLogBase.Destroy;
|
|
begin
|
|
Active := False;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TIdLogBase.Disconnect;
|
|
begin
|
|
if FActive then begin
|
|
LogStatus(RSLogDisconnected);
|
|
end;
|
|
inherited Disconnect;
|
|
end;
|
|
|
|
procedure TIdLogBase.InitComponent;
|
|
begin
|
|
inherited InitComponent;
|
|
FLogTime := True;
|
|
ReplaceCRLF := True;
|
|
end;
|
|
|
|
procedure TIdLogBase.Loaded;
|
|
begin
|
|
inherited Loaded;
|
|
Active := FStreamedActive;
|
|
end;
|
|
|
|
procedure TIdLogBase.Open;
|
|
begin
|
|
end;
|
|
|
|
procedure TIdLogBase.Receive(var ABuffer: TIdBytes);
|
|
var
|
|
s: string;
|
|
LMsg: string;
|
|
begin
|
|
// let the next Intercept in the chain decode its data first
|
|
inherited Receive(ABuffer);
|
|
|
|
if FActive then begin
|
|
LMsg := '';
|
|
if LogTime then begin
|
|
LMsg := DateTimeToStr(Now);
|
|
end;
|
|
s := BytesToStringRaw(ABuffer);
|
|
if FReplaceCRLF then begin
|
|
s := ReplaceCR(S);
|
|
end;
|
|
LogReceivedData(LMsg, s);
|
|
end;
|
|
end;
|
|
|
|
function TIdLogBase.ReplaceCR(const AString: String): String;
|
|
begin
|
|
Result := StringsReplace(AString, LOldStr, LNewStr);
|
|
end;
|
|
|
|
procedure TIdLogBase.Send(var ABuffer: TIdBytes);
|
|
var
|
|
s: string;
|
|
LMsg: string;
|
|
begin
|
|
if FActive then begin
|
|
LMsg := '';
|
|
if LogTime then begin
|
|
LMsg := DateTimeToStr(Now);
|
|
end;
|
|
s := BytesToStringRaw(ABuffer);
|
|
if FReplaceCRLF then begin
|
|
s := ReplaceCR(S);
|
|
end;
|
|
LogSentData(LMsg, s);
|
|
end;
|
|
|
|
// let the next Intercept in the chain encode its data next
|
|
inherited Send(ABuffer);
|
|
end;
|
|
|
|
procedure TIdLogBase.SetActive(AValue: Boolean);
|
|
begin
|
|
if IsDesignTime or IsLoading then begin
|
|
FStreamedActive := AValue;
|
|
end
|
|
else if FActive <> AValue then
|
|
begin
|
|
FActive := AValue;
|
|
if FActive then begin
|
|
Open;
|
|
end else begin
|
|
Close;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|
|
|