X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fconf.c;h=2c6f56f9ffa5fd404fd2f10618a241cf42488d6c;hb=8299f488088878d38ccf7ba9bbccc4743e48bd13;hp=38b32852775c1727ffbd4c045515294a42c4f611;hpb=b3dfe6cb6fe0c5311f2d453a5a736ae443bbd5cd;p=umurmur.git diff --git a/src/conf.c b/src/conf.c index 38b3285..2c6f56f 100644 --- a/src/conf.c +++ b/src/conf.c @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2011, Martin Johansson - Copyright (C) 2005-2011, Thorvald Natvig +/* Copyright (C) 2009-2014, Martin Johansson + Copyright (C) 2005-2014, Thorvald Natvig All rights reserved. @@ -44,6 +44,8 @@ static config_t configuration; #define DEFAULT_MAX_CLIENTS 10 #define DEFAULT_MAX_BANDWIDTH 48000 #define DEFAULT_BINDPORT 64738 +#define DEFAULT_BAN_LENGTH (60*60) +#define DEFAULT_OPUS_THRESHOLD 100 const char defaultconfig[] = DEFAULT_CONFIG; @@ -58,6 +60,21 @@ void Conf_init(const char *conffile) } } +bool_t Conf_ok(const char *conffile) +{ + bool_t rc = true; + config_init(&configuration); + if (conffile == NULL) + conffile = defaultconfig; + if (config_read_file(&configuration, conffile) != CONFIG_TRUE) { + fprintf(stderr, "Error in config file %s line %d: %s\n", conffile, + config_error_line(&configuration), config_error_text(&configuration)); + rc = false; + } + config_destroy(&configuration); + return rc; +} + void Conf_deinit() { config_destroy(&configuration); @@ -67,7 +84,7 @@ const char *getStrConf(param_t param) { config_setting_t *setting = NULL; const char *strsetting = NULL; - + switch (param) { case CERTIFICATE: setting = config_lookup(&configuration, "certificate"); @@ -91,6 +108,17 @@ const char *getStrConf(param_t param) return "/etc/umurmur/private_key.key"; } break; + case CAPATH: + setting = config_lookup(&configuration, "ca_path"); + if (!setting) + return NULL; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return NULL; + } + break; case PASSPHRASE: setting = config_lookup(&configuration, "password"); if (!setting) @@ -102,6 +130,17 @@ const char *getStrConf(param_t param) return ""; } break; + case ADMIN_PASSPHRASE: + setting = config_lookup(&configuration, "admin_password"); + if (!setting) + return ""; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return ""; + } + break; case BINDADDR: setting = config_lookup(&configuration, "bindaddr"); if (!setting) @@ -168,6 +207,17 @@ const char *getStrConf(param_t param) return NULL; } break; + case BANFILE: + setting = config_lookup(&configuration, "banfile"); + if (!setting) + return NULL; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return NULL; + } + break; default: doAssert(false); break; @@ -178,7 +228,7 @@ const char *getStrConf(param_t param) int getIntConf(param_t param) { config_setting_t *setting = NULL; - + switch (param) { case BINDPORT: setting = config_lookup(&configuration, "bindport"); @@ -188,6 +238,14 @@ int getIntConf(param_t param) return config_setting_get_int(setting); } break; + case BAN_LENGTH: + setting = config_lookup(&configuration, "ban_length"); + if (!setting) + return DEFAULT_BAN_LENGTH; + else { + return config_setting_get_int(setting); + } + break; case MAX_BANDWIDTH: setting = config_lookup(&configuration, "max_bandwidth"); if (!setting) @@ -204,6 +262,45 @@ int getIntConf(param_t param) return config_setting_get_int(setting); } break; + case OPUS_THRESHOLD: + setting = config_lookup(&configuration, "opus_threshold"); + if (!setting) + return DEFAULT_OPUS_THRESHOLD; + else { + return config_setting_get_int(setting); + } + break; + default: + doAssert(false); + } +} + +bool_t getBoolConf(param_t param) +{ + config_setting_t *setting = NULL; + + switch (param) { + case ALLOW_TEXTMESSAGE: + setting = config_lookup(&configuration, "allow_textmessage"); + if (!setting) + return true; + else + return config_setting_get_bool(setting); + break; + case ENABLE_BAN: + setting = config_lookup(&configuration, "enable_ban"); + if (!setting) + return false; + else + return config_setting_get_bool(setting); + break; + case SYNC_BANFILE: + setting = config_lookup(&configuration, "sync_banfile"); + if (!setting) + return false; + else + return config_setting_get_bool(setting); + break; default: doAssert(false); } @@ -214,26 +311,33 @@ int Conf_getNextChannel(conf_channel_t *chdesc, int index) config_setting_t *setting = NULL; int maxconfig = 64, ret = 0; char configstr[maxconfig]; - + ret = snprintf(configstr, maxconfig, "channels.[%d].name", index); setting = config_lookup(&configuration, configstr); if (ret >= maxconfig || ret < 0 || setting == NULL) return -1; /* Required */ chdesc->name = config_setting_get_string(setting); - + ret = snprintf(configstr, maxconfig, "channels.[%d].parent", index); setting = config_lookup(&configuration, configstr); if (ret >= maxconfig || ret < 0 || setting == NULL) return -1; /* Required */ chdesc->parent = config_setting_get_string(setting); - + ret = snprintf(configstr, maxconfig, "channels.[%d].description", index); setting = config_lookup(&configuration, configstr); if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ chdesc->description = NULL; else chdesc->description = config_setting_get_string(setting); - + + ret = snprintf(configstr, maxconfig, "channels.[%d].password", index); + setting = config_lookup(&configuration, configstr); + if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ + chdesc->password = NULL; + else + chdesc->password = config_setting_get_string(setting); + ret = snprintf(configstr, maxconfig, "channels.[%d].noenter", index); setting = config_lookup(&configuration, configstr); if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ @@ -241,6 +345,20 @@ int Conf_getNextChannel(conf_channel_t *chdesc, int index) else chdesc->noenter = config_setting_get_bool(setting); + ret = snprintf(configstr, maxconfig, "channels.[%d].silent", index); + setting = config_lookup(&configuration, configstr); + if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ + chdesc->silent = false; + else + chdesc->silent = config_setting_get_bool(setting); + + ret = snprintf(configstr, maxconfig, "channels.[%d].position", index); + setting = config_lookup(&configuration, configstr); + if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ + chdesc->position = 0; + else + chdesc->position = config_setting_get_int(setting); + return 0; } @@ -249,7 +367,7 @@ int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index) config_setting_t *setting = NULL; int maxconfig = 64, ret = 0; char configstr[maxconfig]; - + ret = snprintf(configstr, maxconfig, "channel_links.[%d].source", index); setting = config_lookup(&configuration, configstr); if (ret >= maxconfig || ret < 0 || setting == NULL)