SftpFileSystem.h 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. //---------------------------------------------------------------------------
  2. #ifndef SftpFileSystemH
  3. #define SftpFileSystemH
  4. #include <FileSystems.h>
  5. //---------------------------------------------------------------------------
  6. class TSFTPPacket;
  7. class TOverwriteFileParams;
  8. struct TSFTPSupport;
  9. class TSecureShell;
  10. //---------------------------------------------------------------------------
  11. enum TSFTPOverwriteMode { omOverwrite, omAppend, omResume };
  12. //---------------------------------------------------------------------------
  13. class TSFTPFileSystem : public TCustomFileSystem
  14. {
  15. friend class TSFTPPacket;
  16. friend class TSFTPQueue;
  17. friend class TSFTPAsynchronousQueue;
  18. friend class TSFTPUploadQueue;
  19. friend class TSFTPDownloadQueue;
  20. friend class TSFTPLoadFilesPropertiesQueue;
  21. friend class TSFTPCalculateFilesChecksumQueue;
  22. friend class TSFTPBusy;
  23. public:
  24. __fastcall TSFTPFileSystem(TTerminal * ATerminal, TSecureShell * SecureShell);
  25. virtual __fastcall ~TSFTPFileSystem();
  26. virtual void __fastcall Open();
  27. virtual void __fastcall Close();
  28. virtual bool __fastcall GetActive();
  29. virtual void __fastcall Idle();
  30. virtual AnsiString __fastcall AbsolutePath(AnsiString Path, bool Local);
  31. virtual void __fastcall AnyCommand(const AnsiString Command,
  32. TCaptureOutputEvent OutputEvent);
  33. virtual void __fastcall ChangeDirectory(const AnsiString Directory);
  34. virtual void __fastcall CachedChangeDirectory(const AnsiString Directory);
  35. virtual void __fastcall AnnounceFileListOperation();
  36. virtual void __fastcall ChangeFileProperties(const AnsiString FileName,
  37. const TRemoteFile * File, const TRemoteProperties * Properties,
  38. TChmodSessionAction & Action);
  39. virtual bool __fastcall LoadFilesProperties(TStrings * FileList);
  40. virtual void __fastcall CalculateFilesChecksum(const AnsiString & Alg,
  41. TStrings * FileList, TStrings * Checksums,
  42. TCalculatedChecksumEvent OnCalculatedChecksum);
  43. virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
  44. const AnsiString TargetDir, const TCopyParamType * CopyParam,
  45. int Params, TFileOperationProgressType * OperationProgress,
  46. TOnceDoneOperation & OnceDoneOperation);
  47. virtual void __fastcall CopyToRemote(TStrings * FilesToCopy,
  48. const AnsiString TargetDir, const TCopyParamType * CopyParam,
  49. int Params, TFileOperationProgressType * OperationProgress,
  50. TOnceDoneOperation & OnceDoneOperation);
  51. virtual void __fastcall CreateDirectory(const AnsiString DirName);
  52. virtual void __fastcall CreateLink(const AnsiString FileName, const AnsiString PointTo, bool Symbolic);
  53. virtual void __fastcall DeleteFile(const AnsiString FileName,
  54. const TRemoteFile * File, int Params, TRmSessionAction & Action);
  55. virtual void __fastcall CustomCommandOnFile(const AnsiString FileName,
  56. const TRemoteFile * File, AnsiString Command, int Params, TCaptureOutputEvent OutputEvent);
  57. virtual void __fastcall DoStartup();
  58. virtual void __fastcall HomeDirectory();
  59. virtual bool __fastcall IsCapable(int Capability) const;
  60. virtual void __fastcall LookupUsersGroups();
  61. virtual void __fastcall ReadCurrentDirectory();
  62. virtual void __fastcall ReadDirectory(TRemoteFileList * FileList);
  63. virtual void __fastcall ReadFile(const AnsiString FileName,
  64. TRemoteFile *& File);
  65. virtual void __fastcall ReadSymlink(TRemoteFile * SymlinkFile,
  66. TRemoteFile *& File);
  67. virtual void __fastcall RenameFile(const AnsiString FileName,
  68. const AnsiString NewName);
  69. virtual void __fastcall CopyFile(const AnsiString FileName,
  70. const AnsiString NewName);
  71. virtual AnsiString __fastcall FileUrl(const AnsiString FileName);
  72. virtual TStrings * __fastcall GetFixedPaths();
  73. virtual void __fastcall SpaceAvailable(const AnsiString Path,
  74. TSpaceAvailable & ASpaceAvailable);
  75. virtual const TSessionInfo & __fastcall GetSessionInfo();
  76. virtual const TFileSystemInfo & __fastcall GetFileSystemInfo(bool Retrieve);
  77. virtual bool __fastcall TemporaryTransferFile(const AnsiString & FileName);
  78. virtual bool __fastcall GetStoredCredentialsTried();
  79. virtual AnsiString __fastcall GetUserName();
  80. protected:
  81. TSecureShell * FSecureShell;
  82. TFileSystemInfo FFileSystemInfo;
  83. bool FFileSystemInfoValid;
  84. int FVersion;
  85. AnsiString FCurrentDirectory;
  86. AnsiString FDirectoryToChangeTo;
  87. AnsiString FHomeDirectory;
  88. AnsiString FEOL;
  89. TList * FPacketReservations;
  90. Variant FPacketNumbers;
  91. char FPreviousLoggedPacket;
  92. int FNotLoggedPackets;
  93. int FBusy;
  94. bool FAvoidBusy;
  95. TStrings * FExtensions;
  96. TSFTPSupport * FSupport;
  97. bool FUtfStrings;
  98. bool FUtfNever;
  99. bool FSignedTS;
  100. bool FOpenSSH;
  101. TStrings * FFixedPaths;
  102. unsigned long FMaxPacketSize;
  103. void __fastcall SendCustomReadFile(TSFTPPacket * Packet, TSFTPPacket * Response,
  104. const AnsiString FileName, unsigned long Flags);
  105. void __fastcall CustomReadFile(const AnsiString FileName,
  106. TRemoteFile *& File, char Type, TRemoteFile * ALinkedByFile = NULL,
  107. int AllowStatus = -1);
  108. virtual AnsiString __fastcall GetCurrentDirectory();
  109. AnsiString __fastcall GetHomeDirectory();
  110. unsigned long __fastcall GotStatusPacket(TSFTPPacket * Packet, int AllowStatus);
  111. bool __fastcall inline IsAbsolutePath(const AnsiString Path);
  112. bool __fastcall RemoteFileExists(const AnsiString FullPath, TRemoteFile ** File = NULL);
  113. TRemoteFile * __fastcall LoadFile(TSFTPPacket * Packet,
  114. TRemoteFile * ALinkedByFile, const AnsiString FileName,
  115. TRemoteFileList * TempFileList = NULL, bool Complete = true);
  116. void __fastcall LoadFile(TRemoteFile * File, TSFTPPacket * Packet,
  117. bool Complete = true);
  118. AnsiString __fastcall LocalCanonify(const AnsiString & Path);
  119. AnsiString __fastcall Canonify(AnsiString Path);
  120. AnsiString __fastcall RealPath(const AnsiString Path);
  121. AnsiString __fastcall RealPath(const AnsiString Path, const AnsiString BaseDir);
  122. void __fastcall ReserveResponse(const TSFTPPacket * Packet,
  123. TSFTPPacket * Response);
  124. int __fastcall ReceivePacket(TSFTPPacket * Packet, int ExpectedType = -1,
  125. int AllowStatus = -1);
  126. bool __fastcall PeekPacket();
  127. void __fastcall RemoveReservation(int Reservation);
  128. void __fastcall SendPacket(const TSFTPPacket * Packet);
  129. int __fastcall ReceiveResponse(const TSFTPPacket * Packet,
  130. TSFTPPacket * Response, int ExpectedType = -1, int AllowStatus = -1);
  131. int __fastcall SendPacketAndReceiveResponse(const TSFTPPacket * Packet,
  132. TSFTPPacket * Response, int ExpectedType = -1, int AllowStatus = -1);
  133. void __fastcall UnreserveResponse(TSFTPPacket * Response);
  134. void __fastcall TryOpenDirectory(const AnsiString Directory);
  135. bool __fastcall SupportsExtension(const AnsiString & Extension) const;
  136. void __fastcall ResetConnection();
  137. void __fastcall DoCalculateFilesChecksum(const AnsiString & Alg,
  138. TStrings * FileList, TStrings * Checksums,
  139. TCalculatedChecksumEvent OnCalculatedChecksum,
  140. TFileOperationProgressType * OperationProgress, bool FirstLevel);
  141. void __fastcall DoDeleteFile(const AnsiString FileName, char Type);
  142. void __fastcall SFTPSourceRobust(const AnsiString FileName,
  143. const AnsiString TargetDir, const TCopyParamType * CopyParam, int Params,
  144. TFileOperationProgressType * OperationProgress, unsigned int Flags);
  145. void __fastcall SFTPSource(const AnsiString FileName,
  146. const AnsiString TargetDir, const TCopyParamType * CopyParam, int Params,
  147. TFileOperationProgressType * OperationProgress, unsigned int Flags,
  148. TUploadSessionAction & Action, bool & ChildError);
  149. AnsiString __fastcall SFTPOpenRemoteFile(const AnsiString & FileName,
  150. unsigned int OpenType, __int64 Size = -1);
  151. int __fastcall SFTPOpenRemote(void * AOpenParams, void * Param2);
  152. void __fastcall SFTPCloseRemote(const AnsiString Handle,
  153. const AnsiString FileName, TFileOperationProgressType * OperationProgress,
  154. bool TransferFinished, bool Request, TSFTPPacket * Packet);
  155. void __fastcall SFTPDirectorySource(const AnsiString DirectoryName,
  156. const AnsiString TargetDir, int Attrs, const TCopyParamType * CopyParam,
  157. int Params, TFileOperationProgressType * OperationProgress, unsigned int Flags);
  158. void __fastcall SFTPConfirmOverwrite(AnsiString & FileName,
  159. int Params, TFileOperationProgressType * OperationProgress,
  160. TSFTPOverwriteMode & Mode, const TOverwriteFileParams * FileParams);
  161. bool SFTPConfirmResume(const AnsiString DestFileName, bool PartialBiggerThanSource,
  162. TFileOperationProgressType * OperationProgress);
  163. void __fastcall SFTPSinkRobust(const AnsiString FileName,
  164. const TRemoteFile * File, const AnsiString TargetDir,
  165. const TCopyParamType * CopyParam, int Params,
  166. TFileOperationProgressType * OperationProgress, unsigned int Flags);
  167. void __fastcall SFTPSink(const AnsiString FileName,
  168. const TRemoteFile * File, const AnsiString TargetDir,
  169. const TCopyParamType * CopyParam, int Params,
  170. TFileOperationProgressType * OperationProgress, unsigned int Flags,
  171. TDownloadSessionAction & Action, bool & ChildError);
  172. void __fastcall SFTPSinkFile(AnsiString FileName,
  173. const TRemoteFile * File, void * Param);
  174. char * __fastcall GetEOL() const;
  175. inline void __fastcall BusyStart();
  176. inline void __fastcall BusyEnd();
  177. inline unsigned long __fastcall TransferBlockSize(unsigned long Overhead,
  178. TFileOperationProgressType * OperationProgress, unsigned long MaxPacketSize = 0);
  179. inline unsigned long __fastcall UploadBlockSize(const AnsiString & Handle,
  180. TFileOperationProgressType * OperationProgress);
  181. inline unsigned long __fastcall DownloadBlockSize(
  182. TFileOperationProgressType * OperationProgress);
  183. inline int __fastcall PacketLength(char * LenBuf, int ExpectedType);
  184. static AnsiString __fastcall DecodeUTF(const AnsiString UTF);
  185. static AnsiString __fastcall EncodeUTF(const WideString Source);
  186. };
  187. //---------------------------------------------------------------------------
  188. #endif // SftpFileSystemH