Comments
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
#include "http_request.h"
|
||||
#include "http_method.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -57,18 +56,28 @@ void http_request_set(HttpRequest *__req, char *key, char *value) {
|
||||
}
|
||||
|
||||
HttpRequest *handle_request(char *__req) {
|
||||
printf("%s\n", __req);
|
||||
// printf("%s\n", __req);
|
||||
HttpRequest *request = malloc(sizeof(HttpRequest));
|
||||
unsigned int line_count = 0;
|
||||
char *line_start = __req;
|
||||
char *line_end;
|
||||
// Nous allons de ligne en ligne
|
||||
// line_end est une chaîne de caractères allant de la nouvelle ligne trouvée
|
||||
// jusqu'à la fin de la requête.
|
||||
// line_start est aussi une chaîne de caractères qui va du début de la
|
||||
// requête (au fil de la boucle, elle deviendra le précédent line_end)
|
||||
// jusqu'à line_end.
|
||||
while ((line_end = strchr(line_start, '\n')) != NULL) {
|
||||
line_count++;
|
||||
// Nous pouvons récupérer la longueur la ligne que nous allons traiter
|
||||
// en faisant cette simple opération.
|
||||
size_t l_length = line_end - line_start;
|
||||
char line[l_length];
|
||||
|
||||
strncpy(line, line_start, l_length);
|
||||
line[l_length - 1] = 0;
|
||||
// La première ligne HTTP est toujours quelque chose suivant ce format:
|
||||
// <METHOD> <PATH> HTTP/<VERSION>
|
||||
if (line_count == 1) {
|
||||
char method[10] = {0};
|
||||
char *path = malloc(sizeof(char) * 1024);
|
||||
@@ -76,22 +85,29 @@ HttpRequest *handle_request(char *__req) {
|
||||
free(path);
|
||||
return NULL;
|
||||
}
|
||||
// Transforme le string donné depuis la requête en int défini dans
|
||||
// un enum, afin de se faciliter la vie plus tard.
|
||||
request->method = get_http_method(method);
|
||||
request->path = path;
|
||||
} else {
|
||||
// Pour ce qui est du reste, les options fonctionnent comme un
|
||||
// "key-value pair": <KEY>: <VALUE>
|
||||
char key[100] = {0};
|
||||
char *colon_pos = strchr(line, ':');
|
||||
if (colon_pos != NULL) {
|
||||
size_t k_length = colon_pos - line;
|
||||
strncpy(key, line, k_length);
|
||||
|
||||
// Il faut enlever le ':' + ' ' + '\r' => 3
|
||||
size_t v_length = l_length - k_length - 3;
|
||||
char *value = malloc(sizeof(char) * v_length);
|
||||
// colon_pos comprend le ':' + ' ' qui sont indésirables, donc
|
||||
// faut se décaler de 2, le '\r' ne sera pas pris en compte
|
||||
// puisque la chaîne value est trop petite pour que ça rentre.
|
||||
strcpy(value, colon_pos + 2);
|
||||
http_request_set(request, key, value);
|
||||
}
|
||||
}
|
||||
// TODO: Analyze line
|
||||
line_start = line_end + 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user