From bac488ae3014aecb7a861084a5423be557998a7a Mon Sep 17 00:00:00 2001 From: kakwa Date: Sun, 11 Sep 2016 20:07:14 +0200 Subject: [PATCH] adding error handling in case civetweb fails to start --- src/lib/http.c | 31 +++++++++++++++++++++++-------- tests/cfg/uts-server.cnf | 2 +- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/lib/http.c b/src/lib/http.c index 887c129..db3c52f 100644 --- a/src/lib/http.c +++ b/src/lib/http.c @@ -16,6 +16,10 @@ #include #include "http.h" +struct tuser_data { + char *first_message; +}; + static char *rand_string(char *str, size_t size) { const char charset[] = "1234567890ABCDEF"; if (size) { @@ -77,7 +81,8 @@ void log_request(const struct mg_request_info *request_info, char *request_id, if (strcasecmp(request_info->http_headers[i].name, "User-Agent") == 0) { user_agent = request_info->http_headers[i].value; } - if (strcasecmp(request_info->http_headers[i].name, "Content-Type") == 0) { + if (strcasecmp(request_info->http_headers[i].name, "Content-Type") == + 0) { content_type = request_info->http_headers[i].value; } } @@ -205,6 +210,7 @@ int rfc3161_handler(struct mg_connection *conn, void *context) { int http_server_start(char *conffile, char *conf_wd, bool stdout_dbg) { struct mg_context *ctx; struct mg_callbacks callbacks; + struct tuser_data user_data; rfc3161_context *ct = (rfc3161_context *)calloc(1, sizeof(rfc3161_context)); ct->stdout_dbg = stdout_dbg; @@ -217,15 +223,24 @@ int http_server_start(char *conffile, char *conf_wd, bool stdout_dbg) { // NULL. memset(&callbacks, 0, sizeof(callbacks)); - // Start the web server. - ctx = mg_start(&callbacks, NULL, ct->http_options); - mg_set_request_handler(ctx, "/", rfc3161_handler, (void *)ct); + memset(&user_data, 0, sizeof(user_data)); - // Wait until some signals are received - while (g_uts_sig == 0) { - sleep(1); + // Start the web server. + ctx = mg_start(&callbacks, &user_data, ct->http_options); + if (ctx != NULL) { + mg_set_request_handler(ctx, "/", rfc3161_handler, (void *)ct); + + // Wait until some signals are received + while (g_uts_sig == 0) { + sleep(1); + } + // getchar(); + } else { + uts_logger(ct, LOG_CRIT, "Failed to start uts-server: %s", + ((user_data.first_message == NULL) + ? "unknown reason" + : user_data.first_message)); } - // getchar(); // Stop the server. mg_stop(ctx); diff --git a/tests/cfg/uts-server.cnf b/tests/cfg/uts-server.cnf index f305d7e..0cef8a6 100644 --- a/tests/cfg/uts-server.cnf +++ b/tests/cfg/uts-server.cnf @@ -20,7 +20,7 @@ num_threads = 10 # Switch to given user credentials after startup. # Required to run on privileged ports and not be run as root. -# run_as_user = uts-server +#run_as_user = uts-server # Limit download speed for clients. throttle is a comma-separated list of key=value pairs: # * limit speed for all connections