IdDICTServer.pas 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. {
  2. $Project$
  3. $Workfile$
  4. $Revision$
  5. $DateUTC$
  6. $Id$
  7. This file is part of the Indy (Internet Direct) project, and is offered
  8. under the dual-licensing agreement described on the Indy website.
  9. (http://www.indyproject.org/)
  10. Copyright:
  11. (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
  12. }
  13. {
  14. $Log$
  15. }
  16. {
  17. Rev 1.10 6/11/2004 6:16:50 AM DSiders
  18. Corrected spelling in class names, properties, and methods.
  19. Rev 1.9 2004.02.03 5:45:06 PM czhower
  20. Name changes
  21. Rev 1.8 1/21/2004 2:12:44 PM JPMugaas
  22. InitComponent
  23. Rev 1.7 10/19/2003 11:51:16 AM DSiders
  24. Added localization comments.
  25. Rev 1.6 2003.10.18 9:42:08 PM czhower
  26. Boatload of bug fixes to command handlers.
  27. Rev 1.5 7/18/2003 4:24:48 PM SPerry
  28. New DICT server using command handlers
  29. Rev 1.4 2/24/2003 08:22:52 PM JPMugaas
  30. SHould compile with new code.
  31. Rev 1.3 1/17/2003 05:35:14 PM JPMugaas
  32. Now compiles with new design.
  33. Rev 1.2 1-1-2003 20:12:52 BGooijen
  34. Changed to support the new TIdContext class
  35. Rev 1.1 12/6/2002 02:17:42 PM JPMugaas
  36. Now compiles with Indy 10.
  37. Rev 1.0 11/14/2002 02:17:24 PM JPMugaas
  38. 2000-15-May: J. Peter Mugaas - renamed events to have Id prefix
  39. 2000-22-Apr: J. Peter Mugaas
  40. Ported to Indy
  41. 2000-23-JanL MTL Moved to new Palette Scheme
  42. 1999-23-Apr: Final Version
  43. }
  44. unit IdDICTServer;
  45. {
  46. RFC 2229 - Dictionary Protocol (Structure).
  47. Original Author: Ozz Nixon
  48. }
  49. interface
  50. {$i IdCompilerDefines.inc}
  51. uses
  52. IdGlobal, IdGlobalProtocols, IdResourceStringsProtocols,
  53. IdAssignedNumbers, IdCommandHandlers, IdCmdTCPServer;
  54. type
  55. TIdDICTGetEvent = procedure (AContext:TIdCommand) of object;
  56. TIdDICTOtherEvent = procedure (AContext:TIdCommand; Command, Parm:String) of object;
  57. TIdDICTDefineEvent = procedure (AContext:TIdCommand; Database, WordToFind : String) of object;
  58. TIdDICTMatchEvent = procedure (AContext:TIdCommand; Database, Strategy,WordToFind : String) of object;
  59. TIdDICTShowEvent = procedure (AContext:TIdCommand; Command : String) of object;
  60. TIdDICTAuthEvent = procedure (AContext:TIdCommand; Username, authstring : String) of object;
  61. TIdDICTServer = class(TIdCmdTCPServer)
  62. protected
  63. fOnCommandHELP:TIdDICTGetEvent;
  64. fOnCommandDEFINE:TIdDICTDefineEvent;
  65. fOnCommandMATCH:TIdDICTMatchEvent;
  66. fOnCommandQUIT:TIdDICTGetEvent;
  67. fOnCommandSHOW:TIdDICTShowEvent;
  68. fOnCommandAUTH, fOnCommandSASLAuth:TIdDICTAuthEvent;
  69. fOnCommandOption:TIdDICTOtherEvent;
  70. fOnCommandSTAT:TIdDICTGetEvent;
  71. fOnCommandCLIENT:TIdDICTShowEvent;
  72. fOnCommandOther:TIdDICTOtherEvent;
  73. //
  74. procedure DoOnCommandHELP(ASender: TIdCommand);
  75. procedure DoOnCommandDEFINE(ASender: TIdCommand);
  76. procedure DoOnCommandMATCH(ASender: TIdCommand);
  77. procedure DoOnCommandQUIT(ASender: TIdCommand);
  78. procedure DoOnCommandSHOW(ASender: TIdCommand);
  79. procedure DoOnCommandAUTH(ASender: TIdCommand);
  80. procedure DoOnCommandSASLAuth(ASender: TIdCommand);
  81. procedure DoOnCommandOption(ASender: TIdCommand);
  82. procedure DoOnCommandSTAT(ASender: TIdCommand);
  83. procedure DoOnCommandCLIENT(ASender: TIdCommand);
  84. procedure DoOnCommandOther(ASender: TIdCommand);
  85. procedure DoOnCommandNotHandled(ASender: TIdCommandHandler; ACommand: TIdCommand;
  86. const AData, AMessage: String);
  87. //
  88. procedure InitializeCommandHandlers; override;
  89. procedure InitComponent; override;
  90. published
  91. property DefaultPort default IdPORT_DICT;
  92. //
  93. property OnCommandHelp: TIdDICTGetEvent read fOnCommandHelp write fOnCommandHelp;
  94. property OnCommandDefine: TIdDICTDefineEvent read fOnCommandDefine write fOnCommandDefine;
  95. property OnCommandMatch: TIdDICTMatchEvent read fOnCommandMatch write fOnCommandMatch;
  96. property OnCommandQuit: TIdDICTGetEvent read fOnCommandQuit write fOnCommandQuit;
  97. property OnCommandShow: TIdDICTShowEvent read fOnCommandShow write fOnCommandShow;
  98. property OnCommandAuth: TIdDICTAuthEvent read fOnCommandAuth write fOnCommandAuth;
  99. property OnCommandSASLAuth: TIdDICTAuthEvent read fOnCommandSASLAuth write fOnCommandSASLAuth;
  100. property OnCommandOption: TIdDICTOtherEvent read fOnCommandOption write fOnCommandOption;
  101. property OnCommandStatus: TIdDICTGetEvent read fOnCommandStat write fOnCommandStat;
  102. property OnCommandClient: TIdDICTShowEvent read fOnCommandClient write fOnCommandClient;
  103. property OnCommandOther: TIdDICTOtherEvent read fOnCommandOther write fOnCommandOther;
  104. end;
  105. implementation
  106. procedure TIdDICTServer.InitComponent;
  107. begin
  108. inherited InitComponent;
  109. DefaultPort := IdPORT_DICT;
  110. end;
  111. { Command handlers }
  112. procedure TIdDICTServer.DoOnCommandHELP(ASender: TIdCommand);
  113. begin
  114. if assigned (OnCommandHelp) then
  115. OnCommandHelp(ASender);
  116. end;
  117. procedure TIdDICTServer.DoOnCommandDEFINE(ASender: TIdCommand);
  118. begin
  119. if assigned (OnCommandDefine) then
  120. begin
  121. OnCommandDefine (ASender, ASender.Params[0], ASender.Params[1]);
  122. end;
  123. end;
  124. procedure TIdDICTServer.DoOnCommandMATCH(ASender: TIdCommand);
  125. begin
  126. if assigned (OnCommandMatch) then
  127. begin
  128. OnCommandMatch(ASender, ASender.Params[0], ASender.Params[1], ASender.Params[2]);
  129. end;
  130. end;
  131. procedure TIdDICTServer.DoOnCommandQUIT(ASender: TIdCommand);
  132. begin
  133. if assigned (OnCommandQuit) then
  134. OnCommandQuit (ASender);
  135. end;
  136. procedure TIdDICTServer.DoOnCommandSHOW(ASender: TIdCommand);
  137. begin
  138. if assigned ( OnCommandShow ) then
  139. OnCommandShow (ASender, ASender.Params[0]);
  140. end;
  141. procedure TIdDICTServer.DoOnCommandAUTH(ASender: TIdCommand);
  142. begin
  143. if assigned (OnCommandAuth) then
  144. begin
  145. OnCommandAuth (ASender, ASender.Params[0], ASender.Params[1]);
  146. end;
  147. end;
  148. procedure TIdDICTServer.DoOnCommandSASLAuth(ASender: TIdCommand);
  149. begin
  150. if assigned ( OnCommandSASLAuth ) then
  151. begin
  152. OnCommandSASLAuth(ASender, ASender.Params[0], ASender.Params[1]);
  153. end;
  154. end;
  155. procedure TIdDICTServer.DoOnCommandOption(ASender: TIdCommand);
  156. begin
  157. if assigned(OnCommandOption) then
  158. OnCommandOption(ASender, ASender.Params[0], '');
  159. end;
  160. procedure TIdDICTServer.DoOnCommandSTAT(ASender: TIdCommand);
  161. begin
  162. if assigned ( OnCommandStatus ) then
  163. OnCommandStatus (ASender);
  164. end;
  165. procedure TIdDICTServer.DoOnCommandCLIENT(ASender: TIdCommand);
  166. begin
  167. if assigned (OnCommandClient) then
  168. OnCommandClient (ASender, ASender.Params[0]);
  169. end;
  170. procedure TIdDICTServer.DoOnCommandOther(ASender: TIdCommand);
  171. begin
  172. end;
  173. procedure TIdDICTServer.DoOnCommandNotHandled(ASender: TIdCommandHandler;
  174. ACommand: TIdCommand; const AData, AMessage: String);
  175. begin
  176. ACommand.Context.Connection.IOHandler.WriteLn('500 ' + RSCMDNotRecognized); {do not localize}
  177. end;
  178. procedure TIdDICTServer.InitializeCommandHandlers;
  179. var
  180. LCommandHandler: TIdCommandHandler;
  181. begin
  182. LCommandHandler := CommandHandlers.Add;
  183. LCommandHandler.Command := 'AUTH'; {do not localize}
  184. LCommandHandler.OnCommand := DoOnCommandAUTH;
  185. LCommandHandler := CommandHandlers.Add;
  186. LCommandHandler.Command := 'CLIENT'; {do not localize}
  187. LCommandHandler.OnCommand := DoOnCommandCLIENT;
  188. LCommandHandler := CommandHandlers.Add;
  189. LCommandHandler.Command := 'DEFINE'; {do not localize}
  190. LCommandHandler.OnCommand := DoOnCommandDEFINE;
  191. LCommandHandler := CommandHandlers.Add;
  192. LCommandHandler.Command := 'HELP'; {do not localize}
  193. LCommandHandler.OnCommand := DoOnCommandHELP;
  194. LCommandHandler := CommandHandlers.Add;
  195. LCommandHandler.Command := 'MATCH'; {do not localize}
  196. LCommandHandler.OnCommand := DoOnCommandMATCH;
  197. LCommandHandler := CommandHandlers.Add;
  198. LCommandHandler.Command := 'OPTION'; {do not localize}
  199. LCommandHandler.OnCommand := DoOnCommandOPTION;
  200. LCommandHandler := CommandHandlers.Add;
  201. LCommandHandler.Command := 'QUIT'; {do not localize}
  202. LCommandHandler.OnCommand := DoOnCommandQUIT;
  203. LCommandHandler := CommandHandlers.Add;
  204. LCommandHandler.Command := 'SASLAUTH'; {do not localize}
  205. LCommandHandler.OnCommand := DoOnCommandSASLAUTH;
  206. LCommandHandler := CommandHandlers.Add;
  207. LCommandHandler.Command := 'SHOW'; {do not localize}
  208. LCommandHandler.OnCommand := DoOnCommandSHOW;
  209. LCommandHandler := CommandHandlers.Add;
  210. LCommandHandler.Command := 'STATUS'; {do not localize}
  211. LCommandHandler.OnCommand := DoOnCommandSTAT;
  212. { Other }
  213. LCommandHandler := CommandHandlers.Add;
  214. LCommandHandler.Command := '';
  215. //LCommandHandler.OnCommand :=;
  216. //LCommandHandler.OnException :=;
  217. end;
  218. end.