Today's fail involves a collection of SIP phones, along with a B2BUA (which pretends to be two more SIP phones stuck together). The call scenario is a reasonably simple one: SIP phone A calls the B2BUA. The B2BUA does a blind transfer to SIP phone B, which diverts to SIP phone C.
The part of the SIP phones will be played by a collection of lolcats, while the B2BUA is played by a much more intelligent fox. Now, this is what's supposed to happen...
Lolcat | SIP signalling |
---|---|
![]() | INVITE to B2BUA |
![]() | 200 OK to phone A |
![]() | ACK to B2BUA |
![]() | REFER to phone B |
![]() | 200 OK to B2BUA |
![]() | INVITE to phone B |
![]() | 302 Temporary Redirect to phone A |
![]() | INVITE to phone C |
![]() | 180 Alerting to phone A |
![]() | NOTIFY to B2BUA |
![]() | 200 OK to phone A |
![]() | 200 OK to phone A |
![]() | ACK to phone C |
![]() | NOTIFY to B2BUA |
![]() | 200 OK to phone A |
![]() | BYE to phone A |
![]() | 200 OK to B2BUA |
Of course, it turned out that SIP phone A has a glorious bug when handling REFERs...
Lolcat | SIP signalling |
---|---|
![]() | INVITE to B2BUA |
![]() | 200 OK to phone A |
![]() | ACK to B2BUA |
![]() | REFER to phone B |
![]() | 200 OK to B2BUA |
![]() | INVITE to phone B |
![]() | 302 Temporary Redirect to phone A |
![]() | INVITE to phone C |
![]() | 180 Alerting to phone A |
![]() | 200 OK to phone A |
![]() | ACK to phone C |
Some time later | |
![]() |
If phone A receives a REFER, and the REFER target sends a 3xx-class response, then phone A stops sending NOTIFYs. Which means whatever initiated the REFER has absolutely no clue as to what's going on.
Phones B and C aren't bug-free either - both of those fail miserably at codec renegotiation, especially when being taken off-hold. Phone B apparently decided to send but not receive audio, and phone C seemed to decide that because the last codec negotiation was for on-hold, that's obviously what this negotiation must be trying to achieve.
The best bit? I'm not even testing these phones! All I'm trying to do is test various scenarios involving the B2BUA, and I keep on tripping across bugs in everything else!