| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | //---------------------------------------------------------------------------#ifndef SftpFileSystemH#define SftpFileSystemH#include <FileSystems.h>//---------------------------------------------------------------------------class TSFTPPacket;class TOverwriteFileParams;struct TSFTPSupport;class TSecureShell;class TEncryption;//---------------------------------------------------------------------------enum TSFTPOverwriteMode { omOverwrite, omAppend, omResume };extern const int SFTPMaxVersion;//---------------------------------------------------------------------------class TSFTPFileSystem : public TCustomFileSystem{friend class TSFTPPacket;friend class TSFTPQueue;friend class TSFTPAsynchronousQueue;friend class TSFTPUploadQueue;friend class TSFTPDownloadQueue;friend class TSFTPLoadFilesPropertiesQueue;friend class TSFTPCalculateFilesChecksumQueue;friend class TSFTPBusy;public:  __fastcall TSFTPFileSystem(TTerminal * ATerminal, TSecureShell * SecureShell);  virtual __fastcall ~TSFTPFileSystem();  virtual void __fastcall Open();  virtual void __fastcall Close();  virtual bool __fastcall GetActive();  virtual void __fastcall CollectUsage();  virtual void __fastcall Idle();  virtual UnicodeString __fastcall AbsolutePath(UnicodeString Path, bool Local);  virtual void __fastcall AnyCommand(const UnicodeString Command,    TCaptureOutputEvent OutputEvent);  virtual void __fastcall ChangeDirectory(const UnicodeString Directory);  virtual void __fastcall CachedChangeDirectory(const UnicodeString Directory);  virtual void __fastcall AnnounceFileListOperation();  virtual void __fastcall ChangeFileProperties(const UnicodeString FileName,    const TRemoteFile * File, const TRemoteProperties * Properties,    TChmodSessionAction & Action);  virtual bool __fastcall LoadFilesProperties(TStrings * FileList);  virtual void __fastcall CalculateFilesChecksum(const UnicodeString & Alg,    TStrings * FileList, TStrings * Checksums,    TCalculatedChecksumEvent OnCalculatedChecksum);  virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,    const UnicodeString TargetDir, const TCopyParamType * CopyParam,    int Params, TFileOperationProgressType * OperationProgress,    TOnceDoneOperation & OnceDoneOperation);  virtual void __fastcall CopyToRemote(TStrings * FilesToCopy,    const UnicodeString TargetDir, const TCopyParamType * CopyParam,    int Params, TFileOperationProgressType * OperationProgress,    TOnceDoneOperation & OnceDoneOperation);  virtual void __fastcall Source(    TLocalFileHandle & Handle, const UnicodeString & TargetDir, UnicodeString & DestFileName,    const TCopyParamType * CopyParam, int Params,    TFileOperationProgressType * OperationProgress, unsigned int Flags,    TUploadSessionAction & Action, bool & ChildError);  virtual void __fastcall DirectorySunk(    const UnicodeString & DestFullName, const TRemoteFile * File, const TCopyParamType * CopyParam);  virtual void __fastcall Sink(    const UnicodeString & FileName, const TRemoteFile * File,    const UnicodeString & TargetDir, UnicodeString & DestFileName, int Attrs,    const TCopyParamType * CopyParam, int Params, TFileOperationProgressType * OperationProgress,    unsigned int Flags, TDownloadSessionAction & Action);  virtual void __fastcall CreateDirectory(const UnicodeString & DirName, bool Encrypt);  virtual void __fastcall CreateLink(const UnicodeString FileName, const UnicodeString PointTo, bool Symbolic);  virtual void __fastcall DeleteFile(const UnicodeString FileName,    const TRemoteFile * File, int Params, TRmSessionAction & Action);  virtual void __fastcall CustomCommandOnFile(const UnicodeString FileName,    const TRemoteFile * File, UnicodeString Command, int Params, TCaptureOutputEvent OutputEvent);  virtual void __fastcall DoStartup();  virtual void __fastcall HomeDirectory();  virtual UnicodeString __fastcall GetHomeDirectory();  virtual bool __fastcall IsCapable(int Capability) const;  virtual void __fastcall LookupUsersGroups();  virtual void __fastcall ReadCurrentDirectory();  virtual void __fastcall ReadDirectory(TRemoteFileList * FileList);  virtual void __fastcall ReadFile(const UnicodeString FileName,    TRemoteFile *& File);  virtual void __fastcall ReadSymlink(TRemoteFile * SymlinkFile,    TRemoteFile *& File);  virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File,    const UnicodeString NewName);  virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File,    const UnicodeString NewName);  virtual TStrings * __fastcall GetFixedPaths();  virtual void __fastcall SpaceAvailable(const UnicodeString Path,    TSpaceAvailable & ASpaceAvailable);  virtual const TSessionInfo & __fastcall GetSessionInfo();  virtual const TFileSystemInfo & __fastcall GetFileSystemInfo(bool Retrieve);  virtual bool __fastcall TemporaryTransferFile(const UnicodeString & FileName);  virtual bool __fastcall GetStoredCredentialsTried();  virtual UnicodeString __fastcall GetUserName();  virtual void __fastcall GetSupportedChecksumAlgs(TStrings * Algs);  virtual void __fastcall LockFile(const UnicodeString & FileName, const TRemoteFile * File);  virtual void __fastcall UnlockFile(const UnicodeString & FileName, const TRemoteFile * File);  virtual void __fastcall UpdateFromMain(TCustomFileSystem * MainFileSystem);  virtual void __fastcall ClearCaches();protected:  TSecureShell * FSecureShell;  TFileSystemInfo FFileSystemInfo;  bool FFileSystemInfoValid;  int FVersion;  UnicodeString FCurrentDirectory;  UnicodeString FDirectoryToChangeTo;  UnicodeString FHomeDirectory;  AnsiString FEOL;  TList * FPacketReservations;  Variant FPacketNumbers;  char FPreviousLoggedPacket;  int FNotLoggedPackets;  int FBusy;  void * FBusyToken;  bool FAvoidBusy;  TStrings * FExtensions;  TSFTPSupport * FSupport;  TAutoSwitch FUtfStrings;  bool FUtfDisablingAnnounced;  bool FSignedTS;  TStrings * FFixedPaths;  unsigned long FMaxPacketSize;  bool FSupportsStatVfsV2;  bool FSupportsHardlink;  std::unique_ptr<TStringList> FChecksumAlgs;  std::unique_ptr<TStringList> FChecksumSftpAlgs;  void __fastcall SendCustomReadFile(TSFTPPacket * Packet, TSFTPPacket * Response,    unsigned long Flags);  void __fastcall CustomReadFile(const UnicodeString FileName,    TRemoteFile *& File, unsigned char Type, TRemoteFile * ALinkedByFile = NULL,    int AllowStatus = -1);  virtual UnicodeString __fastcall GetCurrentDirectory();  unsigned long __fastcall GotStatusPacket(TSFTPPacket * Packet, int AllowStatus);  bool __fastcall RemoteFileExists(const UnicodeString FullPath, TRemoteFile ** File = NULL);  TRemoteFile * __fastcall LoadFile(TSFTPPacket * Packet,    TRemoteFile * ALinkedByFile, const UnicodeString FileName,    TRemoteFileList * TempFileList = NULL, bool Complete = true);  void __fastcall LoadFile(TRemoteFile * File, TSFTPPacket * Packet,    bool Complete = true);  UnicodeString __fastcall LocalCanonify(const UnicodeString & Path);  UnicodeString __fastcall Canonify(UnicodeString Path);  UnicodeString __fastcall RealPath(const UnicodeString Path);  UnicodeString __fastcall RealPath(const UnicodeString Path, const UnicodeString BaseDir);  void __fastcall ReserveResponse(const TSFTPPacket * Packet,    TSFTPPacket * Response);  int __fastcall ReceivePacket(TSFTPPacket * Packet, int ExpectedType = -1,    int AllowStatus = -1, bool TryOnly = false);  bool __fastcall PeekPacket();  void __fastcall RemoveReservation(int Reservation);  void __fastcall SendPacket(const TSFTPPacket * Packet);  int __fastcall ReceiveResponse(const TSFTPPacket * Packet,    TSFTPPacket * Response, int ExpectedType = -1, int AllowStatus = -1, bool TryOnly = false);  int __fastcall SendPacketAndReceiveResponse(const TSFTPPacket * Packet,    TSFTPPacket * Response, int ExpectedType = -1, int AllowStatus = -1);  void __fastcall UnreserveResponse(TSFTPPacket * Response);  void __fastcall TryOpenDirectory(const UnicodeString Directory);  bool __fastcall SupportsExtension(const UnicodeString & Extension) const;  void __fastcall ResetConnection();  void __fastcall DoCalculateFilesChecksum(    const UnicodeString & Alg, const UnicodeString & SftpAlg,    TStrings * FileList, TStrings * Checksums,    TCalculatedChecksumEvent OnCalculatedChecksum,    TFileOperationProgressType * OperationProgress, bool FirstLevel);  void __fastcall RegisterChecksumAlg(const UnicodeString & Alg, const UnicodeString & SftpAlg);  void __fastcall DoDeleteFile(const UnicodeString FileName, unsigned char Type);  void __fastcall SFTPSource(const UnicodeString FileName,    const UnicodeString TargetDir, const TCopyParamType * CopyParam, int Params,    TFileOperationProgressType * OperationProgress, unsigned int Flags,    TUploadSessionAction & Action, bool & ChildError);  RawByteString __fastcall SFTPOpenRemoteFile(const UnicodeString & FileName,    unsigned int OpenType, bool EncryptNewFiles = false, __int64 Size = -1);  int __fastcall SFTPOpenRemote(void * AOpenParams, void * Param2);  void __fastcall SFTPCloseRemote(const RawByteString Handle,    const UnicodeString FileName, TFileOperationProgressType * OperationProgress,    bool TransferFinished, bool Request, TSFTPPacket * Packet);  void __fastcall SFTPConfirmOverwrite(const UnicodeString & FullFileName, UnicodeString & FileName,    const TCopyParamType * CopyParam, int Params, TFileOperationProgressType * OperationProgress,    TSFTPOverwriteMode & Mode, const TOverwriteFileParams * FileParams);  bool SFTPConfirmResume(const UnicodeString DestFileName, bool PartialBiggerThanSource,    TFileOperationProgressType * OperationProgress);  char * __fastcall GetEOL() const;  inline void __fastcall BusyStart();  inline void __fastcall BusyEnd();  inline unsigned long __fastcall TransferBlockSize(unsigned long Overhead,    TFileOperationProgressType * OperationProgress, unsigned long MaxPacketSize = 0);  inline unsigned long __fastcall UploadBlockSize(const RawByteString & Handle,    TFileOperationProgressType * OperationProgress);  inline unsigned long __fastcall DownloadBlockSize(    TFileOperationProgressType * OperationProgress);  inline int __fastcall PacketLength(unsigned char * LenBuf, int ExpectedType);  void __fastcall Progress(TFileOperationProgressType * OperationProgress);  void AddPathString(TSFTPPacket & Packet, const UnicodeString & Value, bool EncryptNewFiles = false);  void __fastcall WriteLocalFile(    TStream * FileStream, TFileBuffer & BlockBuf, const UnicodeString & LocalFileName,    TFileOperationProgressType * OperationProgress);};//---------------------------------------------------------------------------#endif // SftpFileSystemH
 |