enclosed diff on rtpengine/daemon/sdp.c leaves attributes of original sdp untouched if ICE=force_relay flag is set. i tested it with sdps generated by baresip, jssip, and pjsip.
this diff complements earlier commit that added ICE=force_relay flag, which is not really useful if original sdp attributes are not left as is.
-- juha
*** /usr/src/orig/rtpengine/daemon/sdp.c Mon Apr 28 17:46:41 2014 --- sdp.c Thu May 1 17:49:06 2014 *************** *** 1399,1404 **** --- 1399,1406 ----
case ATTR_RTCP: case ATTR_RTCP_MUX: + if (flags->ice_force_relay) + break; case ATTR_INACTIVE: case ATTR_SENDONLY: case ATTR_RECVONLY: *************** *** 1670,1680 **** } }
! if (session->origin.parsed && flags->replace_origin) { if (replace_network_address(chop, &session->origin.address, ps, flags)) goto error; } ! if (session->connection.parsed && sess_conn) { if (replace_network_address(chop, &session->connection.address, ps, flags)) goto error; } --- 1672,1684 ---- } }
! 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 && ! !flags->ice_force_relay) { if (replace_network_address(chop, &session->connection.address, ps, flags)) goto error; } *************** *** 1703,1718 **** 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 (process_media_attributes(chop, sdp_media, flags, call_media)) --- 1707,1724 ---- goto error; ps = j->data;
! 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,1755 **** chopper_append_c(chop, "\r\na=rtcp-mux\r\n"); ps_rtcp = NULL; } ! else if (ps_rtcp) { chopper_append_c(chop, "a=rtcp:"); chopper_append_printf(chop, "%hu", ps_rtcp->sfd->fd.localport); if (!MEDIA_ISSET(call_media, RTCP_MUX)) --- 1755,1761 ---- chopper_append_c(chop, "\r\na=rtcp-mux\r\n"); ps_rtcp = NULL; } ! 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))