SIP BYE race between two UA with PJSIP 2.5.5 not ending call

SC
Shane Cole
Wed, Feb 15, 2017 8:05 PM

I've observed something using pjsip 2.5.5 that I would like to know if it
is expected behaviour.

I have a call between Alice and Bob where Bob is the PJSIP based UA.

0.01    Alice > Bob    INVITE
0.02    Bob > Alice    100 TRYING
0.03    Bob > Alice    200 OK
0.04    Alice > Bob    ACK

The call is up ok. After 5 seconds both Alice and Bob at near the same time
have elected to
end the call. A BYE is sent in each direction.

5.010  Bob > Alice    BYE
5.011  Alice > Bob    BYE
5.020  Bob > Alice    OK
5.021  Alice > Bob    OK

However, the OK from Alice to Bob at timestamp 5.021 never reaches Bob, so
at the 0.5 timer Bob retries sending his BYE

5.520  Bob > Alice    BYE
6.020  Bob > Alice    BYE

and keeps trying at greater intervals before finally giving up.

Setting aside the reason for the OK from Alice not making it, shouldn't
PJSIP have destroyed the call upon getting a
BYE and responding OK to it? Instead it keeps trying to send the BYE that
has gone unanswered, when the call is ended.

In my case, a load balancer in front of my UA is using Call-ID for
persistence and helpfully killing the session once
it has seen a BYE / OK pair for that Call-ID.  Consequently the OK response
to the BYE Bob sent ends up on another
server in the pool.

I've observed something using pjsip 2.5.5 that I would like to know if it is expected behaviour. I have a call between Alice and Bob where Bob is the PJSIP based UA. 0.01 Alice > Bob INVITE 0.02 Bob > Alice 100 TRYING 0.03 Bob > Alice 200 OK 0.04 Alice > Bob ACK The call is up ok. After 5 seconds both Alice and Bob at near the same time have elected to end the call. A BYE is sent in each direction. 5.010 Bob > Alice BYE 5.011 Alice > Bob BYE 5.020 Bob > Alice OK 5.021 Alice > Bob OK However, the OK from Alice to Bob at timestamp 5.021 never reaches Bob, so at the 0.5 timer Bob retries sending his BYE 5.520 Bob > Alice BYE 6.020 Bob > Alice BYE and keeps trying at greater intervals before finally giving up. Setting aside the reason for the OK from Alice not making it, shouldn't PJSIP have destroyed the call upon getting a BYE and responding OK to it? Instead it keeps trying to send the BYE that has gone unanswered, when the call is ended. In my case, a load balancer in front of my UA is using Call-ID for persistence and helpfully killing the session once it has seen a BYE / OK pair for that Call-ID. Consequently the OK response to the BYE Bob sent ends up on another server in the pool.