summaryrefslogtreecommitdiff
path: root/main/sdp_state.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2017-05-11 18:46:52 -0500
committerRichard Mudgett <rmudgett@digium.com>2017-06-15 09:42:15 -0500
commita95584d07999035de85da3a84a422bb3c6475122 (patch)
treef30cfc9e4dbfbdfbdc94c0d0505ee371b8b2713f /main/sdp_state.c
parent0fdb99c268d13e51bc271fe24c691f61f03b9578 (diff)
SDP: Set the remote c= line in RTP instance.
Change-Id: I23b646392082deab65bedeb19b12dcbcb9216d0c
Diffstat (limited to 'main/sdp_state.c')
-rw-r--r--main/sdp_state.c38
1 files changed, 32 insertions, 6 deletions
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);