diff --git a/webserver/.client.c.swp b/webserver/..client.c.swp.swp similarity index 75% rename from webserver/.client.c.swp rename to webserver/..client.c.swp.swp index da315db82efee93b4bbd889f0e7f41217db28483..17b95d71f499cd101e051c580b8489881decd84e 100644 Binary files a/webserver/.client.c.swp and b/webserver/..client.c.swp.swp differ 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 d8ae60d92bb692f1c1736eea2d5dd55a6c56bfcb..1440815d309ad63e733a6849dd5b635dc4ec42c0 100644 --- a/webserver/client.c +++ b/webserver/client.c @@ -11,8 +11,8 @@ #include <sys/stat.h> #include <unistd.h> -/* -int copy(FILE* in, FILE* out){ + +/*int copy(FILE* in, FILE* out){ char* ch; if(in && out){ while((ch = fgetc(in))!= EOF ){ @@ -36,14 +36,16 @@ int get_file_size(int fd){ FILE* check_and_open(const char* target, const char *document_root){ return fopen(target +"/"+document_root,"r"); -} +}*/ 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; -}*/ +} char* fgets_or_exit(char * buffer, int size, FILE *fd){ @@ -79,12 +81,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\r\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\r\n"); + fflush(client); } @@ -101,9 +105,11 @@ 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"); @@ -112,23 +118,27 @@ int traitementClient(int socket_client){ } }else if (strcmp(request.target, "/") == 0){ send_response(fd, 200, "OK", motd); + fprintf(fd, "fin du else-if\r\n"); }else{ send_response(fd, 404, "Not Found", "Not Found"); } - //partie 7/* + + //partie 7/ char* absolute_path = rewrite_target(request.target); //--- les printf ne fonctionnent pas ;( - printf("test - - - - - - - - \n%s",absolute_path); + fprintf(fd,"avant test\r\n"); + fprintf(fd,"test - - - - - - - - \n%s\r\n",absolute_path); //--- - FILE* fichier = check_and_open(absolute_path, "document.txt"); +/* FILE* fichier = check_and_open(absolute_path, "document.txt"); if(fichier == NULL){ send_response(fd, 404, "Not Found", "Not Found"); } - int size = get_file_size(fileno(fichier); + int size = get_file_size(fileno(fichier)); if(copy(fichier,fd))==-1){ //error }*/ + fflush(fd); fclose(fd); return 0; } diff --git a/webserver/client.o b/webserver/client.o index 4a4e219d55a52f2a94deceb86441ebf80e401b5c..00a723fbf8ab01dc33cddc216582363fe381cb67 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 c01f5ab2a0c4cad2119b342bffc4b85a46bfbfd3..0e20b4bf5952b4c3e01ae1f3c150b9af7a1e28f2 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