12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include "BaseHTTPServer.h"
- #include <sstream>
- unsigned char bell::BaseHTTPServer::h2int(char c)
- {
- if (c >= '0' && c <= '9')
- {
- return ((unsigned char)c - '0');
- }
- if (c >= 'a' && c <= 'f')
- {
- return ((unsigned char)c - 'a' + 10);
- }
- if (c >= 'A' && c <= 'F')
- {
- return ((unsigned char)c - 'A' + 10);
- }
- return (0);
- }
- std::string bell::BaseHTTPServer::urlDecode(std::string str)
- {
- std::string encodedString = "";
- char c;
- char code0;
- char code1;
- for (int i = 0; i < str.length(); i++)
- {
- c = str[i];
- if (c == '+')
- {
- encodedString += ' ';
- }
- else if (c == '%')
- {
- i++;
- code0 = str[i];
- i++;
- code1 = str[i];
- c = (h2int(code0) << 4) | h2int(code1);
- encodedString += c;
- }
- else
- {
- encodedString += c;
- }
- }
- return encodedString;
- }
- std::vector<std::string> bell::BaseHTTPServer::splitUrl(const std::string &url, char delimiter)
- {
- std::stringstream ssb(url);
- std::string segment;
- std::vector<std::string> seglist;
- while (std::getline(ssb, segment, delimiter))
- {
- seglist.push_back(segment);
- }
- return seglist;
- }
- std::map<std::string, std::string> bell::BaseHTTPServer::parseQueryString(const std::string &queryString)
- {
- std::map<std::string, std::string> query;
- auto prefixedString = "&" + queryString;
- while (prefixedString.find("&") != std::string::npos)
- {
- auto keyStart = prefixedString.find("&");
- auto keyEnd = prefixedString.find("=");
- // Find second occurence of "&" in prefixedString
- auto valueEnd = prefixedString.find("&", keyStart + 1);
- if (valueEnd == std::string::npos)
- {
- valueEnd = prefixedString.size();
- }
- auto key = prefixedString.substr(keyStart + 1, keyEnd - 1);
- auto value = prefixedString.substr(keyEnd + 1, valueEnd - keyEnd - 1);
- query[key] = urlDecode(value);
- prefixedString = prefixedString.substr(valueEnd);
- }
- return query;
- }
|