54 lines
925 B
C++
54 lines
925 B
C++
#include "url.hpp"
|
|
|
|
namespace Http
|
|
{
|
|
bool Url::HasPath() const
|
|
{
|
|
return path.size() > 1;
|
|
}
|
|
|
|
bool Url::HasQuery() const
|
|
{
|
|
return query.size() > 1;
|
|
}
|
|
|
|
std::string const & Url::GetPath() const
|
|
{
|
|
return path;
|
|
}
|
|
|
|
std::string const & Url::GetQuery() const
|
|
{
|
|
return query;
|
|
}
|
|
|
|
bool Url::TryParseFromUrlString(std::string urlstring)
|
|
{
|
|
// TODO add % decoding
|
|
unsigned queryPos = 0;
|
|
static std::string const validSpecialCharacters = "-._~:/?#[]@!$&'()*+,;=";
|
|
for(unsigned i = 0; i < urlstring.size(); ++i)
|
|
{
|
|
if (!std::isalnum(urlstring[i]) && validSpecialCharacters.find(urlstring[i]) == std::string::npos)
|
|
{
|
|
return false;
|
|
}
|
|
else if (urlstring[i] == '?' && queryPos == 0)
|
|
{
|
|
queryPos = i;
|
|
}
|
|
}
|
|
|
|
if (queryPos == 0)
|
|
{
|
|
path = urlstring;
|
|
}
|
|
else
|
|
{
|
|
path = urlstring.substr(0, queryPos);
|
|
query = urlstring.substr(queryPos, urlstring.size());
|
|
}
|
|
|
|
return true;
|
|
}
|
|
} |