diff --git a/srcs/Client.cpp b/srcs/Client.cpp index f064337..af287c0 100644 --- a/srcs/Client.cpp +++ b/srcs/Client.cpp @@ -92,7 +92,7 @@ void Client::parse_request_headers(std::vector &servers) _parse_request_fields(); // DEBUG -print_client("headers"); +// print_client("headers"); if (status) return; @@ -104,7 +104,7 @@ print_client("headers"); _parse_port_hostname(this->get_rq_headers("Host")); // use getter for headers because it works case insensitive // DEBUG -std::cerr << get_rq_method_str() << " " << get_rq_target() << " " << get_rq_version() << "\n"; +// std::cerr << get_rq_method_str() << " " << get_rq_target() << " " << get_rq_version() << "\n"; // dont clear raw_request, we need it for future reparsing of body // see call of parse_request() in _read_request() @@ -113,6 +113,7 @@ std::cerr << get_rq_method_str() << " " << get_rq_target() << " " << get_rq_vers void Client::parse_request_body() { + std::cerr << "parse_request_body()\n"; size_t pos; pos = raw_request.find(CRLF CRLF); @@ -142,28 +143,29 @@ void Client::parse_request_body() pos = 0; while (chunk_size != 0) { - if (pos > _request.body.size()) +/* if (pos > _request.body.size()) { std::cerr << "parse_request_body(), pos > size()\n"; // status = 400; return; - } - + } */ +/* if (pos == _request.body.size()) { std::cerr << "parse_request_body(), will reread till last chunk\n"; return; - } + } */ - endptr_copy = endptr; + /* endptr_copy = endptr; */ + (void)endptr_copy; chunk_size = std::strtoul(&_request.body[pos], &endptr, 16); - if (chunk_size == LONG_MAX && errno == ERANGE) - status = 413; - if (endptr == endptr_copy) +/* if (chunk_size == LONG_MAX && errno == ERANGE) + status = 413; */ + /* if (endptr == endptr_copy) { std::cerr << "parse_request_body(), no conversion possible\n"; return; - } + } */ chunk_field_end = _request.body.find(CRLF, pos); @@ -184,6 +186,11 @@ void Client::parse_request_body() } else { + std::cerr << "Content-Length = " << std::strtoul(get_rq_headers("Content-Length").c_str(), NULL, 10) << "\n"; + std::cerr << "raw_request.size() - pos = " << raw_request.size() - pos << "\n"; + _request.body = raw_request.substr(pos); + std::cerr << "_request.body.size() = " << _request.body.size() << "\n"; + if (raw_request.size() - pos >= std::strtoul(get_rq_headers("Content-Length").c_str(), NULL, 10)) { _request.body = raw_request.substr(pos); diff --git a/srcs/config/parser.cpp b/srcs/config/parser.cpp index 9dc09f4..c7e6162 100644 --- a/srcs/config/parser.cpp +++ b/srcs/config/parser.cpp @@ -310,7 +310,7 @@ void ConfigParser::_set_location_values(LocationConfig *location, \ && tmp_val[0] != "303" && tmp_val[0] != "307" && tmp_val[0] != "308") throw std::invalid_argument("bad redirect status"); - std::cout << tmp_val[1] << '\n'; + // std::cout << tmp_val[1] << '\n'; if (tmp_val[1].compare(0, 7, "http://") && tmp_val[1].compare(0, 8, "https://")) throw std::invalid_argument("bad redirect uri"); diff --git a/srcs/main.cpp b/srcs/main.cpp index 94b1fc4..3a44a33 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -19,7 +19,7 @@ int main(int ac, char **av) ConfigParser configParser(config.c_str()); - configParser._print_content(); + // configParser._print_content(); // i don't love that servers has to be a pointer... std::vector* servers = configParser.parse(); @@ -27,8 +27,9 @@ int main(int ac, char **av) // use an iterator you moron for (std::vector::iterator it = servers->begin(); it < servers->end(); it++) { + (void)0; // std::cout << it->server_name << " "; - it->print_all(); + // it->print_all(); } diff --git a/srcs/webserv/method_get.cpp b/srcs/webserv/method_get.cpp index fcc8045..78a073b 100644 --- a/srcs/webserv/method_get.cpp +++ b/srcs/webserv/method_get.cpp @@ -3,12 +3,13 @@ std::string Webserv::_replace_url_root(Client *client, std::string path) { - std::cerr << "path before = " << path << "\n"; // DEBUG + std::cerr << "assigned_location->path = " << client->assigned_location->path << "\n"; // debug + std::cerr << "path before = " << path << "\n"; // DEBUG if (client->assigned_location->path == "/") path.insert(0, client->assigned_location->root); else path.replace(0, client->assigned_location->path.size(), client->assigned_location->root); - std::cerr << "path after = " << path << "\n"; // DEBUG + std::cerr << "path after = " << path << "\n"; // DEBUG return path; } @@ -20,7 +21,6 @@ void Webserv::_get(Client *client, std::string &path) // Index/Autoindex block if (eval_file_type(path) == IS_DIR) { - std::cout << "made it to Index/Autoindex\n"; if (path[path.size() - 1] != '/') path.push_back('/'); for (size_t i = 0; i < client->assigned_location->index.size(); i++) @@ -50,7 +50,7 @@ void Webserv::_get_file(Client *client, const std::string &path) std::ifstream ifd; // For chunk, ifstream directly in struct CLient for multiples read without close() ? std::stringstream buf; - std::cout << "made it to get_file\n"; + std::cout << "_get_file()\n"; if (access(path.c_str(), F_OK) == -1) { @@ -103,16 +103,15 @@ void Webserv::_get_file(Client *client, const std::string &path) // const? void Webserv::_autoindex(Client *client, const std::string &path) { - std::cout << "made it to _autoindex\n"; + std::cout << "_autoindex()\n"; std::string dir_list; DIR *dir; struct dirent *ent; - std::cout << "location root: " << client->assigned_location->root << " location path: " - << client->assigned_location->path << '\n'; + // std::cout << "location root: " << client->assigned_location->root << " location path: " << client->assigned_location->path << '\n'; - std::cout << "Path in auto is: " << path << '\n'; + // std::cout << "Path in auto is: " << path << '\n'; if ( (dir = opendir(path.c_str()) ) != NULL) { dir_list.append(AUTOINDEX_START); @@ -123,7 +122,7 @@ void Webserv::_autoindex(Client *client, const std::string &path) /* print all the files and directories within directory */ while ((ent = readdir (dir)) != NULL) { - std::cout << "ent: " << ent->d_name << '\n'; + // std::cout << "ent: " << ent->d_name << '\n'; if (strcmp(".", ent->d_name) == 0) continue ; dir_list.append("get_cl_fd(), buf, BUFSIZE, 0); std::cerr << "recv() on fd(" << client->get_cl_fd() << ") returned = " << ret << "\n" ; if (ret == -1) @@ -51,6 +50,8 @@ int Webserv::_read_request(Client *client) return READ_CLOSE; } client->raw_request.append(buf, ret); + // ::print_special(client->raw_request); + // std::cerr << "__raw_request__\n" << client->raw_request << "\n______\n"; // DEBUG if (!client->header_complete) { @@ -61,8 +62,7 @@ int Webserv::_read_request(Client *client) { if (client->get_rq_headers("Content-Type").empty() && client->get_rq_headers("Content-Length").empty() - // && client->get_rq_headers("Transfer-Encoding").empty() - ) + && client->get_rq_headers("Transfer-Encoding").empty()) return READ_COMPLETE; // No body case } else if (client->raw_request.size() > MAX_HEADER_SIZE) @@ -71,7 +71,7 @@ int Webserv::_read_request(Client *client) return READ_COMPLETE; } } - else if (client->header_complete) + if (client->header_complete) { // client->read_body_size += ret; // Not accurate, part of body could have been read with headers, unused for now client->parse_request_body(); diff --git a/srcs/webserv/response.cpp b/srcs/webserv/response.cpp index 436e478..0cc5b2b 100644 --- a/srcs/webserv/response.cpp +++ b/srcs/webserv/response.cpp @@ -85,8 +85,7 @@ void Webserv::_construct_response(Client *client) void Webserv::_process_method(Client *client, std::string &path) { - std::cerr << "assigned_location->path = " << client->assigned_location->path << "\n"; // debug - std::cerr << "allow_methods = " << client->assigned_location->allow_methods << "\n"; // debug + std::cerr << "allow_methods = " << http_methods_to_str(client->assigned_location->allow_methods) << "\n"; // debug switch (client->get_rq_method()) { @@ -182,8 +181,6 @@ ServerConfig *_determine_process_server(Client *client, std::vector::const_iterator it = server.locations.begin(); it != server.locations.end(); it++) { - std::cout << it->path << " -- "; - if (it->path.size() > uri.size()) - { - std::cout << "skipping this one\n"; continue ; - } if (uri.compare(0, it->path.size(), it->path) == 0) {