1 /* Copyright (C) 2009-2010, Martin Johansson <martin@fatbob.nu>
2 Copyright (C) 2005-2010, 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_CONFIG "/etc/umurmur.conf"
44 #define DEFAULT_WELCOME "Welcome to uMurmur!"
45 #define DEFAULT_MAX_CLIENTS 10
46 #define DEFAULT_MAX_BANDWIDTH 48000
47 #define DEFAULT_BINDPORT 64738
49 const char defaultconfig[] = DEFAULT_CONFIG;
51 int Conf_init(const char *conffile)
53 config_init(&configuration);
55 conffile = defaultconfig;
56 if (config_read_file(&configuration, conffile) != CONFIG_TRUE) {
57 fprintf(stderr, "Error in config file %s: %s at line %d\n", conffile,
58 config_error_text(&configuration), config_error_line(&configuration));
66 config_destroy(&configuration);
69 const char *getStrConf(param_t param)
71 config_setting_t *setting = NULL;
72 const char *strsetting = NULL;
76 setting = config_lookup(&configuration, "certificate");
78 return "/etc/umurmur/certificate.crt";
80 if ((strsetting = config_setting_get_string(setting)) != NULL)
83 return "/etc/umurmur/certificate.crt";
87 setting = config_lookup(&configuration, "private_key");
89 return "/etc/umurmur/private_key.key";
91 if ((strsetting = config_setting_get_string(setting)) != NULL)
94 return "/etc/umurmur/private_key.key";
98 setting = config_lookup(&configuration, "password");
102 if ((strsetting = config_setting_get_string(setting)) != NULL)
109 setting = config_lookup(&configuration, "bindaddr");
113 if ((strsetting = config_setting_get_string(setting)) != NULL)
120 setting = config_lookup(&configuration, "welcometext");
122 return DEFAULT_WELCOME;
124 if ((strsetting = config_setting_get_string(setting)) != NULL)
127 return DEFAULT_WELCOME;
130 case DEFAULT_CHANNEL:
131 setting = config_lookup(&configuration, "default_channel");
135 if ((strsetting = config_setting_get_string(setting)) != NULL)
148 int getIntConf(param_t param)
150 config_setting_t *setting = NULL;
154 setting = config_lookup(&configuration, "bindport");
156 return DEFAULT_BINDPORT;
158 return config_setting_get_int(setting);
162 setting = config_lookup(&configuration, "max_bandwidth");
164 return DEFAULT_MAX_BANDWIDTH;
166 return config_setting_get_int(setting);
170 setting = config_lookup(&configuration, "max_users");
172 return DEFAULT_MAX_CLIENTS;
174 return config_setting_get_int(setting);
182 int Conf_getNextChannel(conf_channel_t *chdesc, int index)
184 config_setting_t *setting = NULL;
185 int maxconfig = 64, ret = 0;
186 char configstr[maxconfig];
188 ret = snprintf(configstr, maxconfig, "channels.[%d].name", index);
189 setting = config_lookup(&configuration, configstr);
190 if (ret >= maxconfig || ret < 0 || setting == NULL)
191 return -1; /* Required */
192 chdesc->name = config_setting_get_string(setting);
194 ret = snprintf(configstr, maxconfig, "channels.[%d].parent", index);
195 setting = config_lookup(&configuration, configstr);
196 if (ret >= maxconfig || ret < 0 || setting == NULL)
197 return -1; /* Required */
198 chdesc->parent = config_setting_get_string(setting);
200 ret = snprintf(configstr, maxconfig, "channels.[%d].description", index);
201 setting = config_lookup(&configuration, configstr);
202 if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
203 chdesc->description = NULL;
205 chdesc->description = config_setting_get_string(setting);
207 ret = snprintf(configstr, maxconfig, "channels.[%d].noenter", index);
208 setting = config_lookup(&configuration, configstr);
209 if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
210 chdesc->noenter = false;
212 chdesc->noenter = config_setting_get_bool(setting);
217 int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index)
219 config_setting_t *setting = NULL;
220 int maxconfig = 64, ret = 0;
221 char configstr[maxconfig];
223 ret = snprintf(configstr, maxconfig, "channel_links.[%d].source", index);
224 setting = config_lookup(&configuration, configstr);
225 if (ret >= maxconfig || ret < 0 || setting == NULL)
227 chlink->source = config_setting_get_string(setting);
229 ret = snprintf(configstr, maxconfig, "channel_links.[%d].destination", index);
230 setting = config_lookup(&configuration, configstr);
231 if (ret >= maxconfig || ret < 0 || setting == NULL)
233 chlink->destination = config_setting_get_string(setting);