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));
61 bool_t Conf_ok(const char *conffile)
64 config_init(&configuration);
66 conffile = defaultconfig;
67 if (config_read_file(&configuration, conffile) != CONFIG_TRUE) {
68 fprintf(stderr, "Error in config file %s line %d: %s\n", conffile,
69 config_error_line(&configuration), config_error_text(&configuration));
72 config_destroy(&configuration);
78 config_destroy(&configuration);
81 const char *getStrConf(param_t param)
83 config_setting_t *setting = NULL;
84 const char *strsetting = NULL;
88 setting = config_lookup(&configuration, "certificate");
90 return "/etc/umurmur/certificate.crt";
92 if ((strsetting = config_setting_get_string(setting)) != NULL)
95 return "/etc/umurmur/certificate.crt";
99 setting = config_lookup(&configuration, "private_key");
101 return "/etc/umurmur/private_key.key";
103 if ((strsetting = config_setting_get_string(setting)) != NULL)
106 return "/etc/umurmur/private_key.key";
110 setting = config_lookup(&configuration, "password");
114 if ((strsetting = config_setting_get_string(setting)) != NULL)
121 setting = config_lookup(&configuration, "bindaddr");
125 if ((strsetting = config_setting_get_string(setting)) != NULL)
132 setting = config_lookup(&configuration, "welcometext");
134 return DEFAULT_WELCOME;
136 if ((strsetting = config_setting_get_string(setting)) != NULL)
139 return DEFAULT_WELCOME;
142 case DEFAULT_CHANNEL:
143 setting = config_lookup(&configuration, "default_channel");
147 if ((strsetting = config_setting_get_string(setting)) != NULL)
154 setting = config_lookup(&configuration, "username");
158 if ((strsetting = config_setting_get_string(setting)) != NULL)
165 setting = config_lookup(&configuration, "groupname");
169 if ((strsetting = config_setting_get_string(setting)) != NULL)
176 setting = config_lookup(&configuration, "logfile");
180 if ((strsetting = config_setting_get_string(setting)) != NULL)
193 int getIntConf(param_t param)
195 config_setting_t *setting = NULL;
199 setting = config_lookup(&configuration, "bindport");
201 return DEFAULT_BINDPORT;
203 return config_setting_get_int(setting);
207 setting = config_lookup(&configuration, "max_bandwidth");
209 return DEFAULT_MAX_BANDWIDTH;
211 return config_setting_get_int(setting);
215 setting = config_lookup(&configuration, "max_users");
217 return DEFAULT_MAX_CLIENTS;
219 return config_setting_get_int(setting);
227 int Conf_getNextChannel(conf_channel_t *chdesc, int index)
229 config_setting_t *setting = NULL;
230 int maxconfig = 64, ret = 0;
231 char configstr[maxconfig];
233 ret = snprintf(configstr, maxconfig, "channels.[%d].name", index);
234 setting = config_lookup(&configuration, configstr);
235 if (ret >= maxconfig || ret < 0 || setting == NULL)
236 return -1; /* Required */
237 chdesc->name = config_setting_get_string(setting);
239 ret = snprintf(configstr, maxconfig, "channels.[%d].parent", index);
240 setting = config_lookup(&configuration, configstr);
241 if (ret >= maxconfig || ret < 0 || setting == NULL)
242 return -1; /* Required */
243 chdesc->parent = config_setting_get_string(setting);
245 ret = snprintf(configstr, maxconfig, "channels.[%d].description", index);
246 setting = config_lookup(&configuration, configstr);
247 if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
248 chdesc->description = NULL;
250 chdesc->description = config_setting_get_string(setting);
252 ret = snprintf(configstr, maxconfig, "channels.[%d].password", index);
253 setting = config_lookup(&configuration, configstr);
254 if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
255 chdesc->password = NULL;
257 chdesc->password = config_setting_get_string(setting);
259 ret = snprintf(configstr, maxconfig, "channels.[%d].noenter", index);
260 setting = config_lookup(&configuration, configstr);
261 if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
262 chdesc->noenter = false;
264 chdesc->noenter = config_setting_get_bool(setting);
269 int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index)
271 config_setting_t *setting = NULL;
272 int maxconfig = 64, ret = 0;
273 char configstr[maxconfig];
275 ret = snprintf(configstr, maxconfig, "channel_links.[%d].source", index);
276 setting = config_lookup(&configuration, configstr);
277 if (ret >= maxconfig || ret < 0 || setting == NULL)
279 chlink->source = config_setting_get_string(setting);
281 ret = snprintf(configstr, maxconfig, "channel_links.[%d].destination", index);
282 setting = config_lookup(&configuration, configstr);
283 if (ret >= maxconfig || ret < 0 || setting == NULL)
285 chlink->destination = config_setting_get_string(setting);