From ff2ba012d288fbb8c351b4fa88f39ccd7452c31e Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Thu, 27 May 2004 22:35:47 +0000 Subject: [PATCH] Merge connor's exit context patch (#1737) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3098 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_voicemail.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index f5a2b0e2e8..82621fd24c 100755 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -110,6 +110,7 @@ struct ast_vm_user { char zonetag[80]; char callback[80]; char dialout[80]; + char exit[80]; int attach; int alloced; int saycid; @@ -231,6 +232,7 @@ static int saycidinfo; static int hearenv; static char dialcontext[80]; static char callcontext[80]; +static char exitcontext[80]; static char cidinternalcontexts[MAX_NUM_CID_CONTEXTS][64]; @@ -262,6 +264,8 @@ static void populate_defaults(struct ast_vm_user *vmu) strncpy(vmu->callback, callcontext, sizeof(vmu->callback) -1); if (dialcontext) strncpy(vmu->dialout, dialcontext, sizeof(vmu->dialout) -1); + if (exitcontext) + strncpy(vmu->exit, exitcontext, sizeof(vmu->exit) -1); } static void apply_options(struct ast_vm_user *vmu, char *options) @@ -307,6 +311,8 @@ static void apply_options(struct ast_vm_user *vmu, char *options) strncpy(vmu->callback, value, sizeof(vmu->callback) -1); } else if (!strcasecmp(var, "dialout")) { strncpy(vmu->dialout, value, sizeof(vmu->dialout) -1); + } else if (!strcasecmp(var, "exitcontext")) { + strncpy(vmu->exit, value, sizeof(vmu->exit) -1); } } @@ -1583,8 +1589,11 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int other than the operator -- an automated attendant or mailbox login for example */ if (res == '*') { strncpy(chan->exten, "a", sizeof(chan->exten) - 1); - if (strlen(chan->macrocontext)) + if (strlen(vmu->exit)) { + strncpy(chan->context, vmu->exit, sizeof(chan->context) - 1); + } else if (strlen(chan->macrocontext)) { strncpy(chan->context, chan->macrocontext, sizeof(chan->context) - 1); + } chan->priority = 0; free_user(vmu); return 0; @@ -1593,8 +1602,11 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int if (res == '0') { transfer: strncpy(chan->exten, "o", sizeof(chan->exten) - 1); - if (strlen(chan->macrocontext)) + if (strlen(vmu->exit)) { + strncpy(chan->context, vmu->exit, sizeof(chan->context) - 1); + } else if (strlen(chan->macrocontext)) { strncpy(chan->context, chan->macrocontext, sizeof(chan->context) - 1); + } chan->priority = 0; free_user(vmu); return 0; @@ -3600,6 +3612,7 @@ static int load_config(void) char *s,*q,*stringp; char *dialoutcxt = NULL; char *callbackcxt = NULL; + char *exitcxt = NULL; int x; @@ -3764,6 +3777,14 @@ static int load_config(void) } else { callcontext[0] = '\0'; } + + if ((exitcxt = ast_variable_retrieve(cfg, "general", "exitcontext"))) { + strncpy(exitcontext, exitcxt, sizeof(exitcontext) - 1); + ast_log(LOG_DEBUG, "found operator context: %s\n", exitcontext); + } else { + exitcontext[0] = '\0'; + } + #ifdef USEMYSQLVM if (!(s=ast_variable_retrieve(cfg, "general", "dbuser"))) { strcpy(dbuser, "test");