diff --git a/daemon/sdp.c b/daemon/sdp.c index 568249fc0..5a582fc77 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -1399,6 +1399,8 @@ static int process_media_attributes(struct sdp_chopper *chop, struct sdp_media * case ATTR_RTCP: case ATTR_RTCP_MUX: + if (flags->ice_force_relay) + break; case ATTR_INACTIVE: case ATTR_SENDONLY: case ATTR_RECVONLY: @@ -1670,11 +1672,13 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call_monologu } } - if (session->origin.parsed && flags->replace_origin) { + if (session->origin.parsed && flags->replace_origin && + !flags->ice_force_relay) { if (replace_network_address(chop, &session->origin.address, ps, flags)) goto error; } - if (session->connection.parsed && sess_conn) { + if (session->connection.parsed && sess_conn && + !flags->ice_force_relay) { if (replace_network_address(chop, &session->connection.address, ps, flags)) goto error; } @@ -1703,16 +1707,18 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call_monologu goto error; ps = j->data; - if (replace_media_port(chop, sdp_media, ps)) - goto error; - if (replace_consecutive_port_count(chop, sdp_media, ps, j)) - goto error; - if (replace_transport_protocol(chop, sdp_media, call_media)) - goto error; - - if (sdp_media->connection.parsed) { - if (replace_network_address(chop, &sdp_media->connection.address, ps, flags)) - goto error; + if (!flags->ice_force_relay) { + if (replace_media_port(chop, sdp_media, ps)) + goto error; + if (replace_consecutive_port_count(chop, sdp_media, ps, j)) + goto error; + if (replace_transport_protocol(chop, sdp_media, call_media)) + goto error; + + if (sdp_media->connection.parsed) { + if (replace_network_address(chop, &sdp_media->connection.address, ps, flags)) + goto error; + } } if (process_media_attributes(chop, sdp_media, flags, call_media)) @@ -1749,7 +1755,7 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call_monologu chopper_append_c(chop, "\r\na=rtcp-mux\r\n"); ps_rtcp = NULL; } - else if (ps_rtcp) { + else if (ps_rtcp && !flags->ice_force_relay) { chopper_append_c(chop, "a=rtcp:"); chopper_append_printf(chop, "%hu", ps_rtcp->sfd->fd.localport); if (!MEDIA_ISSET(call_media, RTCP_MUX))