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

c'est presque ça

parent 3591c8ec
No related branches found
No related tags found
No related merge requests found
# 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
......@@ -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;
}
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.
Finish editing this message first!
Please register or to comment