From 6f0eed1bfcd8dc390f4a55e4d84bd2412f3599ec Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 6 Mar 2005 18:19:27 +0000 Subject: [PATCH] Adesso fa un po' meno schifo --- sources/wwwd.c | 81 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 61 insertions(+), 20 deletions(-) diff --git a/sources/wwwd.c b/sources/wwwd.c index 3379486..5d22a87 100644 --- a/sources/wwwd.c +++ b/sources/wwwd.c @@ -57,6 +57,9 @@ void usage(void); void ServPage(int sockfd); void PrintErr(char * error); void print_headers(FILE *file); +void print_err404(FILE *file, char *filename); +void print_err400(FILE *file, char *string); +void print_err500(FILE *file, char *string); /* Program beginning */ int main(int argc, char *argv[]) @@ -215,7 +218,9 @@ void ServPage(int sockfd) char *methods[] = { "GET", "PUT", NULL }; char *codes[] = { "200 OK", + "400 Bad Request", "404 Not Found", + "500 Internal Server Error", NULL }; int nleft; @@ -224,25 +229,30 @@ void ServPage(int sockfd) sock = fdopen(sockfd, "w+"); /* main loop, reading 0 char means client close connection */ line = fgets(buffer, MAXLINE, sock); - copy = strndupa(line, MAXLINE); - if (line == NULL) { PrintErr("Errore in lettura"); return; } + /* parsing first line, getting method and filename */ + copy = strndupa(line, MAXLINE); if ((method = strtok_r(copy, " ", &ptr)) == NULL) { - PrintErr("Non ho trovato il metodo"); + fprintf(sock, "HTTP/1.0 %s\n", codes[2]); + print_headers(sock); + print_err400(sock, line); return; } if ((filename = strtok_r(NULL, " ", &ptr)) == NULL) { - PrintErr("Non ho trovato il file"); + fprintf(sock, "HTTP/1.0 %s\n", codes[2]); + print_headers(sock); + print_err400(sock, line); return; } if ((version = strtok_r(NULL, " ", &ptr)) == NULL) { - PrintErr("Non ho trovato la versione"); + fprintf(sock, "HTTP/1.0 %s\n", codes[2]); + print_headers(sock); + print_err400(sock, line); return; } - printf("metodo %s -- file %s -- versione %s\n", method, filename, version); i = 0; while ( (ptr = methods[i]) != NULL) { if ( (strncmp(ptr, method, strlen(ptr)) == 0)) { @@ -251,24 +261,23 @@ void ServPage(int sockfd) i++; } if (i>=2) { - printf("No method %s found\n", method); + fprintf(sock, "HTTP/1.0 %s\n", codes[2]); + print_headers(sock); + print_err400(sock, line); return; } while (strcmp(line,"\r\n")) { - line = fgets(buffer, MAXLINE, sock); - printf("letto: %s\n", line); + line = fgets(buffer, MAXLINE, sock); } if ( (file = fopen(filename, "r")) == NULL) { - printf("file %s", filename); - perror("Error opening"); - fprintf(sock, "HTTP/1.0 %s\n", codes[1]); + fprintf(sock, "HTTP/1.0 %s\n", codes[2]); print_headers(sock); + print_err404(sock, filename); return; } fprintf(sock, "HTTP/1.0 %s\n", codes[0]); - //PrintHeader(sock); print_headers(sock); j = 0; @@ -276,14 +285,20 @@ void ServPage(int sockfd) printf("Loop %d\n", j++); if ( (nleft = full_fread(file, outbuf, 1024)) != 0) { if (ferror(file)) { - printf("Errore in lettura"); + fprintf(sock, "HTTP/1.0 %s\n", codes[3]); + print_headers(sock); + snprintf(buffer, MAXLINE, "reading %s", filename); + print_err500(sock, buffer); return; } } printf("Loop %d rimasti %d\n", j, nleft); if (full_fwrite(sock, outbuf, 1024-nleft) != 0) { if (ferror(file)) { - printf("Errore in scrittura"); + fprintf(sock, "HTTP/1.0 %s\n", codes[3]); + print_headers(sock); + snprintf(buffer, MAXLINE, "writing"); + print_err500(sock, buffer); return; } } @@ -317,10 +332,36 @@ void print_headers(FILE *file) fprintf(file, "Connection: close\n"); fprintf(file, "Content-Type: text/html; charset=iso-8859-1\n"); fprintf(file, "\n"); - printf("Date: %s", ctime(&tempo)); - printf("Server: WWWd test server\n"); - printf("Connection: close\n"); - printf("Content-Type: text/html; charset=iso-8859-1\n"); - printf("\n"); + return; +} + +void print_err404(FILE *file, char *filename) +{ + fprintf(file, "404 Not Found\n"); + fprintf(file, "

Not Found

\nThe requested "); + fprintf(file, "URL %s was not found on this server.


", filename); + fprintf(file, "
WWWd by Simone Piccardi
"); + return; +} + +void print_err400(FILE *file, char *string) +{ + fprintf(file, "404 Bad Request\n"); + fprintf(file, "

Bad Request

\n "); + fprintf(file, "Your browser sent a request that this server could not "); + fprintf(file, "understand.

The request line

%s

", string); + fprintf(file, "is invalid following the protocol


"); + fprintf(file, "
WWWd by Simone Piccardi
"); + return; +} + + +void print_err500(FILE *file, char *string) +{ + fprintf(file, "500 Internal Server Error\n"); + fprintf(file, "

Internal Server Error

\n "); + fprintf(file, "We got an error processing your request.

"); + fprintf(file, "Error is: %s


\n", string); + fprintf(file, "
WWWd by Simone Piccardi
"); return; } -- 2.30.2