[asterisk-bugs] [JIRA] (ASTERISK-29263) chan_pjsip: Endpoint can become in use instead of busy

Joshua C. Colp (JIRA) noreply at issues.asterisk.org
Mon Jan 25 09:17:59 CST 2021


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

Joshua C. Colp updated ASTERISK-29263:
--------------------------------------

    Summary: chan_pjsip: Endpoint can become in use instead of busy  (was: devicestate_busy_at not being evaluated correctly)

> chan_pjsip: Endpoint can become in use instead of busy
> ------------------------------------------------------
>
>                 Key: ASTERISK-29263
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-29263
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Channels/chan_pjsip
>    Affects Versions: 16.15.0
>         Environment: debian x64
>            Reporter: Flamur Dervishi
>            Severity: Minor
>
> We were experiencing a strange behaviour with the device state when using 'devicestate_busy_at' option.
> With 'devicestate_busy_at' set to 2, after an endpoint would receive 2 calls, its device state would be set to 'Busy'. However when a 3rd call is in play, the device state changed to 'In use', when it still needs to be 'Busy' in respect of 'devicestate_busy_at' value.
> After some investigation in the 'chan_pjsip.c' file, in the function 'chan_pjsip_devicestate' we noticed that the condition to check  if the 'devicestate_busy_at' is reached is wrong.
> static int chan_pjsip_devicestate(const char *data)
> {
> 	...
> 	if (endpoint->devicestate_busy_at && (inuse == endpoint->devicestate_busy_at)) {
> 		state = AST_DEVICE_BUSY;
> 	} else if (ast_devstate_aggregate_result(&aggregate) != AST_DEVICE_INVALID) {
> 		state = ast_devstate_aggregate_result(&aggregate);
> 	}
> 	...
> }
> Should be:
> static int chan_pjsip_devicestate(const char *data)
> {
> 	...
> 	if (endpoint->devicestate_busy_at && (inuse >= endpoint->devicestate_busy_at)) {
> 		state = AST_DEVICE_BUSY;
> 	} else if (ast_devstate_aggregate_result(&aggregate) != AST_DEVICE_INVALID) {
> 		state = ast_devstate_aggregate_result(&aggregate);
> 	}
> 	...
> } 
> Meaning, the device state will be 'Busy' when the 'devicestate_busy_at' is reached or exceeded, and not only when it is equal to 'devicestate_busy_at' value



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



More information about the asterisk-bugs mailing list