aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/http.c26
-rw-r--r--lib/http.h8
2 files changed, 31 insertions, 3 deletions
diff --git a/lib/http.c b/lib/http.c
index 4c6bd7e..17d9ee1 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -60,6 +60,27 @@ void sigchld_handler() {
errno = saved_errno;
}
+void http_log(http_log_level log, char *fmt, ...) {
+ switch (log) {
+ case HTTP_INFO:
+ fprintf(stderr, "[INFO] ");
+ break;
+
+ case HTTP_WARNING:
+ fprintf(stderr, "[WARNING] ");
+ break;
+
+ case HTTP_ERROR:
+ fprintf(stderr, "[ERROR] ");
+ break;
+ }
+
+ va_list args;
+ va_start(args, fmt);
+ vfprintf(stderr, fmt, args);
+ va_end(args);
+}
+
void *get_in_addr(struct sockaddr *sa) {
if (sa->sa_family == AF_INET) {
@@ -421,11 +442,10 @@ int listen_and_serve(struct server *serv) {
perror("listen");
return 1;
}
-
+
char my_ipstr[INET6_ADDRSTRLEN];
inet_ntop(serv->addr->sa_family, get_in_addr(serv->addr), my_ipstr, sizeof my_ipstr);
- printf("Listening on %s:%d\n", my_ipstr, get_in_port(serv->addr));
-
+ http_log(HTTP_INFO, "Listening on %s:%d\n", my_ipstr, get_in_port(serv->addr));
while (keepRunning) {
struct sockaddr inc_addr;
diff --git a/lib/http.h b/lib/http.h
index 489775e..e033eff 100644
--- a/lib/http.h
+++ b/lib/http.h
@@ -14,6 +14,7 @@
#include <sys/wait.h>
#include <signal.h>
#include <stdlib.h>
+#include <stdarg.h>
#include "const_strings.h"
#include "arena_strings.h"
@@ -90,6 +91,12 @@ struct server {
};
typedef enum {
+ HTTP_INFO = 0,
+ HTTP_WARNING,
+ HTTP_ERROR,
+} http_log_level;
+
+typedef enum {
CONTINUE = 100,
SWITCHING_PROTOCOLS = 101,
PROCESSING = 102,
@@ -124,6 +131,7 @@ typedef enum {
const_string get_response_string(response_code code);
void *get_in_addr(struct sockaddr *sa);
int get_in_port(struct sockaddr *sa);
+void http_log(http_log_level log, char *fmt, ...);
void set_context_value(arena *arena, context *ctx, context_value kv);
void *get_context_value(context *ctx, const_string key);