Skip to content
Snippets Groups Projects
Commit ddf5a375 authored by Romain Gabet's avatar Romain Gabet :speech_balloon:
Browse files

rr

parents c58c9812 bcf0f38e
Branches
Tags
No related merge requests found
No preview for this file type
# 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,8 +11,8 @@ ...@@ -11,8 +11,8 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
/*
int copy(FILE* in, FILE* out){ /*int copy(FILE* in, FILE* out){
char* ch; char* ch;
if(in && out){ if(in && out){
while((ch = fgetc(in))!= EOF ){ while((ch = fgetc(in))!= EOF ){
...@@ -36,14 +36,16 @@ int get_file_size(int fd){ ...@@ -36,14 +36,16 @@ int get_file_size(int fd){
FILE* check_and_open(const char* target, const char *document_root){ FILE* check_and_open(const char* target, const char *document_root){
return fopen(target +"/"+document_root,"r"); return fopen(target +"/"+document_root,"r");
} }*/
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;
}*/ }
char* fgets_or_exit(char * buffer, int size, FILE *fd){ 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){ ...@@ -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){ 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); 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\r\n");
fflush(client);
} }
...@@ -101,9 +105,11 @@ int traitementClient(int socket_client){ ...@@ -101,9 +105,11 @@ 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");
...@@ -112,23 +118,27 @@ int traitementClient(int socket_client){ ...@@ -112,23 +118,27 @@ 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\r\n");
}else{ }else{
send_response(fd, 404, "Not Found", "Not Found"); send_response(fd, 404, "Not Found", "Not Found");
} }
//partie 7/*
//partie 7/
char* absolute_path = rewrite_target(request.target); char* absolute_path = rewrite_target(request.target);
//--- les printf ne fonctionnent pas ;( //--- 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){ if(fichier == NULL){
send_response(fd, 404, "Not Found", "Not Found"); 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){ if(copy(fichier,fd))==-1){
//error //error
}*/ }*/
fflush(fd);
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