28 const std::string wss_prefix =
"wss://";
29 const std::string ws_prefix =
"ws://";
31 std::string modified_url = url;
34 std::size_t pos = modified_url.find(wss_prefix);
35 if (pos == std::string::npos) {
36 pos = modified_url.find(ws_prefix);
40 if (pos != std::string::npos) {
41 if (modified_url.compare(pos, wss_prefix.length(), wss_prefix) == 0) {
42 modified_url.erase(pos, wss_prefix.length());
43 }
else if (modified_url.compare(pos, ws_prefix.length(), ws_prefix) == 0) {
44 modified_url.erase(pos, ws_prefix.length());
126 bool is_valid_url(
const std::string& url,
const std::vector<std::string>& protocol) {
127 size_t scheme_end = url.find(
"://");
128 if (scheme_end == std::string::npos) {
132 const std::string scheme = url.substr(0, scheme_end);
133 const auto it = std::find(protocol.begin(), protocol.end(), scheme);
134 if (it == protocol.end())
return false;
136 const size_t domain_start = scheme_end + 3;
137 const size_t path_start = url.find(
'/', domain_start);
138 const size_t query_start = url.find(
'?', domain_start);
141 size_t domain_end = (path_start != std::string::npos) ? path_start : query_start;
142 if (domain_end == std::string::npos) {
143 domain_end = url.length();
146 const std::string domain = url.substr(domain_start, domain_end - domain_start);
152 if (path_start != std::string::npos) {
153 std::string path = (query_start != std::string::npos) ? url.substr(path_start, query_start - path_start) : url.substr(path_start);
160 if (query_start != std::string::npos) {
161 std::string query = url.substr(query_start);