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

Richard Mudgett (JIRA) noreply at issues.asterisk.org
Wed Jan 20 12:35:32 CST 2016


     [ https://issues.asterisk.org/jira/browse/PRI-180?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Richard Mudgett updated PRI-180:
--------------------------------

    Attachment: jira_pri_180_v1.4.15.patch

[^jira_pri_180_v1.4.15.patch] - This patch should work better.  The c->progressmask value was not initialized when the DISCONNECT message came in.  Therefore it could be whatever the last progress indicator ie value came in from an earlier message and we could mistakenly think there was inband audio associated with the DISCONNECT.

> 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
>         Attachments: full_20160116_progress, jira_pri_180_v1.4.15.patch
>
>
> 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