mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-06-01 03:05:50 +00:00
FS-5844
This commit is contained in:
parent
ba3a84cc6e
commit
137b45da55
@ -5755,9 +5755,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
|||||||
if (r_sdp) {
|
if (r_sdp) {
|
||||||
sdp_parser_t *parser;
|
sdp_parser_t *parser;
|
||||||
sdp_session_t *sdp;
|
sdp_session_t *sdp;
|
||||||
|
tech_pvt->remote_sdp_str = NULL;
|
||||||
switch_channel_set_variable(channel, SWITCH_R_SDP_VARIABLE, r_sdp);
|
switch_channel_set_variable(channel, SWITCH_R_SDP_VARIABLE, r_sdp);
|
||||||
|
printf("WTF %d\n---\n%s\n---\n%s", (profile->ndlb & PFLAG_NDLB_ALLOW_NONDUP_SDP), tech_pvt->remote_sdp_str, r_sdp);
|
||||||
if (!(profile->ndlb & PFLAG_NDLB_ALLOW_NONDUP_SDP) || (!zstr(tech_pvt->remote_sdp_str) && !strcmp(tech_pvt->remote_sdp_str, r_sdp))) {
|
if (!(profile->ndlb & PFLAG_NDLB_ALLOW_NONDUP_SDP) || (!zstr(tech_pvt->remote_sdp_str) && !strcmp(tech_pvt->remote_sdp_str, r_sdp))) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Duplicate SDP\n%s\n", r_sdp);
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Duplicate SDP\n%s\n", r_sdp);
|
||||||
is_dup_sdp = 1;
|
is_dup_sdp = 1;
|
||||||
@ -5855,6 +5855,39 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
|||||||
|
|
||||||
if (r_sdp) {
|
if (r_sdp) {
|
||||||
if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
|
if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
|
||||||
|
char ibuf[35] = "", pbuf[35] = "";
|
||||||
|
const char *ptr;
|
||||||
|
|
||||||
|
if ((ptr = switch_stristr("c=IN IP4", r_sdp))) {
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
ptr += 8;
|
||||||
|
|
||||||
|
while(*ptr == ' ') {
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
while(*ptr && *ptr != ' ' && *ptr != '\r' && *ptr != '\n') {
|
||||||
|
ibuf[i++] = *ptr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_channel_set_variable(channel, SWITCH_REMOTE_MEDIA_IP_VARIABLE, ibuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ptr = switch_stristr("m=audio", r_sdp))) {
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
ptr += 7;
|
||||||
|
|
||||||
|
while(*ptr == ' ') {
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
while(*ptr && *ptr != ' ' && *ptr != '\r' && *ptr != '\n') {
|
||||||
|
pbuf[i++] = *ptr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_channel_set_variable(channel, SWITCH_REMOTE_MEDIA_PORT_VARIABLE, pbuf);
|
||||||
|
}
|
||||||
|
|
||||||
if (switch_channel_test_flag(channel, CF_PROXY_MEDIA) && switch_channel_direction(tech_pvt->channel) == SWITCH_CALL_DIRECTION_INBOUND) {
|
if (switch_channel_test_flag(channel, CF_PROXY_MEDIA) && switch_channel_direction(tech_pvt->channel) == SWITCH_CALL_DIRECTION_INBOUND) {
|
||||||
switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "PROXY MEDIA");
|
switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "PROXY MEDIA");
|
||||||
}
|
}
|
||||||
@ -6331,41 +6364,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case nua_callstate_ready:
|
case nua_callstate_ready:
|
||||||
|
if (r_sdp && (!is_dup_sdp || sofia_test_flag(tech_pvt, TFLAG_NEW_SDP)) && switch_rtp_ready(tech_pvt->rtp_session) && !sofia_test_flag(tech_pvt, TFLAG_NOSDP_REINVITE)) {
|
||||||
if (switch_channel_test_flag(channel, CF_PROXY_MODE) && r_sdp) {
|
|
||||||
char ibuf[35] = "", pbuf[35] = "";
|
|
||||||
const char *ptr;
|
|
||||||
|
|
||||||
if ((ptr = switch_stristr("c=IN IP4", r_sdp))) {
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
ptr += 8;
|
|
||||||
|
|
||||||
while(*ptr == ' ') {
|
|
||||||
ptr++;
|
|
||||||
}
|
|
||||||
while(*ptr && *ptr != ' ' && *ptr != '\r' && *ptr != '\n') {
|
|
||||||
ibuf[i++] = *ptr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch_channel_set_variable(channel, SWITCH_REMOTE_MEDIA_IP_VARIABLE, ibuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ptr = switch_stristr("m=audio", r_sdp))) {
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
ptr += 7;
|
|
||||||
|
|
||||||
while(*ptr == ' ') {
|
|
||||||
ptr++;
|
|
||||||
}
|
|
||||||
while(*ptr && *ptr != ' ' && *ptr != '\r' && *ptr != '\n') {
|
|
||||||
pbuf[i++] = *ptr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch_channel_set_variable(channel, SWITCH_REMOTE_MEDIA_PORT_VARIABLE, pbuf);
|
|
||||||
}
|
|
||||||
} else if (r_sdp && (!is_dup_sdp || sofia_test_flag(tech_pvt, TFLAG_NEW_SDP)) && switch_rtp_ready(tech_pvt->rtp_session) && !sofia_test_flag(tech_pvt, TFLAG_NOSDP_REINVITE)) {
|
|
||||||
/* sdp changed since 18X w sdp, we're supposed to ignore it but we, of course, were pressured into supporting it */
|
/* sdp changed since 18X w sdp, we're supposed to ignore it but we, of course, were pressured into supporting it */
|
||||||
uint8_t match = 0;
|
uint8_t match = 0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user