24 #include <baseapp/init_options.h>
25 #include <baseapp/run.h>
26 #include <utils/system/argparser.h>
52 InitOptions::InitOptions(
const char *basename)
54 __basename = strdup(basename);
55 __default_plugin = strdup(
"default");
56 __has_net_tcp_port =
false;
58 __has_loggers =
false;
60 __log_level = Logger::LL_DEBUG;
61 __has_net_service_name =
false;
62 __net_service_name = NULL;
63 __has_username =
false;
65 __has_groupname =
false;
67 __default_config = NULL;
70 __daemon_pid_file = NULL;
71 __daemonize_kill =
false;
72 __daemonize_status =
false;
75 __default_signal_handlers =
true;
76 __init_plugin_cache =
true;
77 __has_load_plugin_list =
false;
78 __load_plugin_list = NULL;
79 __plugin_module_flags = Module::MODULE_FLAGS_DEFAULT;
88 __basename = strdup(options.__basename);
89 __default_plugin = strdup(options.__default_plugin);
91 __has_net_tcp_port = options.__has_net_tcp_port;
92 if (__has_net_tcp_port) {
93 __net_tcp_port = options.__net_tcp_port;
96 __has_loggers = options.__has_loggers;
98 __loggers = strdup(options.__loggers);
101 __log_level = options.__log_level;
103 __net_service_name = NULL;
104 __has_net_service_name = options.__has_net_service_name;
105 if (__has_net_service_name) {
106 __net_service_name = strdup(options.__net_service_name);
110 __has_username = options.__has_username;
111 if (__has_username) {
112 __username = strdup(options.__username);
115 __has_groupname = options.__has_groupname;
116 if (__has_groupname) {
117 __groupname = strdup(options.__groupname);
120 __default_config = NULL;
121 if (options.__default_config) {
122 __default_config = strdup(options.__default_config);
124 __host_config = NULL;
125 if (options.__host_config) {
126 __host_config = strdup(options.__host_config);
128 __daemonize = options.__daemonize;
129 __daemon_pid_file = NULL;
130 if (__daemonize && options.__daemon_pid_file) {
131 __daemon_pid_file = strdup(options.__daemon_pid_file);
133 __daemonize_kill = options.__daemonize_kill;
134 __daemonize_status = options.__daemonize_status;
135 __show_help = options.__show_help;
136 __bb_cleanup = options.__bb_cleanup;
137 __default_signal_handlers = options.__default_signal_handlers;
138 __init_plugin_cache = options.__init_plugin_cache;
139 __load_plugin_list = NULL;
140 __has_load_plugin_list = options.__has_load_plugin_list;
141 if (__has_load_plugin_list) {
142 __load_plugin_list = strdup(options.__load_plugin_list);
145 __plugin_module_flags = options.__plugin_module_flags;
154 InitOptions::InitOptions(
int argc,
char **argv)
157 option long_options[] = {
158 {
"net-service-name", 1, 0, 0},
162 fawkes::runtime::argument_parser =
164 "hCc:d:q::l:L:p:P:u:g:D::ks",
170 __default_plugin = strdup(
"default");
172 __has_net_tcp_port = argp->
has_arg(
"P");
173 if (__has_net_tcp_port) {
176 __has_loggers = argp->
has_arg(
"L");
178 __loggers = strdup(argp->
arg(
"L"));
182 __log_level = Logger::LL_DEBUG;
184 __log_level = Logger::LL_INFO;
185 if ( (tmp = argp->
arg(
"q")) != NULL ) {
186 for (
unsigned int i = 0; i < strlen(tmp); ++i) {
187 if ( tmp[i] ==
'q' ) {
188 switch (__log_level) {
189 case Logger::LL_INFO: __log_level = Logger::LL_WARN;
break;
190 case Logger::LL_WARN: __log_level = Logger::LL_ERROR;
break;
191 case Logger::LL_ERROR: __log_level = Logger::LL_NONE;
break;
197 }
else if ( (tmp = argp->
arg(
"l")) != NULL ) {
198 if ( strcmp(tmp,
"debug") == 0 ) {
199 __log_level = Logger::LL_DEBUG;
200 }
else if ( strcmp(tmp,
"info") == 0 ) {
201 __log_level = Logger::LL_INFO;
202 }
else if ( strcmp(tmp,
"warn") == 0 ) {
203 __log_level = Logger::LL_WARN;
204 }
else if ( strcmp(tmp,
"error") == 0 ) {
205 __log_level = Logger::LL_ERROR;
206 }
else if ( strcmp(tmp,
"none") == 0 ) {
207 __log_level = Logger::LL_NONE;
211 __has_net_service_name = argp->
has_arg(
"net-service-name");
212 if (__has_net_service_name) {
213 __net_service_name = strdup(argp->
arg(
"net-service-name"));
215 __net_service_name = NULL;
218 __has_username = argp->
has_arg(
"u");
219 if (__has_username) {
220 __username = strdup(argp->
arg(
"u"));
225 __has_groupname = argp->
has_arg(
"u");
226 if (__has_groupname) {
227 __groupname = strdup(argp->
arg(
"u"));
233 __default_config = NULL;
234 __host_config = NULL;
235 if (argp->
arg(
"d")) {
236 __default_config = strdup(argp->
arg(
"d"));
238 if (argp->
arg(
"c")) {
239 __host_config = strdup(argp->
arg(
"c"));
242 __daemonize = argp->
has_arg(
"D");
243 __daemonize_kill = __daemonize && argp->
has_arg(
"k");
244 __daemonize_status = __daemonize && argp->
has_arg(
"s");
245 __daemon_pid_file = NULL;
246 if (__daemonize && argp->
arg(
"D")) {
247 __daemon_pid_file = strdup(argp->
arg(
"D"));
249 __daemon_pid_file = NULL;
251 __show_help = argp->
has_arg(
"h");
252 __bb_cleanup = argp->
has_arg(
"C");
254 __has_load_plugin_list = argp->
has_arg(
"p");
255 if (__has_load_plugin_list) {
256 __load_plugin_list = strdup(argp->
arg(
"p"));
258 __load_plugin_list = NULL;
261 __init_plugin_cache =
true;
262 __plugin_module_flags = Module::MODULE_FLAGS_DEFAULT;
263 __default_signal_handlers =
true;
268 InitOptions::~InitOptions()
271 free(__default_plugin);
272 if (__has_loggers) free(__loggers);
273 if (__has_net_service_name) free(__net_service_name);
274 if (__has_username) free(__username);
275 if (__has_groupname) free(__groupname);
276 if (__has_load_plugin_list) free(__load_plugin_list);
277 if (__default_config) free(__default_config);
278 if (__host_config) free(__host_config);
279 if (__daemon_pid_file) free(__daemon_pid_file);
291 __basename = strdup(options.__basename);
292 free(__default_plugin);
293 __default_plugin = strdup(options.__default_plugin);
295 __has_net_tcp_port = options.__has_net_tcp_port;
296 if (__has_net_tcp_port) {
297 __net_tcp_port = options.__net_tcp_port;
300 __has_loggers =
false;
304 __has_loggers = options.__has_loggers;
306 __loggers = strdup(options.__loggers);
309 __log_level = options.__log_level;
311 if (__has_net_service_name) {
312 __has_net_service_name =
false;
313 free(__net_service_name);
314 __net_service_name = NULL;
316 __has_net_service_name = options.__has_net_service_name;
317 if (__has_net_service_name) {
318 __net_service_name = strdup(options.__net_service_name);
321 if (__has_username) {
322 __has_username =
false;
326 __has_username = options.__has_username;
327 if (__has_username) {
328 __username = strdup(options.__username);
331 if (__has_groupname) {
332 __has_groupname =
false;
337 __has_groupname = options.__has_groupname;
338 if (__has_groupname) {
339 __groupname = strdup(options.__groupname);
342 if (__default_config) {
343 free(__default_config);
344 __default_config = NULL;
346 if (options.__default_config) {
347 __default_config = strdup(options.__default_config);
352 __host_config = NULL;
354 if (options.__host_config) {
355 __host_config = strdup(options.__host_config);
358 __daemonize = options.__daemonize;
359 if (__daemon_pid_file) {
360 free(__daemon_pid_file);
361 __daemon_pid_file = NULL;
363 if (__daemonize && options.__daemon_pid_file) {
364 __daemon_pid_file = strdup(options.__daemon_pid_file);
366 __daemonize_kill = options.__daemonize_kill;
367 __daemonize_status = options.__daemonize_status;
368 __show_help = options.__show_help;
369 __bb_cleanup = options.__bb_cleanup;
371 if (__load_plugin_list) {
372 free(__load_plugin_list);
373 __load_plugin_list = NULL;
375 __has_load_plugin_list = options.__has_load_plugin_list;
376 if (__has_load_plugin_list) {
377 __load_plugin_list = strdup(options.__load_plugin_list);
380 __init_plugin_cache = options.__init_plugin_cache;
381 __plugin_module_flags = options.__plugin_module_flags;
382 __default_signal_handlers = options.__default_signal_handlers;
393 InitOptions::default_plugin(
const char *default_plugin_)
395 free(__default_plugin);
396 __default_plugin = strdup(default_plugin_);
406 InitOptions::net_tcp_port(
unsigned short int port)
408 __has_net_tcp_port =
true;
409 __net_tcp_port = port;
418 InitOptions::net_service_name(
const char *service_name)
420 if (__has_net_service_name) {
421 __has_net_service_name =
false;
422 free(__net_service_name);
425 __has_net_service_name =
true;
426 __net_service_name = strdup(service_name);
439 InitOptions::daemonize(
bool daemonize,
bool kill,
bool status,
440 const char *pid_file)
442 __daemonize = daemonize;
443 __daemonize_kill = daemonize && kill;
444 __daemonize_status = daemonize && status;
445 if (daemonize && pid_file) {
446 __daemon_pid_file = strdup(pid_file);
456 InitOptions::loggers(
const char *loggers)
459 __has_loggers =
false;
463 __has_loggers =
true;
464 __loggers = strdup(loggers);
476 __log_level = log_level;
485 InitOptions::show_help(
bool show_help)
487 __show_help = show_help;
497 InitOptions::init_plugin_cache(
bool init_cache)
499 __init_plugin_cache = init_cache;
508 InitOptions::user(
const char *username)
510 if (__has_username) {
511 __has_username =
false;
515 __has_username =
true;
516 __username = strdup(username);
527 InitOptions::load_plugins(
const char *plugin_list)
529 if (__has_load_plugin_list) {
530 __has_load_plugin_list =
false;
531 free(__load_plugin_list);
532 __load_plugin_list = NULL;
535 __has_load_plugin_list =
true;
536 __load_plugin_list = strdup(plugin_list);
547 InitOptions::group(
const char *groupname)
549 if (__has_groupname) {
550 __has_groupname =
false;
554 __has_groupname =
true;
555 __groupname = strdup(groupname);
565 InitOptions::default_config(
const char *default_config)
567 if (__default_config) {
568 free(__default_config);
569 __default_config = NULL;
571 if (default_config) {
572 __default_config = strdup(default_config);
582 InitOptions::host_config(
const char *host_config)
586 __host_config = NULL;
589 __host_config = strdup(host_config);
599 InitOptions::bb_cleanup(
bool bb_cleanup)
601 __bb_cleanup = bb_cleanup;
613 __plugin_module_flags = flags;
625 InitOptions::default_signal_handlers(
bool enable)
627 __default_signal_handlers = enable;
636 InitOptions::basename()
const
650 InitOptions::default_plugin()
const
652 return __default_plugin;
660 InitOptions::has_net_tcp_port()
const
662 return __has_net_tcp_port;
669 InitOptions::net_tcp_port()
const
671 return __net_tcp_port;
678 InitOptions::has_net_service_name()
const
680 return __has_net_service_name;
687 InitOptions::net_service_name()
const
689 return __net_service_name;
696 InitOptions::has_load_plugin_list()
const
698 return __has_load_plugin_list;
705 InitOptions::load_plugin_list()
const
707 return __load_plugin_list;
714 InitOptions::has_loggers()
const
716 return __has_loggers;
723 InitOptions::loggers()
const
732 InitOptions::log_level()
const
741 InitOptions::show_help()
const
750 InitOptions::bb_cleanup()
const
760 InitOptions::init_plugin_cache()
const
762 return __init_plugin_cache;
770 InitOptions::default_signal_handlers()
const
772 return __default_signal_handlers;
779 InitOptions::daemonize()
const
788 InitOptions::daemonize_kill()
const
790 return __daemonize_kill;
797 InitOptions::daemonize_status()
const
799 return __daemonize_status;
807 InitOptions::daemon_pid_file()
const
809 return __daemon_pid_file;
817 InitOptions::has_username()
const
819 return __has_username;
827 InitOptions::username()
const
836 InitOptions::has_groupname()
const
838 return __has_groupname;
845 InitOptions::groupname()
const
855 InitOptions::default_config()
const
857 return __default_config;
865 InitOptions::host_config()
const
867 return __host_config;
875 InitOptions::plugin_module_flags()
const
877 return __plugin_module_flags;
const char * arg(const char *argn)
Get argument value.
Fawkes library namespace.
Parse command line arguments.
ModuleFlags
Flags for the loading process.
long int parse_int(const char *argn)
Parse argument as integer.
Initialization options class.
const char * program_name() const
Get name of program.
bool has_arg(const char *argn)
Check if argument has been supplied.