1
0

S3FileSystem.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //------------------------------------------------------------------------------
  2. #ifndef S3FileSystemH
  3. #define S3FileSystemH
  4. //------------------------------------------------------------------------------
  5. #include <FileSystems.h>
  6. //------------------------------------------------------------------------------
  7. struct TNeonCertificateData;
  8. struct TLibS3CallbackData;
  9. struct TLibS3BucketContext;
  10. struct TLibS3ListBucketCallbackData;
  11. struct ssl_st;
  12. #ifdef NEED_LIBS3
  13. // resolve clash
  14. #define S3Protocol _S3Protocol
  15. #include "libs3.h"
  16. #undef S3Protocol
  17. #else
  18. struct ne_session_s;
  19. struct ne_ssl_certificate_s;
  20. struct S3ResponseProperties;
  21. struct S3RequestContext;
  22. struct S3ErrorDetails;
  23. struct S3ListBucketContent;
  24. struct S3ResponseHandler;
  25. enum S3Status { };
  26. enum _S3Protocol { };
  27. #endif
  28. //------------------------------------------------------------------------------
  29. class TS3FileSystem : public TCustomFileSystem
  30. {
  31. public:
  32. explicit TS3FileSystem(TTerminal * ATerminal);
  33. virtual __fastcall ~TS3FileSystem();
  34. virtual void __fastcall Open();
  35. virtual void __fastcall Close();
  36. virtual bool __fastcall GetActive();
  37. virtual void __fastcall CollectUsage();
  38. virtual void __fastcall Idle();
  39. virtual UnicodeString __fastcall AbsolutePath(UnicodeString Path, bool Local);
  40. virtual void __fastcall AnyCommand(const UnicodeString Command,
  41. TCaptureOutputEvent OutputEvent);
  42. virtual void __fastcall ChangeDirectory(const UnicodeString Directory);
  43. virtual void __fastcall CachedChangeDirectory(const UnicodeString Directory);
  44. virtual void __fastcall AnnounceFileListOperation();
  45. virtual void __fastcall ChangeFileProperties(const UnicodeString FileName,
  46. const TRemoteFile * File, const TRemoteProperties * Properties,
  47. TChmodSessionAction & Action);
  48. virtual bool __fastcall LoadFilesProperties(TStrings * FileList);
  49. virtual void __fastcall CalculateFilesChecksum(const UnicodeString & Alg,
  50. TStrings * FileList, TStrings * Checksums,
  51. TCalculatedChecksumEvent OnCalculatedChecksum);
  52. virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
  53. const UnicodeString TargetDir, const TCopyParamType * CopyParam,
  54. int Params, TFileOperationProgressType * OperationProgress,
  55. TOnceDoneOperation & OnceDoneOperation);
  56. virtual void __fastcall CopyToRemote(TStrings * FilesToCopy,
  57. const UnicodeString TargetDir, const TCopyParamType * CopyParam,
  58. int Params, TFileOperationProgressType * OperationProgress,
  59. TOnceDoneOperation & OnceDoneOperation);
  60. virtual void __fastcall Source(
  61. TLocalFileHandle & Handle, const UnicodeString & TargetDir, UnicodeString & DestFileName,
  62. const TCopyParamType * CopyParam, int Params,
  63. TFileOperationProgressType * OperationProgress, unsigned int Flags,
  64. TUploadSessionAction & Action, bool & ChildError);
  65. virtual void __fastcall CreateDirectory(const UnicodeString DirName);
  66. virtual void __fastcall CreateLink(const UnicodeString FileName, const UnicodeString PointTo, bool Symbolic);
  67. virtual void __fastcall DeleteFile(const UnicodeString FileName,
  68. const TRemoteFile * File, int Params,
  69. TRmSessionAction & Action);
  70. virtual void __fastcall CustomCommandOnFile(const UnicodeString FileName,
  71. const TRemoteFile * File, UnicodeString Command, int Params, TCaptureOutputEvent OutputEvent);
  72. virtual void __fastcall DoStartup();
  73. virtual void __fastcall HomeDirectory();
  74. virtual bool __fastcall IsCapable(int Capability) const;
  75. virtual void __fastcall LookupUsersGroups();
  76. virtual void __fastcall ReadCurrentDirectory();
  77. virtual void __fastcall ReadDirectory(TRemoteFileList * FileList);
  78. virtual void __fastcall ReadFile(const UnicodeString FileName,
  79. TRemoteFile *& File);
  80. virtual void __fastcall ReadSymlink(TRemoteFile * SymLinkFile,
  81. TRemoteFile *& File);
  82. virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File,
  83. const UnicodeString NewName);
  84. virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File,
  85. const UnicodeString NewName);
  86. virtual TStrings * __fastcall GetFixedPaths();
  87. virtual void __fastcall SpaceAvailable(const UnicodeString Path,
  88. TSpaceAvailable & ASpaceAvailable);
  89. virtual const TSessionInfo & __fastcall GetSessionInfo();
  90. virtual const TFileSystemInfo & __fastcall GetFileSystemInfo(bool Retrieve);
  91. virtual bool __fastcall TemporaryTransferFile(const UnicodeString & FileName);
  92. virtual bool __fastcall GetStoredCredentialsTried();
  93. virtual UnicodeString __fastcall GetUserName();
  94. virtual void __fastcall GetSupportedChecksumAlgs(TStrings * Algs);
  95. virtual void __fastcall LockFile(const UnicodeString & FileName, const TRemoteFile * File);
  96. virtual void __fastcall UnlockFile(const UnicodeString & FileName, const TRemoteFile * File);
  97. virtual void __fastcall UpdateFromMain(TCustomFileSystem * MainFileSystem);
  98. virtual void __fastcall ClearCaches();
  99. protected:
  100. bool FActive;
  101. TFileSystemInfo FFileSystemInfo;
  102. UnicodeString FCurrentDirectory;
  103. UnicodeString FCachedDirectoryChange;
  104. TSessionInfo FSessionInfo;
  105. UTF8String FAccessKeyId;
  106. UTF8String FSecretAccessKey;
  107. UTF8String FHostName;
  108. int FTimeout;
  109. S3RequestContext * FRequestContext;
  110. _S3Protocol FLibS3Protocol;
  111. ne_session_s * FNeonSession;
  112. UnicodeString FTlsVersionStr;
  113. UnicodeString FResponse;
  114. typedef std::map<UnicodeString, UnicodeString> TRegions;
  115. TRegions FRegions;
  116. TRegions FHostNames;
  117. virtual UnicodeString __fastcall GetCurrentDirectory();
  118. void LibS3Deinitialize();
  119. bool VerifyCertificate(TNeonCertificateData Data);
  120. void CollectTLSSessionInfo();
  121. void CheckLibS3Error(const TLibS3CallbackData & Data);
  122. void InitSslSession(ssl_st * Ssl, ne_session_s * Session);
  123. void RequestInit(TLibS3CallbackData & Data);
  124. void TryOpenDirectory(const UnicodeString & Directory);
  125. void ReadDirectoryInternal(const UnicodeString & Path, TRemoteFileList * FileList, int MaxKeys, const UnicodeString & FileName);
  126. void ParsePath(UnicodeString Path, UnicodeString & BucketName, UnicodeString & Key);
  127. TRemoteToken MakeRemoteToken(const char * OwnerId, const char * OwnerDisplayName);
  128. TLibS3BucketContext GetBucketContext(const UnicodeString & BucketName);
  129. void DoListBucket(
  130. const UnicodeString & Prefix, TRemoteFileList * FileList, int MaxKeys, const TLibS3BucketContext & BucketContext,
  131. TLibS3ListBucketCallbackData & Data);
  132. UnicodeString GetFolderKey(const UnicodeString & Key);
  133. static TS3FileSystem * GetFileSystem(void * CallbackData);
  134. static void LibS3SessionCallback(ne_session_s * Session, void * CallbackData);
  135. static S3Status LibS3ResponsePropertiesCallback(const S3ResponseProperties * Properties, void * CallbackData);
  136. static void LibS3ResponseCompleteCallback(S3Status Status, const S3ErrorDetails * Error, void * CallbackData);
  137. static int LibS3SslCallback(int Failures, const ne_ssl_certificate_s * Certificate, void * CallbackData);
  138. static void LibS3ResponseDataCallback(const char * Data, size_t Size, void * CallbackData);
  139. static S3Status LibS3ListServiceCallback(
  140. const char * OwnerId, const char * OwnerDisplayName, const char * BucketName,
  141. int64_t CreationDate, void * CallbackData);
  142. static S3Status LibS3ListBucketCallback(
  143. int IsTruncated, const char * NextMarker, int ContentsCount, const S3ListBucketContent * Contents,
  144. int CommonPrefixesCount, const char ** CommonPrefixes, void * CallbackData);
  145. };
  146. //------------------------------------------------------------------------------
  147. UnicodeString __fastcall S3LibVersion();
  148. UnicodeString __fastcall S3LibDefaultHostName();
  149. UnicodeString __fastcall S3LibDefaultRegion();
  150. //------------------------------------------------------------------------------
  151. #endif