IdIrcServer.pas 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743
  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 2004.02.03 5:43:56 PM czhower
  18. Name changes
  19. Rev 1.9 1/21/2004 3:11:20 PM JPMugaas
  20. InitComponent
  21. Rev 1.8 10/19/2003 5:23:20 PM DSiders
  22. Added localization comments.
  23. Rev 1.7 2003.10.18 9:42:08 PM czhower
  24. Boatload of bug fixes to command handlers.
  25. Rev 1.6 8/2/2003 05:03:46 AM JPMugaas
  26. Hopefully should now support IRCS (IRC over TLS/SSL)
  27. Rev 1.5 7/18/2003 4:26:30 PM SPerry
  28. New IRC server using command handlers
  29. Rev 1.4 2/24/2003 09:07:18 PM JPMugaas
  30. Rev 1.3 1/17/2003 07:10:36 PM JPMugaas
  31. Now compiles under new framework.
  32. Rev 1.2 1-1-2003 20:13:22 BGooijen
  33. Changed to support the new TIdContext class
  34. Rev 1.1 12/7/2002 06:43:02 PM JPMugaas
  35. These should now compile except for Socks server. IPVersion has to be a
  36. property someplace for that.
  37. Rev 1.0 11/13/2002 07:55:52 AM JPMugaas
  38. 2002-10-July: Sergio Perry
  39. -Switched to using TIdCmdServer
  40. 2002-17-Aug: Bas Gooijen
  41. -Changed to DoXXXXX
  42. 2000-15-May: Renamed events to Id Prefix
  43. 2000-22-Apr: J Peter Mugass
  44. -Ported to Indy
  45. 2000-13-Jan MTL
  46. -Moved to new Palette Scheme (Winshoes Servers)
  47. 1999-13-Apr
  48. -Final Version
  49. }
  50. unit IdIrcServer;
  51. interface
  52. {$i IdCompilerDefines.inc}
  53. {
  54. Original Author: Ozz Nixon
  55. -RFC 1459 - Internet Relay Chat
  56. }
  57. uses
  58. IdAssignedNumbers, IdCommandHandlers, IdCmdTCPServer, IdContext, IdServerIOHandler;
  59. type
  60. { Events }
  61. TIdIRCGetEvent = procedure(AContext: TIdCommand) of object;
  62. TIdIRCOtherEvent = procedure(AContext: TIdCommand; Command, AParm: string) of object;
  63. TIdIRCOneParmEvent = procedure(AContext: TIdCommand; AParm: string) of object;
  64. TIdIRCTwoParmEvent = procedure(AContext: TIdCommand; AParm1, AParm2: string) of object;
  65. TIdIRCThreeParmEvent = procedure(AContext: TIdCommand; AParm1, AParm2, AParm3: string) of object;
  66. TIdIRCFiveParmEvent = procedure(AContext: TIdCommand; AParm1, AParm2, AParm3, AParm4, AParm5: string) of object;
  67. TIdIRCUserEvent = procedure(AContext: TIdCommand; UserName, HostName, ServerName, RealName: string) of object;
  68. TIdIRCServerEvent = procedure(AContext: TIdCommand; ServerName, Hopcount, Info: string) of object;
  69. { TIdIRCServer }
  70. TIdIRCServer = class(TIdCmdTCPServer)
  71. protected
  72. fOnCommandOther: TIdIRCOtherEvent;
  73. fOnCommandPass: TIdIRCOneParmEvent;
  74. fOnCommandNick: TIdIRCTwoParmEvent;
  75. fOnCommandUser: TIdIRCUserEvent;
  76. fOnCommandServer: TIdIRCServerEvent;
  77. fOnCommandOper: TIdIRCTwoParmEvent;
  78. fOnCommandQuit: TIdIRCOneParmEvent;
  79. fOnCommandSQuit: TIdIRCTwoParmEvent;
  80. fOnCommandJoin: TIdIRCTwoParmEvent;
  81. fOnCommandPart: TIdIRCOneParmEvent;
  82. fOnCommandMode: TIdIRCFiveParmEvent;
  83. fOnCommandTopic: TIdIRCTwoParmEvent;
  84. fOnCommandNames: TIdIRCOneParmEvent;
  85. fOnCommandList: TIdIRCTwoParmEvent;
  86. fOnCommandInvite: TIdIRCTwoParmEvent;
  87. fOnCommandKick: TIdIRCThreeParmEvent;
  88. fOnCommandVersion: TIdIRCOneParmEvent;
  89. fOnCommandStats: TIdIRCTwoParmEvent;
  90. fOnCommandLinks: TIdIRCTwoParmEvent;
  91. fOnCommandTime: TIdIRCOneParmEvent;
  92. fOnCommandConnect: TIdIRCThreeParmEvent;
  93. fOnCommandTrace: TIdIRCOneParmEvent;
  94. fOnCommandAdmin: TIdIRCOneParmEvent;
  95. fOnCommandInfo: TIdIRCOneParmEvent;
  96. fOnCommandPrivMsg: TIdIRCTwoParmEvent;
  97. fOnCommandNotice: TIdIRCTwoParmEvent;
  98. fOnCommandWho: TIdIRCTwoParmEvent;
  99. fOnCommandWhoIs: TIdIRCTwoParmEvent;
  100. fOnCommandWhoWas: TIdIRCThreeParmEvent;
  101. fOnCommandKill: TIdIRCTwoParmEvent;
  102. fOnCommandPing: TIdIRCTwoParmEvent;
  103. fOnCommandPong: TIdIRCTwoParmEvent;
  104. fOnCommandError: TIdIRCOneParmEvent;
  105. fOnCommandAway: TIdIRCOneParmEvent;
  106. fOnCommandRehash: TIdIRCGetEvent;
  107. fOnCommandRestart: TIdIRCGetEvent;
  108. fOnCommandSummon: TIdIRCTwoParmEvent;
  109. fOnCommandUsers: TIdIRCOneParmEvent;
  110. fOnCommandWallops: TIdIRCOneParmEvent;
  111. fOnCommandUserHost: TIdIRCOneParmEvent;
  112. fOnCommandIsOn: TIdIRCOneParmEvent;
  113. //
  114. procedure InitializeCommandHandlers; override;
  115. //
  116. procedure DoCommandOther(ASender: TIdCommandHandler; ACommand: TIdCommand;
  117. const AData, AMessage: String);
  118. procedure DoCommandPass(ASender: TIdCommand);
  119. procedure DoCommandNick(ASender: TIdCommand);
  120. procedure DoCommandUser(ASender: TIdCommand);
  121. procedure DoCommandServer(ASender: TIdCommand);
  122. procedure DoCommandOper(ASender: TIdCommand);
  123. procedure DoCommandQuit(ASender: TIdCommand);
  124. procedure DoCommandSQuit(ASender: TIdCommand);
  125. procedure DoCommandJoin(ASender: TIdCommand);
  126. procedure DoCommandPart(ASender: TIdCommand);
  127. procedure DoCommandMode(ASender: TIdCommand);
  128. procedure DoCommandTopic(ASender: TIdCommand);
  129. procedure DoCommandNames(ASender: TIdCommand);
  130. procedure DoCommandList(ASender: TIdCommand);
  131. procedure DoCommandInvite(ASender: TIdCommand);
  132. procedure DoCommandKick(ASender: TIdCommand);
  133. procedure DoCommandVersion(ASender: TIdCommand);
  134. procedure DoCommandStats(ASender: TIdCommand);
  135. procedure DoCommandLinks(ASender: TIdCommand);
  136. procedure DoCommandTime(ASender: TIdCommand);
  137. procedure DoCommandConnect(ASender: TIdCommand);
  138. procedure DoCommandTrace(ASender: TIdCommand);
  139. procedure DoCommandAdmin(ASender: TIdCommand);
  140. procedure DoCommandInfo(ASender: TIdCommand);
  141. procedure DoCommandPrivMsg(ASender: TIdCommand);
  142. procedure DoCommandNotice(ASender: TIdCommand);
  143. procedure DoCommandWho(ASender: TIdCommand);
  144. procedure DoCommandWhoIs(ASender: TIdCommand);
  145. procedure DoCommandWhoWas(ASender: TIdCommand);
  146. procedure DoCommandKill(ASender: TIdCommand);
  147. procedure DoCommandPing(ASender: TIdCommand);
  148. procedure DoCommandPong(ASender: TIdCommand);
  149. procedure DoCommandError(ASender: TIdCommand);
  150. procedure DoCommandAway(ASender: TIdCommand);
  151. procedure DoCommandRehash(ASender: TIdCommand);
  152. procedure DoCommandRestart(ASender: TIdCommand);
  153. procedure DoCommandSummon(ASender: TIdCommand);
  154. procedure DoCommandUsers(ASender: TIdCommand);
  155. procedure DoCommandWallops(ASender: TIdCommand);
  156. procedure DoCommandUserHost(ASender: TIdCommand);
  157. procedure DoCommandIsOn(ASender: TIdCommand);
  158. procedure DoCommandNotHandled(ASender: TIdCommandHandler; ACommand: TIdCommand;
  159. const AData, AMessage: String);
  160. //overrides for TLS support
  161. procedure DoConnect(AContext: TIdContext); override;
  162. procedure SetIOHandler(const AValue: TIdServerIOHandler); override;
  163. procedure InitComponent; override;
  164. published
  165. property DefaultPort default IdPORT_IRC;
  166. property OnCommandPass: TIdIRCOneParmEvent read fOnCommandPass write fOnCommandPass;
  167. property OnCommandNick: TIdIRCTwoParmEvent read fOnCommandNick write fOnCommandNick;
  168. property OnCommandUser: TIdIRCUserEvent read fOnCommandUser write fOnCommandUser;
  169. property OnCommandServer: TIdIRCServerEvent read fOnCommandServer write fOnCommandServer;
  170. property OnCommandOper: TIdIRCTwoParmEvent read fOnCommandOper write fOnCommandOper;
  171. property OnCommandQuit: TIdIRCOneParmEvent read fOnCommandQuit write fOnCommandQuit;
  172. property OnCommandSQuit: TIdIRCTwoParmEvent read fOnCommandSQuit write fOnCommandSQuit;
  173. property OnCommandJoin: TIdIRCTwoParmEvent read fOnCommandJoin write fOnCommandJoin;
  174. property OnCommandPart: TIdIRCOneParmEvent read fOnCommandPart write fOnCommandPart;
  175. property OnCommandMode: TIdIRCFiveParmEvent read fOnCommandMode write fOnCommandMode;
  176. property OnCommandTopic: TIdIRCTwoParmEvent read fOnCommandTopic write fOnCommandTopic;
  177. property OnCommandNames: TIdIRCOneParmEvent read fOnCommandNames write fOnCommandNames;
  178. property OnCommandList: TIdIRCTwoParmEvent read fOnCommandList write fOnCommandList;
  179. property OnCommandInvite: TIdIRCTwoParmEvent read fOnCommandInvite write fOnCommandInvite;
  180. property OnCommandKick: TIdIRCThreeParmEvent read fOnCommandKick write fOnCommandKick;
  181. property OnCommandVersion: TIdIRCOneParmEvent read fOnCommandVersion write fOnCommandVersion;
  182. property OnCommandStats: TIdIRCTwoParmEvent read fOnCommandStats write fOnCommandStats;
  183. property OnCommandLinks: TIdIRCTwoParmEvent read fOnCommandLinks write fOnCommandLinks;
  184. property OnCommandTime: TIdIRCOneParmEvent read fOnCommandTime write fOnCommandTime;
  185. property OnCommandConnect: TIdIRCThreeParmEvent read fOnCommandConnect write fOnCommandConnect;
  186. property OnCommandTrace: TIdIRCOneParmEvent read fOnCommandTrace write fOnCommandTrace;
  187. property OnCommandAdmin: TIdIRCOneParmEvent read fOnCommandAdmin write fOnCommandAdmin;
  188. property OnCommandInfo: TIdIRCOneParmEvent read fOnCommandInfo write fOnCommandInfo;
  189. property OnCommandPrivMsg: TIdIRCTwoParmEvent read fOnCommandPrivMsg write fOnCommandPrivMsg;
  190. property OnCommandNotice: TIdIRCTwoParmEvent read fOnCommandNotice write fOnCommandNotice;
  191. property OnCommandWho: TIdIRCTwoParmEvent read fOnCommandWho write fOnCommandWho;
  192. property OnCommandWhoIs: TIdIRCTwoParmEvent read fOnCommandWhoIs write fOnCommandWhoIs;
  193. property OnCommandWhoWas: TIdIRCThreeParmEvent read fOnCommandWhoWas write fOnCommandWhoWas;
  194. property OnCommandKill: TIdIRCTwoParmEvent read fOnCommandKill write fOnCommandKill;
  195. property OnCommandPing: TIdIRCTwoParmEvent read fOnCommandPing write fOnCommandPing;
  196. property OnCommandPong: TIdIRCTwoParmEvent read fOnCommandPong write fOnCommandPong;
  197. property OnCommandError: TIdIRCOneParmEvent read fOnCommandError write fOnCommandError;
  198. property OnCommandAway: TIdIRCOneParmEvent read fOnCommandAway write fOnCommandAway;
  199. property OnCommandRehash: TIdIRCGetEvent read fOnCommandRehash write fOnCommandRehash;
  200. property OnCommandRestart: TIdIRCGetEvent read fOnCommandRestart write fOnCommandRestart;
  201. property OnCommandSummon: TIdIRCTwoParmEvent read fOnCommandSummon write fOnCommandSummon;
  202. property OnCommandUsers: TIdIRCOneParmEvent read fOnCommandUsers write fOnCommandUsers;
  203. property OnCommandWallops: TIdIRCOneParmEvent read fOnCommandWallops write fOnCommandWallops;
  204. property OnCommandUserHost: TIdIRCOneParmEvent read fOnCommandUserHost write fOnCommandUserHost;
  205. property OnCommandIsOn: TIdIRCOneParmEvent read fOnCommandIsOn write fOnCommandIsOn;
  206. property OnCommandOther: TIdIRCOtherEvent read fOnCommandOther write fOnCommandOther;
  207. end;
  208. implementation
  209. uses
  210. IdGlobal, IdGlobalProtocols, IdResourceStringsProtocols, IdSSL, SysUtils;
  211. procedure TIdIRCServer.InitComponent;
  212. begin
  213. inherited;
  214. DefaultPort := IdPORT_IRC;
  215. end;
  216. procedure TIdIRCServer.InitializeCommandHandlers;
  217. var
  218. LCommandHandler: TIdCommandHandler;
  219. begin
  220. LCommandHandler := CommandHandlers.Add;
  221. LCommandHandler.Command := 'ADMIN'; {do not localize}
  222. LCommandHandler.OnCommand := DoCommandADMIN;
  223. LCommandHandler := CommandHandlers.Add;
  224. LCommandHandler.Command := 'AWAY'; {do not localize}
  225. LCommandHandler.OnCommand := DoCommandAWAY;
  226. LCommandHandler := CommandHandlers.Add;
  227. LCommandHandler.Command := 'CONNECT'; {do not localize}
  228. LCommandHandler.OnCommand := DoCommandCONNECT;
  229. LCommandHandler := CommandHandlers.Add;
  230. LCommandHandler.Command := 'ERROR'; {do not localize}
  231. LCommandHandler.OnCommand := DoCommandERROR;
  232. LCommandHandler := CommandHandlers.Add;
  233. LCommandHandler.Command := 'INFO'; {do not localize}
  234. LCommandHandler.OnCommand := DoCommandINFO;
  235. LCommandHandler := CommandHandlers.Add;
  236. LCommandHandler.Command := 'INVITE'; {do not localize}
  237. LCommandHandler.OnCommand := DoCommandINVITE;
  238. LCommandHandler := CommandHandlers.Add;
  239. LCommandHandler.Command := 'ISON'; {do not localize}
  240. LCommandHandler.OnCommand := DoCommandISON;
  241. LCommandHandler := CommandHandlers.Add;
  242. LCommandHandler.Command := 'JOIN'; {do not localize}
  243. LCommandHandler.OnCommand := DoCommandJOIN;
  244. LCommandHandler := CommandHandlers.Add;
  245. LCommandHandler.Command := 'KICK'; {do not localize}
  246. LCommandHandler.OnCommand := DoCommandKICK;
  247. LCommandHandler := CommandHandlers.Add;
  248. LCommandHandler.Command := 'KILL'; {do not localize}
  249. LCommandHandler.OnCommand := DoCommandKILL;
  250. LCommandHandler := CommandHandlers.Add;
  251. LCommandHandler.Command := 'LINKS'; {do not localize}
  252. LCommandHandler.OnCommand := DoCommandLINKS;
  253. LCommandHandler := CommandHandlers.Add;
  254. LCommandHandler.Command := 'LIST'; {do not localize}
  255. LCommandHandler.OnCommand := DoCommandLIST;
  256. LCommandHandler := CommandHandlers.Add;
  257. LCommandHandler.Command := 'MODE'; {do not localize}
  258. LCommandHandler.OnCommand := DoCommandMODE;
  259. LCommandHandler := CommandHandlers.Add;
  260. LCommandHandler.Command := 'NAMES'; {do not localize}
  261. LCommandHandler.OnCommand := DoCommandNAMES;
  262. LCommandHandler := CommandHandlers.Add;
  263. LCommandHandler.Command := 'NICK'; {do not localize}
  264. LCommandHandler.OnCommand := DoCommandNICK;
  265. LCommandHandler := CommandHandlers.Add;
  266. LCommandHandler.Command := 'NOTICE'; {do not localize}
  267. LCommandHandler.OnCommand := DoCommandNOTICE;
  268. LCommandHandler := CommandHandlers.Add;
  269. LCommandHandler.Command := 'OPER'; {do not localize}
  270. LCommandHandler.OnCommand := DoCommandOPER;
  271. LCommandHandler := CommandHandlers.Add;
  272. LCommandHandler.Command := 'PART'; {do not localize}
  273. LCommandHandler.OnCommand := DoCommandPART;
  274. LCommandHandler := CommandHandlers.Add;
  275. LCommandHandler.Command := 'PASS'; {do not localize}
  276. LCommandHandler.OnCommand := DoCommandPASS;
  277. LCommandHandler := CommandHandlers.Add;
  278. LCommandHandler.Command := 'PING'; {do not localize}
  279. LCommandHandler.OnCommand := DoCommandPING;
  280. LCommandHandler := CommandHandlers.Add;
  281. LCommandHandler.Command := 'PONG'; {do not localize}
  282. LCommandHandler.OnCommand := DoCommandPONG;
  283. LCommandHandler := CommandHandlers.Add;
  284. LCommandHandler.Command := 'PRIVMSG'; {do not localize}
  285. LCommandHandler.OnCommand := DoCommandPRIVMSG;
  286. LCommandHandler := CommandHandlers.Add;
  287. LCommandHandler.Command := 'QUIT'; {do not localize}
  288. LCommandHandler.OnCommand := DoCommandQUIT;
  289. LCommandHandler := CommandHandlers.Add;
  290. LCommandHandler.Command := 'REHASH'; {do not localize}
  291. LCommandHandler.OnCommand := DoCommandREHASH;
  292. LCommandHandler := CommandHandlers.Add;
  293. LCommandHandler.Command := 'RESTART'; {do not localize}
  294. LCommandHandler.OnCommand := DoCommandRESTART;
  295. LCommandHandler := CommandHandlers.Add;
  296. LCommandHandler.Command := 'SERVER'; {do not localize}
  297. LCommandHandler.OnCommand := DoCommandSERVER;
  298. LCommandHandler := CommandHandlers.Add;
  299. LCommandHandler.Command := 'SQUIT'; {do not localize}
  300. LCommandHandler.OnCommand := DoCommandSQUIT;
  301. LCommandHandler := CommandHandlers.Add;
  302. LCommandHandler.Command := 'STATS'; {do not localize}
  303. LCommandHandler.OnCommand := DoCommandSTATS;
  304. LCommandHandler := CommandHandlers.Add;
  305. LCommandHandler.Command := 'SUMMON'; {do not localize}
  306. LCommandHandler.OnCommand := DoCommandSUMMON;
  307. LCommandHandler := CommandHandlers.Add;
  308. LCommandHandler.Command := 'TIME'; {do not localize}
  309. LCommandHandler.OnCommand := DoCommandTIME;
  310. LCommandHandler := CommandHandlers.Add;
  311. LCommandHandler.Command := 'TOPIC'; {do not localize}
  312. LCommandHandler.OnCommand := DoCommandTOPIC;
  313. LCommandHandler := CommandHandlers.Add;
  314. LCommandHandler.Command := 'TRACE'; {do not localize}
  315. LCommandHandler.OnCommand := DoCommandTRACE;
  316. LCommandHandler := CommandHandlers.Add;
  317. LCommandHandler.Command := 'USER'; {do not localize}
  318. LCommandHandler.OnCommand := DoCommandUSER;
  319. LCommandHandler := CommandHandlers.Add;
  320. LCommandHandler.Command := 'USERHOST'; {do not localize}
  321. LCommandHandler.OnCommand := DoCommandUSERHOST;
  322. LCommandHandler := CommandHandlers.Add;
  323. LCommandHandler.Command := 'USERS'; {do not localize}
  324. LCommandHandler.OnCommand := DoCommandUSERS;
  325. LCommandHandler := CommandHandlers.Add;
  326. LCommandHandler.Command := 'VERSION'; {do not localize}
  327. LCommandHandler.OnCommand := DoCommandVERSION;
  328. LCommandHandler := CommandHandlers.Add;
  329. LCommandHandler.Command := 'WALLOPS'; {do not localize}
  330. LCommandHandler.OnCommand := DoCommandWALLOPS;
  331. LCommandHandler := CommandHandlers.Add;
  332. LCommandHandler.Command := 'WHO'; {do not localize}
  333. LCommandHandler.OnCommand := DoCommandWHO;
  334. LCommandHandler := CommandHandlers.Add;
  335. LCommandHandler.Command := 'WHOIS'; {do not localize}
  336. LCommandHandler.OnCommand := DoCommandWHOIS;
  337. LCommandHandler := CommandHandlers.Add;
  338. LCommandHandler.Command := 'WHOWAS'; {do not localize}
  339. LCommandHandler.OnCommand := DoCommandWHOWAS;
  340. { OTHER }
  341. LCommandHandler := CommandHandlers.Add;
  342. LCommandHandler.Command := '*^*'; {do not localize} // does not exist - so use it to handle errors
  343. end;
  344. { Command handlers }
  345. procedure TIdIRCServer.DoCommandNotHandled(ASender: TIdCommandHandler;
  346. ACommand: TIdCommand; const AData, AMessage: String);
  347. begin
  348. ACommand.Context.Connection.IOHandler.WriteLn(IndyFormat('%s %s', ['421', RSCMDNotRecognized])); {do not localize}
  349. end;
  350. procedure TIdIRCServer.DoCommandOther(ASender: TIdCommandHandler;
  351. ACommand: TIdCommand; const AData, AMessage: String);
  352. begin
  353. if Assigned(OnCommandOther) then begin
  354. OnCommandOther(ACommand, ACommand.Params[0], ACommand.Params[1]);
  355. end;
  356. end;
  357. procedure TIdIRCServer.DoCommandPass(ASender: TIdCommand);
  358. begin
  359. if Assigned(OnCommandPass) then begin
  360. OnCommandPass(ASender, ASender.Params[0]);
  361. end;
  362. end;
  363. procedure TIdIRCServer.DoCommandNick(ASender: TIdCommand);
  364. begin
  365. if Assigned(OnCommandNick) then begin
  366. OnCommandNick(ASender, ASender.Params[0], ASender.Params[1]);
  367. end;
  368. end;
  369. procedure TIdIRCServer.DoCommandUser(ASender: TIdCommand);
  370. begin
  371. if Assigned(OnCommandUser) then begin
  372. OnCommandUser(ASender, ASender.Params[0], ASender.Params[1], ASender.Params[2], ASender.Params[3]);
  373. end;
  374. end;
  375. procedure TIdIRCServer.DoCommandServer(ASender: TIdCommand);
  376. begin
  377. if Assigned(OnCommandServer) then begin
  378. OnCommandServer(ASender, ASender.Params[0], ASender.Params[1], ASender.Params[2]);
  379. end;
  380. end;
  381. procedure TIdIRCServer.DoCommandOper(ASender: TIdCommand);
  382. begin
  383. if Assigned(OnCommandNick) then begin
  384. OnCommandNick(ASender, ASender.Params[0], ASender.Params[1]);
  385. end;
  386. end;
  387. procedure TIdIRCServer.DoCommandQuit(ASender: TIdCommand);
  388. begin
  389. if Assigned(OnCommandQuit) then begin
  390. OnCommandQuit(ASender, ASender.Params[0]);
  391. end;
  392. end;
  393. procedure TIdIRCServer.DoCommandSQuit(ASender: TIdCommand);
  394. begin
  395. if Assigned(OnCommandSQuit) then begin
  396. OnCommandSQuit(ASender, ASender.Params[0], ASender.Params[1]);
  397. end;
  398. end;
  399. procedure TIdIRCServer.DoCommandJoin(ASender: TIdCommand);
  400. begin
  401. if Assigned(OnCommandJoin) then begin
  402. OnCommandJoin(ASender, ASender.Params[0], ASender.Params[1]);
  403. end;
  404. end;
  405. procedure TIdIRCServer.DoCommandPart(ASender: TIdCommand);
  406. begin
  407. if Assigned(OnCommandPart) then begin
  408. OnCommandPart(ASender, ASender.Params[0]);
  409. end;
  410. end;
  411. procedure TIdIRCServer.DoCommandMode(ASender: TIdCommand);
  412. begin
  413. if Assigned(OnCommandMode) then begin
  414. OnCommandMode(ASender, ASender.Params[0], ASender.Params[1], ASender.Params[2], ASender.Params[3], ASender.Params[4]);
  415. end;
  416. end;
  417. procedure TIdIRCServer.DoCommandTopic(ASender: TIdCommand);
  418. begin
  419. if Assigned(OnCommandTopic) then begin
  420. OnCommandTopic(ASender, ASender.Params[0], ASender.Params[1]) ;
  421. end;
  422. end;
  423. procedure TIdIRCServer.DoCommandNames(ASender: TIdCommand);
  424. begin
  425. if Assigned(OnCommandNames) then begin
  426. OnCommandNames(ASender, ASender.Params[0]);
  427. end;
  428. end;
  429. procedure TIdIRCServer.DoCommandList(ASender: TIdCommand);
  430. begin
  431. if Assigned(OnCommandList) then begin
  432. OnCommandList(ASender, ASender.Params[0], ASender.Params[1]) ;
  433. end;
  434. end;
  435. procedure TIdIRCServer.DoCommandInvite(ASender: TIdCommand);
  436. begin
  437. if Assigned(OnCommandInvite) then begin
  438. OnCommandInvite(ASender, ASender.Params[0], ASender.Params[1]);
  439. end;
  440. end;
  441. procedure TIdIRCServer.DoCommandKick(ASender: TIdCommand);
  442. begin
  443. if Assigned(OnCommandKick) then begin
  444. OnCommandKick(ASender, ASender.Params[0], ASender.Params[1], ASender.Params[2]);
  445. end;
  446. end;
  447. procedure TIdIRCServer.DoCommandVersion(ASender: TIdCommand);
  448. begin
  449. if Assigned(OnCommandVersion) then begin
  450. OnCommandVersion(ASender, ASender.Params[0]);
  451. end;
  452. end;
  453. procedure TIdIRCServer.DoCommandStats(ASender: TIdCommand);
  454. begin
  455. if Assigned(OnCommandStats) then begin
  456. OnCommandStats(ASender, ASender.Params[0], ASender.Params[1]) ;
  457. end;
  458. end;
  459. procedure TIdIRCServer.DoCommandLinks(ASender: TIdCommand);
  460. begin
  461. if Assigned(OnCommandLinks) then begin
  462. OnCommandLinks(ASender, ASender.Params[0], ASender.Params[1]);
  463. end;
  464. end;
  465. procedure TIdIRCServer.DoCommandTime(ASender: TIdCommand);
  466. var
  467. LTarget: String;
  468. begin
  469. if Assigned(OnCommandTime) then begin
  470. if ASender.Params.Count > 0 then begin
  471. LTarget := ASender.Params[0];
  472. end;
  473. OnCommandTime(ASender, LTarget);
  474. end;
  475. end;
  476. procedure TIdIRCServer.DoCommandConnect(ASender: TIdCommand);
  477. begin
  478. if Assigned(OnCommandConnect) then begin
  479. OnCommandConnect(ASender, ASender.Params[0], ASender.Params[1], ASender.Params[2]);
  480. end;
  481. end;
  482. procedure TIdIRCServer.DoCommandTrace(ASender: TIdCommand);
  483. begin
  484. if Assigned(OnCommandTrace) then begin
  485. OnCommandTrace(ASender, ASender.Params[0]);
  486. end;
  487. end;
  488. procedure TIdIRCServer.DoCommandAdmin(ASender: TIdCommand);
  489. begin
  490. if Assigned(OnCommandAdmin) then begin
  491. OnCommandAdmin(ASender, ASender.Params[0]);
  492. end;
  493. end;
  494. procedure TIdIRCServer.DoCommandInfo(ASender: TIdCommand);
  495. begin
  496. if Assigned(OnCommandInfo) then begin
  497. OnCommandInfo(ASender, ASender.Params[0]);
  498. end;
  499. end;
  500. procedure TIdIRCServer.DoCommandPrivMsg(ASender: TIdCommand);
  501. begin
  502. if Assigned(OnCommandPrivMsg) then begin
  503. OnCommandPrivMsg(ASender, ASender.Params[0], ASender.Params[1]);
  504. end;
  505. end;
  506. procedure TIdIRCServer.DoCommandNotice(ASender: TIdCommand);
  507. begin
  508. if Assigned(OnCommandNotice) then begin
  509. OnCommandNotice(ASender, ASender.Params[0], ASender.Params[1]);
  510. end;
  511. end;
  512. procedure TIdIRCServer.DoCommandWho(ASender: TIdCommand);
  513. begin
  514. if Assigned(OnCommandWho) then begin
  515. OnCommandWho(ASender, ASender.Params[0], ASender.Params[1]);
  516. end;
  517. end;
  518. procedure TIdIRCServer.DoCommandWhoIs(ASender: TIdCommand);
  519. begin
  520. if Assigned(OnCommandWhoIs) then begin
  521. OnCommandWhoIs(ASender, ASender.Params[0], ASender.Params[1]);
  522. end;
  523. end;
  524. procedure TIdIRCServer.DoCommandWhoWas(ASender: TIdCommand);
  525. begin
  526. if Assigned(OnCommandWhoWas) then begin
  527. OnCommandWhoWas(ASender, ASender.Params[0], ASender.Params[1], ASender.Params[2]);
  528. end;
  529. end;
  530. procedure TIdIRCServer.DoCommandKill(ASender: TIdCommand);
  531. begin
  532. if Assigned(OnCommandKill) then begin
  533. OnCommandKill(ASender, ASender.Params[0], ASender.Params[1]);
  534. end;
  535. end;
  536. procedure TIdIRCServer.DoCommandPing(ASender: TIdCommand);
  537. begin
  538. if Assigned(OnCommandPing) then begin
  539. OnCommandPing(ASender, ASender.Params[0], ASender.Params[1]);
  540. end;
  541. end;
  542. procedure TIdIRCServer.DoCommandPong(ASender: TIdCommand);
  543. begin
  544. if Assigned(OnCommandPong) then begin
  545. OnCommandPong(ASender, ASender.Params[0], ASender.Params[1]);
  546. end;
  547. end;
  548. procedure TIdIRCServer.DoCommandError(ASender: TIdCommand);
  549. begin
  550. if Assigned(OnCommandError) then begin
  551. OnCommandError(ASender, ASender.Params[0]);
  552. end;
  553. end;
  554. procedure TIdIRCServer.DoCommandAway(ASender: TIdCommand);
  555. begin
  556. if Assigned(OnCommandAway) then begin
  557. OnCommandAway(ASender, ASender.Params[0]);
  558. end;
  559. end;
  560. procedure TIdIRCServer.DoCommandRehash(ASender: TIdCommand);
  561. begin
  562. if Assigned(OnCommandRehash) then begin
  563. OnCommandRehash(ASender);
  564. end;
  565. end;
  566. procedure TIdIRCServer.DoCommandRestart(ASender: TIdCommand);
  567. begin
  568. if Assigned(OnCommandRestart) then begin
  569. OnCommandRestart(ASender);
  570. end;
  571. end;
  572. procedure TIdIRCServer.DoCommandSummon(ASender: TIdCommand);
  573. begin
  574. if Assigned(OnCommandSummon) then begin
  575. OnCommandSummon(ASender, ASender.Params[0], ASender.Params[1]);
  576. end;
  577. end;
  578. procedure TIdIRCServer.DoCommandUsers(ASender: TIdCommand);
  579. begin
  580. if Assigned(OnCommandUsers) then begin
  581. OnCommandUsers(ASender, ASender.Params[0]);
  582. end;
  583. end;
  584. procedure TIdIRCServer.DoCommandWallops(ASender: TIdCommand);
  585. begin
  586. if Assigned(OnCommandWallops) then begin
  587. OnCommandWallops(ASender, ASender.Params[0]);
  588. end;
  589. end;
  590. procedure TIdIRCServer.DoCommandUserHost(ASender: TIdCommand);
  591. begin
  592. if Assigned(OnCommandUserHost) then begin
  593. OnCommandUserHost(ASender, ASender.Params[0]);
  594. end;
  595. end;
  596. procedure TIdIRCServer.DoCommandIsOn(ASender: TIdCommand);
  597. begin
  598. if Assigned(OnCommandIsOn) then begin
  599. OnCommandIsOn(ASender, ASender.Params[0]);
  600. end;
  601. end;
  602. procedure TIdIRCServer.DoConnect(AContext: TIdContext);
  603. begin
  604. if AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase then begin
  605. TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough := False;
  606. end;
  607. inherited DoConnect(AContext);
  608. end;
  609. procedure TIdIRCServer.SetIOHandler(const AValue: TIdServerIOHandler);
  610. begin
  611. inherited SetIOHandler(AValue);
  612. //we do it this way so that if a user is using a custom value <> default, the default port
  613. //is not set when the IOHandler is changed.
  614. if IOHandler is TIdServerIOHandlerSSLBase then
  615. begin
  616. if DefaultPort = IdPORT_IRC then begin
  617. DefaultPort := IdPORT_IRCS;
  618. end;
  619. end else
  620. begin
  621. if DefaultPort = IdPORT_IRCS then begin
  622. DefaultPort := IdPORT_IRC;
  623. end;
  624. end;
  625. end;
  626. end.