Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
liblinphone
Commits
93f7cbd8
Commit
93f7cbd8
authored
Jan 25, 2016
by
Simon Morlat
Browse files
fix ice restart tests
parent
f8a1eeff
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
56 additions
and
34 deletions
+56
-34
coreapi/callbacks.c
coreapi/callbacks.c
+7
-4
coreapi/linphonecall.c
coreapi/linphonecall.c
+4
-5
coreapi/misc.c
coreapi/misc.c
+6
-7
coreapi/private.h
coreapi/private.h
+1
-1
mediastreamer2
mediastreamer2
+1
-1
oRTP
oRTP
+1
-1
tester/call_tester.c
tester/call_tester.c
+36
-15
No files found.
coreapi/callbacks.c
View file @
93f7cbd8
...
...
@@ -503,10 +503,7 @@ static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *o
if
(
call
->
params
->
internal_call_update
)
call
->
params
->
internal_call_update
=
FALSE
;
/* Handle remote ICE attributes if any. */
if
(
call
->
ice_session
!=
NULL
&&
rmd
)
{
linphone_call_update_ice_from_remote_media_description
(
call
,
rmd
);
}
#ifdef BUILD_UPNP
if
(
call
->
upnp_session
!=
NULL
&&
rmd
)
{
linphone_core_update_upnp_from_remote_media_description
(
call
,
rmd
);
...
...
@@ -522,6 +519,12 @@ static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *o
md
=
NULL
;
}
if
(
md
){
/*there is a valid SDP in the response, either offer or answer, and we're able to start/update the streams*/
/* Handle remote ICE attributes if any. */
if
(
call
->
ice_session
!=
NULL
&&
rmd
)
{
linphone_call_update_ice_from_remote_media_description
(
call
,
rmd
,
FALSE
);
}
switch
(
call
->
state
){
case
LinphoneCallResuming
:
linphone_core_notify_display_status
(
lc
,
_
(
"Call resumed."
));
...
...
coreapi/linphonecall.c
View file @
93f7cbd8
...
...
@@ -2236,7 +2236,7 @@ int linphone_call_prepare_ice(LinphoneCall *call, bool_t incoming_offer){
if
(
call
->
params
->
realtimetext_enabled
)
_linphone_call_prepare_ice_for_stream
(
call
,
call
->
main_text_stream_index
,
TRUE
);
/*start ICE gathering*/
if
(
incoming_offer
)
linphone_call_update_ice_from_remote_media_description
(
call
,
remote
);
/*this may delete the ice session*/
linphone_call_update_ice_from_remote_media_description
(
call
,
remote
,
TRUE
);
/*this may delete the ice session*/
if
(
call
->
ice_session
&&
!
ice_session_candidates_gathered
(
call
->
ice_session
)){
if
(
call
->
audiostream
->
ms
.
state
==
MSStreamInitialized
)
audio_stream_prepare_sound
(
call
->
audiostream
,
NULL
,
NULL
);
...
...
@@ -4309,8 +4309,7 @@ static void handle_ice_events(LinphoneCall *call, OrtpEvent *ev){
linphone_core_update_ice_state_in_call_stats
(
call
);
}
}
else
if
(
evt
==
ORTP_EVENT_ICE_RESTART_NEEDED
)
{
ice_session_restart
(
call
->
ice_session
);
ice_session_set_role
(
call
->
ice_session
,
IR_Controlling
);
ice_session_restart
(
call
->
ice_session
,
IR_Controlling
);
linphone_core_update_call
(
call
->
core
,
call
,
call
->
current_params
);
}
}
...
...
@@ -4846,6 +4845,7 @@ void linphone_call_repair_if_broken(LinphoneCall *call){
/*First, make sure that the proxy from which we received this call, or to which we routed this call is registered*/
if
(
!
call
->
dest_proxy
||
linphone_proxy_config_get_state
(
call
->
dest_proxy
)
!=
LinphoneRegistrationOk
)
return
;
if
(
!
call
->
core
->
media_network_reachable
)
return
;
switch
(
call
->
state
){
case
LinphoneCallStreamsRunning
:
...
...
@@ -4853,8 +4853,7 @@ void linphone_call_repair_if_broken(LinphoneCall *call){
case
LinphoneCallPausedByRemote
:
ms_message
(
"LinphoneCall[%p] is going to be updated (reINVITE) in order to recover from lost connectivity"
,
call
);
if
(
call
->
ice_session
){
ice_session_restart
(
call
->
ice_session
);
ice_session_set_role
(
call
->
ice_session
,
IR_Controlling
);
ice_session_restart
(
call
->
ice_session
,
IR_Controlling
);
}
params
=
linphone_core_create_call_params
(
call
->
core
,
call
);
linphone_core_update_call
(
call
->
core
,
call
,
params
);
...
...
coreapi/misc.c
View file @
93f7cbd8
...
...
@@ -944,8 +944,7 @@ void linphone_call_clear_unused_ice_candidates(LinphoneCall *call, const SalMedi
}
}
void
linphone_call_update_ice_from_remote_media_description
(
LinphoneCall
*
call
,
const
SalMediaDescription
*
md
)
{
void
linphone_call_update_ice_from_remote_media_description
(
LinphoneCall
*
call
,
const
SalMediaDescription
*
md
,
bool_t
is_offer
){
const
SalStreamDescription
*
stream
;
IceCheckList
*
cl
=
NULL
;
bool_t
default_candidate
=
FALSE
;
...
...
@@ -975,14 +974,14 @@ void linphone_call_update_ice_from_remote_media_description(LinphoneCall *call,
if
(
ice_params_found
)
{
/* Check for ICE restart and set remote credentials. */
if
((
strcmp
(
md
->
addr
,
"0.0.0.0"
)
==
0
)
||
(
strcmp
(
md
->
addr
,
"::0"
)
==
0
))
{
ice_session_restart
(
call
->
ice_session
);
ice_session_restart
(
call
->
ice_session
,
is_offer
?
IR_Controlled
:
IR_Controlling
);
ice_restarted
=
TRUE
;
}
else
{
for
(
i
=
0
;
i
<
md
->
nb_streams
;
i
++
)
{
stream
=
&
md
->
streams
[
i
];
cl
=
ice_session_check_list
(
call
->
ice_session
,
i
);
if
(
cl
&&
(
strcmp
(
stream
->
rtp_addr
,
"0.0.0.0"
)
==
0
))
{
ice_session_restart
(
call
->
ice_session
);
ice_session_restart
(
call
->
ice_session
,
is_offer
?
IR_Controlled
:
IR_Controlling
);
ice_restarted
=
TRUE
;
break
;
}
...
...
@@ -992,7 +991,7 @@ void linphone_call_update_ice_from_remote_media_description(LinphoneCall *call,
ice_session_set_remote_credentials
(
call
->
ice_session
,
md
->
ice_ufrag
,
md
->
ice_pwd
);
}
else
if
(
ice_session_remote_credentials_changed
(
call
->
ice_session
,
md
->
ice_ufrag
,
md
->
ice_pwd
))
{
if
(
ice_restarted
==
FALSE
)
{
ice_session_restart
(
call
->
ice_session
);
ice_session_restart
(
call
->
ice_session
,
is_offer
?
IR_Controlled
:
IR_Controlling
);
ice_restarted
=
TRUE
;
}
ice_session_set_remote_credentials
(
call
->
ice_session
,
md
->
ice_ufrag
,
md
->
ice_pwd
);
...
...
@@ -1005,8 +1004,8 @@ void linphone_call_update_ice_from_remote_media_description(LinphoneCall *call,
if
(
ice_restarted
==
FALSE
&&
ice_check_list_get_remote_ufrag
(
cl
)
&&
ice_check_list_get_remote_pwd
(
cl
))
{
/* restart onl
u
if remote ufrag/paswd was already set*/
ice_session_restart
(
call
->
ice_session
);
/* restart onl
y
if remote ufrag/paswd was already set*/
ice_session_restart
(
call
->
ice_session
,
is_offer
?
IR_Controlled
:
IR_Controlling
);
ice_restarted
=
TRUE
;
}
ice_check_list_set_remote_credentials
(
cl
,
stream
->
ice_ufrag
,
stream
->
ice_pwd
);
...
...
coreapi/private.h
View file @
93f7cbd8
...
...
@@ -487,7 +487,7 @@ void linphone_call_stats_fill(LinphoneCallStats *stats, MediaStream *ms, OrtpEve
void
linphone_call_stop_ice_for_inactive_streams
(
LinphoneCall
*
call
,
SalMediaDescription
*
result
);
void
_update_local_media_description_from_ice
(
SalMediaDescription
*
desc
,
IceSession
*
session
,
bool_t
use_nortpproxy
);
void
linphone_call_update_local_media_description_from_ice_or_upnp
(
LinphoneCall
*
call
);
void
linphone_call_update_ice_from_remote_media_description
(
LinphoneCall
*
call
,
const
SalMediaDescription
*
md
);
void
linphone_call_update_ice_from_remote_media_description
(
LinphoneCall
*
call
,
const
SalMediaDescription
*
md
,
bool_t
is_offer
);
void
linphone_call_clear_unused_ice_candidates
(
LinphoneCall
*
call
,
const
SalMediaDescription
*
md
);
bool_t
linphone_core_media_description_contains_video_stream
(
const
SalMediaDescription
*
md
);
...
...
mediastreamer2
@
c8c9ef1c
Subproject commit
7b1b79e2767fd4dcfe2d3db3d6c5c20951ac4c7a
Subproject commit
c8c9ef1cd2d0abc54f76a0ed4e035027ff5e8075
oRTP
@
83bf0a09
Subproject commit
02ce979cfdf80b68f1d13e1d0185bf2b827f4b7e
Subproject commit
83bf0a09cc2127086e15817d16793320c9fb9af0
tester/call_tester.c
View file @
93f7cbd8
...
...
@@ -5474,7 +5474,6 @@ static void _call_with_network_switch(bool_t use_ice, bool_t with_socket_refresh
LinphoneCoreManager
*
marie
=
linphone_core_manager_new
(
"marie_rc"
);
LinphoneCoreManager
*
pauline
=
linphone_core_manager_new
(
transport_supported
(
LinphoneTransportTls
)
?
"pauline_rc"
:
"pauline_tcp_rc"
);
MSList
*
lcs
=
NULL
;
int
ice_reinvite
=
use_ice
?
1
:
0
;
bool_t
call_ok
;
lcs
=
ms_list_append
(
lcs
,
marie
->
lc
);
...
...
@@ -5508,11 +5507,22 @@ static void _call_with_network_switch(bool_t use_ice, bool_t with_socket_refresh
linphone_core_set_network_reachable
(
marie
->
lc
,
TRUE
);
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneRegistrationOk
,
2
));
/*pauline shall receive a reINVITE to update the session*/
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallUpdating
,
1
+
ice_reinvite
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallUpdatedByRemote
,
1
+
ice_reinvite
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallStreamsRunning
,
2
+
ice_reinvite
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallStreamsRunning
,
2
+
ice_reinvite
));
if
(
use_ice
){
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallUpdating
,
1
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallUpdatedByRemote
,
1
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallStreamsRunning
,
3
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallStreamsRunning
,
3
));
/*now comes the ICE reINVITE*/
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallUpdating
,
2
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallUpdatedByRemote
,
2
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallStreamsRunning
,
4
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallStreamsRunning
,
4
));
}
else
{
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallUpdating
,
1
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallUpdatedByRemote
,
1
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallStreamsRunning
,
2
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallStreamsRunning
,
2
));
}
/*check that media is back*/
check_media_direction
(
marie
,
linphone_core_get_current_call
(
marie
->
lc
),
lcs
,
LinphoneMediaDirectionSendRecv
,
LinphoneMediaDirectionInvalid
);
...
...
@@ -5539,7 +5549,7 @@ static void call_with_network_switch_and_socket_refresh(void){
_call_with_network_switch
(
TRUE
,
TRUE
);
}
static
void
call_with_sip_and_rtp_independant_switches
(){
static
void
call_with_sip_and_rtp_independant_switches
(
void
){
LinphoneCoreManager
*
marie
=
linphone_core_manager_new
(
"marie_rc"
);
LinphoneCoreManager
*
pauline
=
linphone_core_manager_new
(
transport_supported
(
LinphoneTransportTls
)
?
"pauline_rc"
:
"pauline_tcp_rc"
);
MSList
*
lcs
=
NULL
;
...
...
@@ -5573,24 +5583,35 @@ static void call_with_sip_and_rtp_independant_switches(){
}
/*marie looses the SIP network and reconnects*/
linphone_core_set_sip_network_reachable
(
marie
->
lc
,
FALSE
);
linphone_core_set_media_network_reachable
(
marie
->
lc
,
FALSE
);
wait_for_until
(
marie
->
lc
,
pauline
->
lc
,
NULL
,
0
,
1000
);
/*marie will reconnect and register*/
linphone_core_set_sip_network_reachable
(
marie
->
lc
,
TRUE
);
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneRegistrationOk
,
2
));
wait_for_until
(
marie
->
lc
,
pauline
->
lc
,
NULL
,
0
,
1
000
);
wait_for_until
(
marie
->
lc
,
pauline
->
lc
,
NULL
,
0
,
5
000
);
/*at this stage, no reINVITE is expected to be send*/
BC_ASSERT_EQUAL
(
marie
->
stat
.
number_of_LinphoneCallUpdating
,
1
,
int
,
"%i"
);
/*1: because of ICE reinvite*/
BC_ASSERT_EQUAL
(
marie
->
stat
.
number_of_LinphoneCallUpdating
,
0
,
int
,
"%i"
);
/*now we notify the a reconnection of media network*/
linphone_core_set_media_network_reachable
(
marie
->
lc
,
FALSE
);
linphone_core_set_media_network_reachable
(
marie
->
lc
,
TRUE
);
/*pauline shall receive a reINVITE to update the session*/
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallUpdating
,
2
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallUpdatedByRemote
,
2
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallStreamsRunning
,
3
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallStreamsRunning
,
3
));
if
(
use_ice
){
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallUpdating
,
1
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallUpdatedByRemote
,
1
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallStreamsRunning
,
3
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallStreamsRunning
,
3
));
/*now comes the ICE reINVITE*/
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallUpdating
,
2
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallUpdatedByRemote
,
2
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallStreamsRunning
,
4
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallStreamsRunning
,
4
));
}
else
{
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallUpdating
,
1
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallUpdatedByRemote
,
1
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
pauline
->
stat
.
number_of_LinphoneCallStreamsRunning
,
2
));
BC_ASSERT_TRUE
(
wait_for
(
marie
->
lc
,
pauline
->
lc
,
&
marie
->
stat
.
number_of_LinphoneCallStreamsRunning
,
2
));
}
/*check that media is back*/
check_media_direction
(
marie
,
linphone_core_get_current_call
(
marie
->
lc
),
lcs
,
LinphoneMediaDirectionSendRecv
,
LinphoneMediaDirectionInvalid
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment