diff options
author | Michiel van Baak <michiel@vanbaak.info> | 2008-04-24 22:16:48 +0000 |
---|---|---|
committer | Michiel van Baak <michiel@vanbaak.info> | 2008-04-24 22:16:48 +0000 |
commit | 08e674bce0e7ce47068f495ff437549d7e20496c (patch) | |
tree | 2c247ba7f500b9bdc0fa9867d833b6af194d7139 /apps | |
parent | a50b48dacd3754b09aa228ba137af5c2e324e8ce (diff) |
Pass the hangup cause all the way to the calling app/channel.
(closes issue #11328)
Reported by: rain
Patches:
20071207__pass_cause_in_hangup_control_frame.diff.txt uploaded by Corydon76 (license 14)
brought up-to-date to trunk by me
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@114637 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_alarmreceiver.c | 3 | ||||
-rw-r--r-- | apps/app_dial.c | 5 | ||||
-rw-r--r-- | apps/app_disa.c | 2 | ||||
-rw-r--r-- | apps/app_externalivr.c | 3 | ||||
-rw-r--r-- | apps/app_followme.c | 3 | ||||
-rw-r--r-- | apps/app_queue.c | 2 |
6 files changed, 17 insertions, 1 deletions
diff --git a/apps/app_alarmreceiver.c b/apps/app_alarmreceiver.c index 45b11aca5..5230681f2 100644 --- a/apps/app_alarmreceiver.c +++ b/apps/app_alarmreceiver.c @@ -252,6 +252,9 @@ static int receive_dtmf_digits(struct ast_channel *chan, char *digit_string, int /* If they hung up, leave */ if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP)) { + if (f->seqno) { + chan->hangupcause = f->seqno; + } ast_frfree(f); res = -1; break; diff --git a/apps/app_dial.c b/apps/app_dial.c index 6d0c6a6e7..e7a81636b 100644 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -788,8 +788,11 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, *to = -1; strcpy(pa->status, "CANCEL"); ast_cdr_noanswer(in->cdr); - if (f) + if (f) { + if (f->seqno) + in->hangupcause = f->seqno; ast_frfree(f); + } return NULL; } diff --git a/apps/app_disa.c b/apps/app_disa.c index 654cb6c8d..16c2675d3 100644 --- a/apps/app_disa.c +++ b/apps/app_disa.c @@ -195,6 +195,8 @@ static int disa_exec(struct ast_channel *chan, void *data) } if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP)) { + if (f->seqno) + chan->hangupcause = f->seqno; ast_frfree(f); ast_clear_flag(chan, AST_FLAG_END_DTMF_ONLY); return -1; diff --git a/apps/app_externalivr.c b/apps/app_externalivr.c index 101237680..6d3e86830 100644 --- a/apps/app_externalivr.c +++ b/apps/app_externalivr.c @@ -560,6 +560,9 @@ static int eivr_comm(struct ast_channel *chan, struct ivr_localuser *u, } else if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_HANGUP)) { ast_chan_log(LOG_NOTICE, chan, "Got AST_CONTROL_HANGUP\n"); send_eivr_event(eivr_events, 'H', NULL, chan); + if (f->seqno) { + chan->hangupcause = f->seqno; + } ast_frfree(f); res = -1; break; diff --git a/apps/app_followme.c b/apps/app_followme.c index eeb9f03dc..0dc9bc081 100644 --- a/apps/app_followme.c +++ b/apps/app_followme.c @@ -607,6 +607,9 @@ static struct ast_channel *wait_for_winner(struct findme_user_listptr *findme_us switch(f->subclass) { case AST_CONTROL_HANGUP: ast_verb(3, "%s received a hangup frame.\n", winner->name); + if (f->seqno) { + winner->hangupcause = f->seqno; + } if (dg == 0) { ast_verb(3, "The calling channel hungup. Need to drop everyone else.\n"); clear_calling_tree(findme_user_list); diff --git a/apps/app_queue.c b/apps/app_queue.c index c955e8f4d..06a5c0ba2 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -2644,6 +2644,8 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte /* Got hung up */ *to = -1; if (f) { + if (f->seqno) + in->hangupcause = f->seqno; ast_frfree(f); } return NULL; |