From 57d7c6ebc255b70a43285fb6f8cd4505776c6921 Mon Sep 17 00:00:00 2001 From: kakwa Date: Wed, 24 Aug 2016 23:41:55 +0200 Subject: [PATCH] better stdout debugging mode --- inc/context.h | 1 + src/cmd/uts-server.c | 1 + src/lib/http.c | 3 ++- src/lib/utils.c | 34 ++++++++++++++++++++++++++++++++-- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/inc/context.h b/inc/context.h index 24ce233..d918c46 100644 --- a/inc/context.h +++ b/inc/context.h @@ -9,4 +9,5 @@ typedef struct { uint64_t query_counter; bool stdout_dbg; TS_RESP_CTX *resp_ctx; + int loglevel; } rfc3161_context; diff --git a/src/cmd/uts-server.c b/src/cmd/uts-server.c index f50c363..419c041 100644 --- a/src/cmd/uts-server.c +++ b/src/cmd/uts-server.c @@ -60,6 +60,7 @@ int main(int argc, char **argv) { struct arguments args; args.conffile = NULL; args.daemonize = 0; + args.stdout_dbg = 0; argp_parse(&argp, argc, argv, 0, 0, &args); if (args.daemonize) diff --git a/src/lib/http.c b/src/lib/http.c index 167ce6b..4ad7a76 100644 --- a/src/lib/http.c +++ b/src/lib/http.c @@ -110,12 +110,13 @@ int http_server_start(char *conffile, bool stdout_dbg) { // Prepare callbacks structure. We have only one callback, the rest are // NULL. memset(&callbacks, 0, sizeof(callbacks)); - //callbacks.begin_request = begin_request_handler; + // callbacks.begin_request = begin_request_handler; // Start the web server. ctx = mg_start(&callbacks, NULL, options); rfc3161_context *ct = (rfc3161_context *)calloc(1, sizeof(rfc3161_context)); ct->stdout_dbg = stdout_dbg; + ct->loglevel = 8; mg_set_request_handler(ctx, "/", rfc3161_handler, (void *)ct); // Wait until user hits "enter". Server is running in separate thread. diff --git a/src/lib/utils.c b/src/lib/utils.c index 40f88dc..84b05ca 100644 --- a/src/lib/utils.c +++ b/src/lib/utils.c @@ -60,6 +60,10 @@ void skeleton_daemon() { } void logger(rfc3161_context *ct, int priority, char *fmt, ...) { + // ignore all messages less critical than the loglevel + // except if the debug flag is set + if (priority > ct->loglevel && !ct->stdout_dbg) + return; FILE *stream; char *out; size_t len; @@ -69,10 +73,36 @@ void logger(rfc3161_context *ct, int priority, char *fmt, ...) { va_start(args, fmt); vfprintf(stream, fmt, args); va_end(args); - fflush(stream); fclose(stream); - printf(out); + if (ct->stdout_dbg) { + switch (priority) { + case LOG_EMERG: + printf("LOG_EMER : %s", out); + ; + case LOG_ALERT: + printf("LOG_ALERT : %s", out); + ; + case LOG_CRIT: + printf("LOG_CRIT : %s", out); + ; + case LOG_ERR: + printf("LOG_ERR : %s", out); + ; + case LOG_WARNING: + printf("LOG_WARNING: %s", out); + ; + case LOG_NOTICE: + printf("LOG_NOTICE : %s", out); + ; + case LOG_INFO: + printf("LOG_INFO : %s", out); + ; + case LOG_DEBUG: + printf("LOG_DEBUG : %s", out); + ; + } + } syslog(priority, out); free(out); }