From c55a2c6b50d86e79535e256f6ea8e05985b9ddfd Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 24 Sep 2012 18:46:57 +0200 Subject: [PATCH] Delay creation of local media description so that edge network detection works with ICE activated. --- coreapi/callbacks.c | 1 - coreapi/linphonecall.c | 14 +++++++++----- coreapi/linphonecore.c | 7 +++---- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 14ca748e..8954b85d 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -184,7 +184,6 @@ static void call_received(SalOp *h){ } call=linphone_call_new_incoming(lc,from_addr,to_addr,h); - sal_call_set_local_media_description(h,call->localdesc); /* the call is acceptable so we can now add it to our list */ linphone_core_add_call(lc,call); diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index d3212a9f..3d32371a 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -269,11 +269,11 @@ static SalMediaDescription *_create_local_media_description(LinphoneCore *lc, Li md->streams[i].crypto[1].algo = 0; md->streams[i].crypto[2].algo = 0; } - if ((linphone_core_get_firewall_policy(call->core) == LinphonePolicyUseIce) && (call->ice_session != NULL) && (ice_session_check_list(call->ice_session, i) == NULL)) { - ice_session_add_check_list(call->ice_session, ice_check_list_new()); - } } update_media_description_from_stun(md,&call->ac,&call->vc); + if (call->ice_session != NULL) { + linphone_core_update_local_media_description_from_ice(md, call->ice_session); + } linphone_address_destroy(addr); return md; } @@ -378,7 +378,6 @@ LinphoneCall * linphone_call_new_outgoing(struct _LinphoneCore *lc, LinphoneAddr if (ping_time>=0) { linphone_core_adapt_to_network(lc,ping_time,&call->params); } - call->localdesc=create_local_media_description(lc,call); call->camera_active=params->has_video; discover_mtu(lc,linphone_address_get_domain (to)); @@ -439,7 +438,6 @@ LinphoneCall * linphone_call_new_incoming(LinphoneCore *lc, LinphoneAddress *fro if (ping_time>=0) { linphone_core_adapt_to_network(lc,ping_time,&call->params); }; - call->localdesc=create_local_media_description(lc,call); call->camera_active=call->params.has_video; discover_mtu(lc,linphone_address_get_domain(from)); @@ -1011,6 +1009,9 @@ void linphone_call_init_audio_stream(LinphoneCall *call){ if ((linphone_core_get_firewall_policy(lc) == LinphonePolicyUseIce) && (call->ice_session != NULL)){ rtp_session_set_pktinfo(audiostream->session, TRUE); rtp_session_set_symmetric_rtp(audiostream->session, FALSE); + if (ice_session_check_list(call->ice_session, 0) == NULL) { + ice_session_add_check_list(call->ice_session, ice_check_list_new()); + } audiostream->ice_check_list = ice_session_check_list(call->ice_session, 0); ice_check_list_set_rtp_session(audiostream->ice_check_list, audiostream->session); } @@ -1044,6 +1045,9 @@ void linphone_call_init_video_stream(LinphoneCall *call){ if ((linphone_core_get_firewall_policy(lc) == LinphonePolicyUseIce) && (call->ice_session != NULL) && (ice_session_check_list(call->ice_session, 1))){ rtp_session_set_pktinfo(call->videostream->session, TRUE); rtp_session_set_symmetric_rtp(call->videostream->session, FALSE); + if (ice_session_check_list(call->ice_session, 1) == NULL) { + ice_session_add_check_list(call->ice_session, ice_check_list_new()); + } call->videostream->ice_check_list = ice_session_check_list(call->ice_session, 1); ice_check_list_set_rtp_session(call->videostream->ice_check_list, call->videostream->session); } diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 99482f62..8e2b9ac9 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -2195,10 +2195,9 @@ int linphone_core_start_invite(LinphoneCore *lc, LinphoneCall *call, LinphonePro linphone_call_init_media_streams(call); if (lc->ringstream==NULL) audio_stream_prepare_sound(call->audiostream,lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard); + call->localdesc=create_local_media_description(lc,call); if (!lc->sip_conf.sdp_200_ack){ call->media_pending=TRUE; - if (call->ice_session != NULL) - linphone_core_update_local_media_description_from_ice(call->localdesc, call->ice_session); sal_call_set_local_media_description(call->op,call->localdesc); } real_url=linphone_address_as_string(call->log->to); @@ -2457,8 +2456,8 @@ void linphone_core_notify_incoming_call(LinphoneCore *lc, LinphoneCall *call){ bool_t propose_early_media=lp_config_get_int(lc->config,"sip","incoming_calls_early_media",FALSE); const char *ringback_tone=linphone_core_get_remote_ringback_tone (lc); - if (call->ice_session != NULL) - linphone_core_update_local_media_description_from_ice(call->localdesc, call->ice_session); + call->localdesc=create_local_media_description(lc,call); + sal_call_set_local_media_description(call->op,call->localdesc); md=sal_call_get_final_media_description(call->op); if (md && sal_media_description_empty(md)){ sal_call_decline(call->op,SalReasonMedia,NULL); -- 2.39.2