diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c
index 209ae2577b..e4a2d6a5ee 100644
--- a/src/mod/endpoints/mod_sofia/mod_sofia.c
+++ b/src/mod/endpoints/mod_sofia/mod_sofia.c
@@ -77,15 +77,15 @@ static switch_status_t sofia_on_init(switch_core_session_t *session)
switch_assert(tech_pvt != NULL);
- tech_pvt->read_frame.buflen = SWITCH_RTP_MAX_BUF_LEN;
+
switch_mutex_lock(tech_pvt->sofia_mutex);
- sofia_glue_check_dtmf_type(tech_pvt);
+ switch_core_media_check_dtmf_type(session);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s SOFIA INIT\n", switch_channel_get_name(channel));
if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
- sofia_media_tech_absorb_sdp(tech_pvt);
+ switch_core_media_absorb_sdp(session);
}
if (switch_channel_test_flag(tech_pvt->channel, CF_RECOVERING) || switch_channel_test_flag(tech_pvt->channel, CF_RECOVERING_BRIDGE)) {
@@ -302,19 +302,8 @@ char *generate_pai_str(private_object_t *tech_pvt)
static stfu_instance_t *sofia_get_jb(switch_core_session_t *session, switch_media_type_t type)
{
private_object_t *tech_pvt = (private_object_t *) switch_core_session_get_private(session);
- switch_rtp_t *rtp;
-
- if (type == SWITCH_MEDIA_TYPE_AUDIO) {
- rtp = tech_pvt->rtp_session;
- } else {
- rtp = tech_pvt->video_rtp_session;
- }
- if (rtp && switch_rtp_ready(rtp)) {
- return switch_rtp_get_jitter_buffer(rtp);
- }
-
- return NULL;
+ return switch_core_media_get_jb(tech_pvt->session, type);
}
/* map QSIG cause codes to SIP from RFC4497 section 8.4.1 */
@@ -402,30 +391,13 @@ switch_status_t sofia_on_destroy(switch_core_session_t *session)
switch_mutex_unlock(tech_pvt->profile->flag_mutex);
}
- if (switch_core_codec_ready(&tech_pvt->read_codec)) {
- switch_core_codec_destroy(&tech_pvt->read_codec);
- }
-
- if (switch_core_codec_ready(&tech_pvt->write_codec)) {
- switch_core_codec_destroy(&tech_pvt->write_codec);
- }
-
- if (switch_core_codec_ready(&tech_pvt->video_read_codec)) {
- switch_core_codec_destroy(&tech_pvt->video_read_codec);
- }
-
- if (switch_core_codec_ready(&tech_pvt->video_write_codec)) {
- switch_core_codec_destroy(&tech_pvt->video_write_codec);
- }
-
- switch_core_session_unset_read_codec(session);
- switch_core_session_unset_write_codec(session);
switch_mutex_lock(tech_pvt->profile->flag_mutex);
tech_pvt->profile->inuse--;
switch_mutex_unlock(tech_pvt->profile->flag_mutex);
- sofia_glue_deactivate_rtp(tech_pvt);
+ switch_media_handle_destroy(session);
+
if (sofia_test_pflag(tech_pvt->profile, PFLAG_DESTROY) && !tech_pvt->profile->inuse) {
sofia_profile_destroy(tech_pvt->profile);
@@ -695,19 +667,19 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
if (switch_channel_test_flag(channel, CF_CONFERENCE)) {
tech_pvt->reply_contact = switch_core_session_sprintf(session, "%s;isfocus", tech_pvt->reply_contact);
}
-
+ //switch_core_media_set_local_sdp
if(sofia_test_flag(tech_pvt, TFLAG_3PCC_INVITE)) {
// SNARK: complete hack to get final ack sent when a 3pcc invite has been passed from the other leg in bypass_media mode.
// This code handles the pass_indication sent after the 3pcc ack is received by the other leg in the is_3pcc && is_proxy case below.
// Is there a better place to hang this...?
b_sdp = switch_channel_get_variable(channel, SWITCH_B_SDP_VARIABLE);
- sofia_media_tech_set_local_sdp(tech_pvt, b_sdp, SWITCH_TRUE);
+ switch_core_media_set_local_sdp(session, b_sdp, SWITCH_TRUE);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "3PCC-PROXY nomedia - sending ack\n");
nua_ack(tech_pvt->nh,
TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str),
SOATAG_REUSE_REJECTED(1),
SOATAG_RTP_SELECT(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"),
TAG_IF(sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)),
@@ -729,10 +701,10 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
is_3pcc = (sofia_test_pflag(tech_pvt->profile, PFLAG_3PCC_PROXY) && sofia_test_flag(tech_pvt, TFLAG_3PCC));
if (b_sdp && is_proxy && !is_3pcc) {
- sofia_media_tech_set_local_sdp(tech_pvt, b_sdp, SWITCH_TRUE);
+ switch_core_media_set_local_sdp(session, b_sdp, SWITCH_TRUE);
if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
- sofia_media_tech_patch_sdp(tech_pvt);
+ switch_core_media_patch_sdp(tech_pvt->session);
if (sofia_media_activate_rtp(tech_pvt) != SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_FALSE;
}
@@ -742,16 +714,16 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
if (is_3pcc) {
if(!is_proxy) {
- tech_pvt->num_codecs = 0;
- sofia_media_tech_prepare_codecs(tech_pvt);
- tech_pvt->local_sdp_str = NULL;
- sofia_glue_tech_choose_port(tech_pvt, 0);
- sofia_media_set_local_sdp(tech_pvt, NULL, 0, NULL, 0);
+ switch_core_media_prepare_codecs(tech_pvt->session, SWITCH_TRUE);
+ tech_pvt->mparams.local_sdp_str = NULL;
+
+ switch_core_media_choose_port(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, 0);
+ switch_core_media_gen_local_sdp(session, NULL, 0, NULL, 0);
} else {
- sofia_media_tech_set_local_sdp(tech_pvt, b_sdp, SWITCH_TRUE);
+ switch_core_media_set_local_sdp(session, b_sdp, SWITCH_TRUE);
if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
- sofia_media_tech_patch_sdp(tech_pvt);
+ switch_core_media_patch_sdp(tech_pvt->session);
if (sofia_media_activate_rtp(tech_pvt) != SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_FALSE;
}
@@ -765,7 +737,7 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
nua_respond(tech_pvt->nh, SIP_200_OK,
TAG_IF(is_proxy, NUTAG_AUTOANSWER(0)),
SIPTAG_CONTACT_STR(tech_pvt->profile->url),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str),
TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)),
SOATAG_REUSE_REJECTED(1), TAG_IF(is_proxy, SOATAG_RTP_SELECT(1)),
SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1),
@@ -779,7 +751,7 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)),
SIPTAG_CONTENT_TYPE_STR("application/sdp"),
- SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),
+ SIPTAG_PAYLOAD_STR(tech_pvt->mparams.local_sdp_str),
TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote),
SIPTAG_HEADER_STR("X-FS-Support: " FREESWITCH_SUPPORT)), TAG_END());
}
@@ -811,7 +783,8 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
return SWITCH_STATUS_SUCCESS;
}
- if ((is_proxy && !b_sdp) || sofia_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION) || !tech_pvt->iananame) {
+ if ((is_proxy && !b_sdp) || sofia_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION) ||
+ switch_core_media_codec_chosen(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO) != SWITCH_STATUS_SUCCESS) {
sofia_clear_flag_locked(tech_pvt, TFLAG_LATE_NEGOTIATION);
if (is_proxy) {
@@ -822,8 +795,8 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
if (switch_channel_direction(tech_pvt->channel) == SWITCH_CALL_DIRECTION_INBOUND) {
const char *r_sdp = switch_channel_get_variable(channel, SWITCH_R_SDP_VARIABLE);
- tech_pvt->num_codecs = 0;
- sofia_media_tech_prepare_codecs(tech_pvt);
+
+ switch_core_media_prepare_codecs(tech_pvt->session, SWITCH_TRUE);
if (sofia_media_tech_media(tech_pvt, r_sdp) != SWITCH_STATUS_SUCCESS) {
switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "CODEC NEGOTIATION ERROR");
@@ -835,20 +808,20 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
}
}
- if ((status = sofia_glue_tech_choose_port(tech_pvt, 0)) != SWITCH_STATUS_SUCCESS) {
+ if ((status = switch_core_media_choose_port(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, 0)) != SWITCH_STATUS_SUCCESS) {
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
return status;
}
- sofia_media_set_local_sdp(tech_pvt, NULL, 0, NULL, 0);
+ switch_core_media_gen_local_sdp(session, NULL, 0, NULL, 0);
if (sofia_media_activate_rtp(tech_pvt) != SWITCH_STATUS_SUCCESS) {
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
}
if (tech_pvt->nh) {
- if (tech_pvt->local_sdp_str) {
+ if (tech_pvt->mparams.local_sdp_str) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Local SDP %s:\n%s\n", switch_channel_get_name(channel),
- tech_pvt->local_sdp_str);
+ tech_pvt->mparams.local_sdp_str);
}
}
}
@@ -876,12 +849,12 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
cid = generate_pai_str(tech_pvt);
- if (switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE) && tech_pvt->early_sdp) {
+ if (switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE) && tech_pvt->mparams.early_sdp) {
char *a, *b;
/* start at the s= line to avoid some devices who update the o= between messages */
- a = strstr(tech_pvt->early_sdp, "s=");
- b = strstr(tech_pvt->local_sdp_str, "s=");
+ a = strstr(tech_pvt->mparams.early_sdp, "s=");
+ b = strstr(tech_pvt->mparams.local_sdp_str, "s=");
if (!a || !b || strcmp(a, b)) {
@@ -910,7 +883,7 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
NUTAG_SESSION_REFRESHER(tech_pvt->session_refresher),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str),
SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"),
TAG_IF(sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)),
TAG_IF(is_proxy, SOATAG_RTP_SELECT(1)),
@@ -929,7 +902,7 @@ static switch_status_t sofia_answer_channel(switch_core_session_t *session)
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
SIPTAG_CONTENT_TYPE_STR("application/sdp"),
- SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),
+ SIPTAG_PAYLOAD_STR(tech_pvt->mparams.local_sdp_str),
TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote),
SIPTAG_HEADER_STR("X-FS-Support: " FREESWITCH_SUPPORT)), TAG_END());
@@ -951,7 +924,7 @@ static switch_status_t sofia_read_video_frame(switch_core_session_t *session, sw
return SWITCH_STATUS_FALSE;
}
#if 0
- while (!(tech_pvt->video_read_codec.implementation && switch_rtp_ready(tech_pvt->video_rtp_session) && !switch_channel_test_flag(channel, CF_REQ_MEDIA))) {
+ while (!(tech_pvt->video_read_codec.implementation && switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_VIDEO) && !switch_channel_test_flag(channel, CF_REQ_MEDIA))) {
switch_ivr_parse_all_messages(tech_pvt->session);
if (--sanity && switch_channel_ready(channel)) {
@@ -974,7 +947,7 @@ static switch_status_t sofia_write_video_frame(switch_core_session_t *session, s
switch_assert(tech_pvt != NULL);
#if 0
- while (!(tech_pvt->video_read_codec.implementation && switch_rtp_ready(tech_pvt->video_rtp_session))) {
+ while (!(tech_pvt->video_read_codec.implementation && switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_VIDEO))) {
if (switch_channel_ready(channel)) {
switch_yield(10000);
} else {
@@ -995,8 +968,11 @@ static switch_status_t sofia_write_video_frame(switch_core_session_t *session, s
return SWITCH_STATUS_SUCCESS;
}
- return switch_core_media_write_frame(session, frame, flags, stream_id, SWITCH_MEDIA_TYPE_VIDEO);
-
+ if (switch_core_media_write_frame(session, frame, flags, stream_id, SWITCH_MEDIA_TYPE_VIDEO)) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ return SWITCH_STATUS_FALSE;
}
static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
@@ -1004,7 +980,7 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
private_object_t *tech_pvt = switch_core_session_get_private(session);
switch_channel_t *channel = switch_core_session_get_channel(session);
uint32_t sanity = 1000;
- switch_rtcp_frame_t rtcp_frame;
+ switch_status_t status = SWITCH_STATUS_FALSE;
switch_assert(tech_pvt != NULL);
@@ -1017,7 +993,7 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
return SWITCH_STATUS_FALSE;
}
- while (!(tech_pvt->read_codec.implementation && switch_rtp_ready(tech_pvt->rtp_session) && !switch_channel_test_flag(channel, CF_REQ_MEDIA))) {
+ while (!(switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO) && !switch_channel_test_flag(channel, CF_REQ_MEDIA))) {
switch_ivr_parse_all_messages(tech_pvt->session);
if (--sanity && switch_channel_up(channel)) {
switch_yield(10000);
@@ -1027,304 +1003,18 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
}
}
- tech_pvt->read_frame.datalen = 0;
+
sofia_set_flag_locked(tech_pvt, TFLAG_READING);
- if (sofia_test_flag(tech_pvt, TFLAG_HUP) || sofia_test_flag(tech_pvt, TFLAG_BYE) || !tech_pvt->read_codec.implementation ||
- !switch_core_codec_ready(&tech_pvt->read_codec)) {
+ if (sofia_test_flag(tech_pvt, TFLAG_HUP) || sofia_test_flag(tech_pvt, TFLAG_BYE)) {
return SWITCH_STATUS_FALSE;
}
- if (sofia_test_flag(tech_pvt, TFLAG_IO)) {
- switch_status_t status;
-
- if (!sofia_test_flag(tech_pvt, TFLAG_RTP)) {
- return SWITCH_STATUS_GENERR;
- }
-
- switch_assert(tech_pvt->rtp_session != NULL);
- tech_pvt->read_frame.datalen = 0;
-
-
- if (sofia_test_flag(tech_pvt, TFLAG_SIMPLIFY) && sofia_test_flag(tech_pvt, TFLAG_GOT_ACK)) {
- if (sofia_glue_tech_simplify(tech_pvt)) {
- sofia_clear_flag(tech_pvt, TFLAG_SIMPLIFY);
- }
- }
-
- while (sofia_test_flag(tech_pvt, TFLAG_IO) && tech_pvt->read_frame.datalen == 0) {
- tech_pvt->read_frame.flags = SFF_NONE;
-
- status = switch_rtp_zerocopy_read_frame(tech_pvt->rtp_session, &tech_pvt->read_frame, flags);
-
- if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
- if (status == SWITCH_STATUS_TIMEOUT) {
-
- if (sofia_test_flag(tech_pvt, TFLAG_SIP_HOLD)) {
- switch_core_media_toggle_hold(session, 0);
- sofia_clear_flag_locked(tech_pvt, TFLAG_SIP_HOLD);
- switch_channel_clear_flag(channel, CF_LEG_HOLDING);
- }
-
- if (switch_channel_get_variable(tech_pvt->channel, "execute_on_media_timeout")) {
- *frame = &tech_pvt->read_frame;
- switch_set_flag((*frame), SFF_CNG);
- (*frame)->datalen = tech_pvt->read_impl.encoded_bytes_per_packet;
- memset((*frame)->data, 0, (*frame)->datalen);
- switch_channel_execute_on(tech_pvt->channel, "execute_on_media_timeout");
- return SWITCH_STATUS_SUCCESS;
- }
-
-
- switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_MEDIA_TIMEOUT);
- }
- return status;
- }
-
- /* Try to read an RTCP frame, if successful raise an event */
- if (switch_rtcp_zerocopy_read_frame(tech_pvt->rtp_session, &rtcp_frame) == SWITCH_STATUS_SUCCESS) {
- switch_event_t *event;
-
- if (switch_event_create(&event, SWITCH_EVENT_RECV_RTCP_MESSAGE) == SWITCH_STATUS_SUCCESS) {
- char value[30];
- char header[50];
- int i;
-
- char *uuid = switch_core_session_get_uuid(session);
- if (uuid) {
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
- }
-
- snprintf(value, sizeof(value), "%.8x", rtcp_frame.ssrc);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SSRC", value);
-
- snprintf(value, sizeof(value), "%u", rtcp_frame.ntp_msw);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "NTP-Most-Significant-Word", value);
-
- snprintf(value, sizeof(value), "%u", rtcp_frame.ntp_lsw);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "NTP-Least-Significant-Word", value);
-
- snprintf(value, sizeof(value), "%u", rtcp_frame.timestamp);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTP-Timestamp", value);
-
- snprintf(value, sizeof(value), "%u", rtcp_frame.packet_count);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Sender-Packet-Count", value);
-
- snprintf(value, sizeof(value), "%u", rtcp_frame.octect_count);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Octect-Packet-Count", value);
-
- snprintf(value, sizeof(value), "%" SWITCH_SIZE_T_FMT, tech_pvt->read_frame.timestamp);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Last-RTP-Timestamp", value);
-
- snprintf(value, sizeof(value), "%u", tech_pvt->read_frame.rate);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTP-Rate", value);
-
- snprintf(value, sizeof(value), "%" SWITCH_TIME_T_FMT, switch_time_now());
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Capture-Time", value);
-
- // Add sources info
- for (i = 0; i < rtcp_frame.report_count; i++) {
- snprintf(header, sizeof(header), "Source%u-SSRC", i);
- snprintf(value, sizeof(value), "%.8x", rtcp_frame.reports[i].ssrc);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
- snprintf(header, sizeof(header), "Source%u-Fraction", i);
- snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].fraction);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
- snprintf(header, sizeof(header), "Source%u-Lost", i);
- snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].lost);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
- snprintf(header, sizeof(header), "Source%u-Highest-Sequence-Number-Received", i);
- snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].highest_sequence_number_received);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
- snprintf(header, sizeof(header), "Source%u-Jitter", i);
- snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].jitter);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
- snprintf(header, sizeof(header), "Source%u-LSR", i);
- snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].lsr);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
- snprintf(header, sizeof(header), "Source%u-DLSR", i);
- snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].dlsr);
- switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
- }
-
- switch_event_fire(&event);
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10, "Dispatched RTCP event\n");
- }
- }
-
- /* Fast PASS! */
- if (switch_test_flag((&tech_pvt->read_frame), SFF_PROXY_PACKET)) {
- sofia_clear_flag_locked(tech_pvt, TFLAG_READING);
- *frame = &tech_pvt->read_frame;
- return SWITCH_STATUS_SUCCESS;
- }
-
- if (switch_rtp_has_dtmf(tech_pvt->rtp_session)) {
- switch_dtmf_t dtmf = { 0 };
- switch_rtp_dequeue_dtmf(tech_pvt->rtp_session, &dtmf);
- switch_channel_queue_dtmf(channel, &dtmf);
- }
-
- if (tech_pvt->read_frame.datalen > 0) {
- uint32_t bytes = 0;
- int frames = 1;
-
- if (!switch_test_flag((&tech_pvt->read_frame), SFF_CNG)) {
- if (!tech_pvt->read_codec.implementation || !switch_core_codec_ready(&tech_pvt->read_codec)) {
- *frame = NULL;
- return SWITCH_STATUS_GENERR;
- }
-
- if ((tech_pvt->read_frame.datalen % 10) == 0 &&
- sofia_test_media_flag(tech_pvt->profile, SCMF_AUTOFIX_TIMING) && tech_pvt->check_frames < MAX_CODEC_CHECK_FRAMES) {
- tech_pvt->check_frames++;
-
- if (!tech_pvt->read_impl.encoded_bytes_per_packet) {
- tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES;
- goto skip;
- }
-
- if (tech_pvt->last_ts && tech_pvt->read_frame.datalen != tech_pvt->read_impl.encoded_bytes_per_packet) {
- uint32_t codec_ms = (int) (tech_pvt->read_frame.timestamp -
- tech_pvt->last_ts) / (tech_pvt->read_impl.samples_per_second / 1000);
-
- if ((codec_ms % 10) != 0 || codec_ms > tech_pvt->read_impl.samples_per_packet * 10) {
- tech_pvt->last_ts = 0;
- goto skip;
- }
-
-
- if (tech_pvt->last_codec_ms && tech_pvt->last_codec_ms == codec_ms) {
- tech_pvt->mismatch_count++;
- }
-
- tech_pvt->last_codec_ms = codec_ms;
-
- if (tech_pvt->mismatch_count > MAX_MISMATCH_FRAMES) {
- if (switch_rtp_ready(tech_pvt->rtp_session) && codec_ms != tech_pvt->codec_ms) {
- const char *val;
- int rtp_timeout_sec = 0;
- int rtp_hold_timeout_sec = 0;
-
- if (codec_ms > 120) { /* yeah right */
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
- "Your phone is trying to send timestamps that suggest an increment of %dms per packet\n"
- "That seems hard to believe so I am going to go on ahead and um ignore that, mmkay?\n",
- (int) codec_ms);
- tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES;
- goto skip;
- }
-
- tech_pvt->read_frame.datalen = 0;
-
- if (codec_ms != tech_pvt->codec_ms) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
- "Asynchronous PTIME not supported, changing our end from %d to %d\n",
- (int) tech_pvt->codec_ms,
- (int) codec_ms
- );
-
- switch_channel_set_variable_printf(channel, "sip_h_X-Broken-PTIME", "Adv=%d;Sent=%d",
- (int) tech_pvt->codec_ms, (int) codec_ms);
-
- tech_pvt->codec_ms = codec_ms;
- }
-
- if (switch_core_media_set_codec(tech_pvt->session, 2, tech_pvt->profile->codec_flags) != SWITCH_STATUS_SUCCESS) {
- *frame = NULL;
- return SWITCH_STATUS_GENERR;
- }
-
- if ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_timeout_sec"))) {
- int v = atoi(val);
- if (v >= 0) {
- rtp_timeout_sec = v;
- }
- }
-
- if ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_hold_timeout_sec"))) {
- int v = atoi(val);
- if (v >= 0) {
- rtp_hold_timeout_sec = v;
- }
- }
-
- if (rtp_timeout_sec) {
- tech_pvt->max_missed_packets = (tech_pvt->read_impl.samples_per_second * rtp_timeout_sec) /
- tech_pvt->read_impl.samples_per_packet;
-
- switch_rtp_set_max_missed_packets(tech_pvt->rtp_session, tech_pvt->max_missed_packets);
- if (!rtp_hold_timeout_sec) {
- rtp_hold_timeout_sec = rtp_timeout_sec * 10;
- }
- }
-
- if (rtp_hold_timeout_sec) {
- tech_pvt->max_missed_hold_packets = (tech_pvt->read_impl.samples_per_second * rtp_hold_timeout_sec) /
- tech_pvt->read_impl.samples_per_packet;
- }
-
-
- tech_pvt->check_frames = 0;
- tech_pvt->last_ts = 0;
-
- /* inform them of the codec they are actually sending */
-#if 0
- if (++tech_pvt->codec_reinvites > 2) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
- "Ok, some devices *cough* X-lite *cough*\n"
- "seem to continue to lie over and over again so I guess we'll\n"
- "leave well-enough alone and let them lie\n");
- } else {
- sofia_glue_do_invite(session);
- }
-#endif
- *frame = &tech_pvt->read_frame;
- switch_set_flag((*frame), SFF_CNG);
- (*frame)->datalen = tech_pvt->read_impl.encoded_bytes_per_packet;
- memset((*frame)->data, 0, (*frame)->datalen);
- return SWITCH_STATUS_SUCCESS;
- }
-
- }
-
- } else {
- tech_pvt->mismatch_count = 0;
- }
-
- tech_pvt->last_ts = tech_pvt->read_frame.timestamp;
-
-
- } else {
- tech_pvt->mismatch_count = 0;
- tech_pvt->last_ts = 0;
- }
- skip:
-
- if ((bytes = tech_pvt->read_impl.encoded_bytes_per_packet)) {
- frames = (tech_pvt->read_frame.datalen / bytes);
- }
- tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_impl.samples_per_packet);
-
- if (tech_pvt->read_frame.datalen == 0) {
- continue;
- }
- }
- break;
- }
- }
- }
+ status = switch_core_media_read_frame(session, frame, flags, stream_id, SWITCH_MEDIA_TYPE_AUDIO);
sofia_clear_flag_locked(tech_pvt, TFLAG_READING);
- if (tech_pvt->read_frame.datalen == 0) {
- *frame = NULL;
- return SWITCH_STATUS_GENERR;
- }
-
- *frame = &tech_pvt->read_frame;
-
- return SWITCH_STATUS_SUCCESS;
+ return status;
}
static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
@@ -1332,11 +1022,10 @@ static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_
private_object_t *tech_pvt = switch_core_session_get_private(session);
switch_channel_t *channel = switch_core_session_get_channel(session);
switch_status_t status = SWITCH_STATUS_SUCCESS;
- int bytes = 0, samples = 0, frames = 0;
switch_assert(tech_pvt != NULL);
- while (!(tech_pvt->read_codec.implementation && switch_rtp_ready(tech_pvt->rtp_session) && !switch_channel_test_flag(channel, CF_REQ_MEDIA))) {
+ while (!(switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO) && !switch_channel_test_flag(channel, CF_REQ_MEDIA))) {
if (switch_channel_ready(channel)) {
switch_yield(10000);
} else {
@@ -1344,14 +1033,12 @@ static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_
}
}
- if (!tech_pvt->read_codec.implementation || !switch_core_codec_ready(&tech_pvt->read_codec)) {
- return SWITCH_STATUS_GENERR;
- }
if (sofia_test_flag(tech_pvt, TFLAG_HUP)) {
return SWITCH_STATUS_FALSE;
}
+#if 0
if (!sofia_test_flag(tech_pvt, TFLAG_RTP)) {
return SWITCH_STATUS_GENERR;
}
@@ -1359,26 +1046,18 @@ static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_
if (!sofia_test_flag(tech_pvt, TFLAG_IO)) {
return SWITCH_STATUS_SUCCESS;
}
+#endif
- if (sofia_test_flag(tech_pvt, TFLAG_BYE) || !tech_pvt->read_codec.implementation || !switch_core_codec_ready(&tech_pvt->read_codec)) {
+ if (sofia_test_flag(tech_pvt, TFLAG_BYE)) {
return SWITCH_STATUS_FALSE;
}
sofia_set_flag_locked(tech_pvt, TFLAG_WRITING);
- if (!switch_test_flag(frame, SFF_CNG) && !switch_test_flag(frame, SFF_PROXY_PACKET)) {
- if (tech_pvt->read_impl.encoded_bytes_per_packet) {
- bytes = tech_pvt->read_impl.encoded_bytes_per_packet;
- frames = ((int) frame->datalen / bytes);
- } else
- frames = 1;
-
- samples = frames * tech_pvt->read_impl.samples_per_packet;
+ if (switch_core_media_write_frame(session, frame, flags, stream_id, SWITCH_MEDIA_TYPE_AUDIO)) {
+ status = SWITCH_STATUS_SUCCESS;
}
- tech_pvt->timestamp_send += samples;
- switch_rtp_write_frame(tech_pvt->rtp_session, frame);
-
sofia_clear_flag_locked(tech_pvt, TFLAG_WRITING);
return status;
}
@@ -1393,11 +1072,11 @@ static switch_status_t sofia_kill_channel(switch_core_session_t *session, int si
switch (sig) {
case SWITCH_SIG_BREAK:
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- switch_rtp_break(tech_pvt->rtp_session);
+ if (switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO)) {
+ switch_core_media_break(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO);
}
- if (switch_rtp_ready(tech_pvt->video_rtp_session)) {
- switch_rtp_break(tech_pvt->video_rtp_session);
+ if (switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_VIDEO)) {
+ switch_core_media_break(tech_pvt->session, SWITCH_MEDIA_TYPE_VIDEO);
}
break;
case SWITCH_SIG_KILL:
@@ -1405,11 +1084,11 @@ static switch_status_t sofia_kill_channel(switch_core_session_t *session, int si
sofia_clear_flag_locked(tech_pvt, TFLAG_IO);
sofia_set_flag_locked(tech_pvt, TFLAG_HUP);
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- switch_rtp_kill_socket(tech_pvt->rtp_session);
+ if (switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO)) {
+ switch_core_media_kill_socket(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO);
}
- if (switch_rtp_ready(tech_pvt->video_rtp_session)) {
- switch_rtp_kill_socket(tech_pvt->video_rtp_session);
+ if (switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_VIDEO)) {
+ switch_core_media_kill_socket(tech_pvt->session, SWITCH_MEDIA_TYPE_VIDEO);
}
break;
}
@@ -1417,44 +1096,6 @@ static switch_status_t sofia_kill_channel(switch_core_session_t *session, int si
}
-static void start_udptl(private_object_t *tech_pvt, switch_t38_options_t *t38_options)
-{
-
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- char *remote_host = switch_rtp_get_remote_host(tech_pvt->rtp_session);
- switch_port_t remote_port = switch_rtp_get_remote_port(tech_pvt->rtp_session);
- const char *err, *val;
-
- sofia_clear_flag(tech_pvt, TFLAG_NOTIMER_DURING_BRIDGE);
- switch_rtp_udptl_mode(tech_pvt->rtp_session);
-
- if (!t38_options || !t38_options->remote_ip) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "No remote address\n");
- return;
- }
-
- if (remote_host && remote_port && remote_port == t38_options->remote_port && !strcmp(remote_host, t38_options->remote_ip)) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "Remote address:port [%s:%d] has not changed.\n",
- t38_options->remote_ip, t38_options->remote_port);
- return;
- }
-
- if (switch_rtp_set_remote_address(tech_pvt->rtp_session, t38_options->remote_ip,
- t38_options->remote_port, 0, SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_ERROR, "IMAGE UDPTL REPORTS ERROR: [%s]\n", err);
- } else {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "IMAGE UDPTL CHANGING DEST TO: [%s:%d]\n",
- t38_options->remote_ip, t38_options->remote_port);
- if (!sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_RTP_AUTOADJ) &&
- !((val = switch_channel_get_variable(tech_pvt->channel, "disable_udptl_auto_adjust")) && switch_true(val))) {
- /* Reactivate the NAT buster flag. */
- switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_AUTOADJ);
- }
- }
- }
-}
-
-
static switch_status_t sofia_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
{
private_object_t *tech_pvt;
@@ -1464,21 +1105,22 @@ static switch_status_t sofia_send_dtmf(switch_core_session_t *session, const swi
tech_pvt = (private_object_t *) switch_core_session_get_private(session);
switch_assert(tech_pvt != NULL);
- if (sofia_test_flag(tech_pvt, TFLAG_DROP_DTMF)) {
+ if (switch_channel_test_flag(tech_pvt->channel, CF_DROP_DTMF)) {
return SWITCH_STATUS_SUCCESS;
}
- dtmf_type = tech_pvt->dtmf_type;
+ dtmf_type = tech_pvt->mparams.dtmf_type;
/* We only can send INFO when we have no media */
- if (!tech_pvt->rtp_session || !switch_channel_media_ready(tech_pvt->channel) || switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE)) {
+ if (!switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO) ||
+ !switch_channel_media_ready(tech_pvt->channel) || switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE)) {
dtmf_type = DTMF_INFO;
}
switch (dtmf_type) {
case DTMF_2833:
{
- return switch_rtp_queue_rfc2833(tech_pvt->rtp_session, dtmf);
+ return switch_core_media_queue_rfc2833(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, dtmf);
}
case DTMF_INFO:
{
@@ -1535,191 +1177,25 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
case SWITCH_MESSAGE_INDICATE_RECOVERY_REFRESH:
case SWITCH_MESSAGE_INDICATE_APPLICATION_EXEC:
break;
-
- case SWITCH_MESSAGE_INDICATE_PROXY_MEDIA:
+ case SWITCH_MESSAGE_INDICATE_MEDIA_RENEG:
{
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- if (msg->numeric_arg) {
- switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA);
- } else {
- switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA);
- }
+ if (msg->string_arg) {
+ sofia_set_pflag(tech_pvt->profile, PFLAG_RENEG_ON_REINVITE);
+ sofia_clear_flag(tech_pvt, TFLAG_ENABLE_SOA);
}
+
+ sofia_glue_do_invite(session);
}
break;
-
- case SWITCH_MESSAGE_INDICATE_JITTER_BUFFER:
- {
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- int len = 0, maxlen = 0, qlen = 0, maxqlen = 50, max_drift = 0;
-
- if (msg->string_arg) {
- char *p, *q;
- const char *s;
-
- if (!strcasecmp(msg->string_arg, "pause")) {
- switch_rtp_pause_jitter_buffer(tech_pvt->rtp_session, SWITCH_TRUE);
- goto end;
- } else if (!strcasecmp(msg->string_arg, "resume")) {
- switch_rtp_pause_jitter_buffer(tech_pvt->rtp_session, SWITCH_FALSE);
- goto end;
- } else if (!strncasecmp(msg->string_arg, "debug:", 6)) {
- s = msg->string_arg + 6;
- if (s && !strcmp(s, "off")) {
- s = NULL;
- }
- status = switch_rtp_debug_jitter_buffer(tech_pvt->rtp_session, s);
- goto end;
- }
-
-
- if ((len = atoi(msg->string_arg))) {
- qlen = len / (tech_pvt->read_impl.microseconds_per_packet / 1000);
- if (qlen < 1) {
- qlen = 3;
- }
- }
-
- if (qlen) {
- if ((p = strchr(msg->string_arg, ':'))) {
- p++;
- maxlen = atol(p);
- if ((q = strchr(p, ':'))) {
- q++;
- max_drift = abs(atol(q));
- }
- }
- }
-
-
- if (maxlen) {
- maxqlen = maxlen / (tech_pvt->read_impl.microseconds_per_packet / 1000);
- }
- }
-
- if (qlen) {
- if (maxqlen < qlen) {
- maxqlen = qlen * 5;
- }
- if (switch_rtp_activate_jitter_buffer(tech_pvt->rtp_session, qlen, maxqlen,
- tech_pvt->read_impl.samples_per_packet,
- tech_pvt->read_impl.samples_per_second, max_drift) == SWITCH_STATUS_SUCCESS) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session),
- SWITCH_LOG_DEBUG, "Setting Jitterbuffer to %dms (%d frames) (%d max frames) (%d max drift)\n",
- len, qlen, maxqlen, max_drift);
- switch_channel_set_flag(tech_pvt->channel, CF_JITTERBUFFER);
- if (!switch_false(switch_channel_get_variable(tech_pvt->channel, "sip_jitter_buffer_plc"))) {
- switch_channel_set_flag(tech_pvt->channel, CF_JITTERBUFFER_PLC);
- }
- } else {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session),
- SWITCH_LOG_WARNING, "Error Setting Jitterbuffer to %dms (%d frames)\n", len, qlen);
- }
-
- } else {
- switch_rtp_deactivate_jitter_buffer(tech_pvt->rtp_session);
- }
- }
- }
- break;
- case SWITCH_MESSAGE_INDICATE_DEBUG_AUDIO:
- {
- if (switch_rtp_ready(tech_pvt->rtp_session) && !zstr(msg->string_array_arg[0]) && !zstr(msg->string_array_arg[1])) {
- int32_t flags = 0;
- if (!strcasecmp(msg->string_array_arg[0], "read")) {
- flags |= SWITCH_RTP_FLAG_DEBUG_RTP_READ;
- } else if (!strcasecmp(msg->string_array_arg[0], "write")) {
- flags |= SWITCH_RTP_FLAG_DEBUG_RTP_WRITE;
- } else if (!strcasecmp(msg->string_array_arg[0], "both")) {
- flags |= SWITCH_RTP_FLAG_DEBUG_RTP_READ | SWITCH_RTP_FLAG_DEBUG_RTP_WRITE;
- }
-
- if (flags) {
- if (switch_true(msg->string_array_arg[1])) {
- switch_rtp_set_flag(tech_pvt->rtp_session, flags);
- } else {
- switch_rtp_clear_flag(tech_pvt->rtp_session, flags);
- }
- } else {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid Options\n");
- }
- }
- }
- status = SWITCH_STATUS_FALSE;
- goto end;
- case SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY:
- if (tech_pvt->rtp_session && switch_rtp_test_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833)) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Pass 2833 mode may not work on a transcoded call.\n");
- }
- goto end;
-
case SWITCH_MESSAGE_INDICATE_BRIDGE:
- {
-
switch_channel_set_variable(channel, SOFIA_REPLACES_HEADER, NULL);
-
- if (switch_true(switch_channel_get_variable(tech_pvt->channel, "sip_auto_simplify"))) {
+
+ if (switch_true(switch_channel_get_variable(channel, "sip_auto_simplify"))) {
sofia_set_flag(tech_pvt, TFLAG_SIMPLIFY);
}
-
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- const char *val;
- int ok = 0;
-
- if (!(val = switch_channel_get_variable(tech_pvt->channel, "sip_jitter_buffer_during_bridge")) || switch_false(val)) {
- if (switch_channel_test_flag(tech_pvt->channel, CF_JITTERBUFFER) && switch_channel_test_cap_partner(tech_pvt->channel, CC_FS_RTP)) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
- "%s PAUSE Jitterbuffer\n", switch_channel_get_name(channel));
- switch_rtp_pause_jitter_buffer(tech_pvt->rtp_session, SWITCH_TRUE);
- sofia_set_flag(tech_pvt, TFLAG_JB_PAUSED);
- }
- }
-
- if (sofia_test_flag(tech_pvt, TFLAG_PASS_RFC2833) && switch_channel_test_flag_partner(channel, CF_FS_RTP)) {
- switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833);
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
- "%s activate passthru 2833 mode.\n", switch_channel_get_name(channel));
- }
-
- if ((val = switch_channel_get_variable(channel, "rtp_notimer_during_bridge"))) {
- ok = switch_true(val);
- } else {
- ok = sofia_test_pflag(tech_pvt->profile, PFLAG_RTP_NOTIMER_DURING_BRIDGE);
- }
-
- if (ok && !switch_rtp_test_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER)) {
- ok = 0;
- }
-
- if (ok) {
- switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER);
- switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_NOBLOCK);
- sofia_set_flag(tech_pvt, TFLAG_NOTIMER_DURING_BRIDGE);
- }
-
- if (ok && sofia_test_flag(tech_pvt, TFLAG_NOTIMER_DURING_BRIDGE)) {
- /* these are not compat */
- ok = 0;
- } else {
- if ((val = switch_channel_get_variable(channel, "rtp_autoflush_during_bridge"))) {
- ok = switch_true(val);
- } else {
- ok = sofia_test_pflag(tech_pvt->profile, PFLAG_RTP_AUTOFLUSH_DURING_BRIDGE);
- }
- }
-
- if (ok) {
- rtp_flush_read_buffer(tech_pvt->rtp_session, SWITCH_RTP_FLUSH_STICK);
- sofia_set_flag(tech_pvt, TFLAG_AUTOFLUSH_DURING_BRIDGE);
- } else {
- rtp_flush_read_buffer(tech_pvt->rtp_session, SWITCH_RTP_FLUSH_ONCE);
- }
-
- }
- }
- goto end;
+ break;
case SWITCH_MESSAGE_INDICATE_BLIND_TRANSFER_RESPONSE:
{
const char *event = switch_channel_get_variable(channel, "sip_blind_transfer_event");
@@ -1742,49 +1218,6 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
}
goto end;
- case SWITCH_MESSAGE_INDICATE_UNBRIDGE:
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
-
- if (sofia_test_flag(tech_pvt, TFLAG_JB_PAUSED)) {
- sofia_clear_flag(tech_pvt, TFLAG_JB_PAUSED);
- if (switch_channel_test_flag(tech_pvt->channel, CF_JITTERBUFFER)) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
- "%s RESUME Jitterbuffer\n", switch_channel_get_name(channel));
- switch_rtp_pause_jitter_buffer(tech_pvt->rtp_session, SWITCH_FALSE);
- }
- }
-
-
- if (switch_rtp_test_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833)) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s deactivate passthru 2833 mode.\n",
- switch_channel_get_name(channel));
- switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833);
- }
-
- if (sofia_test_flag(tech_pvt, TFLAG_NOTIMER_DURING_BRIDGE)) {
- if (!switch_rtp_test_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_UDPTL) &&
- !switch_rtp_test_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA)) {
- switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_USE_TIMER);
- switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_NOBLOCK);
- }
- sofia_clear_flag(tech_pvt, TFLAG_NOTIMER_DURING_BRIDGE);
- }
-
- if (sofia_test_flag(tech_pvt, TFLAG_AUTOFLUSH_DURING_BRIDGE)) {
- rtp_flush_read_buffer(tech_pvt->rtp_session, SWITCH_RTP_FLUSH_UNSTICK);
- sofia_clear_flag(tech_pvt, TFLAG_AUTOFLUSH_DURING_BRIDGE);
- } else {
- rtp_flush_read_buffer(tech_pvt->rtp_session, SWITCH_RTP_FLUSH_ONCE);
- }
-
- }
- goto end;
- case SWITCH_MESSAGE_INDICATE_AUDIO_SYNC:
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- rtp_flush_read_buffer(tech_pvt->rtp_session, SWITCH_RTP_FLUSH_ONCE);
- }
- goto end;
-
case SWITCH_MESSAGE_INDICATE_CLEAR_PROGRESS:
if (!switch_channel_test_flag(channel, CF_ANSWERED)) {
sofia_clear_flag(tech_pvt, TFLAG_EARLY_MEDIA);
@@ -1822,8 +1255,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
}
if (sofia_test_media_flag(tech_pvt->profile, SCMF_AUTOFIX_TIMING)) {
- tech_pvt->check_frames = 0;
- tech_pvt->last_ts = 0;
+ switch_core_media_reset_autofix_timing(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO);
}
}
break;
@@ -1841,43 +1273,6 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
switch (msg->message_id) {
- case SWITCH_MESSAGE_INDICATE_MEDIA_RENEG:
- {
- switch_core_session_t *nsession;
-
- if (msg->string_arg) {
- switch_channel_set_variable(channel, "absolute_codec_string", NULL);
- if (*msg->string_arg == '=') {
- switch_channel_set_variable(channel, "codec_string", msg->string_arg);
- } else {
- switch_channel_set_variable_printf(channel, "codec_string", "=%s%s%s,%s",
- tech_pvt->video_rm_encoding ? tech_pvt->video_rm_encoding : "",
- tech_pvt->video_rm_encoding ? "," : "",
- tech_pvt->rm_encoding, msg->string_arg);
- }
-
-
- tech_pvt->num_codecs = 0;
- tech_pvt->rm_encoding = NULL;
- tech_pvt->video_rm_encoding = NULL;
- switch_channel_clear_flag(tech_pvt->channel, CF_VIDEO_POSSIBLE);
- sofia_media_tech_prepare_codecs(tech_pvt);
- switch_core_media_check_video_codecs(tech_pvt->session);
- sofia_media_set_local_sdp(tech_pvt, NULL, 0, NULL, 1);
- sofia_set_pflag(tech_pvt->profile, PFLAG_RENEG_ON_REINVITE);
- sofia_clear_flag(tech_pvt, TFLAG_ENABLE_SOA);
- }
-
- sofia_glue_do_invite(session);
-
- if (msg->numeric_arg && switch_core_session_get_partner(session, &nsession) == SWITCH_STATUS_SUCCESS) {
- msg->numeric_arg = 0;
- switch_core_session_receive_message(nsession, msg);
- switch_core_session_rwunlock(nsession);
- }
-
- }
- break;
case SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ:
{
const char *pl = "";
@@ -1896,21 +1291,21 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
ip = switch_channel_get_variable(channel, SWITCH_REMOTE_MEDIA_IP_VARIABLE);
port = switch_channel_get_variable(channel, SWITCH_REMOTE_MEDIA_PORT_VARIABLE);
if (ip && port) {
- sofia_media_set_local_sdp(tech_pvt, ip, (switch_port_t)atoi(port), msg->string_arg, 1);
+ switch_core_media_gen_local_sdp(session, ip, (switch_port_t)atoi(port), msg->string_arg, 1);
}
if (!sofia_test_flag(tech_pvt, TFLAG_BYE)) {
if (sofia_use_soa(tech_pvt)) {
nua_respond(tech_pvt->nh, SIP_200_OK,
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str),
SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1),
TAG_END());
} else {
nua_respond(tech_pvt->nh, SIP_200_OK,
NUTAG_MEDIA_ENABLE(0),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
- SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str), TAG_END());
+ SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_PAYLOAD_STR(tech_pvt->mparams.local_sdp_str), TAG_END());
}
switch_channel_mark_answered(channel);
}
@@ -1918,90 +1313,30 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
break;
case SWITCH_MESSAGE_INDICATE_NOMEDIA:
{
- const char *uuid;
- switch_core_session_t *other_session;
- switch_channel_t *other_channel;
- const char *ip = NULL, *port = NULL;
-
- switch_channel_set_flag(channel, CF_PROXY_MODE);
- if (tech_pvt->rm_encoding) {
- tech_pvt->rm_encoding = NULL;
- }
- sofia_media_tech_set_local_sdp(tech_pvt, NULL, SWITCH_FALSE);
-
- if ((uuid = switch_channel_get_partner_uuid(channel))
- && (other_session = switch_core_session_locate(uuid))) {
- other_channel = switch_core_session_get_channel(other_session);
- ip = switch_channel_get_variable(other_channel, SWITCH_REMOTE_MEDIA_IP_VARIABLE);
- port = switch_channel_get_variable(other_channel, SWITCH_REMOTE_MEDIA_PORT_VARIABLE);
- switch_core_session_rwunlock(other_session);
- if (ip && port) {
- sofia_media_set_local_sdp(tech_pvt, ip, (switch_port_t)atoi(port), NULL, 1);
- }
- }
-
-
- if (!tech_pvt->local_sdp_str) {
- sofia_media_tech_absorb_sdp(tech_pvt);
- }
-
sofia_glue_do_invite(session);
}
break;
- case SWITCH_MESSAGE_INDICATE_AUDIO_DATA:
- {
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- if (msg->numeric_arg) {
- if (switch_channel_test_flag(tech_pvt->channel, CF_JITTERBUFFER)) {
- switch_rtp_pause_jitter_buffer(tech_pvt->rtp_session, SWITCH_TRUE);
- sofia_set_flag(tech_pvt, TFLAG_JB_PAUSED);
- }
-
- rtp_flush_read_buffer(tech_pvt->rtp_session, SWITCH_RTP_FLUSH_UNSTICK);
-
- } else {
- if (sofia_test_flag(tech_pvt, TFLAG_JB_PAUSED)) {
- sofia_clear_flag(tech_pvt, TFLAG_JB_PAUSED);
- if (switch_channel_test_flag(tech_pvt->channel, CF_JITTERBUFFER)) {
- switch_rtp_pause_jitter_buffer(tech_pvt->rtp_session, SWITCH_FALSE);
- }
- }
- }
- }
- }
- break;
case SWITCH_MESSAGE_INDICATE_MEDIA_REDIRECT:
{
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Sending media re-direct:\n%s\n",
switch_channel_get_name(channel), msg->string_arg);
- sofia_media_tech_set_local_sdp(tech_pvt, msg->string_arg, SWITCH_TRUE);
+ switch_core_media_set_local_sdp(session, msg->string_arg, SWITCH_TRUE);
- if(zstr(tech_pvt->local_sdp_str)) {
+ if(zstr(tech_pvt->mparams.local_sdp_str)) {
sofia_set_flag(tech_pvt, TFLAG_3PCC_INVITE);
}
-
+
sofia_set_flag_locked(tech_pvt, TFLAG_SENT_UPDATE);
-
+
if (!switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
switch_channel_set_flag(channel, CF_REQ_MEDIA);
}
sofia_glue_do_invite(session);
+
}
break;
- case SWITCH_MESSAGE_INDICATE_UDPTL_MODE:
- {
- switch_t38_options_t *t38_options = switch_channel_get_private(tech_pvt->channel, "t38_options");
-
- if (!t38_options) {
- nua_respond(tech_pvt->nh, SIP_488_NOT_ACCEPTABLE, TAG_END());
- goto end_lock;
- }
-
- start_udptl(tech_pvt, t38_options);
-
- }
case SWITCH_MESSAGE_INDICATE_T38_DESCRIPTION:
{
switch_t38_options_t *t38_options = switch_channel_get_private(tech_pvt->channel, "t38_options");
@@ -2011,9 +1346,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
goto end_lock;
}
- start_udptl(tech_pvt, t38_options);
+ switch_core_media_start_udptl(tech_pvt->session, t38_options);
- sofia_glue_set_udptl_image_sdp(tech_pvt, t38_options, msg->numeric_arg);
+ switch_core_media_set_image_sdp(tech_pvt->session, t38_options, msg->numeric_arg);
if (!sofia_test_flag(tech_pvt, TFLAG_BYE)) {
char *extra_headers = sofia_glue_get_extra_headers(channel, SOFIA_SIP_RESPONSE_HEADER_PREFIX);
@@ -2022,7 +1357,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
NUTAG_AUTOANSWER(0),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str),
SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1),
TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)), TAG_END());
} else {
@@ -2032,7 +1367,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
SIPTAG_CONTENT_TYPE_STR("application/sdp"),
- SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str), TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)), TAG_END());
+ SIPTAG_PAYLOAD_STR(tech_pvt->mparams.local_sdp_str), TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)), TAG_END());
}
switch_safe_free(extra_headers);
sofia_set_flag_locked(tech_pvt, TFLAG_ANS);
@@ -2045,7 +1380,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
switch_t38_options_t *t38_options = switch_channel_get_private(tech_pvt->channel, "t38_options");
if (t38_options) {
- sofia_glue_set_udptl_image_sdp(tech_pvt, t38_options, msg->numeric_arg);
+ switch_core_media_set_image_sdp(tech_pvt->session, t38_options, msg->numeric_arg);
if (!switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
switch_channel_set_flag(channel, CF_REQ_MEDIA);
@@ -2065,14 +1400,14 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
uint32_t send_invite = 1;
switch_channel_clear_flag(channel, CF_PROXY_MODE);
- sofia_media_tech_set_local_sdp(tech_pvt, NULL, SWITCH_FALSE);
+ switch_core_media_set_local_sdp(session, NULL, SWITCH_FALSE);
if (!(switch_channel_test_flag(channel, CF_ANSWERED) || switch_channel_test_flag(channel, CF_EARLY_MEDIA))) {
if (switch_channel_direction(tech_pvt->channel) == SWITCH_CALL_DIRECTION_INBOUND) {
const char *r_sdp = switch_channel_get_variable(channel, SWITCH_R_SDP_VARIABLE);
- tech_pvt->num_codecs = 0;
- sofia_media_tech_prepare_codecs(tech_pvt);
+
+ switch_core_media_prepare_codecs(tech_pvt->session, SWITCH_TRUE);
if (sofia_media_tech_media(tech_pvt, r_sdp) != SWITCH_STATUS_SUCCESS) {
switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "CODEC NEGOTIATION ERROR");
status = SWITCH_STATUS_FALSE;
@@ -2082,14 +1417,14 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
}
}
- if (!switch_rtp_ready(tech_pvt->rtp_session)) {
- sofia_media_tech_prepare_codecs(tech_pvt);
- if ((status = sofia_glue_tech_choose_port(tech_pvt, 0)) != SWITCH_STATUS_SUCCESS) {
+ if (!switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO)) {
+ switch_core_media_prepare_codecs(tech_pvt->session, SWITCH_FALSE);
+ if ((status = switch_core_media_choose_port(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, 0)) != SWITCH_STATUS_SUCCESS) {
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
goto end_lock;
}
}
- sofia_media_set_local_sdp(tech_pvt, NULL, 0, NULL, 1);
+ switch_core_media_gen_local_sdp(session, NULL, 0, NULL, 1);
if (send_invite) {
if (!switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
@@ -2585,23 +1920,23 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
if (!strcasecmp(sdp, "t38")) {
switch_t38_options_t *t38_options = switch_channel_get_private(tech_pvt->channel, "t38_options");
if (t38_options) {
- sofia_glue_set_udptl_image_sdp(tech_pvt, t38_options, 0);
- if (switch_rtp_ready(tech_pvt->rtp_session)) {
- sofia_clear_flag(tech_pvt, TFLAG_NOTIMER_DURING_BRIDGE);
- switch_rtp_udptl_mode(tech_pvt->rtp_session);
+ switch_core_media_set_image_sdp(tech_pvt->session, t38_options, 0);
+ if (switch_core_media_ready(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO)) {
+ switch_channel_clear_flag(tech_pvt->channel, CF_NOTIMER_DURING_BRIDGE);
+ switch_core_media_udptl_mode(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO);
}
}
} else {
- sofia_media_tech_set_local_sdp(tech_pvt, sdp, SWITCH_TRUE);
+ switch_core_media_set_local_sdp(session, sdp, SWITCH_TRUE);
}
if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
- sofia_media_tech_patch_sdp(tech_pvt);
- sofia_glue_tech_proxy_remote_addr(tech_pvt, NULL);
+ switch_core_media_patch_sdp(tech_pvt->session);
+ switch_core_media_proxy_remote_addr(session, NULL);
}
if (sofia_use_soa(tech_pvt)) {
nua_respond(tech_pvt->nh, code, su_strdup(nua_handle_home(tech_pvt->nh), reason), SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str),
SOATAG_REUSE_REJECTED(1),
SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1),
TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)), TAG_END());
@@ -2609,7 +1944,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
nua_respond(tech_pvt->nh, code, su_strdup(nua_handle_home(tech_pvt->nh), reason), SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
NUTAG_MEDIA_ENABLE(0),
SIPTAG_CONTENT_TYPE_STR("application/sdp"),
- SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),
+ SIPTAG_PAYLOAD_STR(tech_pvt->mparams.local_sdp_str),
TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)), TAG_END());
}
if (sofia_test_pflag(tech_pvt->profile, PFLAG_3PCC_PROXY) && sofia_test_flag(tech_pvt, TFLAG_3PCC)) {
@@ -2716,11 +2051,11 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
const char *sdp = NULL;
if ((sdp = switch_channel_get_variable(channel, SWITCH_B_SDP_VARIABLE))) {
- sofia_media_tech_set_local_sdp(tech_pvt, sdp, SWITCH_TRUE);
+ switch_core_media_set_local_sdp(session, sdp, SWITCH_TRUE);
}
if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
- sofia_media_tech_patch_sdp(tech_pvt);
+ switch_core_media_patch_sdp(tech_pvt->session);
if (sofia_media_activate_rtp(tech_pvt) != SWITCH_STATUS_SUCCESS) {
status = SWITCH_STATUS_FALSE;
@@ -2728,13 +2063,14 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
}
}
} else {
- if (sofia_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION) || !tech_pvt->iananame) {
+ if (sofia_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION) ||
+ switch_core_media_codec_chosen(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO) != SWITCH_STATUS_SUCCESS) {
sofia_clear_flag_locked(tech_pvt, TFLAG_LATE_NEGOTIATION);
if (switch_channel_direction(tech_pvt->channel) == SWITCH_CALL_DIRECTION_INBOUND) {
const char *r_sdp = switch_channel_get_variable(channel, SWITCH_R_SDP_VARIABLE);
- tech_pvt->num_codecs = 0;
- sofia_media_tech_prepare_codecs(tech_pvt);
+
+ switch_core_media_prepare_codecs(tech_pvt->session, SWITCH_TRUE);
if (zstr(r_sdp) || sofia_media_tech_media(tech_pvt, r_sdp) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR,
"CODEC NEGOTIATION ERROR. SDP:\n%s\n", r_sdp ? r_sdp : "NO SDP!");
@@ -2748,16 +2084,16 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
switch_channel_check_zrtp(tech_pvt->channel);
- if ((status = sofia_glue_tech_choose_port(tech_pvt, 0)) != SWITCH_STATUS_SUCCESS) {
+ if ((status = switch_core_media_choose_port(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, 0)) != SWITCH_STATUS_SUCCESS) {
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
goto end_lock;
}
- sofia_media_set_local_sdp(tech_pvt, NULL, 0, NULL, 0);
+ switch_core_media_gen_local_sdp(session, NULL, 0, NULL, 0);
if (sofia_media_activate_rtp(tech_pvt) != SWITCH_STATUS_SUCCESS) {
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
}
- if (tech_pvt->local_sdp_str) {
- switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Ring SDP:\n%s\n", tech_pvt->local_sdp_str);
+ if (tech_pvt->mparams.local_sdp_str) {
+ switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Ring SDP:\n%s\n", tech_pvt->mparams.local_sdp_str);
}
}
switch_channel_mark_pre_answered(channel);
@@ -2778,14 +2114,14 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
if (switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE) &&
- tech_pvt->early_sdp && strcmp(tech_pvt->early_sdp, tech_pvt->local_sdp_str)) {
+ tech_pvt->mparams.early_sdp && strcmp(tech_pvt->mparams.early_sdp, tech_pvt->mparams.local_sdp_str)) {
/* The SIP RFC for SOA forbids sending a 183 with one sdp then a 200 with another but it won't do us much good unless
we do so in this case we will abandon the SOA rules and go rogue.
*/
sofia_clear_flag(tech_pvt, TFLAG_ENABLE_SOA);
}
- tech_pvt->early_sdp = switch_core_session_strdup(tech_pvt->session, tech_pvt->local_sdp_str);
+ tech_pvt->mparams.early_sdp = switch_core_session_strdup(tech_pvt->session, tech_pvt->mparams.local_sdp_str);
if (sofia_use_soa(tech_pvt)) {
nua_respond(tech_pvt->nh,
@@ -2797,8 +2133,8 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
SOATAG_REUSE_REJECTED(1),
SOATAG_ORDERED_USER(1),
SOATAG_RTP_SELECT(1),
- SOATAG_ADDRESS(tech_pvt->adv_sdp_audio_ip),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str), SOATAG_AUDIO_AUX("cn telephone-event"),
+ SOATAG_ADDRESS(tech_pvt->mparams.adv_sdp_audio_ip),
+ SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str), SOATAG_AUDIO_AUX("cn telephone-event"),
TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)),
TAG_IF(!zstr(extra_header), SIPTAG_HEADER_STR(extra_header)),
TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote),
@@ -2812,7 +2148,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
TAG_IF(cid, SIPTAG_HEADER_STR(cid)),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
SIPTAG_CONTENT_TYPE_STR("application/sdp"),
- SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),
+ SIPTAG_PAYLOAD_STR(tech_pvt->mparams.local_sdp_str),
TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)),
TAG_IF(!zstr(extra_header), SIPTAG_HEADER_STR(extra_header)),
TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote),
@@ -2823,6 +2159,17 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
}
}
break;
+
+ case SWITCH_MESSAGE_INDICATE_UDPTL_MODE:
+ {
+ switch_t38_options_t *t38_options = switch_channel_get_private(channel, "t38_options");
+
+ if (!t38_options) {
+ nua_respond(tech_pvt->nh, SIP_488_NOT_ACCEPTABLE, TAG_END());
+ }
+ }
+ break;
+
default:
break;
}
@@ -3171,8 +2518,6 @@ static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t
stream->write_function(stream, "ZRTP-PASSTHRU \t%s\n", sofia_test_flag(profile, TFLAG_ZRTP_PASSTHRU) ? "true" : "false");
stream->write_function(stream, "AGGRESSIVENAT \t%s\n",
sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) ? "true" : "false");
- stream->write_function(stream, "STUN-ENABLED \t%s\n", sofia_test_pflag(profile, PFLAG_STUN_ENABLED) ? "true" : "false");
- stream->write_function(stream, "STUN-AUTO-DISABLE\t%s\n", sofia_test_pflag(profile, PFLAG_STUN_AUTO_DISABLE) ? "true" : "false");
if (profile->user_agent_filter) {
stream->write_function(stream, "USER-AGENT-FILTER\t%s\n", switch_str_nil(profile->user_agent_filter));
}
@@ -3450,10 +2795,6 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl
stream->write_function(stream, " %s\n", sofia_test_flag(profile, TFLAG_ZRTP_PASSTHRU) ? "true" : "false");
stream->write_function(stream, " %s\n",
sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) ? "true" : "false");
- stream->write_function(stream, " %s\n",
- sofia_test_pflag(profile, PFLAG_STUN_ENABLED) ? "true" : "false");
- stream->write_function(stream, " %s\n",
- sofia_test_pflag(profile, PFLAG_STUN_AUTO_DISABLE) ? "true" : "false");
stream->write_function(stream, " %s\n", switch_str_nil(profile->user_agent_filter));
stream->write_function(stream, " %d\n",
profile->max_registrations_perext);
@@ -3648,37 +2989,6 @@ static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t
goto done;
}
- if (!strcasecmp(argv[1], "stun-auto-disable")) {
- if (argv[2]) {
- int is_true = switch_true(argv[2]);
- if (is_true) {
- sofia_set_pflag(profile, PFLAG_STUN_AUTO_DISABLE);
- } else {
- sofia_clear_pflag(profile, PFLAG_STUN_AUTO_DISABLE);
- }
- }
-
- stream->write_function(stream, "+OK stun-auto-disable=%s", sofia_test_pflag(profile, PFLAG_STUN_AUTO_DISABLE) ? "true" : "false");
-
- goto done;
- }
-
- if (!strcasecmp(argv[1], "stun-enabled")) {
- if (argv[2]) {
- int is_true = switch_true(argv[2]);
- if (is_true) {
- sofia_set_pflag(profile, PFLAG_STUN_ENABLED);
- } else {
- sofia_clear_pflag(profile, PFLAG_STUN_ENABLED);
- }
- }
-
- stream->write_function(stream, "+OK stun-enabled=%s", sofia_test_pflag(profile, PFLAG_STUN_ENABLED) ? "true" : "false");
-
- goto done;
- }
-
-
if (!strcasecmp(argv[1], "rescan")) {
switch_xml_reload(&err);
@@ -4804,12 +4114,12 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
switch_url_decode(remote_host);
}
if (!zstr(remote_host)) {
- switch_split_user_domain(remote_host, NULL, &tech_pvt->remote_ip);
+ switch_split_user_domain(remote_host, NULL, &tech_pvt->mparams.remote_ip);
}
}
- if (zstr(tech_pvt->remote_ip)) {
- switch_split_user_domain(switch_core_session_strdup(nsession, tech_pvt->dest), NULL, &tech_pvt->remote_ip);
+ if (zstr(tech_pvt->mparams.remote_ip)) {
+ switch_split_user_domain(switch_core_session_strdup(nsession, tech_pvt->dest), NULL, &tech_pvt->mparams.remote_ip);
}
if (dest_to) {
@@ -4994,18 +4304,8 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
}
}
- if (switch_channel_test_flag(o_channel, CF_PROXY_MEDIA)) {
- const char *r_sdp = switch_channel_get_variable(o_channel, SWITCH_R_SDP_VARIABLE);
+ switch_core_media_check_outgoing_proxy(session);
- if (switch_stristr("m=video", r_sdp)) {
- sofia_glue_tech_choose_video_port(tech_pvt, 1);
- tech_pvt->video_rm_encoding = "PROXY-VID";
- tech_pvt->video_rm_rate = 90000;
- tech_pvt->video_codec_ms = 0;
- switch_channel_set_flag(tech_pvt->channel, CF_VIDEO);
- switch_channel_set_flag(tech_pvt->channel, CF_VIDEO_POSSIBLE);
- }
- }
}
goto done;
diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h
index 03d10a8705..0faf8ae914 100644
--- a/src/mod/endpoints/mod_sofia/mod_sofia.h
+++ b/src/mod/endpoints/mod_sofia/mod_sofia.h
@@ -573,7 +573,7 @@ struct sofia_profile {
switch_core_media_flag_t media_flags[SCMF_MAX];
unsigned int mflags;
unsigned int ndlb;
- unsigned int mdlb;
+ unsigned int mndlb;
uint32_t max_calls;
uint32_t nonce_ttl;
nua_t *nua;
diff --git a/src/mod/endpoints/mod_sofia/rtp.c b/src/mod/endpoints/mod_sofia/rtp.c
index 46c69df20d..1376b32b44 100644
--- a/src/mod/endpoints/mod_sofia/rtp.c
+++ b/src/mod/endpoints/mod_sofia/rtp.c
@@ -200,7 +200,7 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
tech_pvt->local_address = switch_core_session_strdup(*new_session, local_addr);
tech_pvt->local_port = local_port;
tech_pvt->remote_address = switch_core_session_strdup(*new_session, remote_addr);
- tech_pvt->remote_port = remote_port;
+ tech-pvt->mparams->remote_port = remote_port;
tech_pvt->ptime = ptime;
tech_pvt->agreed_pt = pt;
tech_pvt->dtmf_type = DTMF_2833; /* XXX */
diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c
index ebd14049c0..ffb89fe020 100644
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -4861,9 +4861,9 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status
caller_profile->network_addr = switch_core_strdup(caller_profile->pool, network_ip);
}
- tech_pvt->last_sdp_str = NULL;
+ tech-pvt->mparams->last_sdp_str = NULL;
if (!sofia_use_soa(tech_pvt) && sip->sip_payload && sip->sip_payload->pl_data) {
- tech_pvt->last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data);
+ tech-pvt->mparams->last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data);
}
@@ -5200,8 +5200,8 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status
if (sip->sip_payload && sip->sip_payload->pl_data &&
sip->sip_content_type && sip->sip_content_type->c_subtype && switch_stristr("sdp", sip->sip_content_type->c_subtype)) {
- tech_pvt->remote_sdp_str = switch_core_session_strdup(tech_pvt->session, sip->sip_payload->pl_data);
- r_sdp = tech_pvt->remote_sdp_str;
+ tech-pvt->mparams->remote_sdp_str = switch_core_session_strdup(tech_pvt->session, sip->sip_payload->pl_data);
+ r_sdp = tech-pvt->mparams->remote_sdp_str;
sofia_glue_tech_proxy_remote_addr(tech_pvt, NULL);
}
@@ -5543,8 +5543,8 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
}
}
- if (status > 100 && status < 300 && tech_pvt && !sofia_use_soa(tech_pvt) && !r_sdp && tech_pvt->last_sdp_str) {
- r_sdp = tech_pvt->last_sdp_str;
+ if (status > 100 && status < 300 && tech_pvt && !sofia_use_soa(tech_pvt) && !r_sdp && tech-pvt->mparams->last_sdp_str) {
+ r_sdp = tech-pvt->mparams->last_sdp_str;
}
if ((channel && (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA))) ||
@@ -5599,12 +5599,12 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
if (r_sdp) {
- if (!(profile->mndlb & SM_NDLB_ALLOW_NONDUP_SDP) || (!zstr(tech_pvt->remote_sdp_str) && !strcmp(tech_pvt->remote_sdp_str, r_sdp))) {
+ if (!(profile->mndlb & SM_NDLB_ALLOW_NONDUP_SDP) || (!zstr(tech-pvt->mparams->remote_sdp_str) && !strcmp(tech-pvt->mparams->remote_sdp_str, r_sdp))) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Duplicate SDP\n%s\n", r_sdp);
is_dup_sdp = 1;
} else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Remote SDP:\n%s\n", r_sdp);
- tech_pvt->remote_sdp_str = switch_core_session_strdup(session, r_sdp);
+ tech-pvt->mparams->remote_sdp_str = switch_core_session_strdup(session, r_sdp);
switch_channel_set_variable(channel, SWITCH_R_SDP_VARIABLE, r_sdp);
if ((sofia_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION) || switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND)) {
@@ -5909,7 +5909,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
if (sofia_use_soa(tech_pvt)) {
nua_respond(tech_pvt->nh, SIP_200_OK,
SIPTAG_CONTACT_STR(tech_pvt->profile->url),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech-pvt->mparams->local_sdp_str),
SOATAG_REUSE_REJECTED(1),
SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"),
TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
@@ -5917,7 +5917,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
nua_respond(tech_pvt->nh, SIP_200_OK,
NUTAG_MEDIA_ENABLE(0),
SIPTAG_CONTACT_STR(tech_pvt->profile->url),
- SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str), TAG_END());
+ SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_PAYLOAD_STR(tech-pvt->mparams->local_sdp_str), TAG_END());
}
}
} else if (sofia_test_pflag(profile, PFLAG_3PCC_PROXY)) {
@@ -6025,7 +6025,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
if (sofia_use_soa(tech_pvt)) {
nua_respond(tech_pvt->nh, SIP_200_OK,
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech-pvt->mparams->local_sdp_str),
SOATAG_REUSE_REJECTED(1),
SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"),
TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
@@ -6033,7 +6033,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
nua_respond(tech_pvt->nh, SIP_200_OK,
NUTAG_MEDIA_ENABLE(0),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
- SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str), TAG_END());
+ SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_PAYLOAD_STR(tech-pvt->mparams->local_sdp_str), TAG_END());
}
switch_channel_set_flag(channel, CF_PROXY_MODE);
@@ -6150,7 +6150,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
if (sofia_use_soa(tech_pvt)) {
nua_respond(tech_pvt->nh, SIP_200_OK,
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech-pvt->mparams->local_sdp_str),
SOATAG_REUSE_REJECTED(1),
SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"),
TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
@@ -6158,7 +6158,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
nua_respond(tech_pvt->nh, SIP_200_OK,
NUTAG_MEDIA_ENABLE(0),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
- SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str), TAG_END());
+ SIPTAG_CONTENT_TYPE_STR("application/sdp"), SIPTAG_PAYLOAD_STR(tech-pvt->mparams->local_sdp_str), TAG_END());
}
if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_REINVITE) == SWITCH_STATUS_SUCCESS) {
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
@@ -7805,8 +7805,8 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
- tech_pvt->remote_ip = switch_core_session_strdup(session, network_ip);
- tech_pvt->remote_port = network_port;
+ tech-pvt->mparams->remote_ip = switch_core_session_strdup(session, network_ip);
+ tech-pvt->mparams->remote_port = network_port;
channel = tech_pvt->channel = switch_core_session_get_channel(session);
@@ -7827,7 +7827,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
if (sip->sip_contact && sip->sip_contact->m_url) {
char tmp[35] = "";
- const char *ipv6 = strchr(tech_pvt->remote_ip, ':');
+ const char *ipv6 = strchr(tech-pvt->mparams->remote_ip, ':');
transport = sofia_glue_url2transport(sip->sip_contact->m_url);
@@ -7835,10 +7835,10 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
switch_core_session_sprintf(session,
"sip:%s@%s%s%s:%d;transport=%s",
sip->sip_contact->m_url->url_user,
- ipv6 ? "[" : "", tech_pvt->remote_ip, ipv6 ? "]" : "", tech_pvt->remote_port, sofia_glue_transport2str(transport));
+ ipv6 ? "[" : "", tech-pvt->mparams->remote_ip, ipv6 ? "]" : "", tech-pvt->mparams->remote_port, sofia_glue_transport2str(transport));
- switch_channel_set_variable(channel, "sip_received_ip", tech_pvt->remote_ip);
- snprintf(tmp, sizeof(tmp), "%d", tech_pvt->remote_port);
+ switch_channel_set_variable(channel, "sip_received_ip", tech-pvt->mparams->remote_ip);
+ snprintf(tmp, sizeof(tmp), "%d", tech-pvt->mparams->remote_port);
switch_channel_set_variable(channel, "sip_received_port", tmp);
}
@@ -8039,7 +8039,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
"sip:%s@%s%s%s:%d;transport=%s",
user, ipv6 ? "[" : "", host, ipv6 ? "]" : "", port, sofia_glue_transport2str(transport));
- if (sofia_glue_check_nat(profile, tech_pvt->remote_ip)) {
+ if (sofia_glue_check_nat(profile, tech-pvt->mparams->remote_ip)) {
url = (sofia_glue_transport_has_tls(transport)) ? profile->tls_public_url : profile->public_url;
check_nat = 1;
} else {
@@ -8079,7 +8079,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
} else {
const char *url = NULL;
- if (sofia_glue_check_nat(profile, tech_pvt->remote_ip)) {
+ if (sofia_glue_check_nat(profile, tech-pvt->mparams->remote_ip)) {
url = (sofia_glue_transport_has_tls(transport)) ? profile->tls_public_url : profile->public_url;
} else {
url = (sofia_glue_transport_has_tls(transport)) ? profile->tls_url : profile->url;
@@ -8101,7 +8101,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
}
}
- if (sofia_glue_check_nat(profile, tech_pvt->remote_ip)) {
+ if (sofia_glue_check_nat(profile, tech-pvt->mparams->remote_ip)) {
tech_pvt->user_via = sofia_glue_create_external_via(session, profile, tech_pvt->transport);
nua_set_hparams(tech_pvt->nh, SIPTAG_VIA_STR(tech_pvt->user_via), TAG_END());
}
diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c
index 767400f4d4..c20194277d 100644
--- a/src/mod/endpoints/mod_sofia/sofia_glue.c
+++ b/src/mod/endpoints/mod_sofia/sofia_glue.c
@@ -173,7 +173,7 @@ void sofia_glue_set_udptl_image_sdp(private_object_t *tech_pvt, switch_t38_optio
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "%s image media sdp:\n%s\n",
- switch_channel_get_name(tech_pvt->channel), tech_pvt->local_sdp_str);
+ switch_channel_get_name(tech_pvt->channel), tech-pvt->mparams->local_sdp_str);
}
@@ -222,7 +222,7 @@ void sofia_glue_attach_private(switch_core_session_t *session, sofia_profile_t *
tech_pvt->profile = profile;
- tech_pvt->rtpip = switch_core_session_strdup(session, profile->rtpip[profile->rtpip_next++]);
+ tech-pvt->mparams->rtpip = switch_core_session_strdup(session, profile->rtpip[profile->rtpip_next++]);
if (profile->rtpip_next >= profile->rtpip_index) {
profile->rtpip_next = 0;
}
@@ -769,7 +769,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
return status;
}
- if (!switch_channel_get_private(tech_pvt->channel, "t38_options") || zstr(tech_pvt->local_sdp_str)) {
+ if (!switch_channel_get_private(tech_pvt->channel, "t38_options") || zstr(tech-pvt->mparams->local_sdp_str)) {
sofia_media_set_local_sdp(tech_pvt, NULL, 0, NULL, 0);
}
@@ -816,7 +816,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
sipip = tech_pvt->profile->sipip;
- if (!zstr(tech_pvt->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip)) {
+ if (!zstr(tech-pvt->mparams->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech-pvt->mparams->remote_ip)) {
sipip = tech_pvt->profile->extsipip;
}
@@ -856,7 +856,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
}
if (sofia_test_pflag(tech_pvt->profile, PFLAG_AUTO_NAT)) {
- if (!zstr(tech_pvt->remote_ip) && !zstr(tech_pvt->profile->extsipip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip)) {
+ if (!zstr(tech-pvt->mparams->remote_ip) && !zstr(tech_pvt->profile->extsipip) && sofia_glue_check_nat(tech_pvt->profile, tech-pvt->mparams->remote_ip)) {
rpid_domain = tech_pvt->profile->extsipip;
} else {
rpid_domain = tech_pvt->profile->sipip;
@@ -890,7 +890,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
}
}
- if (!zstr(tech_pvt->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip)) {
+ if (!zstr(tech-pvt->mparams->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech-pvt->mparams->remote_ip)) {
tech_pvt->user_via = sofia_glue_create_external_via(session, tech_pvt->profile, tech_pvt->transport);
}
@@ -905,7 +905,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
char *ip_addr = tech_pvt->profile->sipip;
char *ipv6;
- if ( !zstr(tech_pvt->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip ) ) {
+ if ( !zstr(tech-pvt->mparams->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech-pvt->mparams->remote_ip ) ) {
ip_addr = tech_pvt->profile->extsipip;
}
@@ -922,7 +922,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
if (sofia_glue_transport_has_tls(tech_pvt->transport)) {
tech_pvt->invite_contact = tech_pvt->profile->tls_url;
} else {
- if (!zstr(tech_pvt->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip)) {
+ if (!zstr(tech-pvt->mparams->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech-pvt->mparams->remote_ip)) {
tech_pvt->invite_contact = tech_pvt->profile->public_url;
} else {
tech_pvt->invite_contact = tech_pvt->profile->url;
@@ -1231,7 +1231,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
tech_pvt->nh->nh_has_invite = 1;
}
- if ((mp = sofia_media_get_multipart(session, SOFIA_MULTIPART_PREFIX, tech_pvt->local_sdp_str, &mp_type))) {
+ if ((mp = sofia_media_get_multipart(session, SOFIA_MULTIPART_PREFIX, tech-pvt->mparams->local_sdp_str, &mp_type))) {
sofia_clear_flag(tech_pvt, TFLAG_ENABLE_SOA);
}
@@ -1241,16 +1241,16 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
tech_pvt->session_refresher = nua_no_refresher;
}
- if (tech_pvt->local_sdp_str) {
+ if (tech-pvt->mparams->local_sdp_str) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG,
- "Local SDP:\n%s\n", tech_pvt->local_sdp_str);
+ "Local SDP:\n%s\n", tech-pvt->mparams->local_sdp_str);
}
if (sofia_use_soa(tech_pvt)) {
nua_invite(tech_pvt->nh,
NUTAG_AUTOANSWER(0),
- //TAG_IF(zstr(tech_pvt->local_sdp_str), NUTAG_AUTOACK(0)),
- //TAG_IF(!zstr(tech_pvt->local_sdp_str), NUTAG_AUTOACK(1)),
+ //TAG_IF(zstr(tech-pvt->mparams->local_sdp_str), NUTAG_AUTOACK(0)),
+ //TAG_IF(!zstr(tech-pvt->mparams->local_sdp_str), NUTAG_AUTOACK(1)),
// The code above is breaking things...... grrr WE need this because we handle our own acks and there are 3pcc cases in there too
NUTAG_AUTOACK(0),
NUTAG_SESSION_TIMER(tech_pvt->session_timeout),
@@ -1274,16 +1274,16 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
TAG_IF(!zstr(route), SIPTAG_ROUTE_STR(route)),
TAG_IF(tech_pvt->profile->minimum_session_expires, NUTAG_MIN_SE(tech_pvt->profile->minimum_session_expires)),
TAG_IF(cseq, SIPTAG_CSEQ(cseq)),
- TAG_IF(zstr(tech_pvt->local_sdp_str), SIPTAG_PAYLOAD_STR("")),
- TAG_IF(!zstr(tech_pvt->local_sdp_str), SOATAG_ADDRESS(tech_pvt->adv_sdp_audio_ip)),
- TAG_IF(!zstr(tech_pvt->local_sdp_str), SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str)),
- TAG_IF(!zstr(tech_pvt->local_sdp_str), SOATAG_REUSE_REJECTED(1)),
- TAG_IF(!zstr(tech_pvt->local_sdp_str), SOATAG_ORDERED_USER(1)),
- TAG_IF(!zstr(tech_pvt->local_sdp_str), SOATAG_RTP_SORT(SOA_RTP_SORT_REMOTE)),
- TAG_IF(!zstr(tech_pvt->local_sdp_str), SOATAG_RTP_SELECT(SOA_RTP_SELECT_ALL)),
+ TAG_IF(zstr(tech-pvt->mparams->local_sdp_str), SIPTAG_PAYLOAD_STR("")),
+ TAG_IF(!zstr(tech-pvt->mparams->local_sdp_str), SOATAG_ADDRESS(tech_pvt->adv_sdp_audio_ip)),
+ TAG_IF(!zstr(tech-pvt->mparams->local_sdp_str), SOATAG_USER_SDP_STR(tech-pvt->mparams->local_sdp_str)),
+ TAG_IF(!zstr(tech-pvt->mparams->local_sdp_str), SOATAG_REUSE_REJECTED(1)),
+ TAG_IF(!zstr(tech-pvt->mparams->local_sdp_str), SOATAG_ORDERED_USER(1)),
+ TAG_IF(!zstr(tech-pvt->mparams->local_sdp_str), SOATAG_RTP_SORT(SOA_RTP_SORT_REMOTE)),
+ TAG_IF(!zstr(tech-pvt->mparams->local_sdp_str), SOATAG_RTP_SELECT(SOA_RTP_SELECT_ALL)),
TAG_IF(rep, SIPTAG_REPLACES_STR(rep)),
TAG_IF(!require_timer, NUTAG_TIMER_AUTOREQUIRE(0)),
- TAG_IF(!zstr(tech_pvt->local_sdp_str), SOATAG_HOLD(holdstr)), TAG_END());
+ TAG_IF(!zstr(tech-pvt->mparams->local_sdp_str), SOATAG_HOLD(holdstr)), TAG_END());
} else {
nua_invite(tech_pvt->nh,
NUTAG_AUTOANSWER(0),
@@ -1312,7 +1312,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
TAG_IF(cseq, SIPTAG_CSEQ(cseq)),
NUTAG_MEDIA_ENABLE(0),
SIPTAG_CONTENT_TYPE_STR(mp_type ? mp_type : "application/sdp"),
- SIPTAG_PAYLOAD_STR(mp ? mp : tech_pvt->local_sdp_str), TAG_IF(rep, SIPTAG_REPLACES_STR(rep)), SOATAG_HOLD(holdstr), TAG_END());
+ SIPTAG_PAYLOAD_STR(mp ? mp : tech-pvt->mparams->local_sdp_str), TAG_IF(rep, SIPTAG_REPLACES_STR(rep)), SOATAG_HOLD(holdstr), TAG_END());
}
sofia_glue_free_destination(dst);
@@ -1334,7 +1334,7 @@ void sofia_glue_do_xfer_invite(switch_core_session_t *session)
switch_mutex_lock(tech_pvt->sofia_mutex);
caller_profile = switch_channel_get_caller_profile(channel);
- if (!zstr(tech_pvt->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip)) {
+ if (!zstr(tech-pvt->mparams->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech-pvt->mparams->remote_ip)) {
sipip = tech_pvt->profile->extsipip;
contact_url = tech_pvt->profile->public_url;
} else {
@@ -1357,7 +1357,7 @@ void sofia_glue_do_xfer_invite(switch_core_session_t *session)
SIPTAG_CONTACT_STR(contact_url),
TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)),
SOATAG_ADDRESS(tech_pvt->adv_sdp_audio_ip),
- SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+ SOATAG_USER_SDP_STR(tech-pvt->mparams->local_sdp_str),
SOATAG_REUSE_REJECTED(1),
SOATAG_ORDERED_USER(1),
SOATAG_RTP_SORT(SOA_RTP_SORT_REMOTE), SOATAG_RTP_SELECT(SOA_RTP_SELECT_ALL), TAG_IF(rep, SIPTAG_REPLACES_STR(rep)), TAG_END());
@@ -1430,11 +1430,11 @@ void sofia_glue_deactivate_rtp(private_object_t *tech_pvt)
if (tech_pvt->video_rtp_session) {
switch_rtp_destroy(&tech_pvt->video_rtp_session);
} else if (tech_pvt->local_sdp_video_port) {
- switch_rtp_release_port(tech_pvt->rtpip, tech_pvt->local_sdp_video_port);
+ switch_rtp_release_port(tech-pvt->mparams->rtpip, tech_pvt->local_sdp_video_port);
}
- if (tech_pvt->local_sdp_video_port > 0 && !zstr(tech_pvt->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip)) {
+ if (tech_pvt->local_sdp_video_port > 0 && !zstr(tech-pvt->mparams->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech-pvt->mparams->remote_ip)) {
switch_nat_del_mapping((switch_port_t) tech_pvt->local_sdp_video_port, SWITCH_NAT_UDP);
switch_nat_del_mapping((switch_port_t) tech_pvt->local_sdp_video_port + 1, SWITCH_NAT_UDP);
}
@@ -1443,10 +1443,10 @@ void sofia_glue_deactivate_rtp(private_object_t *tech_pvt)
if (tech_pvt->rtp_session) {
switch_rtp_destroy(&tech_pvt->rtp_session);
} else if (tech_pvt->local_sdp_audio_port) {
- switch_rtp_release_port(tech_pvt->rtpip, tech_pvt->local_sdp_audio_port);
+ switch_rtp_release_port(tech-pvt->mparams->rtpip, tech_pvt->local_sdp_audio_port);
}
- if (tech_pvt->local_sdp_audio_port > 0 && !zstr(tech_pvt->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip)) {
+ if (tech_pvt->local_sdp_audio_port > 0 && !zstr(tech-pvt->mparams->remote_ip) && sofia_glue_check_nat(tech_pvt->profile, tech-pvt->mparams->remote_ip)) {
switch_nat_del_mapping((switch_port_t) tech_pvt->local_sdp_audio_port, SWITCH_NAT_UDP);
switch_nat_del_mapping((switch_port_t) tech_pvt->local_sdp_audio_port + 1, SWITCH_NAT_UDP);
}
@@ -1903,8 +1903,8 @@ int sofia_recover_callback(switch_core_session_t *session)
switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
switch_mutex_init(&tech_pvt->sofia_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
- tech_pvt->remote_ip = (char *) switch_channel_get_variable(channel, "sip_network_ip");
- tech_pvt->remote_port = atoi(switch_str_nil(switch_channel_get_variable(channel, "sip_network_port")));
+ tech-pvt->mparams->remote_ip = (char *) switch_channel_get_variable(channel, "sip_network_ip");
+ tech-pvt->mparams->remote_port = atoi(switch_str_nil(switch_channel_get_variable(channel, "sip_network_port")));
tech_pvt->caller_profile = switch_channel_get_caller_profile(channel);
if ((tmp = switch_channel_get_variable(tech_pvt->channel, "sip_2833_send_payload"))) {
@@ -1963,11 +1963,11 @@ int sofia_recover_callback(switch_core_session_t *session)
switch_core_session_get_recovery_crypto_key(session, SWITCH_MEDIA_TYPE_VIDEO, "srtp_remote_video_crypto_key");
if ((tmp = switch_channel_get_variable(channel, "sip_local_sdp_str"))) {
- tech_pvt->local_sdp_str = switch_core_session_strdup(session, tmp);
+ tech-pvt->mparams->local_sdp_str = switch_core_session_strdup(session, tmp);
}
if ((tmp = switch_channel_get_variable(channel, SWITCH_R_SDP_VARIABLE))) {
- tech_pvt->remote_sdp_str = switch_core_session_strdup(session, tmp);
+ tech-pvt->mparams->remote_sdp_str = switch_core_session_strdup(session, tmp);
}
switch_channel_set_variable(channel, "sip_invite_call_id", switch_channel_get_variable(channel, "sip_call_id"));
@@ -2018,12 +2018,12 @@ int sofia_recover_callback(switch_core_session_t *session)
switch_core_media_set_codec(tech_pvt->session, 1, tech_pvt->profile->codec_flags);
- tech_pvt->adv_sdp_audio_ip = tech_pvt->extrtpip = (char *) ip;
+ tech_pvt->adv_sdp_audio_ip = tech-pvt->mparams->extrtpip = (char *) ip;
tech_pvt->adv_sdp_audio_port = tech_pvt->local_sdp_audio_port = (switch_port_t)atoi(port);
if (!zstr(ip)) {
tech_pvt->local_sdp_audio_ip = switch_core_session_strdup(session, ip);
- tech_pvt->rtpip = tech_pvt->local_sdp_audio_ip;
+ tech-pvt->mparams->rtpip = tech_pvt->local_sdp_audio_ip;
}
if (!zstr(a_ip)) {
diff --git a/src/mod/endpoints/mod_sofia/sofia_media.c b/src/mod/endpoints/mod_sofia/sofia_media.c
index 6b66806b80..7fb6ada3d7 100644
--- a/src/mod/endpoints/mod_sofia/sofia_media.c
+++ b/src/mod/endpoints/mod_sofia/sofia_media.c
@@ -521,14 +521,14 @@ void sofia_media_tech_patch_sdp(private_object_t *tech_pvt)
char *new_sdp;
int bad = 0;
- if (zstr(tech_pvt->local_sdp_str)) {
+ if (zstr(tech-pvt->mparams->local_sdp_str)) {
return;
}
- len = strlen(tech_pvt->local_sdp_str) * 2;
+ len = strlen(tech-pvt->mparams->local_sdp_str) * 2;
if (switch_channel_test_flag(tech_pvt->channel, CF_ANSWERED) &&
- (switch_stristr("sendonly", tech_pvt->local_sdp_str) || switch_stristr("0.0.0.0", tech_pvt->local_sdp_str))) {
+ (switch_stristr("sendonly", tech-pvt->mparams->local_sdp_str) || switch_stristr("0.0.0.0", tech-pvt->mparams->local_sdp_str))) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "Skip patch on hold SDP\n");
return;
}
@@ -548,7 +548,7 @@ void sofia_media_tech_patch_sdp(private_object_t *tech_pvt)
switch_snprintf(port_buf, sizeof(port_buf), "%u", tech_pvt->adv_sdp_audio_port);
- p = tech_pvt->local_sdp_str;
+ p = tech-pvt->mparams->local_sdp_str;
q = new_sdp;
pe = p + strlen(p);
qe = q + len - 1;
@@ -775,13 +775,13 @@ void sofia_media_tech_patch_sdp(private_object_t *tech_pvt)
if (!has_ip && !has_audio) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "%s SDP has no audio in it.\n%s\n",
- switch_channel_get_name(tech_pvt->channel), tech_pvt->local_sdp_str);
+ switch_channel_get_name(tech_pvt->channel), tech-pvt->mparams->local_sdp_str);
return;
}
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_DEBUG, "%s Patched SDP\n---\n%s\n+++\n%s\n",
- switch_channel_get_name(tech_pvt->channel), tech_pvt->local_sdp_str, new_sdp);
+ switch_channel_get_name(tech_pvt->channel), tech-pvt->mparams->local_sdp_str, new_sdp);
sofia_media_tech_set_local_sdp(tech_pvt, new_sdp, SWITCH_FALSE);