ScpFileSystem.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. //---------------------------------------------------------------------------
  2. #ifndef ScpFileSystemH
  3. #define ScpFileSystemH
  4. #include <FileSystems.h>
  5. #include <CopyParam.h>
  6. //---------------------------------------------------------------------------
  7. class TCommandSet;
  8. class TSecureShell;
  9. struct TOverwriteFileParams;
  10. //---------------------------------------------------------------------------
  11. class TSCPFileSystem : public TCustomFileSystem
  12. {
  13. public:
  14. __fastcall TSCPFileSystem(TTerminal * ATerminal, TSecureShell * SecureShell);
  15. virtual __fastcall ~TSCPFileSystem();
  16. virtual void __fastcall Open();
  17. virtual void __fastcall Close();
  18. virtual bool __fastcall GetActive();
  19. virtual void __fastcall CollectUsage();
  20. virtual void __fastcall Idle();
  21. virtual UnicodeString __fastcall AbsolutePath(UnicodeString Path, bool Local);
  22. virtual void __fastcall AnyCommand(const UnicodeString Command,
  23. TCaptureOutputEvent OutputEvent);
  24. virtual void __fastcall ChangeDirectory(const UnicodeString Directory);
  25. virtual void __fastcall CachedChangeDirectory(const UnicodeString Directory);
  26. virtual void __fastcall AnnounceFileListOperation();
  27. virtual void __fastcall ChangeFileProperties(const UnicodeString FileName,
  28. const TRemoteFile * File, const TRemoteProperties * Properties,
  29. TChmodSessionAction & Action);
  30. virtual bool __fastcall LoadFilesProperties(TStrings * FileList);
  31. virtual UnicodeString CalculateFilesChecksumInitialize(const UnicodeString & Alg);
  32. virtual void __fastcall CalculateFilesChecksum(
  33. const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
  34. TFileOperationProgressType * OperationProgress, bool FirstLevel);
  35. virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
  36. const UnicodeString TargetDir, const TCopyParamType * CopyParam,
  37. int Params, TFileOperationProgressType * OperationProgress,
  38. TOnceDoneOperation & OnceDoneOperation);
  39. virtual void __fastcall CopyToRemote(TStrings * FilesToCopy,
  40. const UnicodeString TargetDir, const TCopyParamType * CopyParam,
  41. int Params, TFileOperationProgressType * OperationProgress,
  42. TOnceDoneOperation & OnceDoneOperation);
  43. virtual void __fastcall Source(
  44. TLocalFileHandle & Handle, const UnicodeString & TargetDir, UnicodeString & DestFileName,
  45. const TCopyParamType * CopyParam, int Params,
  46. TFileOperationProgressType * OperationProgress, unsigned int Flags,
  47. TUploadSessionAction & Action, bool & ChildError);
  48. virtual void __fastcall Sink(
  49. const UnicodeString & FileName, const TRemoteFile * File,
  50. const UnicodeString & TargetDir, UnicodeString & DestFileName, int Attrs,
  51. const TCopyParamType * CopyParam, int Params, TFileOperationProgressType * OperationProgress,
  52. unsigned int Flags, TDownloadSessionAction & Action);
  53. virtual void __fastcall CreateDirectory(const UnicodeString & DirName, bool Encrypt);
  54. virtual void __fastcall CreateLink(const UnicodeString FileName, const UnicodeString PointTo, bool Symbolic);
  55. virtual void __fastcall DeleteFile(const UnicodeString FileName,
  56. const TRemoteFile * File, int Params, TRmSessionAction & Action);
  57. virtual void __fastcall CustomCommandOnFile(const UnicodeString FileName,
  58. const TRemoteFile * File, UnicodeString Command, int Params, TCaptureOutputEvent OutputEvent);
  59. virtual void __fastcall DoStartup();
  60. virtual void __fastcall HomeDirectory();
  61. virtual bool __fastcall IsCapable(int Capability) const;
  62. virtual void __fastcall LookupUsersGroups();
  63. virtual void __fastcall ReadCurrentDirectory();
  64. virtual void __fastcall ReadDirectory(TRemoteFileList * FileList);
  65. virtual void __fastcall ReadFile(const UnicodeString FileName,
  66. TRemoteFile *& File);
  67. virtual void __fastcall ReadSymlink(TRemoteFile * SymlinkFile,
  68. TRemoteFile *& File);
  69. virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File,
  70. const UnicodeString NewName);
  71. virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File,
  72. const UnicodeString NewName);
  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. virtual void __fastcall GetSupportedChecksumAlgs(TStrings * Algs);
  82. virtual void __fastcall LockFile(const UnicodeString & FileName, const TRemoteFile * File);
  83. virtual void __fastcall UnlockFile(const UnicodeString & FileName, const TRemoteFile * File);
  84. virtual void __fastcall UpdateFromMain(TCustomFileSystem * MainFileSystem);
  85. virtual void __fastcall ClearCaches();
  86. protected:
  87. __property TStrings * Output = { read = FOutput };
  88. __property int ReturnCode = { read = FReturnCode };
  89. virtual UnicodeString __fastcall GetCurrentDirectory();
  90. private:
  91. TSecureShell * FSecureShell;
  92. TCommandSet * FCommandSet;
  93. TFileSystemInfo FFileSystemInfo;
  94. UnicodeString FCurrentDirectory;
  95. TStrings * FOutput;
  96. int FReturnCode;
  97. UnicodeString FCachedDirectoryChange;
  98. bool FProcessingCommand;
  99. int FLsFullTime;
  100. TCaptureOutputEvent FOnCaptureOutput;
  101. bool FScpFatalError;
  102. void __fastcall DetectUtf();
  103. void __fastcall ClearAliases();
  104. void __fastcall ClearAlias(UnicodeString Alias);
  105. void __fastcall CustomReadFile(const UnicodeString FileName,
  106. TRemoteFile *& File, TRemoteFile * ALinkedByFile);
  107. void __fastcall DetectReturnVar();
  108. bool __fastcall IsLastLine(UnicodeString & Line);
  109. static bool __fastcall IsTotalListingLine(const UnicodeString Line);
  110. void __fastcall EnsureLocation();
  111. void __fastcall ExecCommand(const UnicodeString & Cmd, int Params,
  112. const UnicodeString & CmdString);
  113. void __fastcall ExecCommand(TFSCommand Cmd, const TVarRec * args = NULL,
  114. int size = 0, int Params = -1);
  115. void InvalidOutputError(const UnicodeString & Command);
  116. void __fastcall ReadCommandOutput(int Params, const UnicodeString * Cmd = NULL);
  117. void __fastcall SCPResponse(bool * GotLastLine = NULL);
  118. void __fastcall SCPDirectorySource(const UnicodeString DirectoryName,
  119. const UnicodeString TargetDir, const TCopyParamType * CopyParam, int Params,
  120. TFileOperationProgressType * OperationProgress, int Level);
  121. void __fastcall SCPError(const UnicodeString Message, bool Fatal);
  122. void __fastcall SCPSendError(const UnicodeString Message, bool Fatal);
  123. void __fastcall SCPSink(const UnicodeString TargetDir,
  124. const UnicodeString FileName, const UnicodeString SourceDir,
  125. const TCopyParamType * CopyParam, bool & Success,
  126. TFileOperationProgressType * OperationProgress, int Params, int Level);
  127. void __fastcall SCPSource(const UnicodeString FileName,
  128. const UnicodeString TargetDir, const TCopyParamType * CopyParam, int Params,
  129. TFileOperationProgressType * OperationProgress, int Level);
  130. void __fastcall SendCommand(const UnicodeString Cmd);
  131. void __fastcall SkipFirstLine();
  132. void __fastcall SkipStartupMessage();
  133. void __fastcall UnsetNationalVars();
  134. TRemoteFile * __fastcall CreateRemoteFile(const UnicodeString & ListingStr,
  135. TRemoteFile * LinkedByFile = NULL);
  136. void __fastcall CaptureOutput(const UnicodeString & AddedLine, TCaptureOutputType OutputType);
  137. void __fastcall ChangeFileToken(const UnicodeString & DelimitedName,
  138. const TRemoteToken & Token, TFSCommand Cmd, const UnicodeString & RecursiveStr);
  139. unsigned int __fastcall ConfirmOverwrite(
  140. const UnicodeString & SourceFullFileName, const UnicodeString & TargetFileName,
  141. TOperationSide Side,
  142. const TOverwriteFileParams * FileParams, const TCopyParamType * CopyParam,
  143. int Params, TFileOperationProgressType * OperationProgress);
  144. UnicodeString ParseFileChecksum(
  145. const UnicodeString & Line, const UnicodeString & FileName, const UnicodeString & Command);
  146. void ProcessFileChecksum(
  147. TCalculatedChecksumEvent OnCalculatedChecksum, TChecksumSessionAction & Action, TFileOperationProgressType * OperationProgress,
  148. bool FirstLevel, const UnicodeString & FileName, const UnicodeString & Alg, const UnicodeString & Checksum);
  149. static bool __fastcall RemoveLastLine(UnicodeString & Line,
  150. int & ReturnCode, UnicodeString LastLine = L"");
  151. };
  152. //---------------------------------------------------------------------------
  153. #endif // ScpFileSystemH