[asterisk-bugs] [JIRA] (PRI-180) Incorrect handling of DISCONNECT with Progress Indicator #8

Alexandr Dranchuk (JIRA) noreply at issues.asterisk.org
Tue Jan 19 19:25:33 CST 2016


Alexandr Dranchuk created PRI-180:
-------------------------------------

             Summary: Incorrect handling of DISCONNECT with Progress Indicator #8
                 Key: PRI-180
                 URL: https://issues.asterisk.org/jira/browse/PRI-180
             Project: LibPRI
          Issue Type: Bug
      Security Level: None
          Components: General
    Affects Versions: 1.4.13
         Environment: Debian 7 / x64
            Reporter: Alexandr Dranchuk
            Assignee: Richard Mudgett
            Severity: Minor


When we make an outgoing call by DAHDI / libpri 1.4.15, sometimes we get a DISCONNECT with Progress Indicator #8. Currently we just start to ignore DISCONNECT message if *inbanddisconnect=yes* are set in chan_dahdi.conf
But after first DISCONNECT with Progress Indicator #8, we get second DISCONNECT without Progress Indicator, and thus have to release the call, not keep ignoring it.
Current code not expecting second DISCONNECT message, only RELEASE but according  ETS ISDN standards document, call can be finished by any of this messages.


For now I've changed the line of q931.c from
{code:title=q931.c|borderStyle=solid}
		UPDATE_OURCALLSTATE(ctrl, c, Q931_CALL_STATE_DISCONNECT_INDICATION);
		c->peercallstate = Q931_CALL_STATE_DISCONNECT_REQUEST;
		c->sendhangupack = 1;

		/* wait for a RELEASE so that sufficient time has passed
		   for the inband audio to be heard */
		if (ctrl->acceptinbanddisconnect && (c->progressmask & PRI_PROG_INBAND_AVAILABLE))
			break;
{code}
to
{code:title=q931.c|borderStyle=solid}
		if (ctrl->acceptinbanddisconnect && (c->progressmask & PRI_PROG_INBAND_AVAILABLE)) {
			if (c->ourcallstate != Q931_CALL_STATE_DISCONNECT_INDICATION) { 
				UPDATE_OURCALLSTATE(ctrl, c, Q931_CALL_STATE_DISCONNECT_INDICATION);
				c->peercallstate = Q931_CALL_STATE_DISCONNECT_REQUEST;
				c->sendhangupack = 1;
				break;

			}
		}
		
		UPDATE_OURCALLSTATE(ctrl, c, Q931_CALL_STATE_DISCONNECT_INDICATION);
		c->peercallstate = Q931_CALL_STATE_DISCONNECT_REQUEST;
		c->sendhangupack = 1;
{code}
and tested. All works fine for me. 
Any help would be appreciated.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list