debug new request parsing

This commit is contained in:
hugogogo
2022-08-11 14:50:56 +02:00
parent 27b4f96618
commit ff77dfd298
6 changed files with 58 additions and 24 deletions

View File

@@ -77,18 +77,16 @@ Client & Client::operator=( Client const & rhs )
// https://www.tutorialspoint.com/http/http_requests.htm
void Client::parse_request(std::vector<ServerConfig> &servers)
{
// std::map<std::string, std::string> headers;
// std::string body;
std::string copy_request;
// DEBUG
// std::cout << "\nREQUEST ____________\n" << raw_request << "\n_____________\n";
clear_request(); // not mandatory
_parse_request_line(copy_request);
_parse_request_line();
// debug
print_client("first line");
if (status)
return;
_parse_request_headers(copy_request);
_parse_request_headers();
// debug
print_client("headers");
if (status)
return;
assigned_server = ::_determine_process_server(this, servers);
@@ -106,11 +104,11 @@ void Client::parse_request(std::vector<ServerConfig> &servers)
void Client::parse_request_body()
{
size_t pos;
size_t pos;
pos = raw_request.find(CRLF CRLF);
pos += std::string(CRLF CRLF).size();
_request.body = message.substr(pos);
_request.body = raw_request.substr(pos);
if (_request.body.size() > assigned_server->client_body_limit)
status = 413; // HTTP Client Errors
@@ -166,6 +164,32 @@ void Client::clear_script()
_request.script.info.clear();
}
// debug
void Client::print_client(std::string message)
{
std::map<std::string, std::string>::iterator it;
std::cout << "\n=== DEBUG PRINT CLIENT ===\n";
std::cout << "\n" << message << ":\n----------\n"
<< "raw_request:\n__\n" << raw_request << "\n__\n"
<< "get_cl_fd() : " << get_cl_fd() << "\n"
<< "get_cl_port() : " << get_cl_port() << "\n"
<< "get_cl_ip() : " << get_cl_ip() << "\n"
<< "get_rq_method_str() : " << get_rq_method_str() << "\n"
<< "get_rq_uri() : " << get_rq_uri() << "\n"
<< "get_rq_abs_path() : " << get_rq_abs_path() << "\n"
<< "get_rq_query() : " << get_rq_query() << "\n"
<< "get_rq_version() : " << get_rq_version() << "\n"
<< "get_rq_body() : " << get_rq_body() << "\n"
<< "get_rq_port() : " << get_rq_port() << "\n"
<< "get_rq_hostname() : " << get_rq_hostname() << "\n"
<< "get_rq_script_path() : " << get_rq_script_path() << "\n"
<< "get_rq_script_info() : " << get_rq_script_info() << "\n"
<< "headers : " << "\n";
for (it = _request.headers.begin(); it != _request.headers.end(); it++)
std::cout << " " << it->first << ": " << it->second << "\n";
std::cout << "\n=== END DEBUG ===\n\n";
}
/*********************************************
* GETTERS
@@ -209,13 +233,12 @@ void Client::_parse_request_line()
{
std::vector<std::string> line;
std::string raw_line;
int ret;
raw_line = ::get_line(raw_request, 0, CRLF);
line = ::split_trim(raw_line, " ", ' ');
if (line.size() != 3)
{
std::cerr << "err _parse_first_line(): wrong number of elements (" << ret << " instead of 3)\n";
std::cerr << "err _parse_first_line(): wrong number of elements (" << line.size() << " instead of 3)\n";
status = 400; // "bad request"
}
else
@@ -247,9 +270,10 @@ void Client::_parse_request_headers()
headers = raw_request;
// extract header part
::extract_line(headers, 0, CRLF);
pos = headers.find(CRLF);
::extract_line(headers, pos); // delete from pos to the end
::extract_line(headers, 0, CRLF); // delete first line
pos = headers.find(CRLF CRLF);
// ::extract_line(headers, pos); // delete from empty line to the end
headers.erase(pos); //delete from empty line to the end
// copy result of parser into headers
ret = ::parse_http_headers(raw_request, _request.headers);
if (ret > 0)