mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-16 08:27:01 +03:00
88 lines
2.1 KiB
Plaintext
88 lines
2.1 KiB
Plaintext
#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;
|
|
} |