summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c10
-rw-r--r--pjsip/src/pjsua-lib/pjsua_call.c12
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)