31 #ifndef CPL_AWS_INCLUDED_H 32 #define CPL_AWS_INCLUDED_H 42 #include <curl/curl.h> 45 CPLString CPLGetLowerCaseHexSHA256(
const void *pabyData,
size_t nBytes );
52 CPLString CPLAWSGetHeaderVal(
const struct curl_slist* psExistingHeaders,
56 CPLGetAWS_SIGN4_Signature(
const CPLString& osSecretAccessKey,
62 const struct curl_slist* psExistingHeaders,
77 const struct curl_slist* psExistingHeaders,
84 class IVSIS3LikeHandleHelper
87 std::map<CPLString, CPLString> m_oMapQueryParameters;
89 virtual void RebuildURL() = 0;
90 CPLString GetQueryString(
bool bAddEmptyValueAfterEqual)
const;
93 IVSIS3LikeHandleHelper() {}
94 virtual ~IVSIS3LikeHandleHelper() {}
96 void ResetQueryParameters();
99 virtual struct curl_slist* GetCurlHeaders(
const CPLString& osVerb,
100 const struct curl_slist* psExistingHeaders,
101 const void *pabyDataContent =
nullptr,
102 size_t nBytesContent = 0)
const = 0;
104 virtual bool AllowAutomaticRedirection() {
return true; }
105 virtual bool CanRestartOnError(
const char*,
const char* ,
106 bool ,
bool* =
nullptr) {
return false;}
108 virtual const CPLString& GetURL()
const = 0;
110 static bool GetBucketAndObjectKey(
const char* pszURI,
111 const char* pszFSPrefix,
116 static CPLString BuildCanonicalizedHeaders(
117 std::map<CPLString, CPLString>& oSortedMapHeaders,
118 const struct curl_slist* psExistingHeaders,
119 const char* pszHeaderPrefix);
122 class VSIS3HandleHelper final:
public IVSIS3LikeHandleHelper
134 bool m_bUseVirtualHosting;
136 void RebuildURL()
override;
138 static bool GetConfigurationFromEC2(
CPLString& osSecretAccessKey,
142 static bool GetConfigurationFromAWSConfigFiles(
157 VSIS3HandleHelper(
const CPLString& osSecretAccessKey,
165 bool bUseHTTPS,
bool bUseVirtualHosting);
166 ~VSIS3HandleHelper();
168 static VSIS3HandleHelper* BuildFromURI(
const char* pszURI,
169 const char* pszFSPrefix,
175 bool bUseHTTPS,
bool bUseVirtualHosting);
177 struct curl_slist* GetCurlHeaders(
179 const struct curl_slist* psExistingHeaders,
180 const void *pabyDataContent =
nullptr,
181 size_t nBytesContent = 0)
const override;
183 bool AllowAutomaticRedirection()
override {
return false; }
184 bool CanRestartOnError(
const char*,
const char* pszHeaders,
186 bool* pbUpdateMap =
nullptr)
override;
188 const CPLString& GetURL()
const override {
return m_osURL; }
189 const CPLString& GetBucket()
const {
return m_osBucket; }
190 const CPLString& GetObjectKey()
const {
return m_osObjectKey; }
191 const CPLString& GetEndpoint()
const {
return m_osEndpoint; }
192 const CPLString& GetRegion()
const {
return m_osRegion; }
193 const CPLString& GetRequestPayer()
const {
return m_osRequestPayer; }
194 bool GetVirtualHosting()
const {
return m_bUseVirtualHosting; }
195 void SetEndpoint(
const CPLString &osStr);
197 void SetRequestPayer(
const CPLString &osStr);
198 void SetVirtualHosting(
bool b);
202 static void CleanMutex();
203 static void ClearCache();
206 class VSIS3UpdateParams
212 bool m_bUseVirtualHosting;
214 VSIS3UpdateParams() :
215 m_bUseVirtualHosting(false) {}
217 explicit VSIS3UpdateParams(
const VSIS3HandleHelper* poHelper) :
218 m_osRegion(poHelper->GetRegion()),
219 m_osEndpoint(poHelper->GetEndpoint()),
220 m_osRequestPayer(poHelper->GetRequestPayer()),
221 m_bUseVirtualHosting(poHelper->GetVirtualHosting()) {}
223 void UpdateHandlerHelper(VSIS3HandleHelper* poHelper) {
224 poHelper->SetRegion(m_osRegion);
225 poHelper->SetEndpoint(m_osEndpoint);
226 poHelper->SetRequestPayer(m_osRequestPayer);
227 poHelper->SetVirtualHosting(m_bUseVirtualHosting);
Convenient string class based on std::string.
Definition: cpl_string.h:336
Various convenience functions for working with strings and string lists.
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1184