diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index 7afaaa32be5258b08ed0a15c3cff08ea249afa1c..5142b90ab9ff138a1e41fdf035cb688269ee871f 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -469,6 +469,7 @@ static void close_request(http_session_t * session) { if(!session->req.keep_alive) { close_socket(session->socket); + session->socket=INVALID_SOCKET; session->finished=TRUE; } } @@ -595,12 +596,14 @@ static void send_error(char *message, http_session_t * session) { char error_code[4]; + lprintf("%04d !ERROR %s",session->socket,message); session->req.send_location=FALSE; SAFECOPY(error_code,message); sprintf(session->req.request,"%s%s.html",error_dir,error_code); if(session->http_ver > HTTP_0_9) send_headers(session,message); - sock_sendfile(session->socket,session->req.request); + if(fexist(session->req.request)) + sock_sendfile(session->socket,session->req.request); close_request(session); } @@ -708,7 +711,7 @@ static BOOL read_mime_types(char* fname) return(mime_count>0); } -static int sockreadline(SOCKET socket, time_t timeout, char *buf, size_t length) +static int sockreadline(http_session_t * session, time_t timeout, char *buf, size_t length) { char ch; DWORD i; @@ -717,21 +720,22 @@ static int sockreadline(SOCKET socket, time_t timeout, char *buf, size_t length) start=time(NULL); for(i=0;TRUE;) { - if(!socket_check(socket,&rd)) { - close_socket(socket); + if(!socket_check(session->socket,&rd)) { + close_socket(session->socket); + session->socket=INVALID_SOCKET; return(-1); } if(!rd) { if(time(NULL)-start>timeout) { - close_socket(socket); + close_socket(session->socket); return(-1); /* time-out */ } mswait(1); continue; /* no data */ } - if(recv(socket, &ch, 1, 0)!=1) + if(recv(session->socket, &ch, 1, 0)!=1) break; if(ch=='\n') @@ -750,7 +754,7 @@ static int sockreadline(SOCKET socket, time_t timeout, char *buf, size_t length) else buf[i]=0; - lprintf("%04d RX: %s",socket,buf); + lprintf("%04d RX: %s",session->socket,buf); return(0); } @@ -763,11 +767,11 @@ static BOOL parse_headers(http_session_t * session) int i; lprintf("%04d Parsing headers",session->socket); - while(!sockreadline(session->socket,TIMEOUT_THREAD_WAIT,req_line,sizeof(req_line))&&strlen(req_line)) { + while(!sockreadline(session,TIMEOUT_THREAD_WAIT,req_line,sizeof(req_line))&&strlen(req_line)) { /* Check this... SHOULD append lines starting with spaces or horizontal tabs. */ while((recvfrom(session->socket,next_char,1,MSG_PEEK,NULL,0)>0) && (next_char[0]=='\t' || next_char[0]==' ')) { i=strlen(req_line); - sockreadline(session->socket,TIMEOUT_THREAD_WAIT,req_line+i,sizeof(req_line)-i); + sockreadline(session,TIMEOUT_THREAD_WAIT,req_line+i,sizeof(req_line)-i); } strtok(req_line,":"); if((value=strtok(NULL,""))!=NULL) { @@ -916,7 +920,7 @@ static BOOL get_req(http_session_t * session) char req_line[MAX_REQUEST_LINE]; char * p; - if(!sockreadline(session->socket,TIMEOUT_THREAD_WAIT,req_line,sizeof(req_line))) { + if(!sockreadline(session,TIMEOUT_THREAD_WAIT,req_line,sizeof(req_line))) { lprintf("%04d Got request line: %s",session->socket,req_line); p=get_method(req_line,session); if(p!=NULL) {