bindport6 defaults to bindport, rather than 64738
[umurmur.git] / src / conf.c
index 0ac0bc40841856b126800d92216771732fb6407d..725aab6ab19bfe550ce27eb8890e0992c03dc080 100644 (file)
@@ -1,5 +1,5 @@
-/* Copyright (C) 2009-2012, Martin Johansson <martin@fatbob.nu>
-   Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-2014, Martin Johansson <martin@fatbob.nu>
+   Copyright (C) 2005-2014, Thorvald Natvig <thorvald@natvig.com>
 
    All rights reserved.
 
@@ -45,6 +45,7 @@ static config_t configuration;
 #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;
 
@@ -55,7 +56,7 @@ void Conf_init(const char *conffile)
                conffile = defaultconfig;
        if (config_read_file(&configuration, conffile) != CONFIG_TRUE) {
                Log_fatal("Error in config file %s line %d: %s", conffile,
-                                 config_error_line(&configuration), config_error_text(&configuration));
+                       config_error_line(&configuration), config_error_text(&configuration));
        }
 }
 
@@ -67,7 +68,7 @@ bool_t Conf_ok(const char *conffile)
                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));
+                       config_error_line(&configuration), config_error_text(&configuration));
                rc = false;
        }
        config_destroy(&configuration);
@@ -83,121 +84,154 @@ const char *getStrConf(param_t param)
 {
        config_setting_t *setting = NULL;
        const char *strsetting = NULL;
-       
+
        switch (param) {
-       case CERTIFICATE:
-               setting = config_lookup(&configuration, "certificate");
-               if (!setting)
-                       return "/etc/umurmur/certificate.crt";
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
+               case CERTIFICATE:
+                       setting = config_lookup(&configuration, "certificate");
+                       if (!setting)
                                return "/etc/umurmur/certificate.crt";
-               }
-               break;
-       case KEY:
-               setting = config_lookup(&configuration, "private_key");
-               if (!setting)
-                       return "/etc/umurmur/private_key.key";
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return "/etc/umurmur/certificate.crt";
+                       }
+                       break;
+               case KEY:
+                       setting = config_lookup(&configuration, "private_key");
+                       if (!setting)
                                return "/etc/umurmur/private_key.key";
-               }
-               break;
-       case PASSPHRASE:
-               setting = config_lookup(&configuration, "password");
-               if (!setting)
-                       return "";
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       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)
                                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
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return "";
+                       }
+                       break;
+               case ADMIN_PASSPHRASE:
+                       setting = config_lookup(&configuration, "admin_password");
+                       if (!setting)
                                return "";
-               }
-               break;
-       case BINDADDR:
-               setting = config_lookup(&configuration, "bindaddr");
-               if (!setting)
-                       return "";
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return "";
+                       }
+                       break;
+               case BINDADDR:
+                       setting = config_lookup(&configuration, "bindaddr");
+                       if (!setting)
+                               return NULL;
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return NULL;
+                       }
+                       break;
+               case BINDADDR6:
+                       setting = config_lookup(&configuration, "bindaddr6");
+                       if (!setting)
+                               return NULL;
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return NULL;
+                       }
+                       break;
+               case WELCOMETEXT:
+                       setting = config_lookup(&configuration, "welcometext");
+                       if (!setting)
+                               return DEFAULT_WELCOME;
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return DEFAULT_WELCOME;
+                       }
+                       break;
+               case DEFAULT_CHANNEL:
+                       setting = config_lookup(&configuration, "default_channel");
+                       if (!setting)
                                return "";
-               }
-               break;
-       case WELCOMETEXT:
-               setting = config_lookup(&configuration, "welcometext");
-               if (!setting)
-                       return DEFAULT_WELCOME;
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
-                       return DEFAULT_WELCOME;
-               }
-               break;
-       case DEFAULT_CHANNEL:
-               setting = config_lookup(&configuration, "default_channel");
-               if (!setting)
-                       return "";
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
-                       return "";
-               }
-               break;
-       case USERNAME:
-               setting = config_lookup(&configuration, "username");
-               if (!setting)
-                       return "";
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
-                       return "";
-               }
-               break;
-       case GROUPNAME:
-               setting = config_lookup(&configuration, "groupname");
-               if (!setting)
-                       return "";
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
-                       return "";
-               }
-               break;
-       case LOGFILE:
-               setting = config_lookup(&configuration, "logfile");
-               if (!setting)
-                       return NULL;
-               else {
-                       if ((strsetting = config_setting_get_string(setting)) != NULL)
-                               return strsetting;
-                       else
-                       return NULL;
-               }
-               break;
-       default:
-               doAssert(false);
-               break;
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return "";
+                       }
+                       break;
+               case USERNAME:
+                       setting = config_lookup(&configuration, "username");
+                       if (!setting)
+                               return "";
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return "";
+                       }
+                       break;
+               case GROUPNAME:
+                       setting = config_lookup(&configuration, "groupname");
+                       if (!setting)
+                               return "";
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       return "";
+                       }
+                       break;
+               case LOGFILE:
+                       setting = config_lookup(&configuration, "logfile");
+                       if (!setting)
+                               return NULL;
+                       else {
+                               if ((strsetting = config_setting_get_string(setting)) != NULL)
+                                       return strsetting;
+                               else
+                                       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;
        }
        return NULL;
 }
@@ -205,59 +239,99 @@ 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");
-               if (!setting)
-                       return DEFAULT_BINDPORT;
-               else {
-                       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)
-                       return DEFAULT_MAX_BANDWIDTH;
-               else {
-                       return config_setting_get_int(setting);
-               }
-               break;
-       case MAX_CLIENTS:
-               setting = config_lookup(&configuration, "max_users");
-               if (!setting)
-                       return DEFAULT_MAX_CLIENTS;
-               else {
-                       return config_setting_get_int(setting);
-               }
-               break;
-       default:
-               doAssert(false);
+               case BINDPORT:
+                       setting = config_lookup(&configuration, "bindport");
+                       if (!setting)
+                               return DEFAULT_BINDPORT;
+                       else {
+                               return config_setting_get_int(setting);
+                       }
+                       break;
+               case BINDPORT6:
+                       setting = config_lookup(&configuration, "bindport6");
+                       if (!setting)
+                               /* If bindport6 is not specified, we default
+                                * to whatever bindport is, rather than always
+                                * default to 64738 */
+                               return getIntConf(BINDPORT);
+                       else {
+                               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)
+                               return DEFAULT_MAX_BANDWIDTH;
+                       else {
+                               return config_setting_get_int(setting);
+                       }
+                       break;
+               case MAX_CLIENTS:
+                       setting = config_lookup(&configuration, "max_users");
+                       if (!setting)
+                               return DEFAULT_MAX_CLIENTS;
+                       else {
+                               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;
-       default:
-               doAssert(false);
+               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;
+               case SHOW_ADDRESSES:
+                       setting = config_lookup(&configuration, "show_addresses");
+                       if (!setting)
+                               return true;
+                       else
+                               return config_setting_get_bool(setting);
+                       break;
+               default:
+                       doAssert(false);
        }
 }
 
@@ -266,33 +340,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 */
@@ -300,6 +374,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;
 }
 
@@ -308,7 +396,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)