]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 283048 via svnmerge from
authorRichard Mudgett <rmudgett@digium.com>
Fri, 20 Aug 2010 15:31:03 +0000 (15:31 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 20 Aug 2010 15:31:03 +0000 (15:31 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r283048 | rmudgett | 2010-08-20 10:24:36 -0500 (Fri, 20 Aug 2010) | 22 lines

  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.6.2@283049 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c

index 820a1c8c3acde89ce5dfa8cf5c1f06679f826f26..c868300683af079df160c89f87c61494117cb8d5 100644 (file)
@@ -7381,7 +7381,7 @@ static int dahdi_indicate(struct ast_channel *chan, int condition, const void *d
                        ast_debug(1,"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->sig == SIG_BRI) || (p->sig == SIG_BRI_PTMP))
+                       if (!p->progress && !p->alerting && ((p->sig == SIG_PRI) || (p->sig == SIG_BRI) || (p->sig == SIG_BRI_PTMP))
                                        && p->pri && !p->outgoing) {
                                if (p->pri->pri) {
                                        if (!pri_grab(p, p->pri)) {