]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_sdp_rtp.c: Don't use deprecated transport struct member.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 6 Apr 2017 23:18:16 +0000 (18:18 -0500)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 11 Apr 2017 18:03:57 +0000 (13:03 -0500)
* 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

res/res_pjsip_sdp_rtp.c

index f9be79ed6a6d68efaefe0bd17094d0c5e2799e9f..e1f0cee9d5834b411b2de2a7e70a0afde7acca4c 100644 (file)
@@ -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))) {