#include <unistd.h>
#include <cstdio>
+#include <sstream>
#include "const_definitions.h"
#include "error.h"
if (maybe_req.has_value()) {
try {
- resp = this->routes.at(maybe_req.value().query)(maybe_req.value());
+ std::stringstream ss;
+ ss << maybe_req.value().method << " " << maybe_req.value().path;
+ resp = this->routes.at(ss.str())(maybe_req.value());
} catch (...) {
}
}
std::ostream &operator<<(std::ostream &os, const http::Request &req) {
os << "Request { domain: " << std::quoted(req.domain_name) << ", port: " << req.port
- << ", query: " << std::quoted(req.query) << ", method: " << req.method
- << ", version: " << (int)req.version.major << "." << (int)req.version.minor << ", headers: [ ";
+ << ", path: " << std::quoted(req.path) << ", query: " << std::quoted(req.query)
+ << ", method: " << req.method << ", version: " << (int)req.version.major << "."
+ << (int)req.version.minor << ", headers: [ ";
for (const auto &header : req.optheaders) {
os << header.first << " = " << header.second << ",";
}
std::string_view query(*word_iter++);
- std::cout << "\t" << query << std::endl;
if (query.empty() || !query.starts_with('/')) {
return Err(Error::InvalidQueryRequest);
} else {
- req.query = query;
+ auto query_view = query | std::views::split('?');
+ auto query_view_iter = query_view.begin();
+
+ req.path = std::string((*query_view_iter).begin(), (*query_view_iter).end());
+ query_view_iter++;
+ req.query = std::string((*query_view_iter).begin(), (*query_view_iter).end());
}
std::string_view version(*word_iter);
public:
uint16_t port = 80;
std::string_view domain_name;
- std::string query = "/";
- std::string body = "";
+ std::string path = "/";
+ std::string query;
+ std::string body;
Method method;
http_version version = {.major = 1, .minor = 1};