AWS SDK for C++  0.12.9
AWS SDK for C++
HttpRequest.h
Go to the documentation of this file.
1 /*
2  * Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  * http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 #pragma once
17 
18 #include <aws/core/Core_EXPORTS.h>
19 
20 #include <aws/core/http/URI.h>
25 #include <memory>
26 #include <functional>
27 
28 namespace Aws
29 {
30  namespace Http
31  {
32  extern AWS_CORE_API const char* DATE_HEADER;
33  extern AWS_CORE_API const char* AWS_DATE_HEADER;
34  extern AWS_CORE_API const char* AWS_SECURITY_TOKEN;
35  extern AWS_CORE_API const char* ACCEPT_HEADER;
36  extern AWS_CORE_API const char* ACCEPT_CHAR_SET_HEADER;
37  extern AWS_CORE_API const char* ACCEPT_ENCODING_HEADER;
38  extern AWS_CORE_API const char* AUTHORIZATION_HEADER;
39  extern AWS_CORE_API const char* AWS_AUTHORIZATION_HEADER;
40  extern AWS_CORE_API const char* COOKIE_HEADER;
41  extern AWS_CORE_API const char* CONTENT_LENGTH_HEADER;
42  extern AWS_CORE_API const char* CONTENT_TYPE_HEADER;
43  extern AWS_CORE_API const char* USER_AGENT_HEADER;
44  extern AWS_CORE_API const char* VIA_HEADER;
45  extern AWS_CORE_API const char* HOST_HEADER;
46  extern AWS_CORE_API const char* AMZ_TARGET_HEADER;
47  extern AWS_CORE_API const char* X_AMZ_EXPIRES_HEADER;
48  extern AWS_CORE_API const char* CONTENT_MD5_HEADER;
49 
50  class HttpRequest;
51  class HttpResponse;
52 
56  typedef std::function<void(const HttpRequest*, HttpResponse*, long long)> DataReceivedEventHandler;
60  typedef std::function<void(const HttpRequest*, long long)> DataSentEventHandler;
61 
66  {
67  public:
71  HttpRequest(const URI& uri, HttpMethod method) :
72  m_uri(uri), m_method(method)
73  {}
74 
75  virtual ~HttpRequest() {}
76 
80  virtual HeaderValueCollection GetHeaders() const = 0;
84  virtual const Aws::String& GetHeaderValue(const char* headerName) const = 0;
88  virtual void SetHeaderValue(const char* headerName, const Aws::String& headerValue) = 0;
92  virtual void SetHeaderValue(const Aws::String& headerName, const Aws::String& headerValue) = 0;
96  virtual void DeleteHeader(const char* headerName) = 0;
100  virtual void AddContentBody(const std::shared_ptr<Aws::IOStream>& strContent) = 0;
104  virtual const std::shared_ptr<Aws::IOStream>& GetContentBody() const = 0;
108  virtual bool HasHeader(const char* name) const = 0;
112  virtual int64_t GetSize() const = 0;
116  virtual const Aws::IOStreamFactory& GetResponseStreamFactory() const = 0;
120  virtual void SetResponseStreamFactory(const Aws::IOStreamFactory& factory) = 0;
124  inline URI& GetUri()
125  {
126  return m_uri;
127  }
131  const URI& GetUri() const { return m_uri; }
136  inline Aws::String GetURIString(bool includeQueryString = true) const
137  {
138  return m_uri.GetURIString(includeQueryString);
139  }
143  inline HttpMethod GetMethod() const
144  {
145  return m_method;
146  }
150  inline const Aws::String& GetQueryString() const
151  {
152  return m_uri.GetQueryString();
153  }
157  inline void CanonicalizeRequest()
158  {
159  m_uri.CanonicalizeQueryString();
160  }
165  {
166  return m_uri.GetQueryStringParameters();
167  }
171  inline void AddQueryStringParameter(const char* key, const Aws::String& value)
172  {
173  m_uri.AddQueryStringParameter(key, value);
174  }
175 
179  inline const Aws::String& GetDate() const
180  {
181  return GetHeaderValue(DATE_HEADER);
182  }
186  inline void SetDate(const Aws::String& value)
187  {
188  SetHeaderValue(DATE_HEADER, value);
189  }
193  inline const Aws::String& GetAccept() const
194  {
195  return GetHeaderValue(ACCEPT_HEADER);
196  }
200  inline void SetAccept(const Aws::String& value)
201  {
202  SetHeaderValue(ACCEPT_HEADER, value);
203  }
207  inline const Aws::String& GetAcceptCharSet() const
208  {
209  return GetHeaderValue(ACCEPT_CHAR_SET_HEADER);
210  }
214  inline void SetAcceptCharSet(const Aws::String& value)
215  {
216  SetHeaderValue(ACCEPT_CHAR_SET_HEADER, value);
217  }
221  inline const Aws::String& GetAcceptEncoding() const
222  {
223  return GetHeaderValue(ACCEPT_ENCODING_HEADER);
224  }
228  inline void SetAcceptEncoding(const Aws::String& value)
229  {
230  SetHeaderValue(ACCEPT_ENCODING_HEADER, value);
231  }
235  inline const Aws::String& GetAuthorization() const
236  {
237  return GetHeaderValue(AUTHORIZATION_HEADER);
238  }
242  inline void SetAuthorization(const Aws::String& value)
243  {
244  SetHeaderValue(AUTHORIZATION_HEADER, value);
245  }
249  inline const Aws::String& GetAwsAuthorization() const
250  {
251  return GetHeaderValue(AWS_AUTHORIZATION_HEADER);
252  }
256  inline void SetAwsAuthorization(const Aws::String& value)
257  {
258  SetHeaderValue(AWS_AUTHORIZATION_HEADER, value);
259  }
263  inline const Aws::String& GetAwsSessionToken() const
264  {
265  return GetHeaderValue(AWS_SECURITY_TOKEN);
266  }
270  inline void SetAwsSessionToken(const Aws::String& value)
271  {
272  SetHeaderValue(AWS_SECURITY_TOKEN, value);
273  }
277  inline const Aws::String& GetCookie() const
278  {
279  return GetHeaderValue(COOKIE_HEADER);
280  }
284  inline void SetCookie(const Aws::String& value)
285  {
286  SetHeaderValue(COOKIE_HEADER, value);
287  }
291  inline const Aws::String& GetContentLength() const
292  {
293  return GetHeaderValue(CONTENT_LENGTH_HEADER);
294  }
298  inline void SetContentLength(const Aws::String& value)
299  {
300  SetHeaderValue(CONTENT_LENGTH_HEADER, value);
301  }
305  inline const Aws::String& GetContentType() const
306  {
307  return GetHeaderValue(CONTENT_TYPE_HEADER);
308  }
312  inline void SetContentType(const Aws::String& value)
313  {
314  SetHeaderValue(CONTENT_TYPE_HEADER, value);
315  }
319  inline const Aws::String& GetUserAgent() const
320  {
321  return GetHeaderValue(USER_AGENT_HEADER);
322  }
326  inline void SetUserAgent(const Aws::String& value)
327  {
328  SetHeaderValue(USER_AGENT_HEADER, value);
329  }
333  inline const Aws::String& GetVia() const
334  {
335  return GetHeaderValue(VIA_HEADER);
336  }
340  inline void SetVia(const Aws::String& value)
341  {
342  SetHeaderValue(VIA_HEADER, value);
343  }
347  inline void SetDataReceivedEventHandler(const DataReceivedEventHandler& dataReceivedEventHandler) { onDataReceived = dataReceivedEventHandler; }
351  inline void SetDataReceivedEventHandler(DataReceivedEventHandler&& dataReceivedEventHandler) { onDataReceived = dataReceivedEventHandler; }
355  inline void SetDataSentEventHandler(const DataSentEventHandler& dataSentEventHandler) { onDataSent = dataSentEventHandler; }
359  inline void SetDataSentEventHandler(DataSentEventHandler&& dataSentEventHandler) { onDataSent = dataSentEventHandler; }
363  inline const DataReceivedEventHandler& GetDataReceivedEventHandler() const { return onDataReceived; }
367  inline const DataSentEventHandler& GetDataSentEventHandler() const { return onDataSent; }
368 
369  private:
370  URI m_uri;
371  HttpMethod m_method;
372  DataReceivedEventHandler onDataReceived;
373  DataSentEventHandler onDataSent;
374 
375  };
376 
377  } // namespace Http
378 } // namespace Aws
379 
380 
381 
void SetCookie(const Aws::String &value)
Definition: HttpRequest.h:284
const Aws::String & GetUserAgent() const
Definition: HttpRequest.h:319
QueryStringParameterCollection GetQueryStringParameters() const
Definition: HttpRequest.h:164
void SetDataReceivedEventHandler(const DataReceivedEventHandler &dataReceivedEventHandler)
Definition: HttpRequest.h:347
AWS_CORE_API const char * VIA_HEADER
AWS_CORE_API const char * CONTENT_MD5_HEADER
void SetAcceptEncoding(const Aws::String &value)
Definition: HttpRequest.h:228
const Aws::String & GetAcceptEncoding() const
Definition: HttpRequest.h:221
AWS_CORE_API const char * AUTHORIZATION_HEADER
void SetAwsAuthorization(const Aws::String &value)
Definition: HttpRequest.h:256
const Aws::String & GetAwsAuthorization() const
Definition: HttpRequest.h:249
AWS_CORE_API const char * AWS_SECURITY_TOKEN
void SetAwsSessionToken(const Aws::String &value)
Definition: HttpRequest.h:270
Aws::Map< Aws::String, Aws::String > HeaderValueCollection
Definition: HttpTypes.h:63
const Aws::String & GetQueryString() const
Definition: HttpRequest.h:150
void SetAcceptCharSet(const Aws::String &value)
Definition: HttpRequest.h:214
Aws::String GetURIString(bool includeQueryString=true) const
Definition: HttpRequest.h:136
const Aws::String & GetAccept() const
Definition: HttpRequest.h:193
AWS_CORE_API const char * DATE_HEADER
HttpMethod GetMethod() const
Definition: HttpRequest.h:143
AWS_CORE_API const char * ACCEPT_ENCODING_HEADER
void SetVia(const Aws::String &value)
Definition: HttpRequest.h:340
void AddQueryStringParameter(const char *key, const Aws::String &value)
Definition: HttpRequest.h:171
AWS_CORE_API const char * AWS_DATE_HEADER
const DataSentEventHandler & GetDataSentEventHandler() const
Definition: HttpRequest.h:367
const Aws::String & GetAwsSessionToken() const
Definition: HttpRequest.h:263
Aws::Map< Aws::String, Aws::String > QueryStringParameterCollection
Definition: URI.h:34
void SetUserAgent(const Aws::String &value)
Definition: HttpRequest.h:326
AWS_CORE_API const char * AMZ_TARGET_HEADER
std::function< void(const HttpRequest *, long long)> DataSentEventHandler
Definition: HttpRequest.h:60
AWS_CORE_API const char * COOKIE_HEADER
const DataReceivedEventHandler & GetDataReceivedEventHandler() const
Definition: HttpRequest.h:363
const Aws::String & GetContentType() const
Definition: HttpRequest.h:305
void SetDataSentEventHandler(const DataSentEventHandler &dataSentEventHandler)
Definition: HttpRequest.h:355
const Aws::String & GetAuthorization() const
Definition: HttpRequest.h:235
const Aws::String & GetAcceptCharSet() const
Definition: HttpRequest.h:207
const Aws::String & GetDate() const
Definition: HttpRequest.h:179
const Aws::String & GetVia() const
Definition: HttpRequest.h:333
AWS_CORE_API const char * HOST_HEADER
AWS_CORE_API const char * CONTENT_LENGTH_HEADER
AWS_CORE_API const char * CONTENT_TYPE_HEADER
void SetDate(const Aws::String &value)
Definition: HttpRequest.h:186
const Aws::String & GetCookie() const
Definition: HttpRequest.h:277
void SetAccept(const Aws::String &value)
Definition: HttpRequest.h:200
AWS_CORE_API const char * X_AMZ_EXPIRES_HEADER
void SetAuthorization(const Aws::String &value)
Definition: HttpRequest.h:242
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition: AWSString.h:97
void SetDataReceivedEventHandler(DataReceivedEventHandler &&dataReceivedEventHandler)
Definition: HttpRequest.h:351
const Aws::String & GetContentLength() const
Definition: HttpRequest.h:291
void SetContentLength(const Aws::String &value)
Definition: HttpRequest.h:298
AWS_CORE_API const char * ACCEPT_HEADER
void SetDataSentEventHandler(DataSentEventHandler &&dataSentEventHandler)
Definition: HttpRequest.h:359
AWS_CORE_API const char * USER_AGENT_HEADER
HttpRequest(const URI &uri, HttpMethod method)
Definition: HttpRequest.h:71
AWS_CORE_API const char * AWS_AUTHORIZATION_HEADER
void SetContentType(const Aws::String &value)
Definition: HttpRequest.h:312
const URI & GetUri() const
Definition: HttpRequest.h:131
AWS_CORE_API const char * ACCEPT_CHAR_SET_HEADER
#define AWS_CORE_API
Definition: Core_EXPORTS.h:30
std::function< Aws::IOStream *(void) > IOStreamFactory
Definition: AWSStreamFwd.h:35
std::function< void(const HttpRequest *, HttpResponse *, long long)> DataReceivedEventHandler
Definition: HttpRequest.h:51
JSON (JavaScript Object Notation).