diff --git a/apps/app_dial.c b/apps/app_dial.c index b7cafd091..370ac711b 100644 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -639,7 +639,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, OPT_CALLEE_PARK | OPT_CALLER_PARK | OPT_CALLEE_MIXMONITOR | OPT_CALLER_MIXMONITOR | DIAL_NOFORWARDHTML); - ast_copy_string(c->dialcontext, "", sizeof(c->dialcontext)); + ast_string_field_set(c, dialcontext, ""); ast_copy_string(c->exten, "", sizeof(c->exten)); } continue; @@ -677,7 +677,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, OPT_CALLEE_PARK | OPT_CALLER_PARK | OPT_CALLEE_MIXMONITOR | OPT_CALLER_MIXMONITOR | DIAL_NOFORWARDHTML); - ast_copy_string(c->dialcontext, "", sizeof(c->dialcontext)); + ast_string_field_set(c, dialcontext, ""); ast_copy_string(c->exten, "", sizeof(c->exten)); if (CAN_EARLY_BRIDGE(peerflags)) /* Setup early bridge if appropriate */ @@ -1513,10 +1513,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags ast_app_group_set_channel(tc, outbound_group); /* Inherit context and extension */ - if (!ast_strlen_zero(chan->macrocontext)) - ast_copy_string(tc->dialcontext, chan->macrocontext, sizeof(tc->dialcontext)); - else - ast_copy_string(tc->dialcontext, chan->context, sizeof(tc->dialcontext)); + ast_string_field_set(tc, dialcontext, ast_strlen_zero(chan->macrocontext) ? chan->context : chan->macrocontext); if (!ast_strlen_zero(chan->macroexten)) ast_copy_string(tc->exten, chan->macroexten, sizeof(tc->exten)); else diff --git a/apps/app_queue.c b/apps/app_queue.c index da58c105d..872dc4955 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -2205,10 +2205,7 @@ static int ring_entry(struct queue_ent *qe, struct callattempt *tmp, int *busies /* Inherit context and extension */ ast_channel_lock(qe->chan); macrocontext = pbx_builtin_getvar_helper(qe->chan, "MACRO_CONTEXT"); - if (!ast_strlen_zero(macrocontext)) - ast_copy_string(tmp->chan->dialcontext, macrocontext, sizeof(tmp->chan->dialcontext)); - else - ast_copy_string(tmp->chan->dialcontext, qe->chan->context, sizeof(tmp->chan->dialcontext)); + ast_string_field_set(tmp->chan, dialcontext, ast_strlen_zero(macrocontext) ? qe->chan->context : macrocontext); macroexten = pbx_builtin_getvar_helper(qe->chan, "MACRO_EXTEN"); if (!ast_strlen_zero(macroexten)) ast_copy_string(tmp->chan->exten, macroexten, sizeof(tmp->chan->exten)); diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h index e7cade462..5923f7cc1 100644 --- a/include/asterisk/channel.h +++ b/include/asterisk/channel.h @@ -469,6 +469,7 @@ struct ast_channel { AST_STRING_FIELD(call_forward); /*!< Where to forward to if asked to dial on this interface */ AST_STRING_FIELD(uniqueid); /*!< Unique Channel Identifier */ AST_STRING_FIELD(parkinglot); /*! Default parking lot, if empty, default parking lot */ + AST_STRING_FIELD(dialcontext); /*!< Dial: Extension context that we were called from */ ); struct timeval whentohangup; /*!< Non-zero, set to actual time when channel is to be hung up */ @@ -530,7 +531,6 @@ struct ast_channel { char exten[AST_MAX_EXTENSION]; /*!< Dialplan: Current extension number */ char macrocontext[AST_MAX_CONTEXT]; /*!< Macro: Current non-macro context. See app_macro.c */ char macroexten[AST_MAX_EXTENSION]; /*!< Macro: Current non-macro extension. See app_macro.c */ - char dialcontext[AST_MAX_CONTEXT]; /*!< Dial: Extension context that we were called from */ char emulate_dtmf_digit; /*!< Digit being emulated */ };