From: Ghislain MARY Date: Thu, 23 Aug 2012 14:10:55 +0000 (+0200) Subject: Set an ICE check list to the Failed state if the corresponding media stream has been... X-Git-Url: http://sjero.net/git/?a=commitdiff_plain;h=7b6314c381ec25d3bbb169c95c1fbbf98a5c251a;p=linphone Set an ICE check list to the Failed state if the corresponding media stream has been deactivated by the peer. --- diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 584191cc..95d5b81a 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -46,6 +46,9 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia call->media_pending=TRUE; } call->resultdesc=new_md; + if (call->ice_session != NULL) { + linphone_core_deactivate_ice_for_deactivated_media_streams(call, call->resultdesc); + } if (call->audiostream && call->audiostream->ticker){ /* we already started media: check if we really need to restart it*/ if (oldmd){ diff --git a/coreapi/misc.c b/coreapi/misc.c index 3f48b419..a6579335 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -813,6 +813,17 @@ void linphone_core_update_ice_from_remote_media_description(LinphoneCall *call, } } +void linphone_core_deactivate_ice_for_deactivated_media_streams(LinphoneCall *call, const SalMediaDescription *md) +{ + int i; + for (i = 0; i < md->nstreams; i++) { + IceCheckList *cl = ice_session_check_list(call->ice_session, i); + if (cl && (md->streams[i].rtp_port == 0)) { + if (cl->state != ICL_Completed) ice_check_list_set_state(cl, ICL_Failed); + } + } +} + LinphoneCall * is_a_linphone_call(void *user_pointer){ LinphoneCall *call=(LinphoneCall*)user_pointer; if (call==NULL) return NULL; diff --git a/coreapi/private.h b/coreapi/private.h index a68615e3..b102dc7b 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -224,6 +224,7 @@ void linphone_core_run_stun_tests(LinphoneCore *lc, LinphoneCall *call); int linphone_core_gather_ice_candidates(LinphoneCore *lc, LinphoneCall *call); void linphone_core_update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session); void linphone_core_update_ice_from_remote_media_description(LinphoneCall *call, const SalMediaDescription *md); +void linphone_core_deactivate_ice_for_deactivated_media_streams(LinphoneCall *call, const SalMediaDescription *md); void linphone_core_send_initial_subscribes(LinphoneCore *lc); void linphone_core_write_friends_config(LinphoneCore* lc);