1 | | Scenario: |
2 | | 1. Terminal C receives intial INVITE (incoming call) from server without SDP |
3 | | 2. Terminal C sends 200 OK with SDP |
4 | | 3. Terminal C receives ACK with SDP |
5 | | 4. SDP negotiation succeeds, call is connected |
6 | | 5. Terminal C sends INVITE (Hold) to server |
7 | | 6. Server rejects hold request with 488 (server spec). Provisional media was cleared |
8 | | 7. Terminal C receives INVITE (media update for "transfer") from server without SDP. Because provisional media was cleared, error was returned when creating SDP (PJ_EAFNOTSUP). |
9 | | 8. Terminal C sends 200 OK with SDP |
10 | | 9. Terminal C receives ACK with SDP. Because there's no provisional media, Error was raised when updating media. |
| 1 | When a re-INVITE/UPDATE fails, pjsua will clear its provisional medias. This may cause assertion when creating subsequent SDP offers. |
12 | | This ticket will check if the provisional media was cleared (7) and if so, will |
13 | | reinitialize media channel. |
| 3 | Example scenario: |
| 4 | 1. Normal call is established between caller and callee. |
| 5 | 2. Caller sends INVITE (Hold) to callee. |
| 6 | 3. Callee rejects hold request with 488. Provisional media was cleared. |
| 7 | 4. Caller creates another offer (either because it receives an INVITE without SDP, or if it's trying to repeat step 2 above by calling pjsua_call_set_hold()). Because provisional media has been cleared, error was returned when creating SDP (PJ_EAFNOTSUP). |
| 8 | |
| 9 | This ticket will check if the provisional media was cleared and if so, will reinitialize media channel. |