1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include "asyncio_utils.h"
- void url_parse_host(std::string host,
- std::string &host_out, int &port_out,
- const std::string def_host, const int def_port)
- {
- std::string port;
- auto sep_it = std::find(host.begin(), host.end(), ':');
- if (sep_it == host.end())
- {
- // host
- if (!host.empty())
- {
- host_out = host;
- port_out = def_port;
- }
- else
- {
- host_out = def_host;
- port_out = def_port;
- }
- return;
- }
- if (sep_it == host.begin())
- {
- // :port
- host_out = def_host;
- }
- else
- {
- // host:port
- host_out.assign(host.begin(), sep_it);
- }
- port.assign(sep_it + 1, host.end());
- port_out = std::stoi(port);
- }
- /**
- * Parse ?ids=sid,cid
- */
- void url_parse_query(std::string query)
- {
- const std::string ids_end("ids=");
- std::string sys, comp;
- if (query.empty())
- return;
- auto ids_it = std::search(query.begin(), query.end(),
- ids_end.begin(), ids_end.end());
- if (ids_it == query.end())
- {
- std::cerr << "URL: unknown query arguments" << std::endl;
- return;
- }
- std::advance(ids_it, ids_end.length());
- auto comma_it = std::find(ids_it, query.end(), ',');
- if (comma_it == query.end())
- {
- std::cerr << "URL: no comma in ids= query" << std::endl;
- return;
- }
- sys.assign(ids_it, comma_it);
- comp.assign(comma_it + 1, query.end());
- }
|