From 275d06c1275d2e3ebde86a3b7cdb6ab99cd52942 Mon Sep 17 00:00:00 2001 From: Jordan Bancino Date: Fri, 26 Aug 2022 11:07:54 -0400 Subject: [PATCH] Begin prototyping the HttpServer API --- src/HttpServer.c | 12 ++++++++++++ src/include/Http.h | 10 +++++----- src/include/HttpServer.h | 28 ++++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/HttpServer.c b/src/HttpServer.c index 12fb90f..8a6c284 100644 --- a/src/HttpServer.c +++ b/src/HttpServer.c @@ -58,6 +58,18 @@ struct HttpServer Array *threadPool; }; +struct HttpServerContext +{ + HashMap *requestHeaders; + HttpRequestMethod requestMethod; + char *requestPath; + + HashMap *responseHeaders; + HttpStatus responseStatus; + + FILE *stream; +}; + static int QueueConnection(HttpServer * server, int fd) { diff --git a/src/include/Http.h b/src/include/Http.h index 1801806..a85e871 100644 --- a/src/include/Http.h +++ b/src/include/Http.h @@ -99,13 +99,13 @@ typedef enum HttpStatus HTTP_NETWORK_AUTH_REQUIRED = 511 } HttpStatus; -extern char * - HttpGetStatusString(const HttpStatus httpStatus); +extern const char * + HttpStatusToString(const HttpStatus); extern HttpRequestMethod - HttpRequestMethodFromString(const char *requestMethod); + HttpRequestMethodFromString(const char *); -typedef struct HttpRequest HttpRequest; -typedef struct HttpResponse HttpResponse; +extern const char * + HttpRequestMethodToString(const HttpRequestMethod); #endif diff --git a/src/include/HttpServer.h b/src/include/HttpServer.h index 4d65e5b..5562e25 100644 --- a/src/include/HttpServer.h +++ b/src/include/HttpServer.h @@ -26,9 +26,9 @@ #include -typedef struct HttpServer HttpServer; +#include -typedef void (HttpHandler) (HttpRequest *, HttpResponse *, void *); +typedef struct HttpServer HttpServer; extern HttpServer * HttpServerCreate(unsigned short, unsigned int, unsigned int, HttpHandler *, void *); @@ -45,4 +45,28 @@ extern void extern void HttpServerStop(HttpServer *); +typedef struct HttpServerContext HttpServerContext; +typedef void (HttpHandler) (HttpServerContext *, void *); + +extern HashMap * + HttpRequestHeaders(HttpServerContext *); + +extern HttpRequestMethod + HttpRequestMethod(HttpServerContext *); + +extern char * + HttpRequestPath(HttpServerContext *); + +extern void + HttpResponseHeader(HttpServerContext *, const char *, const char *); + +extern void + HttpResponseStatus(HttpServerContext *, HttpStatus); + +extern FILE * + HttpStream(HttpServerContext *); + +extern void + HttpSendHeaders(HttpServerContext *); + #endif