diff options
-rw-r--r-- | cdr/cdr_manager.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/cdr/cdr_manager.c b/cdr/cdr_manager.c index 028b4a8c9..17b4f030d 100644 --- a/cdr/cdr_manager.c +++ b/cdr/cdr_manager.c @@ -52,12 +52,15 @@ static char *name = "cdr_manager"; static int enablecdr = 0; struct ast_str *customfields; +static int manager_log(struct ast_cdr *cdr); + static int load_config(int reload) { char *cat = NULL; struct ast_config *cfg; struct ast_variable *v; struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 }; + int newenablecdr = 0; cfg = ast_config_load(CONF_FILE, config_flags); if (cfg == CONFIG_STATUS_FILEUNCHANGED) @@ -71,6 +74,8 @@ static int load_config(int reload) if (!cfg) { /* Standard configuration */ ast_log(LOG_WARNING, "Failed to load configuration file. Module not activated.\n"); + if (enablecdr) + ast_cdr_unregister(name); enablecdr = 0; return 0; } @@ -79,9 +84,8 @@ static int load_config(int reload) if (!strcasecmp(cat, "general")) { v = ast_variable_browse(cfg, cat); while (v) { - if (!strcasecmp(v->name, "enabled")) { - enablecdr = ast_true(v->value); - } + if (!strcasecmp(v->name, "enabled")) + newenablecdr = ast_true(v->value); v = v->next; } @@ -105,6 +109,12 @@ static int load_config(int reload) } ast_config_destroy(cfg); + + if (enablecdr && !newenablecdr) + ast_cdr_unregister(name); + else if (!enablecdr && newenablecdr) + ast_cdr_register(name, "Asterisk Manager Interface CDR Backend", manager_log); + return 1; } @@ -178,18 +188,11 @@ static int unload_module(void) static int load_module(void) { - int res; - /* Configuration file */ if (!load_config(0)) return AST_MODULE_LOAD_DECLINE; - - res = ast_cdr_register(name, "Asterisk Manager Interface CDR Backend", manager_log); - if (res) { - ast_log(LOG_ERROR, "Unable to register Asterisk Call Manager CDR handling\n"); - } - - return res; + + return AST_MODULE_LOAD_SUCCESS; } static int reload(void) |