1 | /* |
2 | * Copyright 2010-2017 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 | #include <aws/core/http/standard/StandardHttpRequest.h> |
17 | |
18 | #include <aws/core/utils/StringUtils.h> |
19 | |
20 | #include <iostream> |
21 | #include <algorithm> |
22 | #include <cassert> |
23 | |
24 | using namespace Aws::Http; |
25 | using namespace Aws::Http::Standard; |
26 | using namespace Aws::Utils; |
27 | |
28 | static bool IsDefaultPort(const URI& uri) |
29 | { |
30 | switch(uri.GetPort()) |
31 | { |
32 | case 80: |
33 | return uri.GetScheme() == Scheme::HTTP; |
34 | case 443: |
35 | return uri.GetScheme() == Scheme::HTTPS; |
36 | default: |
37 | return false; |
38 | } |
39 | } |
40 | |
41 | StandardHttpRequest::StandardHttpRequest(const URI& uri, HttpMethod method) : |
42 | HttpRequest(uri, method), |
43 | bodyStream(nullptr), |
44 | m_responseStreamFactory() |
45 | { |
46 | if(IsDefaultPort(uri)) |
47 | { |
48 | StandardHttpRequest::SetHeaderValue(HOST_HEADER, uri.GetAuthority()); |
49 | } |
50 | else |
51 | { |
52 | Aws::StringStream host; |
53 | host << uri.GetAuthority() << ":" << uri.GetPort(); |
54 | StandardHttpRequest::SetHeaderValue(HOST_HEADER, host.str()); |
55 | } |
56 | } |
57 | |
58 | HeaderValueCollection StandardHttpRequest::GetHeaders() const |
59 | { |
60 | HeaderValueCollection ; |
61 | |
62 | for (HeaderValueCollection::const_iterator iter = headerMap.begin(); iter != headerMap.end(); ++iter) |
63 | { |
64 | headers.emplace(HeaderValuePair(iter->first, iter->second)); |
65 | } |
66 | |
67 | return headers; |
68 | } |
69 | |
70 | const Aws::String& StandardHttpRequest::GetHeaderValue(const char* ) const |
71 | { |
72 | auto iter = headerMap.find(headerName); |
73 | assert (iter != headerMap.end()); |
74 | return iter->second; |
75 | } |
76 | |
77 | void StandardHttpRequest::SetHeaderValue(const char* , const Aws::String& ) |
78 | { |
79 | headerMap[StringUtils::ToLower(headerName)] = StringUtils::Trim(headerValue.c_str()); |
80 | } |
81 | |
82 | void StandardHttpRequest::SetHeaderValue(const Aws::String& , const Aws::String& ) |
83 | { |
84 | headerMap[StringUtils::ToLower(headerName.c_str())] = StringUtils::Trim(headerValue.c_str()); |
85 | } |
86 | |
87 | void StandardHttpRequest::DeleteHeader(const char* ) |
88 | { |
89 | headerMap.erase(StringUtils::ToLower(headerName)); |
90 | } |
91 | |
92 | bool StandardHttpRequest::HasHeader(const char* ) const |
93 | { |
94 | return headerMap.find(StringUtils::ToLower(headerName)) != headerMap.end(); |
95 | } |
96 | |
97 | int64_t StandardHttpRequest::GetSize() const |
98 | { |
99 | int64_t size = 0; |
100 | |
101 | std::for_each(headerMap.cbegin(), headerMap.cend(), [&](const HeaderValueCollection::value_type& kvPair){ size += kvPair.first.length(); size += kvPair.second.length(); }); |
102 | |
103 | return size; |
104 | } |
105 | |
106 | const Aws::IOStreamFactory& StandardHttpRequest::GetResponseStreamFactory() const |
107 | { |
108 | return m_responseStreamFactory; |
109 | } |
110 | |
111 | void StandardHttpRequest::SetResponseStreamFactory(const Aws::IOStreamFactory& factory) |
112 | { |
113 | m_responseStreamFactory = factory; |
114 | } |
115 | |