Fixed errors in address generation
[umurmur.git] / src / conf.c
index efacd56e6bae6ed10ee773efdcd7922eb41adcda..d716312e444b90615e0be9a1b59efc92f9c0f6fe 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.
 
@@ -84,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");
@@ -108,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)
@@ -133,12 +144,23 @@ const char *getStrConf(param_t param)
        case BINDADDR:
                setting = config_lookup(&configuration, "bindaddr");
                if (!setting)
-                       return "";
+                       return NULL;
                else {
                        if ((strsetting = config_setting_get_string(setting)) != NULL)
                                return strsetting;
                        else
-                               return "";
+                               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:
@@ -217,7 +239,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");
@@ -227,6 +249,14 @@ int getIntConf(param_t param)
                        return config_setting_get_int(setting);
                }
                break;
+       case BINDPORT6:
+               setting = config_lookup(&configuration, "bindport6");
+               if (!setting)
+                       return DEFAULT_BINDPORT;
+               else {
+                       return config_setting_get_int(setting);
+               }
+               break;
        case BAN_LENGTH:
                setting = config_lookup(&configuration, "ban_length");
                if (!setting)
@@ -267,7 +297,7 @@ int getIntConf(param_t param)
 bool_t getBoolConf(param_t param)
 {
        config_setting_t *setting = NULL;
-       
+
        switch (param) {
        case ALLOW_TEXTMESSAGE:
                setting = config_lookup(&configuration, "allow_textmessage");
@@ -300,33 +330,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 */
@@ -334,6 +364,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;
 }
 
@@ -342,7 +386,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)