[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