diff --git a/src/Config.c b/src/Config.c index 63e7aca..3b10521 100644 --- a/src/Config.c +++ b/src/Config.c @@ -136,6 +136,7 @@ ConfigCreateDefault(Db * db) config.registration = 0; config.federation = 1; + /* Create serverName and baseUrl. */ config.serverName = Malloc(HOST_NAME_MAX + 1); memset(config.serverName, 0, HOST_NAME_MAX + 1); gethostname(config.serverName, HOST_NAME_MAX); @@ -143,6 +144,7 @@ ConfigCreateDefault(Db * db) config.baseUrl = Malloc(len); snprintf(config.baseUrl, len, "https://%s/", config.serverName); + /* Add simple listener without TLS. */ config.listen = ArrayCreate(); listener = Malloc(sizeof(ConfigListener)); listener->maxConnections = Int64Create(0, 0); @@ -153,6 +155,7 @@ ConfigCreateDefault(Db * db) listener->tls.cert = NULL; ArrayAdd(config.listen, listener); + /* Write it all out to the configuration file. */ json = ConfigToJson(&config); ref = DbCreate(db, 1, "config"); @@ -219,3 +222,21 @@ ConfigUnlock(Config * config) ConfigFullyFree(config); return DbUnlock(db, dbRef); } +int +ConfigLogLevelToSyslog(ConfigLogLevel level) +{ + switch (level) + { + case CONFIG_LOG_LEVEL_NOTICE: + return LOG_NOTICE; + case CONFIG_LOG_LEVEL_ERROR: + return LOG_ERR; + case CONFIG_LOG_LEVEL_MESSAGE: + return LOG_INFO; + case CONFIG_LOG_LEVEL_DEBUG: + return LOG_DEBUG; + case CONFIG_LOG_LEVEL_WARNING: + return LOG_WARNING; + } + return LOG_INFO; +} diff --git a/src/Main.c b/src/Main.c index 2413a39..cf0671e 100644 --- a/src/Main.c +++ b/src/Main.c @@ -281,12 +281,6 @@ start: { LogConfigTimeStampFormatSet(LogConfigGlobal(), tConfig->log.timestampFormat); } - else - { - /* TODO */ - /*Free(tConfig->logTimestamp); - tConfig->logTimestamp = NULL;*/ - } if (tConfig->log.color) { @@ -297,8 +291,11 @@ start: LogConfigFlagClear(LogConfigGlobal(), LOG_FLAG_COLOR); } - /* TODO: Set level properly here. */ - /*LogConfigLevelSet(LogConfigGlobal(), flags & ARG_VERBOSE ? LOG_DEBUG : tConfig->logLevel);*/ + LogConfigLevelSet( + LogConfigGlobal(), + flags & ARG_VERBOSE ? + LOG_DEBUG : + ConfigLogLevelToSyslog(tConfig->log.level)); if (tConfig->log.output == CONFIG_LOG_OUTPUT_FILE) { @@ -308,13 +305,17 @@ start: { Log(LOG_ERR, "Unable to open log file for appending."); exit = EXIT_FAILURE; - /*tConfig->flags &= CONFIG_LOG_STDOUT;*/ + tConfig->log.output = CONFIG_LOG_OUTPUT_STDOUT; goto finish; } Log(LOG_INFO, "Logging to the log file. Check there for all future messages."); LogConfigOutputSet(LogConfigGlobal(), logFile); } + else if (tConfig->log.output == CONFIG_LOG_OUTPUT_STDOUT) + { + Log(LOG_DEBUG, "Already logging to standard output."); + } else if (tConfig->log.output == CONFIG_LOG_OUTPUT_SYSLOG) { Log(LOG_INFO, "Logging to the syslog. Check there for all future messages."); @@ -357,29 +358,30 @@ start: { ConfigListener *serverCfg = ArrayGet(tConfig->listen, i); - /* TODO: Think of a nicer solution. */ HttpServerConfig args; - Log(LOG_DEBUG, "HTTP listener: %lu", i); - LogConfigIndent(LogConfigGlobal()); - Log(LOG_DEBUG, "Port: %hu", serverCfg->port); - Log(LOG_DEBUG, "Threads: %u", serverCfg->threads); - Log(LOG_DEBUG, "Max Connections: %u", serverCfg->maxConnections); - /*Log(LOG_DEBUG, "Flags: %d", serverCfg->flags);*/ - Log(LOG_DEBUG, "TLS Cert: %s", serverCfg->tls.cert); - Log(LOG_DEBUG, "TLS Key: %s", serverCfg->tls.key); - LogConfigUnindent(LogConfigGlobal()); - args.port = serverCfg->port; args.threads = serverCfg->maxConnections; args.maxConnections = serverCfg->maxConnections; args.tlsCert = serverCfg->tls.cert; args.tlsKey = serverCfg->tls.key; + args.flags = args.tlsCert && args.tlsKey ? HTTP_FLAG_TLS : HTTP_FLAG_NONE; + + Log(LOG_DEBUG, "HTTP listener: %lu", i); + LogConfigIndent(LogConfigGlobal()); + Log(LOG_DEBUG, "Port: %hu", serverCfg->port); + Log(LOG_DEBUG, "Threads: %u", serverCfg->threads); + Log(LOG_DEBUG, "Max Connections: %u", serverCfg->maxConnections); + Log(LOG_DEBUG, "Flags: %d", args.flags); + Log(LOG_DEBUG, "TLS Cert: %s", serverCfg->tls.cert); + Log(LOG_DEBUG, "TLS Key: %s", serverCfg->tls.key); + LogConfigUnindent(LogConfigGlobal()); + args.handler = MatrixHttpHandler; args.handlerArgs = &matrixArgs; - if (serverCfg->tls.cert && serverCfg->tls.key) + if (args.flags & HTTP_FLAG_TLS) { if (UInt64Eq(UtilLastModified(serverCfg->tls.cert), UInt64Create(0, 0))) { diff --git a/src/include/Config.h b/src/include/Config.h index 8cd9386..91f229c 100644 --- a/src/include/Config.h +++ b/src/include/Config.h @@ -104,4 +104,9 @@ extern Config * ConfigLock(Db *); */ extern int ConfigUnlock(Config *); +/** + * Converts a ConfigLogLevel into a valid syslog level. + */ +extern int ConfigLogLevelToSyslog(ConfigLogLevel); + #endif /* TELODENDRIA_CONFIG_H */