summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--http.c14
-rw-r--r--http.h2
-rw-r--r--plop.c4
3 files changed, 18 insertions, 2 deletions
diff --git a/http.c b/http.c
index 264c7b5..6eda100 100644
--- a/http.c
+++ b/http.c
@@ -82,6 +82,20 @@ int parse_request(const int fd, struct request * const request)
return -1; // TODO: Handle errors properly
}
+ for (int i = 0; i < NUMBER_OF_METHODS; ++i)
+ {
+ if (0 == strncmp(method_str[i], buffer, strlen(method_str[i])))
+ {
+ request->method = i;
+ break;
+ }
+
+ if (NUMBER_OF_METHODS - 1 == i)
+ {
+ // TODO: 501 Not Implemented
+ }
+ }
+
request->body = malloc(length + 1);
memcpy(request->body, buffer, length);
request->body[length] = 0;
diff --git a/http.h b/http.h
index 5a9283e..8134b1d 100644
--- a/http.h
+++ b/http.h
@@ -10,6 +10,8 @@ enum method
METHOD_DELETE,
METHOD_OPTIONS,
METHOD_PATCH,
+ NUMBER_OF_METHODS,
+ METHOD_INVALID,
};
struct request
diff --git a/plop.c b/plop.c
index 9e44ab7..669ac1a 100644
--- a/plop.c
+++ b/plop.c
@@ -86,10 +86,10 @@ int handle_client(struct pollfd * pfd, const int shift_by)
return -1; // TODO: Handle errors properly
}
- struct request request = {0};
+ struct request request = {METHOD_INVALID, NULL};
parse_request(pfd->fd, &request);
- if (-1 == respond_with_body(pfd->fd, STATUS_OK, request.body))
+ if (-1 == respond_with_body(pfd->fd, STATUS_OK, method_str[request.method]))
{
// TODO: Handle errors properly
}