Webserv-project / Webserv

0 stars 2 forks source link

main logic debugging #38

Open Victra15 opened 1 year ago

Victra15 commented 1 year ago

file i/o block되는 문제 해결

이미지 출력 안되는 문제 해결

Victra15 commented 1 year ago

multiport상황에서 5525 port로 접속시

accept: Resource temporarily unavailable 에러 발생

conf 설정값:

server {
    # location / {

    #     root /homeer;
    #     # index fttt.html;

    # }

    location /we {
        root /home;
        index fttest;
        # redirect    test;
        # autoindex off; -> PATH_NOTFOUND
    }
    host 127.0.0.1;     
    port 5525;  
    server_name \m;        
    root /Users/yolee/42Seoul/Webserv/var;      
    index tedfdfdst;            
    client_max_body_size 42; 
    error_page 500 502 ; 
    error_page 400 502 /50x.html;   
    location / {

        root /mnt/d/42/Webserv/seoul.php;
        index index.html;

        redirect http://api.example.com;
        allow_method GET;

    }
}      

server {
    host 127.0.0.1;     
    port 4242 ;
    server_name example.com   ; 
    root /Users/yolee/42Seoul/Webserv/var     ;
    index index.html        ;    
    client_max_body_size 442 ;    
    error_page 500 502 ;
    error_page 500 502 3432;
    error_page 540 502 2;#;
    error_page 520 502;
    error_page 530 502;
    location / {
        root /Users/yolee/42Seoul/Webserv/var     ;
        index index.html;   
        # redirect s;
        autoindex on;
        allow_method GET DELETE;
    }     
    location /ft {
        root /;
        index test;
        redirect http://api.example.com;
        allow_method GET POST;
    }
}
Victra15 commented 1 year ago

멀티포트 에러 해결

hodongho commented 1 year ago

한번의 recv 호출로 body 전체를 전달받는 경우 pending 에러(SOCKSTAT_CLIENT_RECV_BODY를 사용하는 POST요청 한정)

hodongho commented 1 year ago

HTTPRequest의 getContentLength() 에러 해결

Victra15 commented 1 year ago

get으로 cgi요청 들어왔을시 그 파일 그대로 읽어서 가져오는식으로 요청 변경

hodongho commented 1 year ago

recvBody에서 client_max_body_size보다 큰 값의 body가 들어왔을 때 펜딩되는 에러

if (client_socket->buf_str.size() > conf.getMaxBodySize(ntohs(client_socket->listen_addr.sin_port)))
   this->setErrorPageResponse(STATCODE_BADREQ, client_socket) 

조건문에 걸려서 setErrorPageResponse 함수로 넘어간 후 SOCKSTAT_CLIENT_SEND_RESPONSE로 만들어주지만 EVFILT_WRITE를 설정해주지 않는 것이 문제

hodongho commented 1 year ago

recv 한번에 바디까지 전부 받을경우 max_body_size에 대해 검사하지않는 에러

기존 recvBody함수에만 있던 조건문을 setPostBody로 옮기면서 해결 changeEvent 구문도 중복됨으로 함수 상단으로 이동


void    ServerHandler::setPostBody(ClientSocketData* const & client_socket)
{
    changeEvent(client_socket->sock_fd, EVFILT_READ, EV_DISABLE, 0, NULL, client_socket);
    changeEvent(client_socket->sock_fd, EVFILT_WRITE, EV_ENABLE, 0, NULL, client_socket);
    if (client_socket->buf_str.size() > conf.getMaxBodySize(ntohs(client_socket->listen_addr.sin_port)))
    {
        this->setErrorPageResponse(STATCODE_BADREQ, client_socket);
        return ;
    }
    client_socket->status = SOCKSTAT_CLIENT_POST;
    client_socket->http_request.saveBody(client_socket->buf_str);
    client_socket->buf_str.clear();
}