string aws::iot::securedtunneling::url::url_decode()

in src/Url.cpp [81:109]


string aws::iot::securedtunneling::url::url_decode(const string &url_s) {
    {
        string out;
        out.clear();
        out.reserve(url_s.size());
        for (std::size_t i = 0; i < url_s.size(); ++i) {
            if (url_s[i] == '%') {
                if (i + 3 <= url_s.size()) {
                    int value = 0;
                    std::istringstream is(url_s.substr(i + 1, 2));
                    if (is >> std::hex >> value) {
                        out += static_cast<char>(value);
                        i += 2;
                    } else {
                        throw invalid_argument("Invalid Hex number");
                    }
                } else {
                    throw invalid_argument("Invalid URL token");
                }
            }
            else if (url_s[i] == '+') {
                out += ' ';
            } else {
                out += url_s[i];
            }
        }
        return out;
    }
}