31 #ifndef CPL_AWS_INCLUDED_H 32 #define CPL_AWS_INCLUDED_H 36 CPLString CPLGetAWS_SIGN4_Authorization(
const CPLString& osSecretAccessKey,
37 const CPLString& osAccessKeyId,
38 const CPLString& osAccessToken,
39 const CPLString& osAWSRegion,
40 const CPLString& osService,
41 const CPLString& osVerb,
42 const CPLString& osHost,
43 const CPLString& osCanonicalURI,
44 const CPLString& osCanonicalQueryString,
45 const CPLString& osXAMZContentSHA256,
46 const CPLString& osTimestamp);
48 CPLString CPLGetLowerCaseHexSHA256(
const void *pabyData,
size_t nBytes );
49 CPLString CPLGetLowerCaseHexSHA256(
const CPLString& osStr );
51 CPLString CPLGetAWS_SIGN4_Timestamp();
53 CPLString CPLAWSURLEncode(
const CPLString& osURL,
bool bEncodeSlash =
true);
57 #include <curl/curl.h> 60 class VSIS3HandleHelper
63 CPLString m_osSecretAccessKey;
64 CPLString m_osAccessKeyId;
65 CPLString m_osSessionToken;
66 CPLString m_osAWSS3Endpoint;
67 CPLString m_osAWSRegion;
69 CPLString m_osObjectKey;
71 bool m_bUseVirtualHosting;
72 std::map<CPLString, CPLString> m_oMapQueryParameters;
74 static bool GetBucketAndObjectKey(
const char* pszURI,
const char* pszFSPrefix,
76 CPLString &osBucketOut, CPLString &osObjectKeyOut);
82 VSIS3HandleHelper(
const CPLString& osSecretAccessKey,
83 const CPLString& osAccessKeyId,
84 const CPLString& osSessionToken,
85 const CPLString& osAWSS3Endpoint,
86 const CPLString& osAWSRegion,
87 const CPLString& osBucket,
88 const CPLString& osObjectKey,
89 bool bUseHTTPS,
bool bUseVirtualHosting);
92 static VSIS3HandleHelper* BuildFromURI(
const char* pszURI,
const char* pszFSPrefix,
94 static CPLString BuildURL(
const CPLString& osAWSS3Endpoint,
95 const CPLString& osBucket,
96 const CPLString& osObjectKey,
97 bool bUseHTTPS,
bool bUseVirtualHosting);
99 void ResetQueryParameters();
100 void AddQueryParameter(
const CPLString& osKey,
const CPLString& osValue);
101 struct curl_slist* GetCurlHeaders(
const CPLString& osVerb,
102 const void *pabyDataContent = NULL,
103 size_t nBytesContent = 0);
104 bool CanRestartOnError(
const char* pszErrorMsg) {
return CanRestartOnError(pszErrorMsg,
false); }
105 bool CanRestartOnError(
const char*,
bool bSetError);
107 const CPLString& GetURL()
const {
return m_osURL; }
108 const CPLString& GetBucket()
const {
return m_osBucket; }
109 const CPLString& GetObjectKey()
const {
return m_osObjectKey; }
110 const CPLString& GetAWSS3Endpoint()
const {
return m_osAWSS3Endpoint; }
111 const CPLString& GetAWSRegion()
const {
return m_osAWSRegion; }
112 bool GetVirtualHosting()
const {
return m_bUseVirtualHosting; }
113 void SetAWSS3Endpoint(
const CPLString &osStr);
114 void SetAWSRegion(
const CPLString &osStr);
115 void SetVirtualHosting(
bool b);
116 void SetObjectKey(
const CPLString &osStr);
119 class VSIS3UpdateParams
122 CPLString m_osAWSRegion;
123 CPLString m_osAWSS3Endpoint;
124 bool m_bUseVirtualHosting;
126 VSIS3UpdateParams(
const CPLString& osAWSRegion =
"",
127 const CPLString& osAWSS3Endpoint =
"",
128 bool bUseVirtualHosting =
false) :
129 m_osAWSRegion(osAWSRegion),
130 m_osAWSS3Endpoint(osAWSS3Endpoint),
131 m_bUseVirtualHosting(bUseVirtualHosting) {}