diff options
| -rw-r--r-- | lib/http.c | 26 | ||||
| -rw-r--r-- | lib/http.h | 8 |
2 files changed, 31 insertions, 3 deletions
@@ -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; @@ -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); |
