IdSysLogServer.pas 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. Classes,
  40. IdAssignedNumbers,
  41. IdBaseComponent,
  42. IdComponent,
  43. IdGlobal,
  44. IdSocketHandle,
  45. IdThread,
  46. IdUDPServer,
  47. IdSysLogMessage;
  48. type
  49. TOnSyslogEvent = procedure(Sender: TObject; ASysLogMessage: TIdSysLogMessage;
  50. ABinding: TIdSocketHandle) of object;
  51. TIdSyslogServer = class(TIdUDPServer)
  52. protected
  53. FOnSyslog: TOnSyslogEvent;
  54. //
  55. procedure DoSyslogEvent(AMsg: TIdSysLogMessage; ABinding: TIdSocketHandle); virtual;
  56. procedure DoUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); override;
  57. public
  58. constructor Create(AOwner: TComponent); override;
  59. published
  60. property DefaultPort default IdPORT_syslog;
  61. property OnSyslog: TOnSyslogEvent read FOnSyslog write FOnSysLog;
  62. end;
  63. implementation
  64. uses
  65. SysUtils;
  66. { TIdSyslogServer }
  67. constructor TIdSyslogServer.Create(AOwner: TComponent);
  68. begin
  69. inherited Create(AOwner);
  70. DefaultPort := IdPORT_syslog;
  71. end;
  72. procedure TIdSyslogServer.DoUDPRead(AThread: TIdUDPListenerThread;
  73. const AData: TIdBytes; ABinding: TIdSocketHandle);
  74. var
  75. LMsg: TIdSysLogMessage;
  76. begin
  77. inherited DoUDPRead(AThread, AData, ABinding);
  78. LMsg := TIdSysLogMessage.Create;
  79. try
  80. LMsg.ReadFromBytes(AData, ABinding.PeerIP);
  81. // ReadFromStream(AData, (AData as TMemoryStream).Size, ABinding.PeerIP);
  82. DoSyslogEvent(LMsg, ABinding);
  83. finally
  84. LMsg.Free;
  85. end;
  86. end;
  87. procedure TIdSyslogServer.DoSyslogEvent(AMsg: TIdSysLogMessage; ABinding: TIdSocketHandle);
  88. begin
  89. if Assigned(FOnSyslog) and assigned(AMsg)then begin
  90. FOnSyslog(Self, AMsg, ABinding);
  91. end;
  92. end;
  93. end.