diff --git a/backends/libcommuni/main.cpp b/backends/libcommuni/main.cpp index 9b717d4ca7ebb2ccea6ee3f165b06905d808d7bc..cab694292061cd3764f04c2d1f5d87777adec8e7 100644 --- a/backends/libcommuni/main.cpp +++ b/backends/libcommuni/main.cpp @@ -78,7 +78,7 @@ int main (int argc, char* argv[]) { Swift::QtEventLoop eventLoop; - if (config.getUnregistered().find("service.irc_server") == config.getUnregistered().end()) { + if (!CONFIG_HAS_KEY(&config, "service.irc_server")) { np = new IRCNetworkPlugin(&config, &eventLoop, host, port); } else { diff --git a/backends/libcommuni/singleircnetworkplugin.cpp b/backends/libcommuni/singleircnetworkplugin.cpp index cce79c7b59a4400627f3a97b2aaa2b46e7c0e19b..378df94998cb0ba83a0f2b9789fa98591d1af14b 100644 --- a/backends/libcommuni/singleircnetworkplugin.cpp +++ b/backends/libcommuni/singleircnetworkplugin.cpp @@ -10,13 +10,19 @@ DEFINE_LOGGER(logger, "SingleIRCNetworkPlugin"); SingleIRCNetworkPlugin::SingleIRCNetworkPlugin(Config *config, Swift::QtEventLoop *loop, const std::string &host, int port) { this->config = config; - m_server = config->getUnregistered().find("service.irc_server")->second; + if (CONFIG_HAS_KEY(config, "service.irc_server")) { + m_server = CONFIG_STRING(config, "service.irc_server"); + } + else { + LOG4CXX_ERROR(logger, "No [service] irc_server defined, exiting..."); + exit(-1); + } m_socket = new QTcpSocket(); m_socket->connectToHost(FROM_UTF8(host), port); connect(m_socket, SIGNAL(readyRead()), this, SLOT(readData())); - if (config->getUnregistered().find("service.irc_identify") != config->getUnregistered().end()) { - m_identify = config->getUnregistered().find("service.irc_identify")->second; + if (CONFIG_HAS_KEY(config, "service.irc_identify")) { + m_identify = CONFIG_STRING(config, "service.irc_identify"); } else { m_identify = "NickServ identify $name $password"; diff --git a/backends/smstools3/main.cpp b/backends/smstools3/main.cpp index 2e61868c60f906925a1c0fd76452f62271e1697a..32799348701277e61ca81f5cd56aca4f6fc609dd 100644 --- a/backends/smstools3/main.cpp +++ b/backends/smstools3/main.cpp @@ -124,8 +124,8 @@ class SMSNetworkPlugin : public NetworkPlugin { void handleSMSDir() { std::string dir = "/var/spool/sms/incoming/"; - if (config->getUnregistered().find("backend.incoming_dir") != config->getUnregistered().end()) { - dir = config->getUnregistered().find("backend.incoming_dir")->second; + if (CONFIG_HAS_KEY(config, "backend.incoming_dir")) { + dir = CONFIG_STRING(config, "backend.incoming_dir"); } LOG4CXX_INFO(logger, "Checking directory " << dir << " for incoming SMS."); diff --git a/include/transport/config.h b/include/transport/config.h index 903480e953056b23a3106b3d4ee2ca7abb89a56c..4ced7c987d1a66bccc3504c77c7e636bc76a2e84 100644 --- a/include/transport/config.h +++ b/include/transport/config.h @@ -77,7 +77,7 @@ class Config { bool reload(); bool hasKey(const std::string &key) { - return m_variables.find(key) != m_variables.end(); + return m_variables.find(key) != m_variables.end() || m_unregistered.find(key) != m_unregistered.end(); } /// Returns value of variable defined by key. @@ -85,16 +85,15 @@ class Config { /// For variables in sections you can use "section.variable" key format. /// \param key config variable name const boost::program_options::variable_value &operator[] (const std::string &key) { - return m_variables[key]; + if (m_variables.find(key) != m_variables.end()) { + return m_variables[key]; + } + return m_unregistered[key]; } /// Returns path to config file from which data were loaded. const std::string &getConfigFile() { return m_file; } - const std::map &getUnregistered() { - return m_unregistered; - } - /// This signal is emitted when config is loaded/reloaded. boost::signal onConfigReloaded; @@ -102,7 +101,7 @@ class Config { int m_argc; char **m_argv; Variables m_variables; - std::map m_unregistered; + std::map m_unregistered; std::string m_file; }; diff --git a/src/config.cpp b/src/config.cpp index 08f7451da8835c4b7cdf8313d9ba6b8b179cf256..e9d31872e0183eed2522098a93806736122698fa 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -187,7 +187,7 @@ bool Config::load(std::istream &ifs, boost::program_options::options_description BOOST_FOREACH(option &opt, parsed.options) { if (opt.unregistered) { - m_unregistered[opt.string_key] = opt.value[0]; + m_unregistered[opt.string_key] = variable_value(opt.value[0], false); } else if (opt.value[0].find("$jid") != std::string::npos) { boost::replace_all(opt.value[0], "$jid", jid);