31 #ifndef CPL_AWS_INCLUDED_H 32 #define CPL_AWS_INCLUDED_H 40 CPLString CPLGetAWS_SIGN4_Authorization(
const CPLString& osSecretAccessKey,
41 const CPLString& osAccessKeyId,
42 const CPLString& osAccessToken,
43 const CPLString& osAWSRegion,
44 const CPLString& osRequestPayer,
45 const CPLString& osService,
46 const CPLString& osVerb,
47 const CPLString& osHost,
48 const CPLString& osCanonicalURI,
49 const CPLString& osCanonicalQueryString,
50 const CPLString& osXAMZContentSHA256,
51 const CPLString& osTimestamp);
53 CPLString CPLGetLowerCaseHexSHA256(
const void *pabyData,
size_t nBytes );
54 CPLString CPLGetLowerCaseHexSHA256(
const CPLString& osStr );
56 CPLString CPLGetAWS_SIGN4_Timestamp();
58 CPLString CPLAWSURLEncode(
const CPLString& osURL,
bool bEncodeSlash =
true);
62 #include <curl/curl.h> 65 class VSIS3HandleHelper
68 CPLString m_osSecretAccessKey;
69 CPLString m_osAccessKeyId;
70 CPLString m_osSessionToken;
71 CPLString m_osAWSS3Endpoint;
72 CPLString m_osAWSRegion;
73 CPLString m_osRequestPayer;
75 CPLString m_osObjectKey;
77 bool m_bUseVirtualHosting;
78 std::map<CPLString, CPLString> m_oMapQueryParameters;
80 static bool GetBucketAndObjectKey(
const char* pszURI,
const char* pszFSPrefix,
82 CPLString &osBucketOut, CPLString &osObjectKeyOut);
88 VSIS3HandleHelper(
const CPLString& osSecretAccessKey,
89 const CPLString& osAccessKeyId,
90 const CPLString& osSessionToken,
91 const CPLString& osAWSS3Endpoint,
92 const CPLString& osAWSRegion,
93 const CPLString& osRequestPayer,
94 const CPLString& osBucket,
95 const CPLString& osObjectKey,
96 bool bUseHTTPS,
bool bUseVirtualHosting);
99 static VSIS3HandleHelper* BuildFromURI(
const char* pszURI,
const char* pszFSPrefix,
100 bool bAllowNoObject);
101 static CPLString BuildURL(
const CPLString& osAWSS3Endpoint,
102 const CPLString& osBucket,
103 const CPLString& osObjectKey,
104 bool bUseHTTPS,
bool bUseVirtualHosting);
106 void ResetQueryParameters();
107 void AddQueryParameter(
const CPLString& osKey,
const CPLString& osValue);
108 struct curl_slist* GetCurlHeaders(
const CPLString& osVerb,
109 const void *pabyDataContent = NULL,
110 size_t nBytesContent = 0);
111 bool CanRestartOnError(
const char* pszErrorMsg) {
return CanRestartOnError(pszErrorMsg,
false); }
112 bool CanRestartOnError(
const char*,
bool bSetError);
114 const CPLString& GetURL()
const {
return m_osURL; }
115 const CPLString& GetBucket()
const {
return m_osBucket; }
116 const CPLString& GetObjectKey()
const {
return m_osObjectKey; }
117 const CPLString& GetAWSS3Endpoint()
const {
return m_osAWSS3Endpoint; }
118 const CPLString& GetAWSRegion()
const {
return m_osAWSRegion; }
119 const CPLString& GetRequestPayer()
const {
return m_osRequestPayer; }
120 bool GetVirtualHosting()
const {
return m_bUseVirtualHosting; }
121 void SetAWSS3Endpoint(
const CPLString &osStr);
122 void SetAWSRegion(
const CPLString &osStr);
123 void SetRequestPayer(
const CPLString &osStr);
124 void SetVirtualHosting(
bool b);
125 void SetObjectKey(
const CPLString &osStr);
128 class VSIS3UpdateParams
131 CPLString m_osAWSRegion;
132 CPLString m_osAWSS3Endpoint;
133 CPLString m_osRequestPayer;
134 bool m_bUseVirtualHosting;
136 VSIS3UpdateParams(
const CPLString& osAWSRegion =
"",
137 const CPLString& osAWSS3Endpoint =
"",
138 const CPLString& osRequestPayer =
"",
139 bool bUseVirtualHosting =
false) :
140 m_osAWSRegion(osAWSRegion),
141 m_osAWSS3Endpoint(osAWSS3Endpoint),
142 m_osRequestPayer(osRequestPayer),
143 m_bUseVirtualHosting(bUseVirtualHosting) {}