]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Unable to pickup DAHDI/PRI call because call state is reported as DIALING.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 10 May 2011 23:41:08 +0000 (23:41 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 10 May 2011 23:41:08 +0000 (23:41 +0000)
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

channels/sig_pri.c
channels/sig_ss7.c

index e8e8addecdc0ca8cb8b63eb68f50d44615b3052a..7ff77edcd833aeb6f80ddffb4ba84e25db206fcd 100644 (file)
@@ -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;
index 68ebc5a10a3521c3aa7e2ae266ccaa41767ea1c6..3677213665b3df919d915f2817ec884c2a23e69f 100644 (file)
@@ -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);