mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 00:41:41 +00:00
FS-7602 add some of 3b2d00f3e65061393da10a4ba286ac72cdb3c16e from verto to sip and refactor some code to keep sip working like verto
This commit is contained in:
parent
51c6a6f7b5
commit
c9065a85b6
@ -332,6 +332,7 @@ SWITCH_DECLARE(switch_media_flow_t) switch_core_session_media_flow(switch_core_s
|
|||||||
SWITCH_DECLARE(switch_status_t) switch_core_media_get_vid_params(switch_core_session_t *session, switch_vid_params_t *vid_params);
|
SWITCH_DECLARE(switch_status_t) switch_core_media_get_vid_params(switch_core_session_t *session, switch_vid_params_t *vid_params);
|
||||||
SWITCH_DECLARE(switch_status_t) switch_core_media_set_video_file(switch_core_session_t *session, switch_file_handle_t *fh, switch_rw_t rw);
|
SWITCH_DECLARE(switch_status_t) switch_core_media_set_video_file(switch_core_session_t *session, switch_file_handle_t *fh, switch_rw_t rw);
|
||||||
SWITCH_DECLARE(switch_bool_t) switch_core_session_in_video_thread(switch_core_session_t *session);
|
SWITCH_DECLARE(switch_bool_t) switch_core_session_in_video_thread(switch_core_session_t *session);
|
||||||
|
SWITCH_DECLARE(switch_bool_t) switch_core_media_check_dtls(switch_core_session_t *session);
|
||||||
|
|
||||||
SWITCH_END_EXTERN_C
|
SWITCH_END_EXTERN_C
|
||||||
#endif
|
#endif
|
||||||
|
@ -197,6 +197,8 @@ SWITCH_DECLARE(char *) switch_stun_host_lookup(const char *host, switch_memory_p
|
|||||||
\return true or false
|
\return true or false
|
||||||
*/
|
*/
|
||||||
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_get_mapped_address(switch_stun_packet_attribute_t *attribute, char *ipstr, uint16_t *port);
|
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_get_mapped_address(switch_stun_packet_attribute_t *attribute, char *ipstr, uint16_t *port);
|
||||||
|
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_get_xor_mapped_address(switch_stun_packet_attribute_t *attribute, uint32_t cookie, char *ipstr, uint16_t *port);
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Extract a username from a packet attribute
|
\brief Extract a username from a packet attribute
|
||||||
|
@ -2676,9 +2676,15 @@ static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t
|
|||||||
stream->write_function(stream, "Dialplan \t%s\n", switch_str_nil(profile->dialplan));
|
stream->write_function(stream, "Dialplan \t%s\n", switch_str_nil(profile->dialplan));
|
||||||
stream->write_function(stream, "Context \t%s\n", switch_str_nil(profile->context));
|
stream->write_function(stream, "Context \t%s\n", switch_str_nil(profile->context));
|
||||||
stream->write_function(stream, "Challenge Realm \t%s\n", zstr(profile->challenge_realm) ? "auto_to" : profile->challenge_realm);
|
stream->write_function(stream, "Challenge Realm \t%s\n", zstr(profile->challenge_realm) ? "auto_to" : profile->challenge_realm);
|
||||||
|
|
||||||
for (x = 0; x < profile->rtpip_index; x++) {
|
for (x = 0; x < profile->rtpip_index; x++) {
|
||||||
stream->write_function(stream, "RTP-IP \t%s\n", switch_str_nil(profile->rtpip[x]));
|
stream->write_function(stream, "RTP-IP \t%s\n", switch_str_nil(profile->rtpip[x]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (x = 0; x < profile->rtpip_index6; x++) {
|
||||||
|
stream->write_function(stream, "RTP-IP \t%s\n", switch_str_nil(profile->rtpip6[x]));
|
||||||
|
}
|
||||||
|
|
||||||
if (profile->extrtpip) {
|
if (profile->extrtpip) {
|
||||||
stream->write_function(stream, "Ext-RTP-IP \t%s\n", profile->extrtpip);
|
stream->write_function(stream, "Ext-RTP-IP \t%s\n", profile->extrtpip);
|
||||||
}
|
}
|
||||||
@ -2980,6 +2986,9 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl
|
|||||||
for (x = 0; x < profile->rtpip_index; x++) {
|
for (x = 0; x < profile->rtpip_index; x++) {
|
||||||
stream->write_function(stream, " <rtp-ip>%s</rtp-ip>\n", switch_str_nil(profile->rtpip[x]));
|
stream->write_function(stream, " <rtp-ip>%s</rtp-ip>\n", switch_str_nil(profile->rtpip[x]));
|
||||||
}
|
}
|
||||||
|
for (x = 0; x < profile->rtpip_index6; x++) {
|
||||||
|
stream->write_function(stream, " <rtp-ip>%s</rtp-ip>\n", switch_str_nil(profile->rtpip6[x]));
|
||||||
|
}
|
||||||
if (profile->extrtpip) {
|
if (profile->extrtpip) {
|
||||||
stream->write_function(stream, " <ext-rtp-ip>%s</ext-rtp-ip>\n", profile->extrtpip);
|
stream->write_function(stream, " <ext-rtp-ip>%s</ext-rtp-ip>\n", profile->extrtpip);
|
||||||
}
|
}
|
||||||
@ -5467,7 +5476,7 @@ static void general_event_handler(switch_event_t *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(profile->rtpip[x], old_ip6)) {
|
if (!strcmp(profile->rtpip[x], old_ip6)) {
|
||||||
profile->rtpip[x] = switch_core_strdup(profile->pool, new_ip6);
|
profile->rtpip6[x] = switch_core_strdup(profile->pool, new_ip6);
|
||||||
rb++;
|
rb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -575,11 +575,14 @@ struct sofia_profile {
|
|||||||
char *shutdown_type;
|
char *shutdown_type;
|
||||||
char *extrtpip;
|
char *extrtpip;
|
||||||
char *rtpip[MAX_RTPIP];
|
char *rtpip[MAX_RTPIP];
|
||||||
|
char *rtpip6[MAX_RTPIP];
|
||||||
char *jb_msec;
|
char *jb_msec;
|
||||||
switch_payload_t te;
|
switch_payload_t te;
|
||||||
switch_payload_t recv_te;
|
switch_payload_t recv_te;
|
||||||
uint32_t rtpip_index;
|
uint32_t rtpip_index;
|
||||||
uint32_t rtpip_next;
|
uint32_t rtpip_next;
|
||||||
|
uint32_t rtpip_index6;
|
||||||
|
uint32_t rtpip_next6;
|
||||||
char *rtcp_audio_interval_msec;
|
char *rtcp_audio_interval_msec;
|
||||||
char *rtcp_video_interval_msec;
|
char *rtcp_video_interval_msec;
|
||||||
|
|
||||||
|
@ -4219,6 +4219,7 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
|
|||||||
profile->ob_failed_calls = 0;
|
profile->ob_failed_calls = 0;
|
||||||
profile->shutdown_type = "false";
|
profile->shutdown_type = "false";
|
||||||
profile->rtpip_index = 0;
|
profile->rtpip_index = 0;
|
||||||
|
profile->rtpip_index6 = 0;
|
||||||
|
|
||||||
if (xprofiledomain) {
|
if (xprofiledomain) {
|
||||||
profile->domain_name = switch_core_strdup(profile->pool, xprofiledomain);
|
profile->domain_name = switch_core_strdup(profile->pool, xprofiledomain);
|
||||||
@ -4717,10 +4718,19 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
|
|||||||
} else {
|
} else {
|
||||||
ip = strcasecmp(val, "auto") ? val : mod_sofia_globals.guess_ip;
|
ip = strcasecmp(val, "auto") ? val : mod_sofia_globals.guess_ip;
|
||||||
}
|
}
|
||||||
if (profile->rtpip_index < MAX_RTPIP) {
|
|
||||||
profile->rtpip[profile->rtpip_index++] = switch_core_strdup(profile->pool, ip);
|
if (strchr(ip, ':')) {
|
||||||
|
if (profile->rtpip_index < MAX_RTPIP) {
|
||||||
|
profile->rtpip6[profile->rtpip_index6++] = switch_core_strdup(profile->pool, ip);
|
||||||
|
} else {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Max IPs configured for profile %s.\n", profile->name);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Max IPs configured for profile %s.\n", profile->name);
|
if (profile->rtpip_index6 < MAX_RTPIP) {
|
||||||
|
profile->rtpip[profile->rtpip_index++] = switch_core_strdup(profile->pool, ip);
|
||||||
|
} else {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Max IPs configured for profile %s.\n", profile->name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (!strcasecmp(var, "sip-ip")) {
|
} else if (!strcasecmp(var, "sip-ip")) {
|
||||||
char *ip = mod_sofia_globals.guess_ip;
|
char *ip = mod_sofia_globals.guess_ip;
|
||||||
@ -5455,7 +5465,7 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
|
|||||||
profile->sipip = switch_core_strdup(profile->pool, mod_sofia_globals.guess_ip);
|
profile->sipip = switch_core_strdup(profile->pool, mod_sofia_globals.guess_ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!profile->rtpip[0]) {
|
if (!profile->rtpip[0] && !profile->rtpip6[0]) {
|
||||||
profile->rtpip[profile->rtpip_index++] = switch_core_strdup(profile->pool, mod_sofia_globals.guess_ip);
|
profile->rtpip[profile->rtpip_index++] = switch_core_strdup(profile->pool, mod_sofia_globals.guess_ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5488,7 +5498,7 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
|
|||||||
profile->sdp_username = switch_core_strdup(profile->pool, "FreeSWITCH");
|
profile->sdp_username = switch_core_strdup(profile->pool, "FreeSWITCH");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!profile->rtpip[0]) {
|
if (!profile->rtpip[0] && !profile->rtpip6[0]) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Setting ip to '127.0.0.1'\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Setting ip to '127.0.0.1'\n");
|
||||||
profile->rtpip[profile->rtpip_index++] = switch_core_strdup(profile->pool, "127.0.0.1");
|
profile->rtpip[profile->rtpip_index++] = switch_core_strdup(profile->pool, "127.0.0.1");
|
||||||
}
|
}
|
||||||
|
@ -92,9 +92,25 @@ void sofia_glue_attach_private(switch_core_session_t *session, sofia_profile_t *
|
|||||||
|
|
||||||
tech_pvt->profile = profile;
|
tech_pvt->profile = profile;
|
||||||
|
|
||||||
tech_pvt->mparams.rtpip = switch_core_session_strdup(session, profile->rtpip[profile->rtpip_next++]);
|
if (!zstr(profile->rtpip[profile->rtpip_next])) {
|
||||||
if (profile->rtpip_next >= profile->rtpip_index) {
|
tech_pvt->mparams.rtpip4 = switch_core_session_strdup(session, profile->rtpip[profile->rtpip_next++]);
|
||||||
profile->rtpip_next = 0;
|
tech_pvt->mparams.rtpip = tech_pvt->mparams.rtpip4;
|
||||||
|
|
||||||
|
if (profile->rtpip_next >= profile->rtpip_index) {
|
||||||
|
profile->rtpip_next = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!zstr(profile->rtpip[profile->rtpip_next6])) {
|
||||||
|
tech_pvt->mparams.rtpip6 = switch_core_session_strdup(session, profile->rtpip[profile->rtpip_next6++]);
|
||||||
|
|
||||||
|
if (zstr(tech_pvt->mparams.rtpip)) {
|
||||||
|
tech_pvt->mparams.rtpip = tech_pvt->mparams.rtpip6;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (profile->rtpip_next6 >= profile->rtpip_index6) {
|
||||||
|
profile->rtpip_next6 = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
profile->inuse++;
|
profile->inuse++;
|
||||||
|
@ -216,8 +216,6 @@ struct switch_media_handle_s {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static switch_bool_t check_dtls(switch_core_session_t *session);
|
|
||||||
|
|
||||||
static switch_srtp_crypto_suite_t SUITES[CRYPTO_INVALID] = {
|
static switch_srtp_crypto_suite_t SUITES[CRYPTO_INVALID] = {
|
||||||
{ "AEAD_AES_256_GCM_8", AEAD_AES_256_GCM_8, 44},
|
{ "AEAD_AES_256_GCM_8", AEAD_AES_256_GCM_8, 44},
|
||||||
{ "AEAD_AES_128_GCM_8", AEAD_AES_128_GCM_8, 28},
|
{ "AEAD_AES_128_GCM_8", AEAD_AES_128_GCM_8, 28},
|
||||||
@ -6589,13 +6587,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_sessi
|
|||||||
|
|
||||||
end:
|
end:
|
||||||
|
|
||||||
|
|
||||||
switch_channel_clear_flag(session->channel, CF_REINVITE);
|
switch_channel_clear_flag(session->channel, CF_REINVITE);
|
||||||
|
|
||||||
switch_core_recovery_track(session);
|
switch_core_recovery_track(session);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -8649,7 +8644,7 @@ static int check_engine(switch_rtp_engine_t *engine)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static switch_bool_t check_dtls(switch_core_session_t *session)
|
SWITCH_DECLARE(switch_bool_t) switch_core_media_check_dtls(switch_core_session_t *session)
|
||||||
{
|
{
|
||||||
switch_media_handle_t *smh;
|
switch_media_handle_t *smh;
|
||||||
switch_rtp_engine_t *a_engine, *v_engine;
|
switch_rtp_engine_t *a_engine, *v_engine;
|
||||||
@ -8661,7 +8656,7 @@ static switch_bool_t check_dtls(switch_core_session_t *session)
|
|||||||
return SWITCH_FALSE;
|
return SWITCH_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (switch_channel_down(session->channel)) {
|
if (!switch_channel_media_up(session->channel)) {
|
||||||
return SWITCH_FALSE;
|
return SWITCH_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8715,14 +8710,6 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_receive_message(switch_core_se
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SWITCH_MESSAGE_INDICATE_ANSWER:
|
|
||||||
case SWITCH_MESSAGE_INDICATE_PROGRESS:
|
|
||||||
case SWITCH_MESSAGE_ANSWER_EVENT:
|
|
||||||
case SWITCH_MESSAGE_PROGRESS_EVENT:
|
|
||||||
{
|
|
||||||
check_dtls(session);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ:
|
case SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ:
|
||||||
{
|
{
|
||||||
if (v_engine->rtp_session) {
|
if (v_engine->rtp_session) {
|
||||||
|
@ -487,6 +487,10 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state > CS_INIT && switch_channel_media_up(session->channel)) {
|
||||||
|
switch_core_media_check_dtls(session);
|
||||||
|
}
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case CS_NEW: /* Just created, Waiting for first instructions */
|
case CS_NEW: /* Just created, Waiting for first instructions */
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "(%s) State NEW\n", switch_channel_get_name(session->channel));
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "(%s) State NEW\n", switch_channel_get_name(session->channel));
|
||||||
|
@ -887,7 +887,7 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d
|
|||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG8, "STUN PACKET TYPE: %s\n",
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG8, "STUN PACKET TYPE: %s\n",
|
||||||
switch_stun_value_to_name(SWITCH_STUN_TYPE_PACKET_TYPE, packet->header.type));
|
switch_stun_value_to_name(SWITCH_STUN_TYPE_PACKET_TYPE, packet->header.type));
|
||||||
do {
|
do {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG8, "|---: STUN ATTR %s\n",
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG8, "|---: STUN ATTR %d %x %s\n", attr->type, attr->type,
|
||||||
switch_stun_value_to_name(SWITCH_STUN_TYPE_ATTRIBUTE, attr->type));
|
switch_stun_value_to_name(SWITCH_STUN_TYPE_ATTRIBUTE, attr->type));
|
||||||
|
|
||||||
switch (attr->type) {
|
switch (attr->type) {
|
||||||
@ -928,6 +928,14 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d
|
|||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG8, "|------: %s:%d\n", ip, port);
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG8, "|------: %s:%d\n", ip, port);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SWITCH_STUN_ATTR_XOR_MAPPED_ADDRESS:
|
||||||
|
if (attr->type) {
|
||||||
|
char ip[16];
|
||||||
|
uint16_t port;
|
||||||
|
switch_stun_packet_attribute_get_xor_mapped_address(attr, packet->header.cookie, ip, &port);
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG8, "|------: %s:%d\n", ip, port);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SWITCH_STUN_ATTR_USERNAME:
|
case SWITCH_STUN_ATTR_USERNAME:
|
||||||
if (attr->type) {
|
if (attr->type) {
|
||||||
switch_stun_packet_attribute_get_username(attr, username, sizeof(username));
|
switch_stun_packet_attribute_get_username(attr, username, sizeof(username));
|
||||||
|
@ -60,6 +60,7 @@ static const struct value_mapping PACKET_TYPES[] = {
|
|||||||
|
|
||||||
static const struct value_mapping ATTR_TYPES[] = {
|
static const struct value_mapping ATTR_TYPES[] = {
|
||||||
{SWITCH_STUN_ATTR_MAPPED_ADDRESS, "MAPPED_ADDRESS"},
|
{SWITCH_STUN_ATTR_MAPPED_ADDRESS, "MAPPED_ADDRESS"},
|
||||||
|
{SWITCH_STUN_ATTR_XOR_MAPPED_ADDRESS, "XOR_MAPPED_ADDRESS"},
|
||||||
{SWITCH_STUN_ATTR_RESPONSE_ADDRESS, "RESPONSE_ADDRESS"},
|
{SWITCH_STUN_ATTR_RESPONSE_ADDRESS, "RESPONSE_ADDRESS"},
|
||||||
{SWITCH_STUN_ATTR_CHANGE_REQUEST, "CHANGE_REQUEST"},
|
{SWITCH_STUN_ATTR_CHANGE_REQUEST, "CHANGE_REQUEST"},
|
||||||
{SWITCH_STUN_ATTR_SOURCE_ADDRESS, "SOURCE_ADDRESS"},
|
{SWITCH_STUN_ATTR_SOURCE_ADDRESS, "SOURCE_ADDRESS"},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user