Skip to content
Snippets Groups Projects
Commit bcf0f38e authored by Paul Ripault's avatar Paul Ripault
Browse files

c'est presque ça

parent 3591c8ec
Branches
Tags
No related merge requests found
# Ces variables servent à préciser le compilateur que l'on veut utiliser # Ces variables servent à préciser le compilateur que l'on veut utiliser
# ainsi que les paramètres de compilation # ainsi que les paramètres de compilation
WRAPPER=$(if $(shell which clang), clang, gcc) CC=gcc
CC=$(WRAPPER) LD=gcc
LD=$(WRAPPER) CFLAGS=-Wall -W -Werror -g
CFLAGS=-Wall -W -Werror -g -I../../parselib LDFLAGS= -g -pthread
LDFLAGS=-lpthread -lrt -L../../parselib -lhttp_parse
# Le nom de l'exécutable à fabriquer
# Le nom de l'exécutable à fabriquer EXE=pawnee
EXE=pawnee
# Les variables HEADERS, CFILES et OBJS vont contenir respectivement
# Les variables HEADERS, CFILES et OBJS vont contenir respectivement # la listes des fichiers .h, .c et le nom des fichiers .o à fabriquer
# la listes des fichiers .h, .c et le nom des fichiers .o à fabriquer # On utilise la directive particulière \$(wildcard ...) qui permet
# On utilise la directive particulière \$(wildcard ...) qui permet # de construire automatiquement une liste de fichiers
# de construire automatiquement une liste de fichiers HEADERS=$(wildcard *.h)
HEADERS=$(wildcard *.h) CFILES=$(wildcard *.c)
CFILES=$(wildcard *.c) # Cette construction de variable veut dire : remplacer la chaine ".c" par
# Cette construction de variable veut dire: remplacer la chaine ".c" par # ".o" dans la variable CFILES
# ".o" dans la variable CFILES # Ceci nous permet de construire la liste des fichiers .o à fabriquer
# Ceci nous permet de construire la liste des fichiers .o à fabriquer OBJS=$(CFILES:.c=.o)
OBJS=$(CFILES:.c=.o)
# Même utilisation que précédemment. On précise les règles qui
# Même utilisation que précédemment. On précise les règles qui # ne fabrique pas de fichier du nom de leur cible
# ne fabrique pas de fichier du nom de leur cible .PHONY: all clean mrproper
.PHONY: all clean mrproper
# La règle par défaut déclenche la fabrication de l'exécutable
# La règle par défaut déclenche la fabrication de l'exécutable # par dépendance
# par dépendance all: $(EXE)
all: alldeps $(EXE)
# Cette règle permet de construire l'exécutable. Elle dépend des fichiers
.PHONY: alldeps # .o et effectue l'édition de lien. Rien de nouveau ici
alldeps: $(EXE): $(OBJS)
make -C ../../parselib $(LD) $^ $(LDFLAGS) -o $@
# Cette règle permet de construire l'exécutable. Elle dépend des fichiers # Cette règle permet de construire automatiquement les règles
# .o et effectue l'édition de lien. Rien de nouveau ici # de compilation pour chacun des fichiers .c
$(EXE): $(OBJS) # l'option -MM de gcc analyse un fichier .c et
$(LD) $^ $(LDFLAGS) -o $@ # affiche sur sa sortie standard une règle compatible
# make pour le compiler.
# Cette règle permet de construire automatiquement les règles # Ceci permet d'ajouter automatiquement les fichiers .h aux dépendances
# de compilation pour chacun des fichiers .c # des fichiers .o à construire. Ainsi, en modifiant un fichier .h
# l'option -MM de gcc analyse un fichier .c et # tous les fichiers .c qui incluent ce fichier sont recompilés
# affiche sur sa sortie standard une règle compatible # Après votre première compilation, regardez le contenu du fichier
# make pour le compiler. # makefile.dep généré afin de comprendre exactement de quoi il retourne.
# Ceci permet d'ajouter automatiquement les fichiers .h aux dépendances makefile.dep: $(CFILES) $(HEADERS)
# des fichiers .o à construire. Ainsi, en modifiant un fichier .h $(CC) -MM $(CFILES) > $@
# tous les fichiers .c qui incluent ce fichier sont recompilés
# Après votre première compilation, regardez le contenu du fichier # Cette règle efface le fichier de dépendances et les fichiers .o
# makefile.dep généré afin de comprendre exactement de quoi il retourne. clean:
makefile.dep: $(CFILES) $(HEADERS) $(RM) $(OBJS) makefile.dep
$(CC) $(CFLAGS) -MM $(CFILES) > $@
# Cette règle effectue la précédente et efface en plus l'exécutable
# Cette règle efface le fichier de dépendances et les fichiers .o mrproper: clean
clean: $(RM) $(EXE)
$(RM) $(OBJS) makefile.dep
# On inclue le fichier de dépendance qui va contenir les règles
# Cette règle effectue la précédente et efface en plus l'exécutable # de construction des fichiers .o
mrproper: clean # S'il n'existe pas, make invoque automatiquement la règle
$(RM) $(EXE) # qui l'a pour cible
include makefile.dep
# 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
...@@ -11,7 +11,9 @@ ...@@ -11,7 +11,9 @@
char* rewrite_target(char *target){ char* rewrite_target(char *target){
char* ret = strchr(target, '?'); char* ret = strchr(target, '?');
char* rep =""; char* rep ="";
strncpy(rep,target,atoi(ret)-1); if (ret!= NULL){
strncpy(rep,target,atoi(ret)-1);
}
return rep; return rep;
} }
...@@ -49,12 +51,14 @@ void send_status(FILE *client, int code, const char *reason_phrase){ ...@@ -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){ 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); send_status(client,code,reason_phrase);
//transmet la réponse complète (la suite) //transmet la réponse complète (la suite)
fprintf(client,"Content-Lenght: %u\r\n",(unsigned int)strlen(message_body)); fprintf(client,"Content-Lenght: %u\r\n",(unsigned int)strlen(message_body));
fprintf(client,"\r\n"); fprintf(client,"\r\n");
fprintf(client,"%s\r\n",message_body); 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){ ...@@ -70,9 +74,12 @@ int traitementClient(int socket_client){
perror("Error opening file"); perror("Error opening file");
exit(1); exit(1);
} }
//fprintf(fd,"pas d'erreurs d'ouverture\n");
fgets_or_exit(str,8000,fd); fgets_or_exit(str,8000,fd);
int parse_ret = parse_http_request(str,&request); int parse_ret = parse_http_request(str,&request);
skip_headers(fd); skip_headers(fd);
fprintf(fd, "avant if parse_ret\n");
if (parse_ret == -1) { if (parse_ret == -1) {
if (request.method == HTTP_UNSUPPORTED){ if (request.method == HTTP_UNSUPPORTED){
send_response(fd, 405, "Method Not Allowed", "Method Not Allowed"); send_response(fd, 405, "Method Not Allowed", "Method Not Allowed");
...@@ -81,14 +88,16 @@ int traitementClient(int socket_client){ ...@@ -81,14 +88,16 @@ int traitementClient(int socket_client){
} }
}else if (strcmp(request.target, "/") == 0){ }else if (strcmp(request.target, "/") == 0){
send_response(fd, 200, "OK", motd); send_response(fd, 200, "OK", motd);
fprintf(fd, "fin du else-if\n");
}else{ }else{
send_response(fd, 404, "Not Found", "Not Found"); send_response(fd, 404, "Not Found", "Not Found");
} }
fflush(fd);
fprintf(fd, "après if parse_ret\n");
//partie 7 //partie 7
char* absolute_path = rewrite_target(request.target); fprintf(fd, "avant rewrite\n");
fprintf(fd,"test - - - - - - - - \n%s",absolute_path); char* absolute_path = rewrite_target(request.target);
fprintf(fd,"test - - - - - - - - %s\n",absolute_path);
fclose(fd); fclose(fd);
return 0; return 0;
} }
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment