restemplate/indy/Protocols/IdDICTServer.pas

270 lines
8.5 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.10 6/11/2004 6:16:50 AM DSiders
Corrected spelling in class names, properties, and methods.
Rev 1.9 2004.02.03 5:45:06 PM czhower
Name changes
Rev 1.8 1/21/2004 2:12:44 PM JPMugaas
InitComponent
Rev 1.7 10/19/2003 11:51:16 AM DSiders
Added localization comments.
Rev 1.6 2003.10.18 9:42:08 PM czhower
Boatload of bug fixes to command handlers.
Rev 1.5 7/18/2003 4:24:48 PM SPerry
New DICT server using command handlers
Rev 1.4 2/24/2003 08:22:52 PM JPMugaas
SHould compile with new code.
Rev 1.3 1/17/2003 05:35:14 PM JPMugaas
Now compiles with new design.
Rev 1.2 1-1-2003 20:12:52 BGooijen
Changed to support the new TIdContext class
Rev 1.1 12/6/2002 02:17:42 PM JPMugaas
Now compiles with Indy 10.
Rev 1.0 11/14/2002 02:17:24 PM JPMugaas
2000-15-May: J. Peter Mugaas - renamed events to have Id prefix
2000-22-Apr: J. Peter Mugaas
Ported to Indy
2000-23-JanL MTL Moved to new Palette Scheme
1999-23-Apr: Final Version
}
unit IdDICTServer;
{
RFC 2229 - Dictionary Protocol (Structure).
Original Author: Ozz Nixon
}
interface
{$i IdCompilerDefines.inc}
uses
IdGlobal, IdGlobalProtocols, IdResourceStringsProtocols,
IdAssignedNumbers, IdCommandHandlers, IdCmdTCPServer;
type
TIdDICTGetEvent = procedure (AContext:TIdCommand) of object;
TIdDICTOtherEvent = procedure (AContext:TIdCommand; Command, Parm:String) of object;
TIdDICTDefineEvent = procedure (AContext:TIdCommand; Database, WordToFind : String) of object;
TIdDICTMatchEvent = procedure (AContext:TIdCommand; Database, Strategy,WordToFind : String) of object;
TIdDICTShowEvent = procedure (AContext:TIdCommand; Command : String) of object;
TIdDICTAuthEvent = procedure (AContext:TIdCommand; Username, authstring : String) of object;
TIdDICTServer = class(TIdCmdTCPServer)
protected
fOnCommandHELP:TIdDICTGetEvent;
fOnCommandDEFINE:TIdDICTDefineEvent;
fOnCommandMATCH:TIdDICTMatchEvent;
fOnCommandQUIT:TIdDICTGetEvent;
fOnCommandSHOW:TIdDICTShowEvent;
fOnCommandAUTH, fOnCommandSASLAuth:TIdDICTAuthEvent;
fOnCommandOption:TIdDICTOtherEvent;
fOnCommandSTAT:TIdDICTGetEvent;
fOnCommandCLIENT:TIdDICTShowEvent;
fOnCommandOther:TIdDICTOtherEvent;
//
procedure DoOnCommandHELP(ASender: TIdCommand);
procedure DoOnCommandDEFINE(ASender: TIdCommand);
procedure DoOnCommandMATCH(ASender: TIdCommand);
procedure DoOnCommandQUIT(ASender: TIdCommand);
procedure DoOnCommandSHOW(ASender: TIdCommand);
procedure DoOnCommandAUTH(ASender: TIdCommand);
procedure DoOnCommandSASLAuth(ASender: TIdCommand);
procedure DoOnCommandOption(ASender: TIdCommand);
procedure DoOnCommandSTAT(ASender: TIdCommand);
procedure DoOnCommandCLIENT(ASender: TIdCommand);
procedure DoOnCommandOther(ASender: TIdCommand);
procedure DoOnCommandNotHandled(ASender: TIdCommandHandler; ACommand: TIdCommand;
const AData, AMessage: String);
//
procedure InitializeCommandHandlers; override;
procedure InitComponent; override;
published
property DefaultPort default IdPORT_DICT;
//
property OnCommandHelp: TIdDICTGetEvent read fOnCommandHelp write fOnCommandHelp;
property OnCommandDefine: TIdDICTDefineEvent read fOnCommandDefine write fOnCommandDefine;
property OnCommandMatch: TIdDICTMatchEvent read fOnCommandMatch write fOnCommandMatch;
property OnCommandQuit: TIdDICTGetEvent read fOnCommandQuit write fOnCommandQuit;
property OnCommandShow: TIdDICTShowEvent read fOnCommandShow write fOnCommandShow;
property OnCommandAuth: TIdDICTAuthEvent read fOnCommandAuth write fOnCommandAuth;
property OnCommandSASLAuth: TIdDICTAuthEvent read fOnCommandSASLAuth write fOnCommandSASLAuth;
property OnCommandOption: TIdDICTOtherEvent read fOnCommandOption write fOnCommandOption;
property OnCommandStatus: TIdDICTGetEvent read fOnCommandStat write fOnCommandStat;
property OnCommandClient: TIdDICTShowEvent read fOnCommandClient write fOnCommandClient;
property OnCommandOther: TIdDICTOtherEvent read fOnCommandOther write fOnCommandOther;
end;
implementation
procedure TIdDICTServer.InitComponent;
begin
inherited InitComponent;
DefaultPort := IdPORT_DICT;
end;
{ Command handlers }
procedure TIdDICTServer.DoOnCommandHELP(ASender: TIdCommand);
begin
if assigned (OnCommandHelp) then
OnCommandHelp(ASender);
end;
procedure TIdDICTServer.DoOnCommandDEFINE(ASender: TIdCommand);
begin
if assigned (OnCommandDefine) then
begin
OnCommandDefine (ASender, ASender.Params[0], ASender.Params[1]);
end;
end;
procedure TIdDICTServer.DoOnCommandMATCH(ASender: TIdCommand);
begin
if assigned (OnCommandMatch) then
begin
OnCommandMatch(ASender, ASender.Params[0], ASender.Params[1], ASender.Params[2]);
end;
end;
procedure TIdDICTServer.DoOnCommandQUIT(ASender: TIdCommand);
begin
if assigned (OnCommandQuit) then
OnCommandQuit (ASender);
end;
procedure TIdDICTServer.DoOnCommandSHOW(ASender: TIdCommand);
begin
if assigned ( OnCommandShow ) then
OnCommandShow (ASender, ASender.Params[0]);
end;
procedure TIdDICTServer.DoOnCommandAUTH(ASender: TIdCommand);
begin
if assigned (OnCommandAuth) then
begin
OnCommandAuth (ASender, ASender.Params[0], ASender.Params[1]);
end;
end;
procedure TIdDICTServer.DoOnCommandSASLAuth(ASender: TIdCommand);
begin
if assigned ( OnCommandSASLAuth ) then
begin
OnCommandSASLAuth(ASender, ASender.Params[0], ASender.Params[1]);
end;
end;
procedure TIdDICTServer.DoOnCommandOption(ASender: TIdCommand);
begin
if assigned(OnCommandOption) then
OnCommandOption(ASender, ASender.Params[0], '');
end;
procedure TIdDICTServer.DoOnCommandSTAT(ASender: TIdCommand);
begin
if assigned ( OnCommandStatus ) then
OnCommandStatus (ASender);
end;
procedure TIdDICTServer.DoOnCommandCLIENT(ASender: TIdCommand);
begin
if assigned (OnCommandClient) then
OnCommandClient (ASender, ASender.Params[0]);
end;
procedure TIdDICTServer.DoOnCommandOther(ASender: TIdCommand);
begin
end;
procedure TIdDICTServer.DoOnCommandNotHandled(ASender: TIdCommandHandler;
ACommand: TIdCommand; const AData, AMessage: String);
begin
ACommand.Context.Connection.IOHandler.WriteLn('500 ' + RSCMDNotRecognized); {do not localize}
end;
procedure TIdDICTServer.InitializeCommandHandlers;
var
LCommandHandler: TIdCommandHandler;
begin
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'AUTH'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandAUTH;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'CLIENT'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandCLIENT;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'DEFINE'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandDEFINE;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'HELP'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandHELP;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'MATCH'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandMATCH;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'OPTION'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandOPTION;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'QUIT'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandQUIT;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'SASLAUTH'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandSASLAUTH;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'SHOW'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandSHOW;
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := 'STATUS'; {do not localize}
LCommandHandler.OnCommand := DoOnCommandSTAT;
{ Other }
LCommandHandler := CommandHandlers.Add;
LCommandHandler.Command := '';
//LCommandHandler.OnCommand :=;
//LCommandHandler.OnException :=;
end;
end.