IdSysLogServer.pas 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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.4 2004.02.03 5:44:28 PM czhower
  18. Name changes
  19. Rev 1.3 1/21/2004 4:04:02 PM JPMugaas
  20. InitComponent
  21. Rev 1.2 10/24/2003 01:58:34 PM JPMugaas
  22. Attempt to port Syslog over to new code.
  23. Rev 1.1 2003.10.24 10:38:30 AM czhower
  24. UDP Server todos
  25. Rev 1.0 11/13/2002 08:02:20 AM JPMugaas
  26. }
  27. {
  28. IdSyslogServer component
  29. Server-side implementation of the RFC 3164 "The BSD syslog Protocol"
  30. Original Author: Stephane Grobety ([email protected])
  31. Copyright the Indy pit crew
  32. Release history:
  33. 08/09/01: Dev started
  34. }
  35. unit IdSysLogServer;
  36. interface
  37. {$i IdCompilerDefines.inc}
  38. uses
  39. IdAssignedNumbers,
  40. IdBaseComponent,
  41. IdComponent,
  42. IdGlobal,
  43. IdSocketHandle,
  44. IdThread,
  45. IdUDPServer,
  46. IdSysLogMessage;
  47. type
  48. TOnSyslogEvent = procedure(Sender: TObject; ASysLogMessage: TIdSysLogMessage;
  49. ABinding: TIdSocketHandle) of object;
  50. TIdSyslogServer = class(TIdUDPServer)
  51. protected
  52. FOnSyslog: TOnSyslogEvent;
  53. //
  54. procedure DoSyslogEvent(AMsg: TIdSysLogMessage; ABinding: TIdSocketHandle); virtual;
  55. procedure DoUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); override;
  56. procedure InitComponent; override;
  57. published
  58. property DefaultPort default IdPORT_syslog;
  59. property OnSyslog: TOnSyslogEvent read FOnSyslog write FOnSysLog;
  60. end;
  61. implementation
  62. uses
  63. SysUtils;
  64. { TIdSyslogServer }
  65. procedure TIdSyslogServer.DoUDPRead(AThread: TIdUDPListenerThread;
  66. const AData: TIdBytes; ABinding: TIdSocketHandle);
  67. var
  68. LMsg: TIdSysLogMessage;
  69. begin
  70. inherited DoUDPRead(AThread, AData, ABinding);
  71. LMsg := TIdSysLogMessage.Create(Self);
  72. try
  73. LMsg.ReadFromBytes(AData, ABinding.PeerIP);
  74. // ReadFromStream(AData, (AData as TMemoryStream).Size, ABinding.PeerIP);
  75. DoSyslogEvent(LMsg, ABinding);
  76. finally
  77. FreeAndNil(LMsg)
  78. end;
  79. end;
  80. procedure TIdSyslogServer.InitComponent;
  81. begin
  82. inherited;
  83. DefaultPort := IdPORT_syslog;
  84. end;
  85. procedure TIdSyslogServer.DoSyslogEvent(AMsg: TIdSysLogMessage; ABinding: TIdSocketHandle);
  86. begin
  87. if Assigned(FOnSyslog) and assigned(AMsg)then begin
  88. FOnSyslog(Self, AMsg, ABinding);
  89. end;
  90. end;
  91. end.