From: Richard Mudgett Date: Fri, 20 Aug 2010 15:24:36 +0000 (+0000) Subject: Q931 - Sending PROGRESS after sending ALERTING is a protocol error X-Git-Tag: 1.4.36-rc1~3^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34806f56f5aecf01b0c70d0e6fc2b0ddd1f829bb;p=thirdparty%2Fasterisk.git 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@283048 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index a4e549a6f7..3ee7cc4a45 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -5636,7 +5636,7 @@ static int dahdi_indicate(struct ast_channel *chan, int condition, const void *d 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);