26#ifndef URI_ROUTING_INCLUDED
27#define URI_ROUTING_INCLUDED
43using URIQuery = std::map<std::string, std::string>;
51 URIError(
const char *msg,
const std::string &uri,
size_t position);
53 :
std::runtime_error(what_arg) {}
69 static const char query_delimiter =
'&';
85 URI(
const std::string &uri,
bool allow_path_rootless =
true,
86 bool allow_schemeless =
false,
bool path_keep_last_slash =
false,
87 bool query_single_parameter_when_cant_parse =
false,
88 bool keep_empty_root =
false)
98 allow_path_rootless_(allow_path_rootless),
99 allow_schemeless_{allow_schemeless},
100 path_keep_last_slash_{path_keep_last_slash},
101 query_single_parameter_when_cant_parse_{
102 query_single_parameter_when_cant_parse},
103 keep_empty_root_{keep_empty_root} {
113 std::string
str()
const;
122 void set_uri(
const std::string &uri) { init_from_uri(uri); }
125 std::string get_path_as_string(
bool needs_first_slash =
true)
const;
131 void set_path_from_string(
const std::string &
p);
134 std::string get_query_as_string()
const;
140 void set_query_from_string(
const std::string &
q);
170 void init_from_uri(
const std::string &uri);
182 bool query_is_signle_parameter_{
false};
191 static std::string
decode(
const std::string &uri,
bool decode_plus);
192 static URI parse(
const std::string &uri,
bool allow_path_rootless =
true,
193 bool allow_schemeless =
false,
194 bool path_keep_last_slash =
false,
195 bool query_single_parameter_when_cant_parse =
false,
196 bool keep_empty_root =
false);
197 static URI parse_shorthand_uri(
const std::string &uri,
198 bool allow_path_rootless =
true,
199 const std::string &default_scheme =
"mysql");
Exception when URI was not valid.
Definition: uri.h:49
URIError(const char *msg, const std::string &uri, size_t position)
Definition: uri.cc:59
URIError(const std::string &what_arg)
Definition: uri.h:52
Parse and create URIs according to RFC3986.
Definition: uri.h:66
bool query_single_parameter_when_cant_parse_
Definition: uri.h:181
std::string username
Username part found in the Authority.
Definition: uri.h:149
std::string scheme
Scheme of the URI.
Definition: uri.h:143
std::string password
Password part found in the Authority.
Definition: uri.h:151
bool allow_schemeless_
all URIs like foo@example.org which don't have a scheme
Definition: uri.h:179
void set_uri(const std::string &uri)
Sets URI using the given URI string.
Definition: uri.h:122
bool keep_empty_root_
Definition: uri.h:183
bool allow_path_rootless_
all URIs like mail:foo@example.org which don't have a authority
Definition: uri.h:176
std::string uri_
Copy of the original given URI.
Definition: uri.h:173
uint16_t port
Port found in the Authority.
Definition: uri.h:147
URI(const std::string &uri, bool allow_path_rootless=true, bool allow_schemeless=false, bool path_keep_last_slash=false, bool query_single_parameter_when_cant_parse=false, bool keep_empty_root=false)
Default constructor.
Definition: uri.h:85
URIQuery query
Query part of the URI.
Definition: uri.h:155
URI()
overload
Definition: uri.h:116
std::string fragment
Fragment part of the URI.
Definition: uri.h:157
bool path_keep_last_slash_
Definition: uri.h:180
URIPath path
Path part of the URI.
Definition: uri.h:153
std::string host
Host part found in the Authority.
Definition: uri.h:145
const char * p
Definition: ctype-mb.cc:1227
bool operator!=(const my_thread_handle &a, const my_thread_handle &b)
Definition: my_thread.h:158
bool operator==(const my_thread_handle &a, const my_thread_handle &b)
Definition: my_thread.h:151
static char * query
Definition: myisam_ftdump.cc:47
static char * password
Definition: mysql_secure_installation.cc:58
const char * host
Definition: mysqladmin.cc:66
static char * path
Definition: mysqldump.cc:150
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1084
stdx::expected< std::pair< size_t, T >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
decode a message from a buffer.
Definition: classic_protocol_codec_base.h:119
std::vector< std::string > URIPath
Definition: uri.h:42
ROUTER_UTILS_EXPORT std::ostream & operator<<(std::ostream &strm, const URI &uri)
Definition: uri.cc:1207
std::tuple< std::string, uint16_t, std::string, std::string > URIAuthority
Definition: uri.h:41
std::map< std::string, std::string > URIQuery
Definition: uri.h:43
bool parse(MYSQL_THD thd, const string &query, bool is_prepared, Condition_handler *handler)
Definition: services.cc:81
Definition: gcs_xcom_synode.h:64
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:33
#define ROUTER_UTILS_EXPORT
Definition: router_utils_export.h:15
synode_no q[FIFO_SIZE]
Definition: xcom_base.cc:4101