AWS SDK for C++
AWS SDK for C++
Loading...
Searching...
No Matches
URI.h
Go to the documentation of this file.
1
6#pragma once
7
9
13
14#include <stdint.h>
15
16namespace Aws
17{
18 namespace Http
19 {
20 extern AWS_CORE_API const char* SEPARATOR;
21 static const uint16_t HTTP_DEFAULT_PORT = 80;
22 static const uint16_t HTTPS_DEFAULT_PORT = 443;
23
26
27 //per https://tools.ietf.org/html/rfc3986#section-3.4 there is nothing preventing servers from allowing
28 //multiple values for the same key. So use a multimap instead of a map.
30
35 {
36 public:
40 URI();
48 URI(const char*);
49
50 URI& operator = (const Aws::String&);
51 URI& operator = (const char*);
52
53 bool operator == (const URI&) const;
54 bool operator == (const Aws::String&) const;
55 bool operator == (const char*) const;
56 bool operator != (const URI&) const;
57 bool operator != (const Aws::String&) const;
58 bool operator != (const char*) const;
59
63 inline Scheme GetScheme() const { return m_scheme; }
64
68 void SetScheme(Scheme value);
69
73 inline const Aws::String& GetAuthority() const { return m_authority; }
74
78 inline void SetAuthority(const Aws::String& value) { m_authority = value; }
79
83 inline uint16_t GetPort() const { return m_port; }
84
89 inline void SetPort(uint16_t value) { m_port = value; }
90
96
101
106
110 void SetPath(const Aws::String& value);
111
117 template<typename T>
118 inline void AddPathSegment(T pathSegment)
119 {
121 ss << pathSegment;
122 Aws::String segment = ss.str();
123 segment.erase(0, segment.find_first_not_of('/'));
124 segment.erase(segment.find_last_not_of('/') + 1);
125 m_pathSegments.push_back(segment);
126 m_pathHasTrailingSlash = false;
127 }
128
132 template<typename T>
133 inline void AddPathSegments(T pathSegments)
134 {
136 ss << pathSegments;
137 Aws::String segments = ss.str();
138 for (const auto& segment : Aws::Utils::StringUtils::Split(segments, '/'))
139 {
140 m_pathSegments.push_back(segment);
141 }
142 m_pathHasTrailingSlash = (!segments.empty() && segments.back() == '/');
143 }
144
148 inline const Aws::String& GetQueryString() const { return m_queryString; }
149
153 void SetQueryString(const Aws::String& str);
154
156
161
167
171 void AddQueryStringParameter(const char* key, const Aws::String& value);
172
177
181 Aws::String GetURIString(bool includeQueryString = true) const;
182
188
193
194 private:
195 void ParseURIParts(const Aws::String& uri);
196 void ExtractAndSetScheme(const Aws::String& uri);
197 void ExtractAndSetAuthority(const Aws::String& uri);
198 void ExtractAndSetPort(const Aws::String& uri);
199 void ExtractAndSetPath(const Aws::String& uri);
200 void ExtractAndSetQueryString(const Aws::String& uri);
201 bool CompareURIParts(const URI& other) const;
202
203 Scheme m_scheme = Scheme::HTTP;
204 Aws::String m_authority;
205 uint16_t m_port = HTTP_DEFAULT_PORT;
206 Aws::Vector<Aws::String> m_pathSegments;
207 bool m_pathHasTrailingSlash = false;
208 Aws::String m_queryString;
209 };
210
211 } // namespace Http
212} // namespace Aws
213
#define AWS_CORE_API
Definition: Core_EXPORTS.h:26
URI(const Aws::String &)
void CanonicalizeQueryString()
void SetScheme(Scheme value)
Aws::String GetFormParameters() const
void AddQueryStringParameter(const char *key, const Aws::String &value)
void AddQueryStringParameter(const Aws::Map< Aws::String, Aws::String > &queryStringPairs)
void SetPath(const Aws::String &value)
void AddPathSegments(T pathSegments)
Definition: URI.h:133
static Aws::String URLEncodePath(const Aws::String &path)
Aws::String GetURIString(bool includeQueryString=true) const
const Aws::String & GetAuthority() const
Definition: URI.h:73
const Aws::String & GetQueryString() const
Definition: URI.h:148
Aws::String GetURLEncodedPath() const
QueryStringParameterCollection GetQueryStringParameters(bool decode=true) const
Aws::String GetURLEncodedPathRFC3986() const
void SetAuthority(const Aws::String &value)
Definition: URI.h:78
Scheme GetScheme() const
Definition: URI.h:63
void AddPathSegment(T pathSegment)
Definition: URI.h:118
uint16_t GetPort() const
Definition: URI.h:83
void SetQueryString(const Aws::String &str)
static Aws::String URLEncodePathRFC3986(const Aws::String &path)
URI(const char *)
void SetPort(uint16_t value)
Definition: URI.h:89
Aws::String GetPath() const
static Aws::Vector< Aws::String > Split(const Aws::String &toSplit, char splitOn)
Splits a string on a delimiter (empty items are excluded).
Aws::MultiMap< Aws::String, Aws::String > QueryStringParameterCollection
Definition: URI.h:29
bool s_compliantRfc3986Encoding
static const uint16_t HTTPS_DEFAULT_PORT
Definition: URI.h:22
static const uint16_t HTTP_DEFAULT_PORT
Definition: URI.h:21
AWS_CORE_API const char * SEPARATOR
AWS_CORE_API void SetCompliantRfc3986Encoding(bool compliant)
std::basic_stringstream< char, std::char_traits< char >, Aws::Allocator< char > > StringStream
std::map< K, V, std::less< K >, Aws::Allocator< std::pair< const K, V > > > Map
Definition: AWSMap.h:19
std::multimap< K, V, std::less< K >, Aws::Allocator< std::pair< const K, V > > > MultiMap
Definition: AWSMap.h:21
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