From 3d17db996af27cfe00e3675467456f2946f0bf64 Mon Sep 17 00:00:00 2001 From: lperrey Date: Thu, 18 Aug 2022 06:03:09 +0200 Subject: [PATCH] Debug in progress, somes fix but not the main problem --- default.config | 18 +++-------- srcs/Client.cpp | 32 +++++++++---------- srcs/Client.hpp | 6 ++-- srcs/webserv/Webserv.hpp | 5 ++- srcs/webserv/cgi.cpp | 63 +++++++++++++++++++------------------ srcs/webserv/cgi_epoll.cpp | 50 +++++++++++++---------------- srcs/webserv/close.cpp | 18 ++++++++++- srcs/webserv/request.cpp | 8 +---- srcs/webserv/response.cpp | 26 ++++++++++++--- srcs/webserv/run_loop.cpp | 25 +++++++++------ urls.txt | 1 - urls_cgi.txt | 1 + www/user_files/pepe.jpg | Bin 0 -> 55822 bytes 13 files changed, 136 insertions(+), 117 deletions(-) create mode 100644 urls_cgi.txt create mode 100644 www/user_files/pepe.jpg diff --git a/default.config b/default.config index 977f9f6..356638f 100644 --- a/default.config +++ b/default.config @@ -21,6 +21,9 @@ server { # error_page 403 ./www/error_pages/error_404.html; + location /kapouet { + root /tmp/www; + } location / { allow_methods GET; @@ -37,6 +40,7 @@ server { autoindex on; } + location /cgi-bin { root ./srcs/cgi-bin/; cgi_ext out php sh; @@ -44,19 +48,7 @@ server { location /upload { allow_methods POST; - # autoindex on; - # root ./www/; - # index upload_form_single.html; - - # upload_dir ./www/user_files/; - # root doesn’t matter if used only with POST and no CGI - } - - location /uploaded { - allow_methods GET; - autoindex on; - # upload_dir ./www/user_files/; - root ./www/user_files; + upload_dir ./www/user_files/; # root doesn’t matter if used only with POST and no CGI } diff --git a/srcs/Client.cpp b/srcs/Client.cpp index 8012801..eec2e52 100644 --- a/srcs/Client.cpp +++ b/srcs/Client.cpp @@ -12,13 +12,13 @@ Client::Client() request_complete(false), assigned_server(NULL), assigned_location(NULL), - cgi_state(0), - cgi_pipe_w_to_child(0), - cgi_pipe_r_from_child(0), - cgi_pipe_w_to_parent(0), - cgi_pipe_r_from_parent(0), + cgi_state(CGI_NO_CGI), + cgi_pipe_w_to_child(-1), + cgi_pipe_r_from_child(-1), + cgi_pipe_w_to_parent(-1), + cgi_pipe_r_from_parent(-1), cgi_pid(0), - _fd(0), + _fd(-1), _port(""), _ip(""), _lsocket(NULL) @@ -33,11 +33,11 @@ Client::Client(int afd, listen_socket *lsocket, std::string aport, std::string a request_complete(false), assigned_server(NULL), assigned_location(NULL), - cgi_state(0), - cgi_pipe_w_to_child(0), - cgi_pipe_r_from_child(0), - cgi_pipe_w_to_parent(0), - cgi_pipe_r_from_parent(0), + cgi_state(CGI_NO_CGI), + cgi_pipe_w_to_child(-1), + cgi_pipe_r_from_child(-1), + cgi_pipe_w_to_parent(-1), + cgi_pipe_r_from_parent(-1), cgi_pid(0), _fd(afd), _port(aport), @@ -272,11 +272,11 @@ void Client::clear_script() void Client::clear_cgi_vars() { - cgi_state = false; - cgi_pipe_w_to_child = 0; - cgi_pipe_r_from_child = 0; - cgi_pipe_w_to_parent = 0; - cgi_pipe_r_from_parent = 0; + cgi_state = CGI_NO_CGI; + cgi_pipe_w_to_child = -1; + cgi_pipe_r_from_child = -1; + cgi_pipe_w_to_parent = -1; + cgi_pipe_r_from_parent = -1; cgi_pid = 0; cgi_output.clear(); } diff --git a/srcs/Client.hpp b/srcs/Client.hpp index 0fa8a5d..56536d7 100644 --- a/srcs/Client.hpp +++ b/srcs/Client.hpp @@ -45,8 +45,8 @@ enum cgi_states CGI_NO_CGI = 0, CGI_WAIT_TO_EXEC, CGI_READY_TO_EXEC, - CGI_WAIT_FOR_OUTPUT, - CGI_OUTPUT_READY + CGI_OUTPUT_READING, + CGI_OUTPUT_COMPLETE }; class Client @@ -69,7 +69,7 @@ class Client const LocationConfig *assigned_location; // CGI variables - int cgi_state; + cgi_states cgi_state; int cgi_pipe_w_to_child; int cgi_pipe_r_from_child; int cgi_pipe_w_to_parent; diff --git a/srcs/webserv/Webserv.hpp b/srcs/webserv/Webserv.hpp index d865989..ba1514d 100644 --- a/srcs/webserv/Webserv.hpp +++ b/srcs/webserv/Webserv.hpp @@ -109,8 +109,6 @@ class Webserv void _close_all_clients(); void _close_all_clients_fd(); void _close_all_clients_cgi_pipes(); - void _close_cgi_pipe_r_from_child(int fd); - void _close_all_cgi_pipe_r_from_child(); void _close_all_listen_sockets(); void _reopen_lsocket(std::vector::iterator it); void _handle_epoll_error_lsocket(uint32_t events, std::vector::iterator it); @@ -134,7 +132,8 @@ class Webserv void _exec_script(Client *client, char *env[]); void _check_script_output(Client *client, std::string & output); void _check_script_status(Client *client, std::string & output); - size_t _check_script_fields(const std::string & output, size_t status); + unsigned int + _check_script_fields(const std::string & output, unsigned int status); void _check_fields_duplicates(Client *client, std::string & output); void _add_script_body_length_header(std::string & output); void _remove_body_leading_empty_lines(std::string & output); diff --git a/srcs/webserv/cgi.cpp b/srcs/webserv/cgi.cpp index 99ffdb3..8ad5e90 100644 --- a/srcs/webserv/cgi.cpp +++ b/srcs/webserv/cgi.cpp @@ -70,16 +70,27 @@ void Webserv::_cgi_open_pipes(Client *client) { #define R 0 #define W 1 - - int fd_in[2]; - int fd_out[2]; - ::pipe(fd_in); - ::pipe(fd_out); + int pipe_fd[2]; - client->cgi_pipe_r_from_parent = fd_in[R]; - client->cgi_pipe_w_to_child = fd_in[W]; - client->cgi_pipe_r_from_child = fd_out[R]; - client->cgi_pipe_w_to_parent = fd_out[W]; + if (::pipe(pipe_fd) == -1) + { + std::perror("err pipe"); + client->status = 500; + } + client->cgi_pipe_r_from_parent = pipe_fd[R]; + client->cgi_pipe_w_to_child = pipe_fd[W]; + + if (::pipe(pipe_fd) == -1) + { + std::perror("err pipe"); + if (::close(client->cgi_pipe_r_from_parent) == -1) + std::perror("err close()"); + if (::close(client->cgi_pipe_w_to_child) == -1) + std::perror("err close()"); + client->status = 500; + } + client->cgi_pipe_r_from_child = pipe_fd[R]; + client->cgi_pipe_w_to_parent = pipe_fd[W]; // epoll add for writing body to child _epoll_update(client->cgi_pipe_w_to_child, EPOLLOUT, EPOLL_CTL_ADD); @@ -181,7 +192,11 @@ void Webserv::_exec_script(Client *client, char *env[]) pid = fork(); if (pid == -1) + { std::perror("err fork()"); + client->status = 500; + _close_client_cgi_pipes(client); + } else if (pid == 0) // child { std::signal(SIGPIPE, SIG_DFL); @@ -189,19 +204,13 @@ void Webserv::_exec_script(Client *client, char *env[]) if (dup2(client->cgi_pipe_r_from_parent, STDIN_FILENO) == -1) { - std::perror("err dup2()"); - if (::close(client->cgi_pipe_r_from_parent) == -1) // Valgind debug, not essential - std::perror("err close"); - if (::close(client->cgi_pipe_w_to_parent) == -1) // Valgind debug, not essential - std::perror("err close"); + std::perror("err dup2() STDIN_FILENO"); throw ExecFail(); } if (dup2(client->cgi_pipe_w_to_parent, STDOUT_FILENO) == -1) { - std::perror("err dup2()"); - if (::close(client->cgi_pipe_r_from_parent) == -1) // Valgind debug, not essential - std::perror("err close"); - if (::close(client->cgi_pipe_w_to_parent) == -1) // Valgind debug, not essential + std::perror("err dup2() STDOUT_FILENO"); + if (::close(STDIN_FILENO) == -1) // Valgind debug, not essential std::perror("err close"); throw ExecFail(); } @@ -210,8 +219,8 @@ void Webserv::_exec_script(Client *client, char *env[]) if (::close(_epfd) == -1) std::perror("err close"); - path = client->get_rq_script_path(); // Wut ? Only relative path ? -/*DEBUG*/std::cerr << "execve:[" << path << "]\n"; + path = client->get_rq_script_path(); + std::cerr << "execve:[" << path << "]\n"; // DEBUG if (::execve(path.c_str(), nll, env) == -1) // replace path for debug error forcing { std::perror("err execve()"); @@ -230,18 +239,17 @@ void Webserv::_exec_script(Client *client, char *env[]) std::perror("err close"); if (::close(client->cgi_pipe_w_to_child) == -1) std::perror("err close"); - // add client->cgi_pipe_r_from_child to epoll, _epoll_update(client->cgi_pipe_r_from_child, EPOLLIN, EPOLL_CTL_ADD); // stop monitoring client->fd until the cgi-script as done is job _epoll_update(client->get_cl_fd(), 0, EPOLL_CTL_DEL); client->cgi_pid = pid; - client->cgi_state = CGI_WAIT_FOR_OUTPUT; + client->cgi_state = CGI_OUTPUT_READING; } + } -#define STATUS_500 std::string("Status: 500" CRLF CRLF); void Webserv::_check_script_output(Client *client, std::string & output) { @@ -282,17 +290,16 @@ void Webserv::_check_script_status(Client *client, std::string & output) client->status = 200; } -size_t Webserv::_check_script_fields(const std::string & output, size_t status) +unsigned int Webserv::_check_script_fields(const std::string & output, unsigned int status) { std::string headers; std::string body; size_t pos; -std::cerr << "0\n"; +std::cerr << "_check_script_fields()\n"; pos = output.find(CRLF CRLF); if (pos == NPOS) // there is not empty line return 500; -std::cerr << "1\n"; headers = output.substr(0, pos); body = output.substr(pos + CRLF_SIZE * 2); headers = str_tolower(headers); @@ -301,18 +308,14 @@ std::cerr << "1\n"; { if (!body.empty()) // there is body return 500; -std::cerr << "2\n"; if (headers.find("location") == NPOS) // there is no location field return 500; -std::cerr << "3\n"; } else if (headers.find("location") != NPOS) // there is a location field { if (body.empty()) // there is no body return 500; -std::cerr << "4\n"; } -std::cerr << "5\n"; return status; } diff --git a/srcs/webserv/cgi_epoll.cpp b/srcs/webserv/cgi_epoll.cpp index a7d93d9..3220626 100644 --- a/srcs/webserv/cgi_epoll.cpp +++ b/srcs/webserv/cgi_epoll.cpp @@ -3,30 +3,27 @@ #define BUFSIZE 8192 // (8Ko) -#define STATUS_500 std::string("Status: 500" CRLF CRLF); void Webserv::_read_cgi_output(Client *client) { char buf[BUFSIZE]; ssize_t ret; - std::cerr << "_read_cgi_output()" << "\n"; - std::cerr << "cgi_pid = " << client->cgi_pid << "\n"; - std::cerr << "client fd = " << client->get_cl_fd() << "\n"; - std::cerr << "cgi fd = " << client->cgi_pipe_r_from_child << "\n"; + std::cerr << "_read_cgi_output()" << "\n"; // Debug + std::cerr << "cgi_pid = " << client->cgi_pid << "\n"; // Debug + std::cerr << "client fd = " << client->get_cl_fd() << "\n"; // Debug + std::cerr << "cgi fd = " << client->cgi_pipe_r_from_child << "\n"; // Debug ret = ::read(client->cgi_pipe_r_from_child, buf, BUFSIZE); - std::cerr << "cgi read ret = " << ret << "\n"; + std::cerr << "cgi read ret = " << ret << "\n"; // Debug if (ret == -1) { std::perror("err read(cgi_fd)"); - client->cgi_output = STATUS_500; + client->status = 500; + client->cgi_state = CGI_NO_CGI; } else if (ret == 0) - std::cerr << "Madame s'il vous plait, du Ketchup pour mon hamburger" << " (AKA:ret=0)" << "\n"; + std::cerr << "Madame s'il vous plait, du Ketchup pour mon hamburger" << " (AKA:ret=0)" << "\n"; // :) else - { - std::cerr << "NORMAL BEHAVIOR I THINK!\n"; // debug client->cgi_output.append(buf, ret); - } } void Webserv::_handle_epollerr_cgi_output(uint32_t events, Client *client) @@ -37,7 +34,8 @@ void Webserv::_handle_epollerr_cgi_output(uint32_t events, Client *client) std::cerr << "client fd = " << client->get_cl_fd() << "\n"; std::cerr << "cgi fd = " << client->cgi_pipe_r_from_child << "\n"; - client->cgi_output = STATUS_500; + client->status = 500; + client->cgi_state = CGI_NO_CGI; // Common with EPOLLHUP pid_t wait_ret; @@ -45,14 +43,11 @@ void Webserv::_handle_epollerr_cgi_output(uint32_t events, Client *client) std::cerr << "cgi EPOLLERR waitpid ret = " << wait_ret << "\n"; if (wait_ret == client->cgi_pid) { - if (client->cgi_pipe_r_from_child) - { - if (::close(client->cgi_pipe_r_from_child) == -1) - std::perror("err close()"); - } - client->cgi_pipe_r_from_child = 0; + _epoll_update(client->cgi_pipe_r_from_child, 0, EPOLL_CTL_DEL); + if (::close(client->cgi_pipe_r_from_child) == -1) + std::perror("err close()"); + client->cgi_pipe_r_from_child = -1; _epoll_update(client->get_cl_fd(), EPOLLOUT, EPOLL_CTL_ADD); - client->cgi_state = CGI_OUTPUT_READY; } } @@ -73,14 +68,12 @@ void Webserv::_handle_epollhup_cgi_output(uint32_t events, Client *client) // std::cerr << "cgi EPOLLHUP waitpid ret = " << wait_ret << "\n"; if (wait_ret == client->cgi_pid) { - if (client->cgi_pipe_r_from_child) - { - if (::close(client->cgi_pipe_r_from_child) == -1) - std::perror("err close()"); - } - client->cgi_pipe_r_from_child = 0; + _epoll_update(client->cgi_pipe_r_from_child, 0, EPOLL_CTL_DEL); + if (::close(client->cgi_pipe_r_from_child) == -1) + std::perror("err close()"); + client->cgi_pipe_r_from_child = -1; _epoll_update(client->get_cl_fd(), EPOLLOUT, EPOLL_CTL_ADD); - client->cgi_state = CGI_OUTPUT_READY; + client->cgi_state = CGI_OUTPUT_COMPLETE; } } @@ -95,9 +88,8 @@ void Webserv::_handle_epollerr_cgi_input(uint32_t events, Client *client) { (void)events; - client->cgi_output = STATUS_500; - - client->cgi_state = CGI_OUTPUT_READY; + client->status = 500; + client->cgi_state = CGI_NO_CGI; _close_client_cgi_pipes(client); _epoll_update(client->get_cl_fd(), EPOLLOUT, EPOLL_CTL_ADD); } diff --git a/srcs/webserv/close.cpp b/srcs/webserv/close.cpp index 18fdd74..49533df 100644 --- a/srcs/webserv/close.cpp +++ b/srcs/webserv/close.cpp @@ -14,6 +14,7 @@ void Webserv::_close_client(int fd) if (::close(fd) == -1) std::perror("err close()"); _close_client_cgi_pipes(&(*it)); + // it->clear(); // PISTE, debug normalement superflu _clients.erase(it); break; } @@ -24,23 +25,38 @@ void Webserv::_close_client(int fd) void Webserv::_close_client_cgi_pipes(Client *client) { if (client->cgi_state) - { + { // No need to reset the fd to -1 normaly std::cerr << "close cgi-pipes" << "\n"; if (::close(client->cgi_pipe_w_to_child) == -1) std::perror("err close()"); + // client->cgi_pipe_w_to_child = -1; + if (::close(client->cgi_pipe_r_from_child) == -1) std::perror("err close()"); + // client->cgi_pipe_r_from_child = -1; + if (::close(client->cgi_pipe_w_to_parent) == -1) std::perror("err close()"); + // client->cgi_pipe_w_to_parent = -1; + if (::close(client->cgi_pipe_r_from_parent) == -1) std::perror("err close()"); + // client->cgi_pipe_r_from_parent = -1; } } void Webserv::_close_all_clients() { _close_all_clients_fd(); + _clients.clear(); + // REMPLACEMENT -> +/* while (!_clients.empty()) + { + std::cerr << "_clients.pop_back() " << &_clients.back() << "\n"; + _clients.back().clear(); + _clients.pop_back(); + } */ } void Webserv::_close_all_clients_fd() diff --git a/srcs/webserv/request.cpp b/srcs/webserv/request.cpp index 2940d4c..9df7a75 100644 --- a/srcs/webserv/request.cpp +++ b/srcs/webserv/request.cpp @@ -25,8 +25,6 @@ void Webserv::_request(Client *client) } else if (ret == READ_COMPLETE) { - if (client->body_complete && client->get_rq_multi_bodys().empty()) // DEBUG - std::cerr << "______BODY\n" << client->get_rq_body() << "\n______\n"; // DEBUG _epoll_update(client->get_cl_fd(), EPOLLOUT, EPOLL_CTL_MOD); client->request_complete = true; } @@ -53,13 +51,10 @@ int Webserv::_read_request(Client *client) // ::print_special(client->raw_request); // std::cerr << "__raw_request__\n" << client->raw_request << "\n______\n"; // DEBUG - print_special(client->raw_request); - - std::cerr << "client header complete: " << client->header_complete << "\n"; // DEBUG + // print_special(client->raw_request); if (!client->header_complete) { - std::cout << "Header not complete\n"; // debug client->parse_request_headers(_servers); if (client->status) return READ_COMPLETE; @@ -78,7 +73,6 @@ int Webserv::_read_request(Client *client) } if (client->header_complete) { - std::cerr << "Client header Complete\n"; // client->read_body_size += ret; // Not accurate, part of body could have been read with headers, unused for now client->parse_request_body(); if (client->status || client->body_complete) diff --git a/srcs/webserv/response.cpp b/srcs/webserv/response.cpp index d78c60f..e0c1908 100644 --- a/srcs/webserv/response.cpp +++ b/srcs/webserv/response.cpp @@ -25,6 +25,7 @@ void Webserv::_response(Client *client) || client->status == 400 // TODO: Refactoring || client->status == 408 || client->status == 413) + // || client->cgi_state == CGI_OUTPUT_COMPLETE) // DEBUG _close_client(client->get_cl_fd()); else { @@ -48,8 +49,8 @@ int Webserv::_send_response(Client *client) if (!client->status) { _construct_response(client); - if (client->cgi_state == CGI_WAIT_FOR_OUTPUT - || client->cgi_state == CGI_WAIT_TO_EXEC) + if (client->cgi_state == CGI_WAIT_TO_EXEC + || client->cgi_state == CGI_OUTPUT_READING) return SEND_IN_PROGRESS; } @@ -72,6 +73,11 @@ int Webserv::_send_response(Client *client) std::cerr << "SEND RET 0 for client.fd =" << client->get_cl_fd() << "\n"; // DEBUG return SEND_CLOSE; } + if (ret < (int)client->response.size()) + { + std::cerr << "send() as not send all data, IT CAN HAPPEN !" << "\n"; // DEBUG + throw ExecFail(); // DEBUG, TODO, A ENLEVER ABSOLEMENT, WHILE TEMP =D + } // /* Debug */ std::cerr << "ret send() = " << ret << "\n"; // DEBUG return SEND_COMPLETE; @@ -99,16 +105,26 @@ void Webserv::_construct_response(Client *client) if (client->cgi_state == CGI_READY_TO_EXEC) { std::string body = client->get_rq_body(); - ::write(client->cgi_pipe_w_to_child, body.c_str(), body.size()); + std::cerr << "client.fd for write body =" << client->get_cl_fd() << "\n"; // DEBUG + std::cerr << "client.cgi_pipe_w_to_child for write body =" << client->cgi_pipe_w_to_child << "\n"; // DEBUG + if (::write(client->cgi_pipe_w_to_child, body.c_str(), body.size()) == -1) + { + std::perror("err write()"); + _close_client_cgi_pipes(client); + client->status = 500; + client->cgi_state = CGI_NO_CGI; + return; + } _exec_cgi(client); } - else if (client->cgi_state == CGI_OUTPUT_READY) + else if (client->cgi_state == CGI_OUTPUT_COMPLETE) { // /*DEBUG*/ std::cout << "\n" B_PURPLE "[response]:" RESET "\n"; ::print_special(client->response); std::cout << B_PURPLE "-----------" RESET "\n\n"; // /*DEBUG*/ std::cout << "\n" B_PURPLE "[script output]:" RESET "\n"; ::print_special(client->cgi_output); std::cout << B_PURPLE "-----------" RESET "\n\n"; _check_script_output(client, client->cgi_output); // FD_CGI : adjust for client->cgi_output; - if (client->status < 400) + if (client->status < 400 || client->status >= 600) client->response += client->cgi_output; + // client->cgi_state = CGI_NO_CGI; // Not indispensable, reset when client.clear() // /*DEBUG*/ std::cout << "\n" B_PURPLE "[response + output]:" RESET "\n"; ::print_special(client->response); std::cout << B_PURPLE "-----------" RESET "\n\n"; } else if (_is_cgi(client, path)) diff --git a/srcs/webserv/run_loop.cpp b/srcs/webserv/run_loop.cpp index 4c5d752..d62856f 100644 --- a/srcs/webserv/run_loop.cpp +++ b/srcs/webserv/run_loop.cpp @@ -12,8 +12,9 @@ void Webserv::run() int i; int count_loop = 0; std::vector::iterator it_lsocket; - Client *client_cgi_output = NULL; + std::vector::iterator it_client; Client *client_cgi_input = NULL; + Client *client_cgi_output = NULL; g_run = true; while (g_run) @@ -37,8 +38,10 @@ void Webserv::run() { try { it_lsocket = std::find(_listen_sockets.begin(), _listen_sockets.end(), events[i].data.fd); - client_cgi_output = _find_cgi_output_fd(events[i].data.fd); + it_client = std::find(_clients.begin(), _clients.end(), events[i].data.fd); client_cgi_input = _find_cgi_input_fd(events[i].data.fd); + client_cgi_output = _find_cgi_output_fd(events[i].data.fd); + if (it_lsocket != _listen_sockets.end()) { if (events[i].events & EPOLLERR || events[i].events & EPOLLHUP) @@ -46,6 +49,15 @@ void Webserv::run() else if (events[i].events & EPOLLIN) _accept_connection(*it_lsocket); } + else if (it_client != _clients.end()) + { + if (events[i].events & EPOLLERR || events[i].events & EPOLLHUP) + _handle_epoll_error_client(events[i].events, events[i].data.fd); + else if (events[i].events & EPOLLIN) + _request( &(*it_client) ); + else if (events[i].events & EPOLLOUT) + _response( &(*it_client) ); + } else if (client_cgi_input) { if (events[i].events & EPOLLERR || events[i].events & EPOLLHUP) @@ -62,14 +74,9 @@ void Webserv::run() else if ( (events[i].events & EPOLLHUP) && !(events[i].events & EPOLLIN) ) _handle_epollhup_cgi_output(events[i].events, client_cgi_output); } - else if (std::find(_clients.begin(), _clients.end(), events[i].data.fd) != _clients.end()) // TODO: save the it in var to avoid multiples find() + else { - if (events[i].events & EPOLLERR || events[i].events & EPOLLHUP) - _handle_epoll_error_client(events[i].events, events[i].data.fd); - else if (events[i].events & EPOLLIN) - _request( &(*std::find(_clients.begin(), _clients.end(), events[i].data.fd)) ); - else if (events[i].events & EPOLLOUT) - _response( &(*std::find(_clients.begin(), _clients.end(), events[i].data.fd)) ); + std::cerr << "NOTHING FOR FD = " << events[i].data.fd << "\n"; // DEBUG } ++i; if (!g_run) diff --git a/urls.txt b/urls.txt index bd87e74..19c3260 100644 --- a/urls.txt +++ b/urls.txt @@ -6,4 +6,3 @@ http://localhost:4040/test http://localhost:4040/test/test_deeper/ http://localhost:4040/test/test_deeper/super_deep/ http://localhost:4040/test/index1.html - diff --git a/urls_cgi.txt b/urls_cgi.txt new file mode 100644 index 0000000..cd2f146 --- /dev/null +++ b/urls_cgi.txt @@ -0,0 +1 @@ +http://localhost:4040/cgi-bin/cgi_cpp_empty.out?fname=John&lname=Doe \ No newline at end of file diff --git a/www/user_files/pepe.jpg b/www/user_files/pepe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1877242978a454cf817c66167ca9830d257de2a9 GIT binary patch literal 55822 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

+VncK+yvm&Qs=13#cn1|j&|>lR4pU<* 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