diff options
-rw-r--r-- | pjsip/src/pjsip-ua/sip_inv.c | 10 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_call.c | 12 |
2 files changed, 16 insertions, 6 deletions
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c index 4d1723c1..377dc147 100644 --- a/pjsip/src/pjsip-ua/sip_inv.c +++ b/pjsip/src/pjsip-ua/sip_inv.c @@ -4013,6 +4013,16 @@ static void inv_on_state_confirmed( pjsip_inv_session *inv, pjsip_event *e) /* Not Acceptable */ const pjsip_hdr *accept; + /* The incoming SDP is unacceptable. If the SDP negotiator + * state has just been changed, i.e: DONE -> REMOTE_OFFER, + * revert it back. + */ + if (pjmedia_sdp_neg_get_state(inv->neg) == + PJMEDIA_SDP_NEG_STATE_REMOTE_OFFER) + { + pjmedia_sdp_neg_cancel_offer(inv->neg); + } + status = pjsip_dlg_create_response(inv->dlg, rdata, 488, NULL, &tdata); if (status != PJ_SUCCESS) diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c index b58fd758..646f60a1 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -3778,12 +3778,6 @@ static void pjsua_call_on_rx_offer(pjsip_inv_session *inv, call = (pjsua_call*) inv->dlg->mod_data[pjsua_var.mod.id]; - if (call->audio_idx < (int)offer->media_count) - conn = offer->media[call->audio_idx]->conn; - - if (!conn) - conn = offer->conn; - /* Supply candidate answer */ PJ_LOG(4,(THIS_FILE, "Call %d: received updated media offer", call->index)); @@ -3797,6 +3791,12 @@ static void pjsua_call_on_rx_offer(pjsip_inv_session *inv, return; } + if (call->audio_idx >= 0 && call->audio_idx < (int)offer->media_count) + conn = offer->media[call->audio_idx]->conn; + + if (!conn) + conn = offer->conn; + /* Check if offer's conn address is zero */ if (pj_strcmp2(&conn->addr, "0.0.0.0")==0 || pj_strcmp2(&conn->addr, "0")==0) |