diff --git a/other/bootstrap_daemon/src/global.h b/other/bootstrap_daemon/src/global.h new file mode 100644 index 00000000..7aa42780 --- /dev/null +++ b/other/bootstrap_daemon/src/global.h @@ -0,0 +1,30 @@ +/* global.h + * + * Tox DHT bootstrap daemon. + * + * Copyright (C) 2015 Tox project All Rights Reserved. + * + * This file is part of Tox. + * + * Tox 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 3 of the License, or + * (at your option) any later version. + * + * Tox 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 Tox. If not, see . + * + */ + +#ifndef GLOBAL_H +#define GLOBAL_H + +#define DAEMON_NAME "tox-bootstrapd" +#define DAEMON_VERSION_NUMBER 2014101200UL // yyyymmmddvv format: yyyy year, mm month, dd day, vv version change count for that day + +#endif // GLOBAL_H diff --git a/other/bootstrap_daemon/src/logger.c b/other/bootstrap_daemon/src/logger.c new file mode 100644 index 00000000..3cf18fd6 --- /dev/null +++ b/other/bootstrap_daemon/src/logger.c @@ -0,0 +1,112 @@ +/* logger.c + * + * Tox DHT bootstrap daemon. + * + * Copyright (C) 2015 Tox project All Rights Reserved. + * + * This file is part of Tox. + * + * Tox 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 3 of the License, or + * (at your option) any later version. + * + * Tox 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 Tox. If not, see . + * + */ + +#include "logger.h" + +#include "global.h" + +#include + +#include +#include + +typedef struct Logger { + LOGGER_BACKEND backend; +} Logger; + +Logger* new_logger(LOGGER_BACKEND backend) +{ + if (backend == LOGGER_BACKEND_SYSLOG) { + openlog(DAEMON_NAME, LOG_NOWAIT | LOG_PID, LOG_DAEMON); + } + + Logger* logger = malloc(sizeof(Logger)); + + if (logger == NULL) { + return NULL; + } + + logger->backend = backend; + + return logger; +} + +void kill_logger(Logger* logger) +{ + if (backend == LOGGER_BACKEND_SYSLOG) { + closelog(); + } + + free(logger); +} + +int level_syslog(LOG_LEVEL level) +{ + switch (level) { + case LOG_LEVEL_INFO: + return LOG_INFO; + case LOG_LEVEL_WARNING: + return LOG_WARNING; + case LOG_LEVEL_ERROR: + return LOG_ERR; + } +} + +void log_syslog(LOG_LEVEL level, const char *format, va_list args) +{ + vsyslog(level_syslog(level), format, args); +} + +FILE* level_stdout(LOG_LEVEL level) +{ + switch (level) { + case LOG_LEVEL_INFO: + return stdout; + case LOG_LEVEL_WARNING: // intentional fallthrough + case LOG_LEVEL_ERROR: + return stderr; + + } +} + +void log_stdout(LOG_LEVEL level, const char *format, va_list args) +{ + vfprintf(level_stdout(level), format, args); +} + +void log(Logger* logger, LOG_LEVEL level, const char *format, ...) +{ + va_list args; + va_start(args, format); + + switch (logger->backend) { + case LOGGER_BACKEND_SYSLOG: + log_syslog(level, format, args); + break; + case LOGGER_BACKEND_STDOUT: + log_stdout(level, format, args); + break; + } + + va_end(args); +} diff --git a/other/bootstrap_daemon/src/logger.h b/other/bootstrap_daemon/src/logger.h new file mode 100644 index 00000000..174d3445 --- /dev/null +++ b/other/bootstrap_daemon/src/logger.h @@ -0,0 +1,63 @@ +/* logger.h + * + * Tox DHT bootstrap daemon. + * + * Copyright (C) 2015 Tox project All Rights Reserved. + * + * This file is part of Tox. + * + * Tox 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 3 of the License, or + * (at your option) any later version. + * + * Tox 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 Tox. If not, see . + * + */ + +#ifndef LOGGER_H +#define LOGGER_H + +typedef enum LOGGER_BACKEND { + LOGGER_BACKEND_SYSLOG, + LOGGER_BACKEND_STDOUT +} LOGGER_BACKEND; + +typedef enum LOG_LEVEL { + LOG_LEVEL_INFO, + LOG_LEVEL_WARNING, + LOG_LEVEL_ERROR +} LOG_LEVEL; + +typedef struct Logger Logger; + +/** + * Creates new logger. + * @param backend Specifies which backend the logger should use. + * @return Logger object on success, NULL on failure. + */ +Logger* new_logger(LOGGER_BACKEND backend); + +/** + * Destroys a logger object, releasing all used resources. + * @param logger Logger object to destroy. + */ +void kill_logger(Logger* logger); + +/** + * Logs a message. + * @param logger Logger object to use. + * @param level Log level to use. + * @param format printf-like format string. + * @param ... Zero or more arguments, similar to printf function. + */ +void log(Logger* logger, LOG_LEVEL level, const char *format, ...); + + +#endif // LOGGER_H diff --git a/other/bootstrap_daemon/tox-bootstrapd.c b/other/bootstrap_daemon/src/tox-bootstrapd.c similarity index 100% rename from other/bootstrap_daemon/tox-bootstrapd.c rename to other/bootstrap_daemon/src/tox-bootstrapd.c