1 /* Copyright (C) 2009-2011, Martin Johansson <martin@fatbob.nu>
2 Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions
10 - Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
12 - Redistributions in binary form must reproduce the above copyright notice,
13 this list of conditions and the following disclaimer in the documentation
14 and/or other materials provided with the distribution.
15 - Neither the name of the Developers nor the names of its contributors may
16 be used to endorse or promote products derived from this software without
17 specific prior written permission.
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
23 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 #include <libconfig.h>
41 static config_t configuration;
43 #define DEFAULT_WELCOME "Welcome to uMurmur!"
44 #define DEFAULT_MAX_CLIENTS 10
45 #define DEFAULT_MAX_BANDWIDTH 48000
46 #define DEFAULT_BINDPORT 64738
48 const char defaultconfig[] = DEFAULT_CONFIG;
50 void Conf_init(const char *conffile)
52 config_init(&configuration);
54 conffile = defaultconfig;
55 if (config_read_file(&configuration, conffile) != CONFIG_TRUE) {
56 Log_fatal("Error in config file %s line %d: %s", conffile,
57 config_error_line(&configuration), config_error_text(&configuration));
63 config_destroy(&configuration);
66 const char *getStrConf(param_t param)
68 config_setting_t *setting = NULL;
69 const char *strsetting = NULL;
73 setting = config_lookup(&configuration, "certificate");
75 return "/etc/umurmur/certificate.crt";
77 if ((strsetting = config_setting_get_string(setting)) != NULL)
80 return "/etc/umurmur/certificate.crt";
84 setting = config_lookup(&configuration, "private_key");
86 return "/etc/umurmur/private_key.key";
88 if ((strsetting = config_setting_get_string(setting)) != NULL)
91 return "/etc/umurmur/private_key.key";
95 setting = config_lookup(&configuration, "password");
99 if ((strsetting = config_setting_get_string(setting)) != NULL)
106 setting = config_lookup(&configuration, "bindaddr");
110 if ((strsetting = config_setting_get_string(setting)) != NULL)
117 setting = config_lookup(&configuration, "welcometext");
119 return DEFAULT_WELCOME;
121 if ((strsetting = config_setting_get_string(setting)) != NULL)
124 return DEFAULT_WELCOME;
127 case DEFAULT_CHANNEL:
128 setting = config_lookup(&configuration, "default_channel");
132 if ((strsetting = config_setting_get_string(setting)) != NULL)
139 setting = config_lookup(&configuration, "username");
143 if ((strsetting = config_setting_get_string(setting)) != NULL)
150 setting = config_lookup(&configuration, "groupname");
154 if ((strsetting = config_setting_get_string(setting)) != NULL)
161 setting = config_lookup(&configuration, "logfile");
165 if ((strsetting = config_setting_get_string(setting)) != NULL)
178 int getIntConf(param_t param)
180 config_setting_t *setting = NULL;
184 setting = config_lookup(&configuration, "bindport");
186 return DEFAULT_BINDPORT;
188 return config_setting_get_int(setting);
192 setting = config_lookup(&configuration, "max_bandwidth");
194 return DEFAULT_MAX_BANDWIDTH;
196 return config_setting_get_int(setting);
200 setting = config_lookup(&configuration, "max_users");
202 return DEFAULT_MAX_CLIENTS;
204 return config_setting_get_int(setting);
212 int Conf_getNextChannel(conf_channel_t *chdesc, int index)
214 config_setting_t *setting = NULL;
215 int maxconfig = 64, ret = 0;
216 char configstr[maxconfig];
218 ret = snprintf(configstr, maxconfig, "channels.[%d].name", index);
219 setting = config_lookup(&configuration, configstr);
220 if (ret >= maxconfig || ret < 0 || setting == NULL)
221 return -1; /* Required */
222 chdesc->name = config_setting_get_string(setting);
224 ret = snprintf(configstr, maxconfig, "channels.[%d].parent", index);
225 setting = config_lookup(&configuration, configstr);
226 if (ret >= maxconfig || ret < 0 || setting == NULL)
227 return -1; /* Required */
228 chdesc->parent = config_setting_get_string(setting);
230 ret = snprintf(configstr, maxconfig, "channels.[%d].description", index);
231 setting = config_lookup(&configuration, configstr);
232 if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
233 chdesc->description = NULL;
235 chdesc->description = config_setting_get_string(setting);
237 ret = snprintf(configstr, maxconfig, "channels.[%d].noenter", index);
238 setting = config_lookup(&configuration, configstr);
239 if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
240 chdesc->noenter = false;
242 chdesc->noenter = config_setting_get_bool(setting);
247 int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index)
249 config_setting_t *setting = NULL;
250 int maxconfig = 64, ret = 0;
251 char configstr[maxconfig];
253 ret = snprintf(configstr, maxconfig, "channel_links.[%d].source", index);
254 setting = config_lookup(&configuration, configstr);
255 if (ret >= maxconfig || ret < 0 || setting == NULL)
257 chlink->source = config_setting_get_string(setting);
259 ret = snprintf(configstr, maxconfig, "channel_links.[%d].destination", index);
260 setting = config_lookup(&configuration, configstr);
261 if (ret >= maxconfig || ret < 0 || setting == NULL)
263 chlink->destination = config_setting_get_string(setting);