diff options
author | Jason Parker <jparker@digium.com> | 2013-05-22 18:11:57 +0000 |
---|---|---|
committer | Jason Parker <jparker@digium.com> | 2013-05-22 18:11:57 +0000 |
commit | b6aac885be2d1afbaf8524a81f1ef953213958d9 (patch) | |
tree | 0db5fdca05e0dabce72f6e5585f96e297f52dca7 /apps/app_dial.c | |
parent | 054efbc45a0f238b6d97bbb6bef7c5afbc93a18c (diff) |
Add dial events to app_queue and app_followme.
Also fixes an issue in app_dial, where the channels were swapped on dial events.
(closes issue ASTERISK-21551)
(closes issue ASTERISK-21550)
Review: https://reviewboard.asterisk.org/r/2549/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@389492 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_dial.c')
-rw-r--r-- | apps/app_dial.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c index 35c9ad8bf..b6f1ce872 100644 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -66,8 +66,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/ccss.h" #include "asterisk/indications.h" #include "asterisk/framehook.h" -#include "asterisk/bridging.h" +#include "asterisk/dial.h" #include "asterisk/stasis_channels.h" +#include "asterisk/bridging.h" /*** DOCUMENTATION <application name="Dial" language="en_US"> @@ -1014,9 +1015,15 @@ static void do_forward(struct chanlist *o, struct cause_args *num, num->nochan++; } else { ast_channel_lock_both(c, in); - ast_channel_publish_dial(c, in, stuff, NULL); + ast_channel_publish_dial(in, c, stuff, NULL); ast_channel_unlock(in); ast_channel_unlock(c); + + ast_channel_lock_both(original, in); + ast_channel_publish_dial(in, original, NULL, "CANCEL"); + ast_channel_unlock(in); + ast_channel_unlock(original); + /* Hangup the original channel now, in case we needed it */ ast_hangup(original); } @@ -1035,22 +1042,6 @@ struct privacy_args { char status[256]; }; -static const char *hangup_cause_to_dial_status(int hangup_cause) -{ - switch(hangup_cause) { - case AST_CAUSE_BUSY: - return "BUSY"; - case AST_CAUSE_CONGESTION: - return "CONGESTION"; - case AST_CAUSE_NO_ROUTE_DESTINATION: - case AST_CAUSE_UNREGISTERED: - return "CHANUNAVAIL"; - case AST_CAUSE_NO_ANSWER: - default: - return "NOANSWER"; - } -} - static void publish_dial_end_event(struct ast_channel *in, struct dial_head *out_chans, struct ast_channel *exception, const char *status) { struct chanlist *outgoing; @@ -1266,7 +1257,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, #ifdef HAVE_EPOLL ast_poll_channel_del(in, c); #endif - ast_channel_publish_dial(in, c, NULL, hangup_cause_to_dial_status(ast_channel_hangupcause(c))); + ast_channel_publish_dial(in, c, NULL, ast_hangup_cause_to_dial_status(ast_channel_hangupcause(c))); ast_hangup(c); c = o->chan = NULL; ast_clear_flag64(o, DIAL_STILLGOING); @@ -1334,7 +1325,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, case AST_CONTROL_BUSY: ast_verb(3, "%s is busy\n", ast_channel_name(c)); ast_channel_hangupcause_set(in, ast_channel_hangupcause(c)); - ast_channel_publish_dial(in, c, NULL, hangup_cause_to_dial_status(ast_channel_hangupcause(c))); + ast_channel_publish_dial(in, c, NULL, ast_hangup_cause_to_dial_status(ast_channel_hangupcause(c))); ast_hangup(c); c = o->chan = NULL; ast_clear_flag64(o, DIAL_STILLGOING); @@ -1343,7 +1334,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, case AST_CONTROL_CONGESTION: ast_verb(3, "%s is circuit-busy\n", ast_channel_name(c)); ast_channel_hangupcause_set(in, ast_channel_hangupcause(c)); - ast_channel_publish_dial(in, c, NULL, hangup_cause_to_dial_status(ast_channel_hangupcause(c))); + ast_channel_publish_dial(in, c, NULL, ast_hangup_cause_to_dial_status(ast_channel_hangupcause(c))); ast_hangup(c); c = o->chan = NULL; ast_clear_flag64(o, DIAL_STILLGOING); |