mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-07-16 11:52:01 +00:00
FS-10258: [mod_sofia] FW must keep previously negotiated DTLS role during SIP re-INVITE
This commit is contained in:
parent
6a781a1e2c
commit
83322661a5
@ -2761,7 +2761,7 @@ SWITCH_DECLARE(int) switch_system(const char *cmd, switch_bool_t wait);
|
|||||||
SWITCH_DECLARE(int) switch_stream_system_fork(const char *cmd, switch_stream_handle_t *stream);
|
SWITCH_DECLARE(int) switch_stream_system_fork(const char *cmd, switch_stream_handle_t *stream);
|
||||||
SWITCH_DECLARE(int) switch_stream_system(const char *cmd, switch_stream_handle_t *stream);
|
SWITCH_DECLARE(int) switch_stream_system(const char *cmd, switch_stream_handle_t *stream);
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_call_direction_t) switch_ice_direction(switch_core_session_t *session);
|
|
||||||
SWITCH_DECLARE(void) switch_core_session_debug_pool(switch_stream_handle_t *stream);
|
SWITCH_DECLARE(void) switch_core_session_debug_pool(switch_stream_handle_t *stream);
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_status_t) switch_core_session_override_io_routines(switch_core_session_t *session, switch_io_routines_t *ior);
|
SWITCH_DECLARE(switch_status_t) switch_core_session_override_io_routines(switch_core_session_t *session, switch_io_routines_t *ior);
|
||||||
|
@ -379,6 +379,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_printf(switch_core_session_t
|
|||||||
|
|
||||||
SWITCH_DECLARE(switch_msrp_session_t *) switch_core_media_get_msrp_session(switch_core_session_t *session);
|
SWITCH_DECLARE(switch_msrp_session_t *) switch_core_media_get_msrp_session(switch_core_session_t *session);
|
||||||
|
|
||||||
|
|
||||||
SWITCH_END_EXTERN_C
|
SWITCH_END_EXTERN_C
|
||||||
#endif
|
#endif
|
||||||
/* For Emacs:
|
/* For Emacs:
|
||||||
|
@ -3625,18 +3625,29 @@ static int dtls_ok(switch_core_session_t *session)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//?
|
//?
|
||||||
SWITCH_DECLARE(switch_call_direction_t) switch_ice_direction(switch_core_session_t *session)
|
static switch_call_direction_t switch_ice_direction(switch_rtp_engine_t *engine, switch_core_session_t *session)
|
||||||
{
|
{
|
||||||
switch_call_direction_t r = switch_channel_direction(session->channel);
|
switch_call_direction_t r = switch_channel_direction(session->channel);
|
||||||
|
switch_media_handle_t *smh;
|
||||||
|
|
||||||
|
switch_assert(session);
|
||||||
|
|
||||||
|
if (!(smh = session->media_handle)) {
|
||||||
|
return SWITCH_CALL_DIRECTION_OUTBOUND;
|
||||||
|
}
|
||||||
|
|
||||||
if (switch_channel_test_flag(session->channel, CF_3PCC)) {
|
if (switch_channel_test_flag(session->channel, CF_3PCC)) {
|
||||||
r = (r == SWITCH_CALL_DIRECTION_INBOUND) ? SWITCH_CALL_DIRECTION_OUTBOUND : SWITCH_CALL_DIRECTION_INBOUND;
|
r = (r == SWITCH_CALL_DIRECTION_INBOUND) ? SWITCH_CALL_DIRECTION_OUTBOUND : SWITCH_CALL_DIRECTION_INBOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (switch_rtp_has_dtls() && dtls_ok(smh->session)) {
|
||||||
|
r = engine->dtls_controller ? SWITCH_CALL_DIRECTION_OUTBOUND : SWITCH_CALL_DIRECTION_INBOUND;
|
||||||
|
} else {
|
||||||
if ((switch_channel_test_flag(session->channel, CF_REINVITE) || switch_channel_test_flag(session->channel, CF_RECOVERING))
|
if ((switch_channel_test_flag(session->channel, CF_REINVITE) || switch_channel_test_flag(session->channel, CF_RECOVERING))
|
||||||
&& switch_channel_test_flag(session->channel, CF_AVPF)) {
|
&& switch_channel_test_flag(session->channel, CF_AVPF)) {
|
||||||
r = SWITCH_CALL_DIRECTION_OUTBOUND;
|
r = SWITCH_CALL_DIRECTION_OUTBOUND;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -3745,7 +3756,8 @@ static switch_status_t check_ice(switch_media_handle_t *smh, switch_media_type_t
|
|||||||
} else if (!strcasecmp(attr->a_name, "ice-options")) {
|
} else if (!strcasecmp(attr->a_name, "ice-options")) {
|
||||||
engine->ice_in.options = switch_core_session_strdup(smh->session, attr->a_value);
|
engine->ice_in.options = switch_core_session_strdup(smh->session, attr->a_value);
|
||||||
} else if (!strcasecmp(attr->a_name, "setup")) {
|
} else if (!strcasecmp(attr->a_name, "setup")) {
|
||||||
if (!strcasecmp(attr->a_value, "passive") || !strcasecmp(attr->a_value, "actpass")) {
|
if (!strcasecmp(attr->a_value, "passive") ||
|
||||||
|
(!strcasecmp(attr->a_value, "actpass") && !switch_channel_test_flag(smh->session->channel, CF_REINVITE))) {
|
||||||
if (!engine->dtls_controller) {
|
if (!engine->dtls_controller) {
|
||||||
engine->new_dtls = 1;
|
engine->new_dtls = 1;
|
||||||
engine->new_ice = 1;
|
engine->new_ice = 1;
|
||||||
@ -4025,7 +4037,7 @@ static switch_status_t check_ice(switch_media_handle_t *smh, switch_media_type_t
|
|||||||
ICE_GOOGLE_JINGLE,
|
ICE_GOOGLE_JINGLE,
|
||||||
NULL
|
NULL
|
||||||
#else
|
#else
|
||||||
switch_ice_direction(smh->session) ==
|
switch_ice_direction(engine, smh->session) ==
|
||||||
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
||||||
&engine->ice_in
|
&engine->ice_in
|
||||||
#endif
|
#endif
|
||||||
@ -4080,7 +4092,7 @@ static switch_status_t check_ice(switch_media_handle_t *smh, switch_media_type_t
|
|||||||
ICE_GOOGLE_JINGLE,
|
ICE_GOOGLE_JINGLE,
|
||||||
NULL
|
NULL
|
||||||
#else
|
#else
|
||||||
switch_ice_direction(smh->session) ==
|
switch_ice_direction(engine, smh->session) ==
|
||||||
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
||||||
&engine->ice_in
|
&engine->ice_in
|
||||||
#endif
|
#endif
|
||||||
@ -8324,7 +8336,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi
|
|||||||
ICE_GOOGLE_JINGLE,
|
ICE_GOOGLE_JINGLE,
|
||||||
NULL
|
NULL
|
||||||
#else
|
#else
|
||||||
switch_ice_direction(session) ==
|
switch_ice_direction(a_engine, session) ==
|
||||||
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
||||||
&a_engine->ice_in
|
&a_engine->ice_in
|
||||||
#endif
|
#endif
|
||||||
@ -8377,7 +8389,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi
|
|||||||
ICE_GOOGLE_JINGLE,
|
ICE_GOOGLE_JINGLE,
|
||||||
NULL
|
NULL
|
||||||
#else
|
#else
|
||||||
switch_ice_direction(session) ==
|
switch_ice_direction(a_engine, session) ==
|
||||||
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
||||||
&a_engine->ice_in
|
&a_engine->ice_in
|
||||||
#endif
|
#endif
|
||||||
@ -8689,7 +8701,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi
|
|||||||
ICE_GOOGLE_JINGLE,
|
ICE_GOOGLE_JINGLE,
|
||||||
NULL
|
NULL
|
||||||
#else
|
#else
|
||||||
switch_ice_direction(session) ==
|
switch_ice_direction(t_engine, session) ==
|
||||||
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
||||||
&t_engine->ice_in
|
&t_engine->ice_in
|
||||||
#endif
|
#endif
|
||||||
@ -8739,7 +8751,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi
|
|||||||
ICE_GOOGLE_JINGLE,
|
ICE_GOOGLE_JINGLE,
|
||||||
NULL
|
NULL
|
||||||
#else
|
#else
|
||||||
switch_ice_direction(session) ==
|
switch_ice_direction(t_engine, session) ==
|
||||||
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
||||||
&t_engine->ice_in
|
&t_engine->ice_in
|
||||||
#endif
|
#endif
|
||||||
@ -9015,7 +9027,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi
|
|||||||
ICE_GOOGLE_JINGLE,
|
ICE_GOOGLE_JINGLE,
|
||||||
NULL
|
NULL
|
||||||
#else
|
#else
|
||||||
switch_ice_direction(session) ==
|
switch_ice_direction(v_engine, session) ==
|
||||||
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
||||||
&v_engine->ice_in
|
&v_engine->ice_in
|
||||||
#endif
|
#endif
|
||||||
@ -9066,7 +9078,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi
|
|||||||
ICE_GOOGLE_JINGLE,
|
ICE_GOOGLE_JINGLE,
|
||||||
NULL
|
NULL
|
||||||
#else
|
#else
|
||||||
switch_ice_direction(session) ==
|
switch_ice_direction(v_engine, session) ==
|
||||||
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
SWITCH_CALL_DIRECTION_OUTBOUND ? ICE_VANILLA : (ICE_VANILLA | ICE_CONTROLLED),
|
||||||
&v_engine->ice_in
|
&v_engine->ice_in
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user