SftpFileSystem.h 9.9 KB

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