AWS SDK for C++

AWS SDK for C++ Version 1.11.827

Loading...
Searching...
No Matches
AWSClient.h
1
6#pragma once
7#if !defined(AWS_CLIENT_H)
8#define AWS_CLIENT_H
9
10#include <aws/core/Core_EXPORTS.h>
11#include <aws/core/client/CoreErrors.h>
12#include <aws/core/client/AWSUrlPresigner.h>
13#include <aws/core/http/HttpTypes.h>
14#include <aws/core/utils/memory/stl/AWSString.h>
15#include <aws/core/AmazonWebServiceResult.h>
16#include <aws/core/utils/crypto/Hash.h>
17#include <aws/core/auth/AWSAuthSignerProvider.h>
18#include <aws/core/endpoint/AWSEndpoint.h>
19#include <smithy/client/features/UserAgentInterceptor.h>
20#include <smithy/interceptor/Interceptor.h>
21#include <memory>
22#include <atomic>
23
24namespace Aws
25{
26 namespace Utils
27 {
28 template<typename R, typename E>
29 class Outcome;
30
31 namespace RateLimits
32 {
34 } // namespace RateLimits
35
36 namespace Crypto
37 {
38 class MD5;
39 } // namespace Crypto
40 } // namespace Utils
41
42 namespace Http
43 {
44 class HttpClient;
45
46 class HttpClientFactory;
47
48 class HttpRequest;
49
50 class HttpResponse;
51
52 class URI;
53 } // namespace Http
54
55 namespace Auth
56 {
57 AWS_CORE_API extern const char SIGV4_SIGNER[];
58 AWS_CORE_API extern const char NULL_SIGNER[];
59 }
60
62
63 namespace Client
64 {
65 template<typename ERROR_TYPE>
66 class AWSError;
67 class AWSErrorMarshaller;
68 class AWSAuthSigner;
69 struct ClientConfiguration;
70 class RetryStrategy;
71
74
78 class AWS_CORE_API AWSClient
79 {
80 public:
87 const std::shared_ptr<Aws::Client::AWSAuthSigner>& signer,
88 const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
89
96 const std::shared_ptr<Aws::Auth::AWSAuthSignerProvider>& signerProvider,
97 const std::shared_ptr<AWSErrorMarshaller>& errorMarshaller);
98
99 virtual ~AWSClient() { };
100
105 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, long long expirationInSeconds = 0, const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {});
106
111 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0, const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {});
112
117 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, long long expirationInSeconds = 0, const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {}) const;
118
123 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const Aws::Http::HeaderValueCollection& customizedHeaders, long long expirationInSeconds = 0, const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {});
124
129 Aws::String GeneratePresignedUrl(const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName, long long expirationInSeconds = 0, const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {}) const;
130
135 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, const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {});
136
141 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 std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {}) const;
142
147 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, const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {});
148
150 Aws::Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
151 const Aws::Http::HeaderValueCollection& customizedHeaders = {},
152 uint64_t expirationInSeconds = 0,
153 const char* signerName = Aws::Auth::SIGV4_SIGNER,
154 const char* signerRegionOverride = nullptr,
155 const char* signerServiceNameOverride = nullptr,
156 const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {});
157
159 const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0,
160 const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {}) const;
161
162 Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName,
163 const char* signerName, const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0,
164 const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {}) const;
165
166 Aws::String GeneratePresignedUrl(const Aws::AmazonWebServiceRequest& request, const Aws::Http::URI& uri, Aws::Http::HttpMethod method, const char* region, const char* serviceName,
167 const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0,
168 const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {}) const;
169
171 const Aws::Http::QueryStringParameterCollection& extraParams = Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds = 0,
172 const std::shared_ptr<Aws::Http::ServiceSpecificParameters> serviceSpecificParameter = {}) const;
173
174 const std::shared_ptr<Aws::Http::HttpClient>& GetHttpClient() const { return m_httpClient; }
175
181
186
187 inline virtual const char* GetServiceClientName() const { return m_serviceName.c_str(); }
193 virtual void SetServiceClientName(const Aws::String& name);
194
195 void AppendToUserAgent(const Aws::String& valueToAppend);
196 protected:
202 const Aws::AmazonWebServiceRequest& request,
203 Http::HttpMethod httpMethod,
204 const char* signerName,
205 const char* signerRegionOverride = nullptr,
206 const char* signerServiceNameOverride = nullptr) const;
207
216 Http::HttpMethod httpMethod,
217 const char* signerName,
218 const char* requestName = "",
219 const char* signerRegionOverride = nullptr,
220 const char* signerServiceNameOverride = nullptr) const;
221
226 HttpResponseOutcome AttemptOneRequest(const std::shared_ptr<Http::HttpRequest>& httpRequest,
227 const Aws::AmazonWebServiceRequest& request,
228 const char* signerName,
229 const char* signerRegionOverride = nullptr,
230 const char* signerServiceNameOverride = nullptr) const;
231
239 HttpResponseOutcome AttemptOneRequest(const std::shared_ptr<Http::HttpRequest>& httpRequest,
240 const char* signerName,
241 const char* requestName = "",
242 const char* signerRegionOverride = nullptr,
243 const char* signerServiceNameOverride = nullptr) const;
244
250 const Aws::AmazonWebServiceRequest& request,
251 Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
252 const char* signerName = Aws::Auth::SIGV4_SIGNER,
253 const char* signerRegionOverride = nullptr,
254 const char* signerServiceNameOverride = nullptr) const;
255
264 Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
265 const char* signerName = Aws::Auth::SIGV4_SIGNER,
266 const char* requestName = "",
267 const char* signerRegionOverride = nullptr,
268 const char* signerServiceNameOverride = nullptr) const;
269
271 const Aws::Endpoint::AWSEndpoint& endpoint,
272 Http::HttpMethod method = Http::HttpMethod::HTTP_POST,
273 const char* signerName = Aws::Auth::SIGV4_SIGNER,
274 const char* signerRegionOverride = nullptr,
275 const char* signerServiceNameOverride = nullptr) const;
276
280 virtual AWSError<CoreErrors> BuildAWSError(const std::shared_ptr<Aws::Http::HttpResponse>& response) const = 0;
281
286 const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest) const;
287
292 virtual void AddContentLengthToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest,
293 const std::shared_ptr<Aws::IOStream>& body,
294 bool isChunked) const;
295
299 const std::shared_ptr<AWSErrorMarshaller>& GetErrorMarshaller() const
300 {
301 return m_errorMarshaller;
302 }
303
308
309 friend Aws::Client::AWSAuthSigner* AWSUrlPresigner::GetSignerByName(const char* name) const;
310
311 std::shared_ptr<Auth::AWSCredentialsProvider> GetCredentialsProvider() const {
312 return m_signerProvider->GetCredentialsProvider();
313 }
314
322 std::shared_ptr<Aws::Http::HttpRequest> BuildAndSignHttpRequest(const Aws::Http::URI& uri,
323 const Aws::AmazonWebServiceRequest& request,
324 Http::HttpMethod method, const char* signerName) const;
325
329 std::shared_ptr<Aws::Http::HttpResponse> MakeHttpRequest(std::shared_ptr<Aws::Http::HttpRequest>& request) const;
331
337 static void AppendRecursionDetectionHeader(std::shared_ptr<Aws::Http::HttpRequest> ioRequest);
338
340 static bool DoesResponseGenerateError(const std::shared_ptr<Aws::Http::HttpResponse>& response);
341 std::shared_ptr<smithy::components::tracing::TelemetryProvider> m_telemetryProvider;
342 std::shared_ptr<Aws::Auth::AWSAuthSignerProvider> m_signerProvider;
343 private:
348 bool AdjustClockSkew(HttpResponseOutcome& outcome, const char* signerName) const;
349 void AddHeadersToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest, const Http::HeaderValueCollection& headerValues) const;
350 void AddContentBodyToRequest(const std::shared_ptr<Aws::Http::HttpRequest>& httpRequest, const std::shared_ptr<Aws::IOStream>& body,
351 bool needsContentMd5 = false, bool isChunked = false) const;
352 void AppendHeaderValueToRequest(const std::shared_ptr<Http::HttpRequest> &request, String header, String value) const;
353
354 std::shared_ptr<Aws::Http::HttpClient> m_httpClient;
355 std::shared_ptr<AWSErrorMarshaller> m_errorMarshaller;
356 std::shared_ptr<RetryStrategy> m_retryStrategy;
357 std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> m_writeRateLimiter;
358 std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> m_readRateLimiter;
359 std::shared_ptr<Aws::Utils::Crypto::Hash> m_hash;
360 long m_requestTimeoutMs;
361 bool m_enableClockSkewAdjustment;
362 Aws::String m_serviceName = "AWSBaseClient";
363 Aws::Client::RequestCompressionConfig m_requestCompressionConfig;
364 std::shared_ptr<smithy::client::UserAgentInterceptor> m_userAgentInterceptor;
366 };
367
369 } // namespace Client
370} // namespace Aws
371
372#if !defined(AWS_JSON_CLIENT_H) && !defined(AWS_XML_CLIENT_H) && !defined(AWS_CBOR_CLIENT_H)
373/* Legacy backward compatibility macros to not break the build for ones including just AWSClient.h */
374#include <aws/core/client/AWSJsonClient.h>
375#include <aws/core/client/AWSRpcV2CborClient.h>
376#include <aws/core/client/AWSXmlClient.h>
377#endif // !defined(AWS_JSON_CLIENT_H) && !defined(AWS_XML_CLIENT_H) && !defined(AWS_CBOR_CLIENT_H)
378#endif // !defined(AWS_CLIENT_H)
const std::shared_ptr< AWSErrorMarshaller > & GetErrorMarshaller() const
Definition AWSClient.h:299
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)
virtual void BuildHttpRequest(const Aws::AmazonWebServiceRequest &request, const std::shared_ptr< Aws::Http::HttpRequest > &httpRequest) const
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, long long expirationInSeconds=0, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={}) const
static bool DoesResponseGenerateError(const std::shared_ptr< Aws::Http::HttpResponse > &response)
std::shared_ptr< Aws::Auth::AWSAuthSignerProvider > m_signerProvider
Definition AWSClient.h:342
virtual void SetServiceClientName(const Aws::String &name)
virtual void AddContentLengthToRequest(const std::shared_ptr< Aws::Http::HttpRequest > &httpRequest, const std::shared_ptr< Aws::IOStream > &body, bool isChunked) const
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 std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={}) 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::AmazonWebServiceRequest &request, const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const Aws::Http::QueryStringParameterCollection &extraParams=Aws::Http::QueryStringParameterCollection(), long long expirationInSeconds=0, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={}) const
const std::shared_ptr< Aws::Http::HttpClient > & GetHttpClient() const
Definition AWSClient.h:174
void AppendToUserAgent(const Aws::String &valueToAppend)
std::shared_ptr< Aws::Http::HttpRequest > BuildAndSignHttpRequest(const Aws::Http::URI &uri, const Aws::AmazonWebServiceRequest &request, Http::HttpMethod method, const char *signerName) const
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, long long expirationInSeconds=0, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={})
Aws::Client::AWSAuthSigner * GetSignerByName(const char *name) 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, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={})
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
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
std::shared_ptr< smithy::components::tracing::TelemetryProvider > m_telemetryProvider
Definition AWSClient.h:341
virtual const char * GetServiceClientName() const
Definition AWSClient.h:187
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
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const char *region, const char *serviceName, long long expirationInSeconds=0, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={}) 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, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={})
Aws::String GeneratePresignedUrl(const Aws::Http::URI &uri, Aws::Http::HttpMethod method, const Aws::Http::HeaderValueCollection &customizedHeaders, long long expirationInSeconds=0, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={})
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
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 char *region, const char *serviceName, const char *signerName, long long expirationInSeconds=0, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={}) const
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, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={})
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 std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={}) const
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
std::shared_ptr< Auth::AWSCredentialsProvider > GetCredentialsProvider() const
Definition AWSClient.h:311
static void AppendRecursionDetectionHeader(std::shared_ptr< Aws::Http::HttpRequest > ioRequest)
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 std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={}) const
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, const std::shared_ptr< Aws::Http::ServiceSpecificParameters > serviceSpecificParameter={})
AWS_CORE_API const char SIGV4_SIGNER[]
Definition AWSClient.h:57
AWS_CORE_API const char NULL_SIGNER[]
Definition AWSClient.h:58
Utils::Outcome< std::shared_ptr< Aws::Http::HttpResponse >, AWSError< CoreErrors > > HttpResponseOutcome
Definition AWSClient.h:72
AWS_CORE_API Aws::String GetAuthorizationHeader(const Aws::Http::HttpRequest &httpRequest)
Utils::Outcome< AmazonWebServiceResult< Utils::Stream::ResponseStream >, AWSError< CoreErrors > > StreamOutcome
Definition AWSClient.h:73
Aws::MultiMap< Aws::String, Aws::String > QueryStringParameterCollection
Definition URI.h:32
Aws::Map< Aws::String, Aws::String > HeaderValueCollection
Definition HttpTypes.h:56
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition AWSString.h:97
std::vector< T, Aws::Allocator< T > > Vector
Definition AWSVector.h:17