Module: sems Branch: master Commit: 791132ad7866d99bb54853081393f81d670ea1fa URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=791132ad7866d99bb54853081393f81d670ea1fa
Author: Raphael Coeffic <[email protected]> Committer: Raphael Coeffic <[email protected]> Date: Thu Oct 7 11:08:51 2010 +0200 changed: SEMS won't stop anymore on the first error in config file. changed: the stderr option in config file is now read as the first option, to enable better debug/error log while reading the file. --- core/AmConfig.cpp | 88 +++++++++++++++++++++++++++-------------------------- core/sems.cpp | 6 +++- 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/core/AmConfig.cpp b/core/AmConfig.cpp index 4c3ee19..b648586 100644 --- a/core/AmConfig.cpp +++ b/core/AmConfig.cpp @@ -221,6 +221,7 @@ int AmConfig::readConfiguration() DBG("Reading configuration...\n"); AmConfigReader cfg; + int ret=0; if(cfg.loadFile(AmConfig::ConfigurationFile.c_str())){ ERROR("while loading main configuration file\n"); @@ -230,6 +231,15 @@ int AmConfig::readConfiguration() // take values from global configuration file // they will be overwritten by command line args + // stderr + if(cfg.hasParameter("stderr")){ + if(!setLogStderr(cfg.getParameter("stderr"), true)){ + ERROR("invalid stderr value specified," + " valid are only yes or no\n"); + ret = -1; + } + } + #ifndef DISABLE_SYSLOG_LOG if (cfg.hasParameter("syslog_facility")) { set_syslog_facility(cfg.getParameter("syslog_facility").c_str()); @@ -251,7 +261,7 @@ int AmConfig::readConfiguration() if(cfg.hasParameter("sip_port")){ if(!setSIPPort(cfg.getParameter("sip_port").c_str())){ ERROR("invalid sip port specified\n"); - return -1; + ret = -1; } } if(cfg.hasParameter("media_ip")) { @@ -313,7 +323,7 @@ int AmConfig::readConfiguration() if(cfg.hasParameter("loglevel")){ if(!setLogLevel(cfg.getParameter("loglevel"))){ ERROR("invalid log level specified\n"); - return -1; + ret = -1; } } @@ -350,29 +360,30 @@ int AmConfig::readConfiguration() if (!appcfg.good()) { ERROR("could not load application mapping file at '%s'\n", appcfg_fname.c_str()); - return -1; + ret = -1; } - - while (!appcfg.eof()) { - string entry; - getline (appcfg,entry); - if (!entry.length() || entry[0] == '#') - continue; - vector<string> re_v = explode(entry, "=>"); - if (re_v.size() != 2) { - ERROR("Incorrect line '%s' in %s: expected format 'regexp=>app_name'\n", - entry.c_str(), appcfg_fname.c_str()); - return -1; + else { + while (!appcfg.eof()) { + string entry; + getline (appcfg,entry); + if (!entry.length() || entry[0] == '#') + continue; + vector<string> re_v = explode(entry, "=>"); + if (re_v.size() != 2) { + ERROR("Incorrect line '%s' in %s: expected format 'regexp=>app_name'\n", + entry.c_str(), appcfg_fname.c_str()); + ret = -1; + } + regex_t app_re; + if (regcomp(&app_re, re_v[0].c_str(), REG_EXTENDED | REG_NOSUB)) { + ERROR("compiling regex '%s' in %s.\n", + re_v[0].c_str(), appcfg_fname.c_str()); + ret = -1; + } + DBG("adding application mapping '%s' => '%s'\n", + re_v[0].c_str(),re_v[1].c_str()); + AppMapping.push_back(make_pair(app_re, re_v[1])); } - regex_t app_re; - if (regcomp(&app_re, re_v[0].c_str(), REG_EXTENDED | REG_NOSUB)) { - ERROR("compiling regex '%s' in %s.\n", - re_v[0].c_str(), appcfg_fname.c_str()); - return -1; - } - DBG("adding application mapping '%s' => '%s'\n", - re_v[0].c_str(),re_v[1].c_str()); - AppMapping.push_back(make_pair(app_re, re_v[1])); } } else { AppSelect = App_SPECIFIED; @@ -385,7 +396,7 @@ int AmConfig::readConfiguration() if(!setDaemonMode(cfg.getParameter("fork"))){ ERROR("invalid fork value specified," " valid are only yes or no\n"); - return -1; + ret = -1; } } @@ -394,7 +405,7 @@ int AmConfig::readConfiguration() if(!setDaemonMode(cfg.getParameter("daemon"))){ ERROR("invalid daemon value specified," " valid are only yes or no\n"); - return -1; + ret = -1; } } @@ -408,15 +419,6 @@ int AmConfig::readConfiguration() #endif /* !DISABLE_DAEMON_MODE */ - // stderr - if(cfg.hasParameter("stderr")){ - if(!setLogStderr(cfg.getParameter("stderr"), false)){ - ERROR("invalid stderr value specified," - " valid are only yes or no\n"); - return -1; - } - } - MaxShutdownTime = cfg.getParameterInt("max_shutdown_time", DEFAULT_MAX_SHUTDOWN_TIME); @@ -424,7 +426,7 @@ int AmConfig::readConfiguration() if(cfg.hasParameter("rtp_low_port")){ if(!setRtpLowPort(cfg.getParameter("rtp_low_port"))){ ERROR("invalid rtp low port specified\n"); - return -1; + ret = -1; } } @@ -432,7 +434,7 @@ int AmConfig::readConfiguration() if(cfg.hasParameter("rtp_high_port")){ if(!setRtpHighPort(cfg.getParameter("rtp_high_port"))){ ERROR("invalid rtp high port specified\n"); - return -1; + ret = -1; } } @@ -440,12 +442,12 @@ int AmConfig::readConfiguration() #ifdef SESSION_THREADPOOL if(!setSessionProcessorThreads(cfg.getParameter("session_processor_threads"))){ ERROR("invalid session_processor_threads value specified\n"); - return -1; + ret = -1; } if (SessionProcessorThreads<1) { ERROR("invalid session_processor_threads value specified." " need at least one thread\n"); - return -1; + ret = -1; } #else WARN("session_processor_threads specified in sems.conf,\n"); @@ -458,14 +460,14 @@ int AmConfig::readConfiguration() if(cfg.hasParameter("media_processor_threads")){ if(!setMediaProcessorThreads(cfg.getParameter("media_processor_threads"))){ ERROR("invalid media_processor_threads value specified"); - return -1; + ret = -1; } } if(cfg.hasParameter("sip_server_threads")){ if(!setSIPServerThreads(cfg.getParameter("sip_server_threads"))){ ERROR("invalid sip_server_threads value specified"); - return -1; + ret = -1; } } @@ -486,7 +488,7 @@ int AmConfig::readConfiguration() if(cfg.hasParameter("dead_rtp_time")){ if(!setDeadRtpTime(cfg.getParameter("dead_rtp_time"))){ ERROR("invalid dead_rtp_time value specified"); - return -1; + ret = -1; } } @@ -534,11 +536,11 @@ int AmConfig::readConfiguration() } else { ERROR("unknown setting for '100rel' config option: '%s'.\n", rel100s.c_str()); - return -1; + ret = -1; } } INFO("100rel: %d.\n", AmConfig::rel100); - return 0; + return ret; } diff --git a/core/sems.cpp b/core/sems.cpp index 98fd993..0555f11 100644 --- a/core/sems.cpp +++ b/core/sems.cpp @@ -435,7 +435,11 @@ int main(int argc, char* argv[]) init_logging(); /* load and apply configuration file */ - AmConfig::readConfiguration(); + if(AmConfig::readConfiguration()){ + ERROR("Errors occured while reading configuration file: exiting."); + return -1; + } + log_level = AmConfig::LogLevel; log_stderr = AmConfig::LogStderr; _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
