summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2017-04-06 18:18:16 -0500
committerRichard Mudgett <rmudgett@digium.com>2017-04-11 12:58:35 -0500
commit6f793ac149c84b05c5364b7181988eff9163c45b (patch)
tree4cfd229496c0fb2301cd193435ebefee703df3f7
parent2b8dbc9e00094ad0913fa56580266086fc120f3c (diff)
res_pjsip_sdp_rtp.c: Don't use deprecated transport struct member.
* create_rtp(): Eliminate use of deprecated transport struct member. That member and several others in the transport structure were deprecated because of an infinite loop created when using realtime configuration. See 2451d4e4550336197ee2e482750cc53f30afa352 ASTERISK-26851 Change-Id: I0533aa13c9ce3c6cc394e0fd2b5bf1cd1b2ef3bc
-rw-r--r--res/res_pjsip_sdp_rtp.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/res/res_pjsip_sdp_rtp.c b/res/res_pjsip_sdp_rtp.c
index 701edc3c2..7c861dac9 100644
--- a/res/res_pjsip_sdp_rtp.c
+++ b/res/res_pjsip_sdp_rtp.c
@@ -209,24 +209,30 @@ static int create_rtp(struct ast_sip_session *session, struct ast_sip_session_me
session->endpoint->media.address);
}
} else {
- struct ast_sip_transport *transport =
- ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "transport",
- session->endpoint->transport);
-
- if (transport && transport->state) {
- char hoststr[PJ_INET6_ADDRSTRLEN];
-
- pj_sockaddr_print(&transport->state->host, hoststr, sizeof(hoststr), 0);
- if (ast_sockaddr_parse(&temp_media_address, hoststr, 0)) {
- ast_debug(1, "Transport %s bound to %s: Using it for RTP media.\n",
- session->endpoint->transport, hoststr);
- media_address = &temp_media_address;
- } else {
- ast_debug(1, "Transport %s bound to %s: Invalid for RTP media.\n",
- session->endpoint->transport, hoststr);
+ struct ast_sip_transport *transport;
+
+ transport = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "transport",
+ session->endpoint->transport);
+ if (transport) {
+ struct ast_sip_transport_state *trans_state;
+
+ trans_state = ast_sip_get_transport_state(ast_sorcery_object_get_id(transport));
+ if (trans_state) {
+ char hoststr[PJ_INET6_ADDRSTRLEN];
+
+ pj_sockaddr_print(&trans_state->host, hoststr, sizeof(hoststr), 0);
+ if (ast_sockaddr_parse(&temp_media_address, hoststr, 0)) {
+ ast_debug(1, "Transport %s bound to %s: Using it for RTP media.\n",
+ session->endpoint->transport, hoststr);
+ media_address = &temp_media_address;
+ } else {
+ ast_debug(1, "Transport %s bound to %s: Invalid for RTP media.\n",
+ session->endpoint->transport, hoststr);
+ }
+ ao2_ref(trans_state, -1);
}
+ ao2_ref(transport, -1);
}
- ao2_cleanup(transport);
}
if (!(session_media->rtp = ast_rtp_instance_new(session->endpoint->media.rtp.engine, sched, media_address, NULL))) {