]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_sdp_rtp: Fix address family of explicit media_address. 80/4180/1
authorJoshua Colp <jcolp@digium.com>
Wed, 26 Oct 2016 11:32:04 +0000 (11:32 +0000)
committerJoshua Colp <jcolp@digium.com>
Wed, 26 Oct 2016 11:32:04 +0000 (11:32 +0000)
When an explicit media_address is provided the address family
in the SDP needs to be set to reflect it.

ASTERISK-26309

Change-Id: Ib9350cc91c120eb2f96f0623d3907d12af67eb79

res/res_pjsip_sdp_rtp.c

index aaedde423c78d35ed754a1523ae3f20ded42924a..cf7a8e8ea4f6d2bdb3fc1d27a2d364908a544d01 100644 (file)
@@ -1030,6 +1030,7 @@ static int create_outgoing_sdp_stream(struct ast_sip_session *session, struct as
        pj_pool_t *pool = session->inv_session->pool_prov;
        static const pj_str_t STR_IN = { "IN", 2 };
        static const pj_str_t STR_IP4 = { "IP4", 3};
+       static const pj_str_t STR_IP6 = { "IP6", 3};
        static const pj_str_t STR_SENDRECV = { "sendrecv", 8 };
        pjmedia_sdp_media *media;
        const char *hostip = NULL;
@@ -1093,9 +1094,19 @@ static int create_outgoing_sdp_stream(struct ast_sip_session *session, struct as
        }
 
        media->conn->net_type = STR_IN;
-       /* Connection information will be updated by the multihomed module */
+       /* Assume that the connection will use IPv4 until proven otherwise */
        media->conn->addr_type = STR_IP4;
        pj_strdup2(pool, &media->conn->addr, hostip);
+
+       if (!ast_strlen_zero(session->endpoint->media.address)) {
+               pj_sockaddr ip;
+
+               if ((pj_sockaddr_parse(pj_AF_UNSPEC(), 0, &media->conn->addr, &ip) == PJ_SUCCESS) &&
+                       (ip.addr.sa_family == pj_AF_INET6())) {
+                       media->conn->addr_type = STR_IP6;
+               }
+       }
+
        ast_rtp_instance_get_local_address(session_media->rtp, &addr);
        media->desc.port = direct_media_enabled ? ast_sockaddr_port(&session_media->direct_media_addr) : (pj_uint16_t) ast_sockaddr_port(&addr);
        media->desc.port_count = 1;