S3FileSystem.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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 CreateDirectory(const UnicodeString DirName);
  61. virtual void __fastcall CreateLink(const UnicodeString FileName, const UnicodeString PointTo, bool Symbolic);
  62. virtual void __fastcall DeleteFile(const UnicodeString FileName,
  63. const TRemoteFile * File, int Params,
  64. TRmSessionAction & Action);
  65. virtual void __fastcall CustomCommandOnFile(const UnicodeString FileName,
  66. const TRemoteFile * File, UnicodeString Command, int Params, TCaptureOutputEvent OutputEvent);
  67. virtual void __fastcall DoStartup();
  68. virtual void __fastcall HomeDirectory();
  69. virtual bool __fastcall IsCapable(int Capability) const;
  70. virtual void __fastcall LookupUsersGroups();
  71. virtual void __fastcall ReadCurrentDirectory();
  72. virtual void __fastcall ReadDirectory(TRemoteFileList * FileList);
  73. virtual void __fastcall ReadFile(const UnicodeString FileName,
  74. TRemoteFile *& File);
  75. virtual void __fastcall ReadSymlink(TRemoteFile * SymLinkFile,
  76. TRemoteFile *& File);
  77. virtual void __fastcall RenameFile(const UnicodeString FileName,
  78. const UnicodeString NewName);
  79. virtual void __fastcall CopyFile(const UnicodeString FileName,
  80. const UnicodeString NewName);
  81. virtual TStrings * __fastcall GetFixedPaths();
  82. virtual void __fastcall SpaceAvailable(const UnicodeString Path,
  83. TSpaceAvailable & ASpaceAvailable);
  84. virtual const TSessionInfo & __fastcall GetSessionInfo();
  85. virtual const TFileSystemInfo & __fastcall GetFileSystemInfo(bool Retrieve);
  86. virtual bool __fastcall TemporaryTransferFile(const UnicodeString & FileName);
  87. virtual bool __fastcall GetStoredCredentialsTried();
  88. virtual UnicodeString __fastcall GetUserName();
  89. virtual void __fastcall GetSupportedChecksumAlgs(TStrings * Algs);
  90. virtual void __fastcall LockFile(const UnicodeString & FileName, const TRemoteFile * File);
  91. virtual void __fastcall UnlockFile(const UnicodeString & FileName, const TRemoteFile * File);
  92. virtual void __fastcall UpdateFromMain(TCustomFileSystem * MainFileSystem);
  93. virtual void __fastcall ClearCaches();
  94. protected:
  95. bool FActive;
  96. TFileSystemInfo FFileSystemInfo;
  97. UnicodeString FCurrentDirectory;
  98. UnicodeString FCachedDirectoryChange;
  99. TSessionInfo FSessionInfo;
  100. UTF8String FAccessKeyId;
  101. UTF8String FSecretAccessKey;
  102. UTF8String FHostName;
  103. int FTimeout;
  104. S3RequestContext * FRequestContext;
  105. _S3Protocol FLibS3Protocol;
  106. ne_session_s * FNeonSession;
  107. UnicodeString FTlsVersionStr;
  108. UnicodeString FResponse;
  109. typedef std::map<UnicodeString, UnicodeString> TRegions;
  110. TRegions FRegions;
  111. TRegions FHostNames;
  112. virtual UnicodeString __fastcall GetCurrentDirectory();
  113. void LibS3Deinitialize();
  114. bool VerifyCertificate(TNeonCertificateData Data);
  115. void CollectTLSSessionInfo();
  116. void CheckLibS3Error(const TLibS3CallbackData & Data);
  117. void InitSslSession(ssl_st * Ssl, ne_session_s * Session);
  118. void RequestInit(TLibS3CallbackData & Data);
  119. void TryOpenDirectory(const UnicodeString & Directory);
  120. void ReadDirectoryInternal(const UnicodeString & Path, TRemoteFileList * FileList, int MaxKeys, const UnicodeString & FileName);
  121. void ParsePath(UnicodeString Path, UnicodeString & BucketName, UnicodeString & Prefix);
  122. TRemoteToken MakeRemoteToken(const char * OwnerId, const char * OwnerDisplayName);
  123. TLibS3BucketContext GetBucketContext(const UnicodeString & BucketName);
  124. void DoListBucket(
  125. const UnicodeString & Prefix, TRemoteFileList * FileList, int MaxKeys, const TLibS3BucketContext & BucketContext,
  126. TLibS3ListBucketCallbackData & Data);
  127. UnicodeString GetFolderPath(const UnicodeString & Path);
  128. static TS3FileSystem * GetFileSystem(void * CallbackData);
  129. static void LibS3SessionCallback(ne_session_s * Session, void * CallbackData);
  130. static S3Status LibS3ResponsePropertiesCallback(const S3ResponseProperties * Properties, void * CallbackData);
  131. static void LibS3ResponseCompleteCallback(S3Status Status, const S3ErrorDetails * Error, void * CallbackData);
  132. static int LibS3SslCallback(int Failures, const ne_ssl_certificate_s * Certificate, void * CallbackData);
  133. static void LibS3ResponseDataCallback(const char * Data, size_t Size, void * CallbackData);
  134. static S3Status LibS3ListServiceCallback(
  135. const char * OwnerId, const char * OwnerDisplayName, const char * BucketName,
  136. int64_t CreationDate, void * CallbackData);
  137. static S3Status LibS3ListBucketCallback(
  138. int IsTruncated, const char * NextMarker, int ContentsCount, const S3ListBucketContent * Contents,
  139. int CommonPrefixesCount, const char ** CommonPrefixes, void * CallbackData);
  140. };
  141. //------------------------------------------------------------------------------
  142. UnicodeString __fastcall S3LibVersion();
  143. UnicodeString __fastcall S3LibDefaultHostName();
  144. UnicodeString __fastcall S3LibDefaultRegion();
  145. //------------------------------------------------------------------------------
  146. #endif