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
89 std::map<CPLString, CPLString> m_oMapQueryParameters{};
91 virtual void RebuildURL() = 0;
92 CPLString GetQueryString(
bool bAddEmptyValueAfterEqual)
const;
95 IVSIS3LikeHandleHelper() =
default;
96 virtual ~IVSIS3LikeHandleHelper() =
default;
98 void ResetQueryParameters();
101 virtual struct curl_slist* GetCurlHeaders(
const CPLString& osVerb,
102 const struct curl_slist* psExistingHeaders,
103 const void *pabyDataContent =
nullptr,
104 size_t nBytesContent = 0)
const = 0;
106 virtual bool AllowAutomaticRedirection() {
return true; }
107 virtual bool CanRestartOnError(
const char*,
const char* ,
108 bool ,
bool* =
nullptr) {
return false;}
110 virtual const CPLString& GetURL()
const = 0;
112 static bool GetBucketAndObjectKey(
const char* pszURI,
113 const char* pszFSPrefix,
118 static CPLString BuildCanonicalizedHeaders(
119 std::map<CPLString, CPLString>& oSortedMapHeaders,
120 const struct curl_slist* psExistingHeaders,
121 const char* pszHeaderPrefix);
126 class VSIS3HandleHelper final:
public IVSIS3LikeHandleHelper
139 bool m_bUseHTTPS =
false;
140 bool m_bUseVirtualHosting =
false;
141 bool m_bFromEC2 =
false;
143 void RebuildURL()
override;
145 static bool GetConfigurationFromEC2(
CPLString& osSecretAccessKey,
149 static bool GetConfigurationFromAWSConfigFiles(
165 VSIS3HandleHelper(
const CPLString& osSecretAccessKey,
173 bool bUseHTTPS,
bool bUseVirtualHosting,
bool bFromEC2);
174 ~VSIS3HandleHelper();
176 static VSIS3HandleHelper* BuildFromURI(
const char* pszURI,
177 const char* pszFSPrefix,
183 bool bUseHTTPS,
bool bUseVirtualHosting);
185 struct curl_slist* GetCurlHeaders(
187 const struct curl_slist* psExistingHeaders,
188 const void *pabyDataContent =
nullptr,
189 size_t nBytesContent = 0)
const override;
191 bool AllowAutomaticRedirection()
override {
return false; }
192 bool CanRestartOnError(
const char*,
const char* pszHeaders,
194 bool* pbUpdateMap =
nullptr)
override;
196 const CPLString& GetURL()
const override {
return m_osURL; }
197 const CPLString& GetBucket()
const {
return m_osBucket; }
198 const CPLString& GetObjectKey()
const {
return m_osObjectKey; }
199 const CPLString& GetEndpoint()
const {
return m_osEndpoint; }
200 const CPLString& GetRegion()
const {
return m_osRegion; }
201 const CPLString& GetRequestPayer()
const {
return m_osRequestPayer; }
202 bool GetVirtualHosting()
const {
return m_bUseVirtualHosting; }
203 void SetEndpoint(
const CPLString &osStr);
205 void SetRequestPayer(
const CPLString &osStr);
206 void SetVirtualHosting(
bool b);
210 static void CleanMutex();
211 static void ClearCache();
214 class VSIS3UpdateParams
220 bool m_bUseVirtualHosting =
false;
222 VSIS3UpdateParams() =
default;
224 explicit VSIS3UpdateParams(
const VSIS3HandleHelper* poHelper) :
225 m_osRegion(poHelper->GetRegion()),
226 m_osEndpoint(poHelper->GetEndpoint()),
227 m_osRequestPayer(poHelper->GetRequestPayer()),
228 m_bUseVirtualHosting(poHelper->GetVirtualHosting()) {}
230 void UpdateHandlerHelper(VSIS3HandleHelper* poHelper) {
231 poHelper->SetRegion(m_osRegion);
232 poHelper->SetEndpoint(m_osEndpoint);
233 poHelper->SetRequestPayer(m_osRequestPayer);
234 poHelper->SetVirtualHosting(m_bUseVirtualHosting);
CPLHTTPResult * CPLHTTPFetch(const char *pszURL, CSLConstList papszOptions)
Fetch a document from an url and return in a string.
Definition: cpl_http.cpp:648
const char * CPLReadLineL(VSILFILE *)
Definition: cpl_conv.cpp:630
char ** CSLTokenizeString2(const char *pszString, const char *pszDelimiter, int nCSLTFlags)
Definition: cpl_string.cpp:836
unsigned char GByte
Definition: cpl_port.h:215
size_t VSIFReadL(void *, size_t, size_t, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Read bytes from file.
Definition: cpl_vsil.cpp:1690
int CPLPrintTime(char *, int, const char *, const struct tm *, const char *)
Definition: cpl_conv.cpp:1502
void CPLHTTPDestroyResult(CPLHTTPResult *psResult)
Clean the memory associated with the return value of CPLHTTPFetch()
Definition: cpl_http.cpp:2080
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:439
void CPLPopErrorHandler(void)
Definition: cpl_error.cpp:1242
#define CSLT_HONOURSTRINGS
Definition: cpl_string.h:83
const char * CSLFetchNameValueDef(CSLConstList papszStrList, const char *pszName, const char *pszDefault)
Definition: cpl_string.cpp:1646
char ** CSLSetNameValue(char **papszStrList, const char *pszName, const char *pszValue)
Definition: cpl_string.cpp:1877
Convenient string class based on std::string.
Definition: cpl_string.h:330
CPLXMLNode * CPLParseXMLString(const char *)
Parse an XML string into tree form.
Definition: cpl_minixml.cpp:614
Definition: cpl_minixml.h:67
#define EQUAL(a, b)
Definition: cpl_port.h:569
int VSIFCloseL(VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Close file.
Definition: cpl_vsil.cpp:1472
void CPLPushErrorHandler(CPLErrorHandler)
Definition: cpl_error.cpp:1185
CPLStringList & SetNameValue(const char *pszKey, const char *pszValue)
Definition: cplstringlist.cpp:402
bool CPLTestBool(const char *pszValue)
Definition: cpl_string.cpp:1526
char ** CSLConstList
Definition: cpl_port.h:1194
Definition: cpl_http.h:66
GByte * pabyData
Definition: cpl_http.h:82
void CPLDestroyXMLNode(CPLXMLNode *)
Destroy a tree.
Definition: cpl_minixml.cpp:1405
void CPLDebug(const char *, const char *,...)
Definition: cpl_error.cpp:602
#define STARTS_WITH(a, b)
Definition: cpl_port.h:578
const char * CPLSPrintf(const char *fmt,...)
Definition: cpl_string.cpp:977
const char * CPLGetXMLValue(const CPLXMLNode *poRoot, const char *pszPath, const char *pszDefault)
Fetch element/attribute value.
Definition: cpl_minixml.cpp:1638
Definition: cpl_multiproc.h:140
void CPLError(CPLErr eErrClass, CPLErrorNum err_no, const char *fmt,...)
Definition: cpl_error.cpp:308
const char * CPLParseNameValue(const char *pszNameValue, char **ppszKey)
Definition: cpl_string.cpp:1754
CPLSTRING_METHOD_DLL CPLString & Trim()
Definition: cplstring.cpp:203
int nStatus
Definition: cpl_http.h:68
void CSLDestroy(char **papszStrList)
Definition: cpl_string.cpp:200
long long GIntBig
Definition: cpl_port.h:248
#define EQUALN(a, b, n)
Definition: cpl_port.h:567
VSILFILE * VSIFOpenL(const char *, const char *)
Open file.
Definition: cpl_vsil.cpp:997
void CPLQuietErrorHandler(CPLErr, CPLErrorNum, const char *)
Definition: cpl_error.cpp:967
#define CPLFree
Definition: cpl_conv.h:81
const char * FetchNameValueDef(const char *pszKey, const char *pszDefault) const
Definition: cplstringlist.cpp:725
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Definition: cpl_port.h:997
const char * CPLGetConfigOption(const char *, const char *)
Definition: cpl_conv.cpp:1692
FILE VSILFILE
Definition: cpl_vsi.h:156
#define STARTS_WITH_CI(a, b)
Definition: cpl_port.h:580
#define CPLE_AppDefined
Definition: cpl_error.h:99
Generated for GDAL by
1.8.20.