summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMichiel van Baak <michiel@vanbaak.info>2008-04-24 22:16:48 +0000
committerMichiel van Baak <michiel@vanbaak.info>2008-04-24 22:16:48 +0000
commit08e674bce0e7ce47068f495ff437549d7e20496c (patch)
tree2c247ba7f500b9bdc0fa9867d833b6af194d7139 /apps
parenta50b48dacd3754b09aa228ba137af5c2e324e8ce (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.c3
-rw-r--r--apps/app_dial.c5
-rw-r--r--apps/app_disa.c2
-rw-r--r--apps/app_externalivr.c3
-rw-r--r--apps/app_followme.c3
-rw-r--r--apps/app_queue.c2
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;