mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-30 17:59:21 +00:00
fix ice destination change in case of call with rtp-mux
This commit is contained in:
parent
4b8b216c74
commit
262575f921
5 changed files with 72 additions and 10 deletions
|
|
@ -7387,4 +7387,11 @@ const char* linphone_transport_to_string(LinphoneTransportType transport) {
|
|||
LinphoneTransportType linphone_transport_parse(const char* transport) {
|
||||
return (LinphoneTransportType)sal_transport_parse(transport);
|
||||
}
|
||||
|
||||
const char *linphone_streamtype_to_string(const LinphoneStreamType type) {
|
||||
switch (type) {
|
||||
case LinphoneStreamTypeAudio: return "LinphoneStreamTypeAudio";
|
||||
case LinphoneStreamTypeVideo: return "LinphoneStreamTypeVideo";
|
||||
case LinphoneStreamTypeText: return "LinphoneStreamTypeText";
|
||||
case LinphoneStreamTypeUnknown: return "LinphoneStreamTypeUnknown";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -139,7 +139,14 @@ enum _LinphoneStreamType {
|
|||
* @ingroup initializing
|
||||
**/
|
||||
typedef enum _LinphoneStreamType LinphoneStreamType;
|
||||
|
||||
/**
|
||||
* Function returning a humain readable value for LinphoneStreamType.
|
||||
* @param LinphoneStreamType
|
||||
* @returns
|
||||
* @ingroup initializing
|
||||
**/
|
||||
|
||||
LINPHONE_PUBLIC const char *linphone_streamtype_to_string(const LinphoneStreamType);
|
||||
/**
|
||||
* Object that represents a SIP address.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit d289c123b120a312533e90709442d9923218810e
|
||||
Subproject commit 30e4d5e32feadd93ecdd6090d488d9c512cf62a5
|
||||
|
|
@ -319,7 +319,9 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr
|
|||
/*wait ice re-invite*/
|
||||
if (linphone_core_get_firewall_policy(caller_mgr->lc) == LinphonePolicyUseIce
|
||||
&& linphone_core_get_firewall_policy(callee_mgr->lc) == LinphonePolicyUseIce
|
||||
&& !linphone_core_sdp_200_ack_enabled(caller_mgr->lc)) { /*ice does not work with sdp less invite*/
|
||||
&& !linphone_core_sdp_200_ack_enabled(caller_mgr->lc) /*ice does not work with sdp less invite*/
|
||||
&& lp_config_get_int(callee_mgr->lc->config, "sip", "update_call_when_ice_completed", TRUE)
|
||||
&& lp_config_get_int(caller_mgr->lc->config, "sip", "update_call_when_ice_completed", TRUE)) {
|
||||
BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_caller.number_of_LinphoneCallStreamsRunning+2));
|
||||
BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_callee.number_of_LinphoneCallStreamsRunning+2));
|
||||
|
||||
|
|
@ -5422,7 +5424,7 @@ end:
|
|||
linphone_core_manager_destroy(pauline);
|
||||
}
|
||||
|
||||
static void _call_with_rtcp_mux(bool_t caller_rtcp_mux, bool_t callee_rtcp_mux, bool_t with_ice){
|
||||
static void _call_with_rtcp_mux(bool_t caller_rtcp_mux, bool_t callee_rtcp_mux, bool_t with_ice,bool_t with_ice_reinvite){
|
||||
LinphoneCoreManager * marie = linphone_core_manager_new( "marie_rc");
|
||||
LinphoneCoreManager *pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc");
|
||||
const LinphoneCallParams *params;
|
||||
|
|
@ -5438,9 +5440,15 @@ static void _call_with_rtcp_mux(bool_t caller_rtcp_mux, bool_t callee_rtcp_mux,
|
|||
lp_config_set_int(linphone_core_get_config(pauline->lc), "rtp", "rtcp_mux", 1);
|
||||
}
|
||||
if (with_ice){
|
||||
linphone_core_set_user_agent(pauline->lc, "Natted Linphone", NULL);
|
||||
linphone_core_set_user_agent(marie->lc, "Natted Linphone", NULL);
|
||||
linphone_core_set_firewall_policy(marie->lc, LinphonePolicyUseIce);
|
||||
linphone_core_set_firewall_policy(pauline->lc, LinphonePolicyUseIce);
|
||||
}
|
||||
if (!with_ice_reinvite) {
|
||||
lp_config_set_int(linphone_core_get_config(pauline->lc), "sip", "update_call_when_ice_completed", 0);
|
||||
lp_config_set_int(linphone_core_get_config(marie->lc), "sip", "update_call_when_ice_completed", 0);
|
||||
}
|
||||
|
||||
if (!BC_ASSERT_TRUE(call(marie,pauline))) goto end;
|
||||
|
||||
|
|
@ -5476,18 +5484,20 @@ end:
|
|||
}
|
||||
|
||||
static void call_with_rtcp_mux(void){
|
||||
_call_with_rtcp_mux(TRUE, TRUE, FALSE);
|
||||
_call_with_rtcp_mux(TRUE, TRUE, FALSE,TRUE);
|
||||
}
|
||||
|
||||
static void call_with_rtcp_mux_not_accepted(void){
|
||||
_call_with_rtcp_mux(TRUE, FALSE, FALSE);
|
||||
_call_with_rtcp_mux(TRUE, FALSE, FALSE,TRUE);
|
||||
}
|
||||
|
||||
static void call_with_ice_and_rtcp_mux(void){
|
||||
|
||||
_call_with_rtcp_mux(TRUE, TRUE, TRUE);
|
||||
_call_with_rtcp_mux(TRUE, TRUE, TRUE,TRUE);
|
||||
}
|
||||
|
||||
static void call_with_ice_and_rtcp_mux_without_reinvite(void){
|
||||
_call_with_rtcp_mux(TRUE, TRUE, TRUE,FALSE);
|
||||
}
|
||||
|
||||
test_t call_tests[] = {
|
||||
{ "Early declined call", early_declined_call },
|
||||
|
|
@ -5650,7 +5660,8 @@ test_t call_tests[] = {
|
|||
{ "Call with network switch with socket refresh", call_with_network_switch_and_socket_refresh },
|
||||
{ "Call with rtcp-mux", call_with_rtcp_mux},
|
||||
{ "Call with rtcp-mux not accepted", call_with_rtcp_mux_not_accepted},
|
||||
{ "Call with ICE and rtcp-mux", call_with_ice_and_rtcp_mux}
|
||||
{ "Call with ICE and rtcp-mux", call_with_ice_and_rtcp_mux},
|
||||
{ "Call with ICE and rtcp-mux without ICE re-invite", call_with_ice_and_rtcp_mux_without_reinvite}
|
||||
};
|
||||
|
||||
test_suite_t call_test_suite = {"Single Call", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -549,6 +549,37 @@ void liblinphone_tester_uninit(void) {
|
|||
bc_tester_uninit();
|
||||
}
|
||||
|
||||
static void check_ice_from_rtp(LinphoneCall *c1, LinphoneCall *c2, LinphoneStreamType stream_type) {
|
||||
MediaStream ms;
|
||||
switch (stream_type) {
|
||||
case LinphoneStreamTypeAudio:
|
||||
ms=c1->audiostream->ms;
|
||||
break;
|
||||
case LinphoneStreamTypeVideo:
|
||||
ms=c1->videostream->ms;
|
||||
break;
|
||||
case LinphoneStreamTypeUnknown:
|
||||
ms=c1->textstream->ms;
|
||||
break;
|
||||
default:
|
||||
ms_error("Uknown stream type [%s]", linphone_streamtype_to_string(stream_type));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (linphone_call_get_audio_stats(c1)->ice_state == LinphoneIceStateHostConnection && media_stream_started(&ms)) {
|
||||
char ip[16];
|
||||
char port[8];
|
||||
getnameinfo((const struct sockaddr *)&c1->audiostream->ms.sessions.rtp_session->rtp.gs.rem_addr
|
||||
, c1->audiostream->ms.sessions.rtp_session->rtp.gs.rem_addrlen
|
||||
, ip
|
||||
, sizeof(ip)
|
||||
, port
|
||||
, sizeof(port)
|
||||
, NI_NUMERICHOST|NI_NUMERICSERV);
|
||||
BC_ASSERT_STRING_EQUAL(ip, c2->media_localip);
|
||||
}
|
||||
}
|
||||
bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee, LinphoneIceState state) {
|
||||
LinphoneCall *c1,*c2;
|
||||
bool_t audio_success=FALSE;
|
||||
|
|
@ -576,6 +607,8 @@ bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee, Linph
|
|||
if (linphone_call_get_audio_stats(c1)->ice_state==state &&
|
||||
linphone_call_get_audio_stats(c2)->ice_state==state ){
|
||||
audio_success=TRUE;
|
||||
check_ice_from_rtp(c1,c2,LinphoneStreamTypeAudio);
|
||||
check_ice_from_rtp(c2,c1,LinphoneStreamTypeAudio);
|
||||
break;
|
||||
}
|
||||
linphone_core_iterate(caller->lc);
|
||||
|
|
@ -591,6 +624,8 @@ bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee, Linph
|
|||
if (linphone_call_get_video_stats(c1)->ice_state==state &&
|
||||
linphone_call_get_video_stats(c2)->ice_state==state ){
|
||||
video_success=TRUE;
|
||||
check_ice_from_rtp(c1,c2,LinphoneStreamTypeVideo);
|
||||
check_ice_from_rtp(c2,c1,LinphoneStreamTypeVideo);
|
||||
break;
|
||||
}
|
||||
linphone_core_iterate(caller->lc);
|
||||
|
|
@ -607,6 +642,8 @@ bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee, Linph
|
|||
if (linphone_call_get_text_stats(c1)->ice_state==state &&
|
||||
linphone_call_get_text_stats(c2)->ice_state==state ){
|
||||
text_success=TRUE;
|
||||
check_ice_from_rtp(c1,c2,LinphoneStreamTypeText);
|
||||
check_ice_from_rtp(c2,c1,LinphoneStreamTypeText);
|
||||
break;
|
||||
}
|
||||
linphone_core_iterate(caller->lc);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue