FileSYstemTestMain.pas 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. { $HDR$}
  2. {**********************************************************************}
  3. { Unit archived using Team Coherence }
  4. { Team Coherence is Copyright 2002 by Quality Software Components }
  5. { }
  6. { For further information / comments, visit our WEB site at }
  7. { http://www.TeamCoherence.com }
  8. {**********************************************************************}
  9. {}
  10. { $Log: 17161: FileSYstemTestMain.pas
  11. {
  12. { Rev 1.0 3/14/2003 06:59:18 PM JPMugaas
  13. { FTPFileSystem Test program.
  14. }
  15. unit FileSYstemTestMain;
  16. interface
  17. uses
  18. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  19. Dialogs, IdFTPBaseFileSystem, IdFTPFileSystem, IdBaseComponent,
  20. IdComponent, IdTCPServer, IdCmdTCPServer, IdFTPServer, IdUserAccounts,
  21. StdCtrls, ComCtrls, IdSync, IdContext, IdTCPConnection,
  22. IdServerIOHandler, IdSSL, IdSSLOpenSSL;
  23. type
  24. TfrmServer = class(TForm)
  25. IdFTPServer1: TIdFTPServer;
  26. IdUserManager1: TIdUserManager;
  27. IdFTPFileSystem1: TIdFTPFileSystem;
  28. redtLog: TRichEdit;
  29. IdSSLServer: TIdServerIOHandlerSSLOpenSSL;
  30. procedure FormDestroy(Sender: TObject);
  31. procedure FormCreate(Sender: TObject);
  32. procedure IdFTPServer1Connect(AContext: TIdContext);
  33. procedure IdFTPServer1BeforeCommandHandler(ASender: TIdTCPServer;
  34. const AData: String; AContext: TIdContext);
  35. procedure IdFTPServer1Exception(AContext: TIdContext;
  36. AException: Exception);
  37. procedure IdFTPServer1Disconnect(AContext: TIdContext);
  38. procedure IdSSLServerGetPassword(var Password: String);
  39. private
  40. { Private declarations }
  41. public
  42. { Public declarations }
  43. end;
  44. var
  45. frmServer: TfrmServer;
  46. implementation
  47. uses IdIOHandlerStack;
  48. {$R *.dfm}
  49. type
  50. TConnectSync = class(TIdSync)
  51. protected
  52. FIPConnect : String;
  53. FPortConnect : Cardinal;
  54. procedure DoSynchronize; override;
  55. public
  56. class procedure CreateSync(const AIP : String; const APort : Cardinal);
  57. end;
  58. TDisconnectSync = class(TConnectSync)
  59. protected
  60. procedure DoSynchronize; override;
  61. end;
  62. TCmdLoggerSync = class(TIdSync)
  63. protected
  64. FIPConnect : String;
  65. FPortConnect : Cardinal;
  66. FMsg : String;
  67. procedure DoSynchronize; override;
  68. public
  69. class procedure CreateSync(const AIP : String; const APort : Cardinal; const AMsg : String);
  70. end;
  71. TExceptionLoggerSync = class(TIdSync)
  72. FIPConnect : String;
  73. FPortConnect : Cardinal;
  74. FMsg : String;
  75. FExceptionName : String;
  76. procedure DoSynchronize; override;
  77. public
  78. class procedure CreateSync(const AIP : String; const APort : Cardinal; const AExceptionName, AMsg : String);
  79. end;
  80. function MakePathStr(const APath : String): String;
  81. begin
  82. {$IFDEF VCL6ORABOVE}
  83. Result := SysUtils.IncludeTrailingPathDelimiter(APath);
  84. {$ELSE}
  85. Result := IncludeTrailingBackSlash(APath);
  86. {$ENDIF}
  87. end;
  88. function GetSSLCertPath : String;
  89. begin
  90. Result := MakePathStr(ExtractFilePath(ParamStr(0))+'cert');
  91. end;
  92. procedure TfrmServer.FormDestroy(Sender: TObject);
  93. begin
  94. IdFTPFileSystem1.SaveFileSystem(ChangeFileExt( ParamStr(0),'.ini'));
  95. end;
  96. procedure TfrmServer.FormCreate(Sender: TObject);
  97. begin
  98. IdFTPFileSystem1.LoadFileSystem(ChangeFileExt( ParamStr(0),'.ini'));
  99. IdSSLServer.SSLOptions.RootCertFile := GetSSLCertPath + 'CAcert.crt';
  100. IdSSLServer.SSLOptions.CertFile := GetSSLCertPath + 'WSScert.pem';
  101. IdSSLServer.SSLOptions.KeyFile := GetSSLCertPath + 'WSSkey.pem';
  102. IdSSLServer.SSLOptions.Method :=sslvSSLv23 ;
  103. IdSSLServer.SSLOptions.Mode:= sslmUnassigned;
  104. IdFTPServer1.Active := True;
  105. end;
  106. { TConnectSync }
  107. class procedure TConnectSync.CreateSync(const AIP: String;
  108. const APort: Cardinal);
  109. var LCon : TConnectSync;
  110. begin
  111. LCon := Create;
  112. LCon.FIPConnect := AIP;
  113. LCon.FPortConnect := APort;
  114. LCon.Synchronize;
  115. end;
  116. procedure TConnectSync.DoSynchronize;
  117. begin
  118. frmServer.redtLog.Lines.Add( Format('Connect: IP - %s Port - %d',[FIPConnect,FPortConnect]));
  119. end;
  120. procedure TfrmServer.IdFTPServer1Connect(AContext: TIdContext);
  121. var LStck : TIdIOHandlerStack;
  122. begin
  123. LStck := AContext.Connection.IOHandler as TIdIOHandlerStack;
  124. TConnectSync.CreateSync(LStck.Binding.PeerIP,LStck.Binding.PeerPort);
  125. end;
  126. { TCmdLoggerSync }
  127. class procedure TCmdLoggerSync.CreateSync(const AIP: String;
  128. const APort: Cardinal; const AMsg: String);
  129. var LCon : TCmdLoggerSync;
  130. begin
  131. LCon := TCmdLoggerSync.Create;
  132. LCon.FIPConnect := AIP;
  133. LCon.FPortConnect := APort;
  134. LCon.FMsg := AMsg;
  135. LCon.Synchronize;
  136. end;
  137. procedure TCmdLoggerSync.DoSynchronize;
  138. begin
  139. frmServer.redtLog.Lines.Add( Format('Command: IP - %s Port - %d : [%s]',[FIPConnect,FPortConnect,FMsg]));
  140. end;
  141. procedure TfrmServer.IdFTPServer1BeforeCommandHandler(
  142. ASender: TIdTCPServer; const AData: String; AContext: TIdContext);
  143. var LStck : TIdIOHandlerStack;
  144. begin
  145. LStck := AContext.Connection.IOHandler as TIdIOHandlerStack;
  146. TCmdLoggerSync.CreateSync(LStck.Binding.PeerIP,LStck.Binding.PeerPort,AData);
  147. end;
  148. { TExceptionLoggerSync }
  149. class procedure TExceptionLoggerSync.CreateSync(const AIP: String;
  150. const APort: Cardinal; const AExceptionName, AMsg: String);
  151. var LCon : TExceptionLoggerSync;
  152. begin
  153. LCon := TExceptionLoggerSync.Create;
  154. LCon.FIPConnect := AIP;
  155. LCon.FPortConnect := APort;
  156. LCon.FExceptionName := AExceptionName;
  157. LCon.FMsg := AMsg;
  158. LCon.Synchronize;
  159. end;
  160. procedure TExceptionLoggerSync.DoSynchronize;
  161. begin
  162. frmServer.redtLog.Lines.Add( Format('Exception: IP - %s Port - %d Type [%s]',[FIPConnect,FPortConnect,FExceptionName ]));
  163. frmServer.redtLog.Lines.Add( Format('Command: IP - %s Port - %d Message [%s]',[FIPConnect,FPortConnect,FMsg]));
  164. end;
  165. procedure TfrmServer.IdFTPServer1Exception(AContext: TIdContext;
  166. AException: Exception);
  167. var LStck : TIdIOHandlerStack;
  168. begin
  169. LStck := AContext.Connection.IOHandler as TIdIOHandlerStack;
  170. TExceptionLoggerSync.CreateSync(LStck.Binding.PeerIP,LStck.Binding.PeerPort,AException.ClassName,AException.Message );
  171. end;
  172. { TDisconnectSync }
  173. procedure TDisconnectSync.DoSynchronize;
  174. begin
  175. frmServer.redtLog.Lines.Add( Format('Disconnect: IP - %s Port - %d',[FIPConnect,FPortConnect]));
  176. end;
  177. procedure TfrmServer.IdFTPServer1Disconnect(AContext: TIdContext);
  178. var LStck : TIdIOHandlerStack;
  179. begin
  180. LStck := AContext.Connection.IOHandler as TIdIOHandlerStack;
  181. if Assigned(LStck) then
  182. begin
  183. TDisconnectSync.CreateSync(LStck.Binding.PeerIP,LStck.Binding.PeerPort);
  184. end;
  185. end;
  186. procedure TfrmServer.IdSSLServerGetPassword(var Password: String);
  187. begin
  188. Password := 'aaaa';
  189. end;
  190. end.