mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-22 20:56:39 +00:00
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
This commit is contained in:
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user