[asterisk-commits] rmudgett: branch 1.4 r283048 - /branches/1.4/channels/chan_dahdi.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Aug 20 10:24:41 CDT 2010


Author: rmudgett
Date: Fri Aug 20 10:24:36 2010
New Revision: 283048

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=283048
Log:
Q931 - Sending PROGRESS after sending ALERTING is a protocol error

The PRI layer in chan_dadhi will check if a PROGRESS message has already
been sent, and not allow sending another (although that is technically
allowed by the Q931 spec), however it does not protect against sending an
ALERTING and then sending a PROGRESS message, which is a violation of the
specification.

Most switches don't seem to care too deeply about this, but some do, and
will disconnect the call when receiving this invalid sequence.

Protocol specification reference: T-REC-Q.931-199805-I page 223, "Figure
A.5/Q.931 -- Overview protocol control (network side) point-point
(sheet 3 of 8)"

(closes issue #17874)
Reported by: nic_bellamy
Patches:
      asterisk-1.4-r282537_no-progress-after-alerting.patch uploaded by nic bellamy (license 299)
      asterisk-1.6.2-r282537_no-progress-after-alerting.patch uploaded by nic bellamy (license 299)
      asterisk-trunk-r282537_no-progress-after-alerting.patch uploaded by nic bellamy (license 299)

Modified:
    branches/1.4/channels/chan_dahdi.c

Modified: branches/1.4/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/channels/chan_dahdi.c?view=diff&rev=283048&r1=283047&r2=283048
==============================================================================
--- branches/1.4/channels/chan_dahdi.c (original)
+++ branches/1.4/channels/chan_dahdi.c Fri Aug 20 10:24:36 2010
@@ -5636,7 +5636,7 @@
 			ast_log(LOG_DEBUG,"Received AST_CONTROL_PROGRESS on %s\n",chan->name);
 #ifdef HAVE_PRI
 			p->digital = 0;	/* Digital-only calls isn't allows any inband progress messages */
-			if (!p->progress && p->sig==SIG_PRI && p->pri && !p->outgoing) {
+			if (!p->progress && !p->alerting && p->sig==SIG_PRI && p->pri && !p->outgoing) {
 				if (p->pri->pri) {		
 					if (!pri_grab(p, p->pri)) {
 						pri_progress(p->pri->pri,p->call, PVT_TO_CHANNEL(p), 1);




More information about the asterisk-commits mailing list