Fix URL query separation

This commit is contained in:
Alex Hultman
2018-08-30 00:27:23 +02:00
parent 6edb189d0d
commit 7c393c90c3
2 changed files with 20 additions and 7 deletions
+5 -6
View File
@@ -71,14 +71,13 @@ int main(int argc, char **argv) {
uWS::App a; // or uWS::SSLApp(options) for SSL
a/*.onGet("/", [](auto *s, auto *req, auto *args) {
std::cout << "URL: /" << std::endl;
std::cout << "user-agent: " << req->getHeader("user-agent") << std::endl;
a.onGet("/", [](auto *s, auto *req, auto *args) {
std::cout << "upgrade: " << req->getHeader("upgrade") << std::endl;
std::cout << "URL: <" << req->getUrl() << ">" << std::endl;
std::cout << "Query: <" << req->getQuery() << ">" << std::endl;
std::cout << "User-Agent: <" << req->getHeader("user-agent") << ">" << std::endl;
})*/.onWebSocket<UserData>("/", [](auto *ws, auto *req, auto *args) {
}).onWebSocket<UserData>("/ws", [](auto *ws, auto *req, auto *args) {
std::cout << "WebSocket connected to /wsApi" << std::endl;
+15 -1
View File
@@ -14,6 +14,7 @@ private:
struct Header {
std::string_view key, value;
} headers[MAX_HEADERS];
int querySeparator;
public:
std::string_view getHeader(std::string_view header) {
@@ -25,8 +26,17 @@ public:
return std::string_view(nullptr, 0);
}
// todo: implement this
int getHeader(std::string_view header) {
return 0;
}
std::string_view getUrl() {
return headers->value;
return std::string_view(headers->value.data(), querySeparator);
}
std::string_view getQuery() {
return std::string_view(headers->value.data() + querySeparator, headers->value.length() - querySeparator);
}
};
@@ -89,6 +99,10 @@ private:
req->headers->value = std::string_view(req->headers->value.data(), std::max<int>(0, req->headers->value.length() - 9));
// querySeparator is untested, todo: go through this
const char *querySeparatorPtr = (const char *) memchr(req->headers->value.data(), '?', req->headers->value.length());
req->querySeparator = (querySeparatorPtr ? querySeparatorPtr : req->headers->value.data() + req->headers->value.length()) - req->headers->value.data();
requestHandler(user, req);
std::string_view contentLengthString = req->getHeader("content-length");