diff --git a/webserver/Makefile b/webserver/Makefile index f33aa73ae56f6d3b8e18591a3aef85e218d7ec3c..abfe81bf1acf7b4a19b9f4a3ba1fe5499932f2b8 100644 --- a/webserver/Makefile +++ b/webserver/Makefile @@ -1,65 +1,60 @@ -# Ces variables servent à préciser le compilateur que l'on veut utiliser -# ainsi que les paramètres de compilation -WRAPPER=$(if $(shell which clang), clang, gcc) -CC=$(WRAPPER) -LD=$(WRAPPER) -CFLAGS=-Wall -W -Werror -g -I../../parselib -LDFLAGS=-lpthread -lrt -L../../parselib -lhttp_parse - -# Le nom de l'exécutable à fabriquer -EXE=pawnee - -# Les variables HEADERS, CFILES et OBJS vont contenir respectivement -# la listes des fichiers .h, .c et le nom des fichiers .o à fabriquer -# On utilise la directive particulière \$(wildcard ...) qui permet -# de construire automatiquement une liste de fichiers -HEADERS=$(wildcard *.h) -CFILES=$(wildcard *.c) -# Cette construction de variable veut dire: remplacer la chaine ".c" par -# ".o" dans la variable CFILES -# Ceci nous permet de construire la liste des fichiers .o à fabriquer -OBJS=$(CFILES:.c=.o) - -# Même utilisation que précédemment. On précise les règles qui -# ne fabrique pas de fichier du nom de leur cible -.PHONY: all clean mrproper - -# La règle par défaut déclenche la fabrication de l'exécutable -# par dépendance -all: alldeps $(EXE) - -.PHONY: alldeps -alldeps: - make -C ../../parselib - -# Cette règle permet de construire l'exécutable. Elle dépend des fichiers -# .o et effectue l'édition de lien. Rien de nouveau ici -$(EXE): $(OBJS) - $(LD) $^ $(LDFLAGS) -o $@ - -# Cette règle permet de construire automatiquement les règles -# de compilation pour chacun des fichiers .c -# l'option -MM de gcc analyse un fichier .c et -# affiche sur sa sortie standard une règle compatible -# make pour le compiler. -# Ceci permet d'ajouter automatiquement les fichiers .h aux dépendances -# des fichiers .o à construire. Ainsi, en modifiant un fichier .h -# tous les fichiers .c qui incluent ce fichier sont recompilés -# Après votre première compilation, regardez le contenu du fichier -# makefile.dep généré afin de comprendre exactement de quoi il retourne. -makefile.dep: $(CFILES) $(HEADERS) - $(CC) $(CFLAGS) -MM $(CFILES) > $@ - -# Cette règle efface le fichier de dépendances et les fichiers .o -clean: - $(RM) $(OBJS) makefile.dep - -# Cette règle effectue la précédente et efface en plus l'exécutable -mrproper: clean - $(RM) $(EXE) - -# On inclue le fichier de dépendance qui va contenir les règles -# de construction des fichiers .o -# S'il n'existe pas, make invoque automatiquement la règle -# qui l'a pour cible -include makefile.dep +# Ces variables servent à préciser le compilateur que l'on veut utiliser +# ainsi que les paramètres de compilation +CC=gcc +LD=gcc +CFLAGS=-Wall -W -Werror -g +LDFLAGS= -g -pthread + +# Le nom de l'exécutable à fabriquer +EXE=pawnee + +# Les variables HEADERS, CFILES et OBJS vont contenir respectivement +# la listes des fichiers .h, .c et le nom des fichiers .o à fabriquer +# On utilise la directive particulière \$(wildcard ...) qui permet +# de construire automatiquement une liste de fichiers +HEADERS=$(wildcard *.h) +CFILES=$(wildcard *.c) +# Cette construction de variable veut dire : remplacer la chaine ".c" par +# ".o" dans la variable CFILES +# Ceci nous permet de construire la liste des fichiers .o à fabriquer +OBJS=$(CFILES:.c=.o) + +# Même utilisation que précédemment. On précise les règles qui +# ne fabrique pas de fichier du nom de leur cible +.PHONY: all clean mrproper + +# La règle par défaut déclenche la fabrication de l'exécutable +# par dépendance +all: $(EXE) + +# Cette règle permet de construire l'exécutable. Elle dépend des fichiers +# .o et effectue l'édition de lien. Rien de nouveau ici +$(EXE): $(OBJS) + $(LD) $^ $(LDFLAGS) -o $@ + +# Cette règle permet de construire automatiquement les règles +# de compilation pour chacun des fichiers .c +# l'option -MM de gcc analyse un fichier .c et +# affiche sur sa sortie standard une règle compatible +# make pour le compiler. +# Ceci permet d'ajouter automatiquement les fichiers .h aux dépendances +# des fichiers .o à construire. Ainsi, en modifiant un fichier .h +# tous les fichiers .c qui incluent ce fichier sont recompilés +# Après votre première compilation, regardez le contenu du fichier +# makefile.dep généré afin de comprendre exactement de quoi il retourne. +makefile.dep: $(CFILES) $(HEADERS) + $(CC) -MM $(CFILES) > $@ + +# Cette règle efface le fichier de dépendances et les fichiers .o +clean: + $(RM) $(OBJS) makefile.dep + +# Cette règle effectue la précédente et efface en plus l'exécutable +mrproper: clean + $(RM) $(EXE) + +# On inclue le fichier de dépendance qui va contenir les règles +# de construction des fichiers .o +# S'il n'existe pas, make invoque automatiquement la règle +# qui l'a pour cible +include makefile.dep diff --git a/webserver/client.c b/webserver/client.c index 3003183fd20794bd7b78f7d63f28573c7d392bd6..86a95857ade864e7a875ecddbe972ecce0740153 100644 --- a/webserver/client.c +++ b/webserver/client.c @@ -11,7 +11,9 @@ char* rewrite_target(char *target){ char* ret = strchr(target, '?'); char* rep =""; - strncpy(rep,target,atoi(ret)-1); + if (ret!= NULL){ + strncpy(rep,target,atoi(ret)-1); + } return rep; } @@ -49,12 +51,14 @@ void send_status(FILE *client, int code, const char *reason_phrase){ } void send_response(FILE *client, int code, const char *reason_phrase, const char *message_body){ + fprintf(client, "entree dans send_response\n"); send_status(client,code,reason_phrase); //transmet la réponse complète (la suite) fprintf(client,"Content-Lenght: %u\r\n",(unsigned int)strlen(message_body)); fprintf(client,"\r\n"); fprintf(client,"%s\r\n",message_body); - fflush(client); + fprintf(client, "sortie de send_response\n"); + fflush(client); } @@ -70,9 +74,12 @@ int traitementClient(int socket_client){ perror("Error opening file"); exit(1); } + + //fprintf(fd,"pas d'erreurs d'ouverture\n"); fgets_or_exit(str,8000,fd); int parse_ret = parse_http_request(str,&request); skip_headers(fd); + fprintf(fd, "avant if parse_ret\n"); if (parse_ret == -1) { if (request.method == HTTP_UNSUPPORTED){ send_response(fd, 405, "Method Not Allowed", "Method Not Allowed"); @@ -81,14 +88,16 @@ int traitementClient(int socket_client){ } }else if (strcmp(request.target, "/") == 0){ send_response(fd, 200, "OK", motd); + fprintf(fd, "fin du else-if\n"); }else{ send_response(fd, 404, "Not Found", "Not Found"); } + fflush(fd); + fprintf(fd, "après if parse_ret\n"); //partie 7 - char* absolute_path = rewrite_target(request.target); - fprintf(fd,"test - - - - - - - - \n%s",absolute_path); - - + fprintf(fd, "avant rewrite\n"); + char* absolute_path = rewrite_target(request.target); + fprintf(fd,"test - - - - - - - - %s\n",absolute_path); fclose(fd); return 0; } diff --git a/webserver/client.o b/webserver/client.o index d124f3cc86bedbf2cde2f5b4f691d68f3f19bcd1..066d5262986b302f03094657c64a67905db02f24 100644 Binary files a/webserver/client.o and b/webserver/client.o differ diff --git a/webserver/http_parse.o b/webserver/http_parse.o index 201d5634e46c81fa7db63169a55f2cd59abb0c03..6d49f80407ace1f2b89d7c6a08a031e63df2bcf6 100644 Binary files a/webserver/http_parse.o and b/webserver/http_parse.o differ diff --git a/webserver/main.o b/webserver/main.o index 069932ca1a8d105bc2eeebc17a2c1ee144b6ed54..43a7c9df27260246aae85e79fc077fbb8043f425 100644 Binary files a/webserver/main.o and b/webserver/main.o differ diff --git a/webserver/pawnee b/webserver/pawnee index c3585590cefcc0ba0ce2a1c494f02c734cccb5cc..31cf41fdf96cf65c5704e25bfb80e00d06621ed6 100755 Binary files a/webserver/pawnee and b/webserver/pawnee differ diff --git a/webserver/socket.o b/webserver/socket.o index 0df2fc98e5debf3f76433bd18a7dccc2fec6200a..02a2d23ceca50a003abc28b9e641d79a42a5ea7a 100644 Binary files a/webserver/socket.o and b/webserver/socket.o differ