From: Richard Mudgett Date: Tue, 10 May 2011 23:41:08 +0000 (+0000) Subject: Unable to pickup DAHDI/PRI call because call state is reported as DIALING. X-Git-Tag: 1.8.5-rc1~11^2~125 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ec0f72506bbfeaf552096b9513b5dc79dd2aae4;p=thirdparty%2Fasterisk.git Unable to pickup DAHDI/PRI call because call state is reported as DIALING. The channel state is not updated to RINGING when an ALERTING message is received. Regression caused when sig_pri.c (also sig_ss7.c) extracted from chan_dahdi.c. * Added missing channel state update to RINGING when the AST_CONTROL_RINGING frame is queued for ISDN and SS7. (closes issue #19257) Reported by: alecdavis Patches: issue19257_v1.8_v2.patch uploaded by rmudgett (license 664) Tested by: alecdavis, rmudgett git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@318499 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/sig_pri.c b/channels/sig_pri.c index e8e8addecd..7ff77edcd8 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -5374,6 +5374,11 @@ static void *pri_dchannel(void *vpri) e->ringing.subcmds, e->ringing.call); sig_pri_cc_generic_check(pri, chanpos, AST_CC_CCNR); sig_pri_set_echocanceller(pri->pvts[chanpos], 1); + sig_pri_lock_owner(pri, chanpos); + if (pri->pvts[chanpos]->owner) { + ast_setstate(pri->pvts[chanpos]->owner, AST_STATE_RINGING); + ast_channel_unlock(pri->pvts[chanpos]->owner); + } pri_queue_control(pri, chanpos, AST_CONTROL_RINGING); if (pri->pvts[chanpos]->call_level < SIG_PRI_CALL_LEVEL_ALERTING) { pri->pvts[chanpos]->call_level = SIG_PRI_CALL_LEVEL_ALERTING; diff --git a/channels/sig_ss7.c b/channels/sig_ss7.c index 68ebc5a10a..3677213665 100644 --- a/channels/sig_ss7.c +++ b/channels/sig_ss7.c @@ -687,6 +687,11 @@ void *ss7_linkset(void *data) if (p->call_level < SIG_SS7_CALL_LEVEL_ALERTING) { p->call_level = SIG_SS7_CALL_LEVEL_ALERTING; } + sig_ss7_lock_owner(linkset, chanpos); + if (p->owner) { + ast_setstate(p->owner, AST_STATE_RINGING); + ast_channel_unlock(p->owner); + } sig_ss7_queue_control(linkset, chanpos, AST_CONTROL_RINGING); break; case CPG_EVENT_PROGRESS: @@ -938,6 +943,11 @@ void *ss7_linkset(void *data) if (p->call_level < SIG_SS7_CALL_LEVEL_ALERTING) { p->call_level = SIG_SS7_CALL_LEVEL_ALERTING; } + sig_ss7_lock_owner(linkset, chanpos); + if (p->owner) { + ast_setstate(p->owner, AST_STATE_RINGING); + ast_channel_unlock(p->owner); + } sig_ss7_queue_control(linkset, chanpos, AST_CONTROL_RINGING); } sig_ss7_unlock_private(p);