// initialize Logger
Log = _log;
- // Define valid command line parameters
- Opt_desc_cmd = new po::options_description("Command line options");
- Opt_desc_cmd->add_options()
+ // Available service description config options
+ po::options_description opt_desc_service("Service description options");
+ opt_desc_service.add_options()
+ ("protocol",po::value<string>(),"The service protocol.")
+ ("host",po::value<string>(),"The hostname to update.")
+ ("login",po::value<string>(),"Login name.")
+ ("password",po::value<string>(),"Corresponding password.")
+ ;
+
+ // Available command line only options
+ po::options_description opt_desc_cmd_only("Command line only options");
+ opt_desc_cmd_only.add_options()
("help,?","Show help.")
("version,v","Show version.")
("config,c",po::value<string>()->default_value("/etc/bpdyndnsd"),"Set the config path.")
- ("protocol,q",po::value<string>(),"Set the service protocol type.")
- ("host,h",po::value<string>(),"Set the hostname to update.")
- ("login,l",po::value<string>(),"Set the login.")
- ("password,p",po::value<string>(),"Set the password.")
;
- // Define valid config file main section parameters
- Opt_desc_conf_main = new po::options_description("Config file main section options");
- Opt_desc_conf_main->add_options()
- ("main.daemon_mode",po::value<bool>()->default_value(false),"Run as system daemon.")
- ("main.logfile",po::value<string>()->default_value("/var/log/bpdyndns.log"),"Where to log.")
- ("main.loglevel",po::value<int>()->default_value(0),"Loglevel.")
- ("main.syslog",po::value<bool>()->default_value(false),"Use syslog facility.")
+ // Available generic options. Valid on cmd or in config file.
+ po::options_description opt_desc_generic("Generic config options");
+ opt_desc_generic.add_options()
+ ("daemon_mode",po::value<bool>()->default_value(false),"Run as system daemon.")
+ ("logfile",po::value<string>()->default_value("/var/log/bpdyndns.log"),"Where to log.")
+ ("loglevel",po::value<int>()->default_value(0),"Loglevel.")
+ ("syslog",po::value<bool>()->default_value(false),"Use syslog facility.")
;
- // Define valid config file main section parameters
- Opt_desc_conf_service = new po::options_description("Config file service section options");
- Opt_desc_conf_service->add_options()
- ("service.protocol",po::value<string>(),"The service protocol.")
- ("service.host",po::value<string>(),"The hostname to update.")
- ("service.login",po::value<string>(),"Login name.")
- ("service.password",po::value<string>(),"Corresponding password.")
- ;
+ // Define valid command line parameters
+ Opt_desc_cmd = new po::options_description("Command line options");
+ Opt_desc_cmd->add(opt_desc_cmd_only);
+ Opt_desc_cmd->add(opt_desc_generic);
+ Opt_desc_cmd->add(opt_desc_service);
+
+ // Define valid config file options
+ Opt_desc_conf_main = new po::options_description("Config file options");
+ Opt_desc_conf_main->add(opt_desc_generic);
+
+ // Define valid service file options
+ Opt_desc_conf_service = new po::options_description("Service file options");
+ Opt_desc_conf_service->add(opt_desc_service);
Log->print_constructor_call("Config");
}
{
try
{
- po::variables_map vm;
- po::store(po::parse_command_line(argc, argv, *this->Opt_desc_cmd), vm);
- po::notify(vm);
+ po::store(po::parse_command_line(argc, argv, *this->Opt_desc_cmd), Variables_map);
+ po::notify(Variables_map);
- if ( vm.count("help") )
+ if ( Variables_map.count("help") )
{
Log->print_usage(Opt_desc_cmd);
return 1;
}
- else if ( vm.count("version") )
+ else if ( Variables_map.count("version") )
{
Log->print_version();
return 1;
}
// Create a service object if all needed options are set on the command line
- if ( vm.count("protocol") && vm.count("host") && vm.count("login") && vm.count("password") )
+ if ( Variables_map.count("protocol") && Variables_map.count("host") && Variables_map.count("login") && Variables_map.count("password") )
{
// Get the cmd parameter values for protocol host login and password
- string protocol = vm["protocol"].as<string>();
- string host = vm["host"].as<string>();
- string login = vm["login"].as<string>();
- string password = vm["password"].as<string>();
+ string protocol = Variables_map["protocol"].as<string>();
+ string host = Variables_map["host"].as<string>();
+ string login = Variables_map["login"].as<string>();
+ string password = Variables_map["password"].as<string>();
//TODO: convert protocol option to lowercase
else
return 1;
}
- else if ( vm.count("protocol") || vm.count("host") || vm.count("login") || vm.count("password") )
+ else if ( Variables_map.count("protocol") || Variables_map.count("host") || Variables_map.count("login") || Variables_map.count("password") )
{
Log->print_missing_cmd_service_option();
Log->print_usage(Opt_desc_cmd);
return 1;
}
- if ( vm.count("config") )
+ if ( Variables_map.count("config") )
{
- fs::path full_config_path = fs::system_complete(fs::path(vm["config"].as<string>()));
+ fs::path full_config_path = fs::system_complete(fs::path(Variables_map["config"].as<string>()));
Config_path = full_config_path.string();
if ( !fs::exists(full_config_path) || !fs::is_directory(full_config_path) )
{
po::store(parsed_service_options,vm);
po::notify(vm);
- if(vm.count("service.protocol") && vm.count("service.host") && vm.count("service.login") && vm.count("service.password"))
+ if(vm.count("protocol") && vm.count("host") && vm.count("login") && vm.count("password"))
{
// create the corresponding service
- string protocol = vm["service.protocol"].as<string>();
- string host = vm["service.host"].as<string>();
- string login = vm["service.login"].as<string>();
- string password = vm["service.password"].as<string>();
+ string protocol = vm["protocol"].as<string>();
+ string host = vm["host"].as<string>();
+ string login = vm["login"].as<string>();
+ string password = vm["password"].as<string>();
// TODO: convert protocol to lowercase
//protocol = tolower(protocol.c_str());
{
try
{
- po::variables_map vm;
po::parsed_options parsed_main_options = po::parse_config_file(main_config_file,*this->Opt_desc_conf_main,true);
- po::store(parsed_main_options,vm);
- po::notify(vm);
+ po::store(parsed_main_options,Variables_map);
+ po::notify(Variables_map);
- if(vm.count("main.daemon_mode") && vm.count("main.logfile") && vm.count("main.loglevel") && vm.count("main.syslog"))
+ if(Variables_map.count("daemon_mode") && Variables_map.count("logfile") && Variables_map.count("loglevel") && Variables_map.count("syslog"))
{
- Daemon_mode = vm["main.daemon_mode"].as<bool>();
- Logfile = vm["main.logfile"].as<string>();
- Loglevel = vm["main.loglevel"].as<int>();
- Syslog = vm["main.syslog"].as<bool>();
+ Daemon_mode = Variables_map["daemon_mode"].as<bool>();
+ Logfile = Variables_map["logfile"].as<string>();
+ Loglevel = Variables_map["loglevel"].as<int>();
+ Syslog = Variables_map["syslog"].as<bool>();
}
}
catch ( po::unknown_option e )
{
return Opt_desc_conf_service;
}
+
+/**
+ * Getter for member Loglevel.
+ * @return Member Loglevel.
+ */
+int Config::get_loglevel()
+{
+ return Loglevel;
+}