restemplate/indy/Protocols/IdFingerServer.pas

122 lines
3.1 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.6 12/2/2004 4:23:54 PM JPMugaas
Adjusted for changes in Core.
Rev 1.5 1/21/2004 2:29:40 PM JPMugaas
InitComponent
Rev 1.4 2/24/2003 08:41:24 PM JPMugaas
Should compile with new code.
Rev 1.3 1/17/2003 05:35:02 PM JPMugaas
Now compiles with new design.
Rev 1.2 1/9/2003 07:10:56 AM JPMugaas
Changed Finger server API so developers do not have to mess with the Context
and Connnection objects.
Rev 1.1 1-1-2003 20:13:02 BGooijen
Changed to support the new TIdContext class
Rev 1.0 11/14/2002 02:19:56 PM JPMugaas
2000-May-15 J. Peter Mugaas
-Added verbose querry event to complement TIdFinger
2000-Apr-22 J Peter Mugass
-Ported to Indy
2000-Jan-13 MTL
-Moved to new Palette Scheme (Winshoes Servers)
1999-Apr-13
-Final Version
}
unit IdFingerServer;
{
Original Author: Ozz Nixon
}
interface
{$i IdCompilerDefines.inc}
uses
IdAssignedNumbers,
IdContext,
IdCustomTCPServer;
Type
TIdFingerGetEvent = procedure (AContext:TIdContext; const AUserName: String; var VResponse : String) of object;
TIdFingerServer = class ( TIdCustomTCPServer )
protected
FOnCommandFinger : TIdFingerGetEvent;
FOnCommandVerboseFinger : TIdFingerGetEvent;
//
function DoExecute(AContext:TIdContext): boolean; override;
procedure InitComponent; override;
published
{This event fires when you make a regular querry}
property OnCommandFinger: TIdFingerGetEvent read FOnCommandFinger
write FOnCommandFinger;
{ This event fires when you receive a VERBOSE finger request}
property OnCommandVerboseFinger : TIdFingerGetEvent
read FOnCommandVerboseFinger write FOnCommandVerboseFinger;
property DefaultPort default IDPORT_Finger;
end;
implementation
uses
IdGlobal, SysUtils;
procedure TIdFingerServer.InitComponent;
begin
inherited InitComponent;
DefaultPort := IdPORT_FINGER;
end;
function TIdFingerServer.DoExecute(AContext:TIdContext): boolean;
Var
s, LResponse: String;
begin
Result := True;
{We use TrimRight in case there are spaces ending the query which are problematic
for verbose queries. CyberKit puts a space after the /W parameter}
s := TrimRight(AContext.Connection.IOHandler.ReadLn);
if Assigned(FOnCommandVerboseFinger) and TextEndsWith(s, '/W') then {Do not Localize}
begin
{we remove the /W switch before calling the event}
s := Copy(s, 1, Length(s)-2);
OnCommandVerboseFinger(AContext, s, LResponse);
AContext.Connection.IOHandler.Write(LResponse);
end
else if Assigned(OnCommandFinger) then begin
OnCommandFinger(AContext, s, LResponse);
AContext.Connection.IOHandler.Write(LResponse);
end;
AContext.Connection.Disconnect;
end;
end.