From a95584d07999035de85da3a84a422bb3c6475122 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Thu, 11 May 2017 18:46:52 -0500 Subject: SDP: Set the remote c= line in RTP instance. Change-Id: I23b646392082deab65bedeb19b12dcbcb9216d0c --- main/sdp_state.c | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'main/sdp_state.c') diff --git a/main/sdp_state.c b/main/sdp_state.c index a5f116706..f27da211b 100644 --- a/main/sdp_state.c +++ b/main/sdp_state.c @@ -997,11 +997,32 @@ static void update_rtp_after_merge(const struct ast_sdp_state *state, const struct ast_sdp *remote_sdp, const struct ast_sdp_m_line *remote_m_line) { + struct ast_sdp_c_line *c_line; + struct ast_sockaddr *addrs; + if (!rtp) { /* This is a dummy stream */ return; } + c_line = remote_m_line->c_line; + if (!c_line) { + c_line = remote_sdp->c_line; + } + /* + * There must be a c= line somewhere but that would be an error by + * the far end that should have been caught by a validation check + * before we processed the SDP. + */ + ast_assert(c_line != NULL); + + if (ast_sockaddr_resolve(&addrs, c_line->address, PARSE_PORT_FORBID, AST_AF_UNSPEC) > 0) { + /* Apply connection information to the RTP instance */ + ast_sockaddr_set_port(addrs, remote_m_line->port); + ast_rtp_instance_set_remote_address(rtp->instance, addrs); + ast_free(addrs); + } + if (ast_sdp_options_get_rtcp_mux(options) && ast_sdp_m_find_attribute(remote_m_line, "rtcp-mux", -1)) { ast_rtp_instance_set_prop(rtp->instance, AST_RTP_PROPERTY_RTCP, @@ -1011,9 +1032,7 @@ static void update_rtp_after_merge(const struct ast_sdp_state *state, AST_RTP_INSTANCE_RTCP_STANDARD); } - if (ast_sdp_options_get_ice(options) == AST_SDP_ICE_ENABLED_STANDARD) { - update_ice(state, rtp->instance, options, remote_sdp, remote_m_line); - } + update_ice(state, rtp->instance, options, remote_sdp, remote_m_line); } /*! @@ -1066,12 +1085,19 @@ static void update_udptl_after_merge(const struct ast_sdp_state *state, struct s } } - c_line = remote_sdp->c_line; - if (remote_m_line->c_line) { - c_line = remote_m_line->c_line; + c_line = remote_m_line->c_line; + if (!c_line) { + c_line = remote_sdp->c_line; } + /* + * There must be a c= line somewhere but that would be an error by + * the far end that should have been caught by a validation check + * before we processed the SDP. + */ + ast_assert(c_line != NULL); if (ast_sockaddr_resolve(&addrs, c_line->address, PARSE_PORT_FORBID, AST_AF_UNSPEC) > 0) { + /* Apply connection information to the UDPTL instance */ ast_sockaddr_set_port(addrs, remote_m_line->port); ast_udptl_set_peer(udptl->instance, addrs); ast_free(addrs); -- cgit v1.2.3