AWS SDK for C++
AWS SDK for C++
Loading...
Searching...
No Matches
AWSClient.h
Go to the documentation of this file.
1
6#pragma once
7#if !defined(AWS_CLIENT_H)
8#define AWS_CLIENT_H
9
19#include <memory>
20#include <atomic>
21
22namespace Aws
23{
24 namespace Utils
25 {
26 template<typename R, typename E>
27 class Outcome;
28
29 namespace RateLimits
30 {
32 } // namespace RateLimits
33
34 namespace Crypto
35 {
36 class MD5;
37 } // namespace Crypto
38 } // namespace Utils
39
40 namespace Http
41 {
42 class HttpClient;
43
44 class HttpClientFactory;
45
46 class HttpRequest;
47
48 class HttpResponse;
49
50 class URI;
51 } // namespace Http
52
53 namespace Auth
54 {
55 AWS_CORE_API extern const char SIGV4_SIGNER[];
56 AWS_CORE_API extern const char NULL_SIGNER[];
57 }
58
60
61 namespace Client
62 {
63 template<typename ERROR_TYPE>
64 class AWSError;
65 class AWSErrorMarshaller;
66 class AWSAuthSigner;
67 struct ClientConfiguration;
68 class RetryStrategy;
69
72
77 {
78 public:
85 const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer,
86 const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
87
94 const std::shared_ptr<Aws::Auth::AWSAuthSignerProvider>& signerProvider,
95 const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
96
97 virtual ~AWSClient() { };
98
103 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, long long expirationInSeconds = 0);
104
109 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0);
110
115 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, long long expirationInSeconds = 0) const;
116
121 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0);
122
127 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, long long expirationInSeconds = 0) const;
128
133 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0);
134
139 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, const char* signerName, long long expirationInSeconds = 0) const;
140
145 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, const char* signerName, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0);
146
148 Aws::Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
149 const Aws::Http::HeaderValueCollection& customizedHeaders = {},
150 uint64_t expirationInSeconds = 0,
151 const char* signerName = Aws::Auth::SIGV4_SIGNER,
152 const char* signerRegionOverride = nullptr,
153 const char* signerServiceNameOverride = nullptr);
154
156 const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0) const;
157
158 Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName,
159 const char* signerName, const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0) const;
160
161 Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName,
162 const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0) const;
163
165 const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0) const;
166
172
177
178 inline virtual const char* GetServiceClientName() const { return m_serviceName.c_str(); }
185
186 protected:
192 const Aws::AmazonWebServiceRequest& request,
193 Http::HttpMethod httpMethod,
194 const char* signerName,
195 const char* signerRegionOverride = nullptr,
196 const char* signerServiceNameOverride = nullptr) const;
197
206 Http::HttpMethod httpMethod,
207 const char* signerName,
208 const char* requestName = "",
209 const char* signerRegionOverride = nullptr,
210 const char* signerServiceNameOverride = nullptr) const;
211
216 HttpResponseOutcome AttemptOneRequest(const std::shared_ptr<Http::HttpRequest>& httpRequest,
217 const Aws::AmazonWebServiceRequest& request,
218 const char* signerName,
219 const char* signerRegionOverride = nullptr,
220 const char* signerServiceNameOverride = nullptr) const;
221
229 HttpResponseOutcome AttemptOneRequest(const std::shared_ptr<Http::HttpRequest>& httpRequest,
230 const char* signerName,
231 const char* requestName = "",
232 const char* signerRegionOverride = nullptr,
233 const char* signerServiceNameOverride = nullptr) const;
234
240 const Aws::AmazonWebServiceRequest& request,
241 Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
242 const char* signerName = Aws::Auth::SIGV4_SIGNER,
243 const char* signerRegionOverride = nullptr,
244 const char* signerServiceNameOverride = nullptr) const;
245
254 Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
255 const char* signerName = Aws::Auth::SIGV4_SIGNER,
256 const char* requestName = "",
257 const char* signerRegionOverride = nullptr,
258 const char* signerServiceNameOverride = nullptr) const;
259
261 const Aws::Endpoint::AWSEndpoint& endpoint,
262 Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
263 const char* signerName = Aws::Auth::SIGV4_SIGNER,
264 const char* signerRegionOverride = nullptr,
265 const char* signerServiceNameOverride = nullptr) const;
266
270 virtual AWSError<CoreErrors> BuildAWSError(const std::shared_ptr<Aws::Http::HttpResponse>& response) const = 0;
271
276 const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest) const;
277
281 const std::shared_ptr<AWSErrorMarshaller>& GetErrorMarshaller() const
282 {
283 return m_errorMarshaller;
284 }
285
290
291 friend Aws::Client::AWSAuthSigner* AWSUrlPresigner::GetSignerByName(const char* name) const;
292 protected:
293
301 std::shared_ptr<Aws::Http::HttpRequest> BuildAndSignHttpRequest(const Aws::Http::URI& uri,
302 const Aws::AmazonWebServiceRequest& request,
303 Http::HttpMethod method, const char* signerName) const;
304
308 std::shared_ptr<Aws::Http::HttpResponse> MakeHttpRequest(std::shared_ptr<Aws::Http::HttpRequest>& request) const;
310
316 static void AppendRecursionDetectionHeader(std::shared_ptr<Aws::Http::HttpRequest> ioRequest);
317
319 static bool DoesResponseGenerateError(const std::shared_ptr<Aws::Http::HttpResponse>& response);
320 private:
325 bool AdjustClockSkew(HttpResponseOutcome& outcome, const char* signerName) const;
326 void AddHeadersToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest, const Http::HeaderValueCollection& headerValues) const;
327 void AddChecksumToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& HttpRequest, const Aws::AmazonWebServiceRequest& request) const;
328 void AddContentBodyToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest, const std::shared_ptr<Aws::IOStream>& body,
329 bool needsContentMd5 = false, bool isChunked = false) const;
330 void AddCommonHeaders(Aws::Http::HttpRequest& httpRequest) const;
331 std::shared_ptr<Aws::IOStream> GetBodyStream(const Aws::AmazonWebServiceRequest& request) const;
332
333 std::shared_ptr<Aws::Http::HttpClient> m_httpClient;
334 std::shared_ptr<Aws::Auth::AWSAuthSignerProvider> m_signerProvider;
335 std::shared_ptr<AWSErrorMarshaller> m_errorMarshaller;
336 std::shared_ptr<RetryStrategy> m_retryStrategy;
337 std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> m_writeRateLimiter;
338 std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> m_readRateLimiter;
339 Aws::String m_userAgent;
340 bool m_customizedUserAgent;
341 std::shared_ptr<Aws::Utils::Crypto::Hash> m_hash;
342 long m_requestTimeoutMs;
343 bool m_enableClockSkewAdjustment;
344 Aws::String m_serviceName;
345 };
346
348 } // namespace Client
349} // namespace Aws
350
351#if !defined(AWS_JSON_CLIENT_H) && !defined(AWS_XML_CLIENT_H)
352/* Legacy backward compatibility macros to not break the build for ones including just AWSClient.h */
355#endif // !defined(AWS_JSON_CLIENT_H) && !defined(AWS_XML_CLIENT_H)
356#endif // !defined(AWS_CLIENT_H)
#define AWS_CORE_API
Definition: Core_EXPORTS.h:26
const char *const name
Definition: cJSON.h:278
Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest &request, const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const Aws::Http::QueryStringParameterCollection &extraParams=Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds=0) const
const std::shared_ptr< AWSErrorMarshaller > & GetErrorMarshaller() const
Definition: AWSClient.h:281
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const char *serviceName, const Aws::Http::HeaderValueCollection &customizedHeaders, long long expirationInSeconds=0)
AWSClient(const Aws::Client::ClientConfiguration &configuration, const std::shared_ptr< Aws::Auth::AWSAuthSignerProvider > &signerProvider, const std::shared_ptr< AWSErrorMarshaller > &errorMarshaller)
static CoreErrors GuessBodylessErrorType(Aws::Http::HttpResponseCode responseCode)
Aws::String GeneratePresignedUrl(const Aws::Endpoint::AWSEndpoint &endpoint, Aws::Http::HttpMethod method=Http::HttpMethod::HTTP_POST, const Aws::Http::HeaderValueCollection &customizedHeaders={}, uint64_t expirationInSeconds=0, const char *signerName=Aws::Auth::SIGV4_SIGNER, const char *signerRegionOverride=nullptr, const char *signerServiceNameOverride=nullptr)
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const char *serviceName, const char *signerName, long long expirationInSeconds=0) const
Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest &request, const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const char *serviceName, const char *signerName, const Aws::Http::QueryStringParameterCollection &extraParams=Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds=0) const
virtual void BuildHttpRequest(const Aws::AmazonWebServiceRequest &request, const std::shared_ptr< Aws::Http::HttpRequest > &httpRequest) const
Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest &request, const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const Aws::Http::QueryStringParameterCollection &extraParams=Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds=0) const
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, long long expirationInSeconds=0) const
static bool DoesResponseGenerateError(const std::shared_ptr< Aws::Http::HttpResponse > &response)
Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest &request, const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const char *serviceName, const Aws::Http::QueryStringParameterCollection &extraParams=Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds=0) const
Aws::String m_region
Definition: AWSClient.h:309
virtual void SetServiceClientName(const Aws::String &name)
virtual ~AWSClient()
Definition: AWSClient.h:97
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const char *serviceName, long long expirationInSeconds=0) const
HttpResponseOutcome AttemptOneRequest(const std::shared_ptr< Http::HttpRequest > &httpRequest, const char *signerName, const char *requestName="", const char *signerRegionOverride=nullptr, const char *signerServiceNameOverride=nullptr) const
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const Aws::Http::HeaderValueCollection &customizedHeaders, long long expirationInSeconds=0)
std::shared_ptr< Aws::Http::HttpRequest > BuildAndSignHttpRequest(const Aws::Http::URI &uri, const Aws::AmazonWebServiceRequest &request, Http::HttpMethod method, const char *signerName) const
Aws::Client::AWSAuthSigner * GetSignerByName(const char *name) const
virtual AWSError< CoreErrors > BuildAWSError(const std::shared_ptr< Aws::Http::HttpResponse > &response) const =0
std::shared_ptr< Aws::Http::HttpResponse > MakeHttpRequest(std::shared_ptr< Aws::Http::HttpRequest > &request) const
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const char *serviceName, const char *signerName, const Aws::Http::HeaderValueCollection &customizedHeaders, long long expirationInSeconds=0)
StreamOutcome MakeRequestWithUnparsedResponse(const Aws::AmazonWebServiceRequest &request, const Aws::Endpoint::AWSEndpoint &endpoint, Http::HttpMethod method=Http::HttpMethod::HTTP_POST, const char *signerName=Aws::Auth::SIGV4_SIGNER, const char *signerRegionOverride=nullptr, const char *signerServiceNameOverride=nullptr) const
HttpResponseOutcome AttemptExhaustively(const Aws::Http::URI &uri, const Aws::AmazonWebServiceRequest &request, Http::HttpMethod httpMethod, const char *signerName, const char *signerRegionOverride=nullptr, const char *signerServiceNameOverride=nullptr) const
virtual const char * GetServiceClientName() const
Definition: AWSClient.h:178
AWSClient(const Aws::Client::ClientConfiguration &configuration, const std::shared_ptr< Aws::Client::AWSAuthSigner > &signer, const std::shared_ptr< AWSErrorMarshaller > &errorMarshaller)
HttpResponseOutcome AttemptOneRequest(const std::shared_ptr< Http::HttpRequest > &httpRequest, const Aws::AmazonWebServiceRequest &request, const char *signerName, const char *signerRegionOverride=nullptr, const char *signerServiceNameOverride=nullptr) const
StreamOutcome MakeRequestWithUnparsedResponse(const Aws::Http::URI &uri, Http::HttpMethod method=Http::HttpMethod::HTTP_POST, const char *signerName=Aws::Auth::SIGV4_SIGNER, const char *requestName="", const char *signerRegionOverride=nullptr, const char *signerServiceNameOverride=nullptr) const
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, long long expirationInSeconds=0)
StreamOutcome MakeRequestWithUnparsedResponse(const Aws::Http::URI &uri, const Aws::AmazonWebServiceRequest &request, Http::HttpMethod method=Http::HttpMethod::HTTP_POST, const char *signerName=Aws::Auth::SIGV4_SIGNER, const char *signerRegionOverride=nullptr, const char *signerServiceNameOverride=nullptr) const
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const Aws::Http::HeaderValueCollection &customizedHeaders, long long expirationInSeconds=0)
HttpResponseOutcome AttemptExhaustively(const Aws::Http::URI &uri, Http::HttpMethod httpMethod, const char *signerName, const char *requestName="", const char *signerRegionOverride=nullptr, const char *signerServiceNameOverride=nullptr) const
static void AppendRecursionDetectionHeader(std::shared_ptr< Aws::Http::HttpRequest > ioRequest)
AWS_CORE_API const char SIGV4_SIGNER[]
Definition: AWSClient.h:55
AWS_CORE_API const char NULL_SIGNER[]
Definition: AWSClient.h:56
Utils::Outcome< std::shared_ptr< Aws::Http::HttpResponse >, AWSError< CoreErrors > > HttpResponseOutcome
Definition: AWSClient.h:70
AWS_CORE_API Aws::String GetAuthorizationHeader(const Aws::Http::HttpRequest &httpRequest)
Utils::Outcome< AmazonWebServiceResult< Utils::Stream::ResponseStream >, AWSError< CoreErrors > > StreamOutcome
Definition: AWSClient.h:71
Aws::MultiMap< Aws::String, Aws::String > QueryStringParameterCollection
Definition: URI.h:29
Aws::Map< Aws::String, Aws::String > HeaderValueCollection
Definition: HttpTypes.h:53
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition: AWSString.h:97