diff options
author | Olivier Gayot <duskcoder@gmail.com> | 2016-01-27 20:39:25 +0100 |
---|---|---|
committer | Olivier Gayot <duskcoder@gmail.com> | 2016-01-27 20:39:51 +0100 |
commit | e8d769d68a1d23aa4b595a6aa5c2548801a7d7ed (patch) | |
tree | bb7e98b57f2ffa2f90e3c8ec73617c068e5dda7f /log.c | |
parent | 34f3ab900a9cac78acb7a10d1ed60555d98ff822 (diff) |
caod: imported basics for websocket management
Signed-off-by: Olivier Gayot <duskcoder@gmail.com>
Diffstat (limited to 'log.c')
-rw-r--r-- | log.c | 109 |
1 files changed, 109 insertions, 0 deletions
@@ -0,0 +1,109 @@ +/* + * Copyright (C) 2014-2016 + * Olivier Gayot <ogayot@baylibre.com> + * Bartosz Golaszewski <bgolaszewski@baylibre.com> + * Olivier Gayot <olivier.gayot@sigexec.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include <stdio.h> +#include <stdarg.h> +#include <unistd.h> +#include <string.h> +#include <stdlib.h> + +#include <libwebsockets.h> + +#include "log.h" + +#define PRINT_FROM_VA(STREAM, LVL, FMT) \ + do { \ + va_list va; \ + va_start(va, FMT); \ + fprintf(STREAM, "caod ["LVL"] PID: %d\t", getpid()); \ + vfprintf(STREAM, FMT, va); \ + fprintf(STREAM, "\n"); \ + va_end(va); \ + } while (0) + +static const char* const logpath = "/tmp/caod.log"; +static FILE* logfd; + +static void close_log(void) +{ + fclose(logfd); +} + +void caod_setup_logs(void) +{ + (void)unlink(logpath); + logfd = fopen(logpath, "w"); + if (logfd) + atexit(&close_log); +} + +void caod_info(const char *fmt, ...) +{ + PRINT_FROM_VA(stdout, "INFO", fmt); + if (logfd) { + PRINT_FROM_VA(logfd, "INFO", fmt); + } +} + +void caod_warn(const char *fmt, ...) +{ + PRINT_FROM_VA(stdout, "WARN", fmt); + if (logfd) { + PRINT_FROM_VA(logfd, "WARN", fmt); + } +} + +void caod_err(const char *fmt, ...) +{ + PRINT_FROM_VA(stdout, "ERR", fmt); + if (logfd) { + PRINT_FROM_VA(logfd, "ERR", fmt); + } +} + +void caod_log_hook(int level, const char *line) +{ + char buf[256]; + int last; + + memset(buf, 0, sizeof(buf)); + strncpy(buf, line, sizeof(buf)); + last = strlen(buf)-1; + if (buf[last] == '\n') { + buf[last] = '\0'; + } + + switch (level) { + case LLL_DEBUG: + case LLL_INFO: + case LLL_NOTICE: + caod_info("%s", buf); + break; + case LLL_WARN: + caod_warn("%s", buf); + break; + case LLL_ERR: + caod_err("%s", buf); + break; + default: + break; + } +} |