followme: initialize all config items on reload

Some configuration directives were not initialized on reload, and hence
were not reset to default if they were removed from followme.conf.

ASTERISK-26288 #close

Change-Id: Ief829e16374ad1e0ecfd63e6ee4923b5a1d1c150
This commit is contained in:
Tzafrir Cohen
2016-08-11 20:10:44 +03:00
committed by Joshua Colp
parent 6d56b87642
commit 206d4f57dc

View File

@@ -311,8 +311,16 @@ static struct call_followme *alloc_profile(const char *fmname)
ast_mutex_init(&f->lock); ast_mutex_init(&f->lock);
ast_copy_string(f->name, fmname, sizeof(f->name)); ast_copy_string(f->name, fmname, sizeof(f->name));
f->moh[0] = '\0'; AST_LIST_HEAD_INIT_NOLOCK(&f->numbers);
AST_LIST_HEAD_INIT_NOLOCK(&f->blnumbers);
AST_LIST_HEAD_INIT_NOLOCK(&f->wlnumbers);
return f;
}
static void init_profile(struct call_followme *f, int activate)
{
f->context[0] = '\0'; f->context[0] = '\0';
ast_copy_string(f->moh, defaultmoh, sizeof(f->moh));
ast_copy_string(f->takecall, takecall, sizeof(f->takecall)); ast_copy_string(f->takecall, takecall, sizeof(f->takecall));
ast_copy_string(f->nextindp, nextindp, sizeof(f->nextindp)); ast_copy_string(f->nextindp, nextindp, sizeof(f->nextindp));
ast_copy_string(f->callfromprompt, callfromprompt, sizeof(f->callfromprompt)); ast_copy_string(f->callfromprompt, callfromprompt, sizeof(f->callfromprompt));
@@ -321,16 +329,9 @@ static struct call_followme *alloc_profile(const char *fmname)
ast_copy_string(f->plsholdprompt, plsholdprompt, sizeof(f->plsholdprompt)); ast_copy_string(f->plsholdprompt, plsholdprompt, sizeof(f->plsholdprompt));
ast_copy_string(f->statusprompt, statusprompt, sizeof(f->statusprompt)); ast_copy_string(f->statusprompt, statusprompt, sizeof(f->statusprompt));
ast_copy_string(f->sorryprompt, sorryprompt, sizeof(f->sorryprompt)); ast_copy_string(f->sorryprompt, sorryprompt, sizeof(f->sorryprompt));
AST_LIST_HEAD_INIT_NOLOCK(&f->numbers); if (activate) {
AST_LIST_HEAD_INIT_NOLOCK(&f->blnumbers); f->active = 1;
AST_LIST_HEAD_INIT_NOLOCK(&f->wlnumbers); }
return f;
}
static void init_profile(struct call_followme *f)
{
f->active = 1;
ast_copy_string(f->moh, defaultmoh, sizeof(f->moh));
} }
@@ -503,7 +504,7 @@ static int reload_followme(int reload)
if (!new) if (!new)
ast_mutex_lock(&f->lock); ast_mutex_lock(&f->lock);
/* Re-initialize the profile */ /* Re-initialize the profile */
init_profile(f); init_profile(f, 1);
free_numbers(f); free_numbers(f);
var = ast_variable_browse(cfg, cat); var = ast_variable_browse(cfg, cat);
while (var) { while (var) {
@@ -1216,6 +1217,7 @@ static struct call_followme *find_realtime(const char *name)
ast_free(str); ast_free(str);
return NULL; return NULL;
} }
init_profile(new_follower, 0);
for (v = var; v; v = v->next) { for (v = var; v; v = v->next) {
if (!strcasecmp(v->name, "active")) { if (!strcasecmp(v->name, "active")) {