diff options
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_call.c | 18 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 6 |
2 files changed, 23 insertions, 1 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c index 1494276e..0ad1d4cf 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -1218,6 +1218,14 @@ PJ_DEF(pj_status_t) pjsua_call_reinvite( pjsua_call_id call_id, return PJSIP_ESESSIONSTATE; } + /* Init media channel */ + status = pjsua_media_channel_init(call->index, PJSIP_ROLE_UAC); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "Error initializing media channel", status); + pjsip_dlg_dec_lock(dlg); + return PJSIP_ESESSIONSTATE; + } + /* Create SDP */ PJ_UNUSED_ARG(unhold); PJ_TODO(create_active_inactive_sdp_based_on_unhold_arg); @@ -2245,8 +2253,18 @@ static void pjsua_call_on_rx_offer(pjsip_inv_session *inv, "(media in offer is %s)", call->index, remote_state)); status = create_inactive_sdp( call, &answer ); } else { + PJ_LOG(4,(THIS_FILE, "Call %d: received updated media offer", call->index)); + + /* Init media channel */ + status = pjsua_media_channel_init(call->index, PJSIP_ROLE_UAC); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "Error initializing media channel", status); + PJSUA_UNLOCK(); + return; + } + status = pjsua_media_channel_create_sdp(call->index, call->inv->pool, &answer); } diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 0d4f6b2a..8b4c1aa6 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -814,7 +814,11 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, call->media_dir = PJMEDIA_DIR_NONE; - /* Shutdown transport */ + /* Shutdown ICE session */ + if (pjsua_var.media_cfg.enable_ice) { + pjmedia_ice_stop_ice(call->med_tp); + } + /* No need because we need keepalive? */ } else { |