summaryrefslogtreecommitdiff
path: root/apps/app_dial.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/app_dial.c')
-rw-r--r--apps/app_dial.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index 6d2437ad3..ce73e9a19 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -1285,7 +1285,10 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
}
}
peer = c;
- ast_channel_publish_dial(in, peer, NULL, "ANSWER");
+ /* Inform everyone else that they've been canceled.
+ * The dial end event for the peer will be sent out after
+ * other Dial options have been handled.
+ */
publish_dial_end_event(in, out_chans, peer, "CANCEL");
ast_copy_flags64(peerflags, o,
OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER |
@@ -2739,6 +2742,7 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
}
if ( (ast_test_flag64(&opts, OPT_PRIVACY) || ast_test_flag64(&opts, OPT_SCREENING)) && pa.privdb_val == AST_PRIVACY_UNKNOWN) {
if (do_privacy(chan, peer, &opts, opt_args, &pa)) {
+ ast_channel_publish_dial(chan, peer, NULL, pa.status);
res = 0;
goto out;
}
@@ -2836,6 +2840,7 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
if (continue_exec)
*continue_exec = 1;
res = 0;
+ ast_channel_publish_dial(chan, peer, NULL, "ANSWER");
goto done;
}
@@ -2848,7 +2853,6 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
ast_channel_exten_set(peer, ast_channel_exten(chan));
ast_channel_unlock(peer);
ast_channel_unlock(chan);
-
ast_replace_subargument_delimiter(opt_args[OPT_ARG_CALLEE_MACRO]);
res = ast_app_exec_macro(chan, peer, opt_args[OPT_ARG_CALLEE_MACRO]);
@@ -2889,6 +2893,7 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
ast_set_flag64(peerflags, OPT_GO_ON);
}
}
+ ast_channel_publish_dial(chan, peer, NULL, macro_result);
} else {
ast_channel_unlock(peer);
}
@@ -2971,6 +2976,7 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
ast_set_flag64(peerflags, OPT_GO_ON);
}
}
+ ast_channel_publish_dial(chan, peer, NULL, gosub_result);
} else {
ast_channel_unlock(peer);
ast_channel_unlock(chan);
@@ -2978,6 +2984,12 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
}
if (!res) {
+
+ /* None of the Dial options changed our status; inform
+ * everyone that this channel answered
+ */
+ ast_channel_publish_dial(chan, peer, NULL, "ANSWER");
+
if (!ast_tvzero(calldurationlimit)) {
struct timeval whentohangup = ast_tvadd(ast_tvnow(), calldurationlimit);
ast_channel_lock(peer);