summaryrefslogtreecommitdiff
path: root/apps/app_dial.c
diff options
context:
space:
mode:
authorMatthew Jordan <mjordan@digium.com>2014-08-18 00:57:01 +0000
committerMatthew Jordan <mjordan@digium.com>2014-08-18 00:57:01 +0000
commitba5d5da60b80b1d639e06d02d7692692281d6063 (patch)
tree4ac71b2c5a6899dbf352eca2942c194b61c0347a /apps/app_dial.c
parent6525f374dbc2198070accbca1a4594d18cc71f9c (diff)
Improve call forwarding reporting, especially with regards to ARI.
This patch addresses a few issues: 1) The order of Dial events have been changed when performing a call forward. The order has now been altered to 1) Dial begins dialing channel A. 2) When A forwards the call to B, we issue the dial end event to channel A, indicating the dial is being canceled due to a forward to B. 3) When the call to channel B occurs, we then issue a new dial begin to channel B. 2) Call forwards are now reported on the calling channel, not the peer channel. 3) AMI DialEnd events have been altered to display the extension the call is being forwarded to when relevant. 4) You can now get the values of channel variables for channels that are not currently in the Stasis application. This brings the retrieval of channel variables more in line with the rest of channel read operations since they may be performed on channels not in Stasis. ASTERISK-24134 #close Reported by Matt Jordan ASTERISK-24138 #close Reported by Matt Jordan Patches: forward-shenanigans.diff uploaded by Matt Jordan (License #6283) Review: https://reviewboard.asterisk.org/r/3899 ........ Merged revisions 420794 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421310 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_dial.c')
-rw-r--r--apps/app_dial.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index 2faff8478..174ff776e 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -895,6 +895,7 @@ static void do_forward(struct chanlist *o, struct cause_args *num,
tech, stuff, cause);
}
if (!c) {
+ ast_channel_publish_dial(in, original, stuff, "BUSY");
ast_clear_flag64(o, DIAL_STILLGOING);
handle_cause(cause, num);
ast_hangup(original);
@@ -995,16 +996,18 @@ static void do_forward(struct chanlist *o, struct cause_args *num,
if (ast_call(c, stuff, 0)) {
ast_log(LOG_NOTICE, "Forwarding failed to dial '%s/%s'\n",
tech, stuff);
+ ast_channel_publish_dial(in, original, stuff, "CONGESTION");
ast_clear_flag64(o, DIAL_STILLGOING);
ast_hangup(original);
ast_hangup(c);
c = o->chan = NULL;
num->nochan++;
} else {
- ast_channel_publish_dial(in, c, stuff, NULL);
ast_channel_publish_dial_forward(in, original, c, NULL, "CANCEL",
ast_channel_call_forward(original));
+ ast_channel_publish_dial(in, c, stuff, NULL);
+
/* Hangup the original channel now, in case we needed it */
ast_hangup(original);
}