Bug 1237299: addedd missing address family to DNS lookup for proxies draft
authorNils Ohlmeier [:drno] <drno@ohlmeier.org>
Mon, 11 Jan 2016 13:39:11 -0800
changeset 321017 a9b13d912754e0b06edc9f2fbea84e4d133fe928
parent 320463 5acc2a44834ce0614f98466475e674517daf0041
child 512852 84e132d25e120c5adf9a5dabb275481d463c50b9
push id9327
push userdrno@ohlmeier.org
push dateTue, 12 Jan 2016 22:17:57 +0000
bugs1237299
milestone46.0a1
Bug 1237299: addedd missing address family to DNS lookup for proxies
media/mtransport/third_party/nICEr/src/net/nr_proxy_tunnel.c
--- a/media/mtransport/third_party/nICEr/src/net/nr_proxy_tunnel.c
+++ b/media/mtransport/third_party/nICEr/src/net/nr_proxy_tunnel.c
@@ -262,17 +262,17 @@ abort:
 }
 
 int nr_socket_proxy_tunnel_connect(void *obj, nr_transport_addr *addr)
 {
   int r, _status;
   int has_addr;
   nr_socket_proxy_tunnel *sock = (nr_socket_proxy_tunnel*)obj;
   nr_proxy_tunnel_config *config = sock->config;
-  nr_transport_addr proxy_addr;
+  nr_transport_addr proxy_addr, local_addr;
   nr_resolver_resource resource;
 
   if ((r=nr_transport_addr_copy(&sock->remote_addr, addr))) {
     ABORT(r);
   }
 
   assert(config->proxy_host);
 
@@ -288,16 +288,32 @@ int nr_socket_proxy_tunnel_connect(void 
   }
 
   if (!has_addr) {
     resource.domain_name=config->proxy_host;
     resource.port=config->proxy_port;
     resource.stun_turn=NR_RESOLVE_PROTOCOL_TURN;
     resource.transport_protocol=IPPROTO_TCP;
 
+    if ((r=nr_socket_getaddr(sock->inner, &local_addr))) {
+      r_log(LOG_GENERIC,LOG_ERR,"nr_socket_proxy_tunnel_connect failed to get local address");
+      ABORT(r);
+    }
+
+    switch(local_addr.ip_version) {
+      case NR_IPV4:
+        resource.address_family=AF_INET;
+        break;
+      case NR_IPV6:
+        resource.address_family=AF_INET6;
+        break;
+      default:
+        ABORT(R_BAD_ARGS);
+    }
+
     r_log(LOG_GENERIC,LOG_DEBUG,"nr_socket_proxy_tunnel_connect: nr_resolver_resolve");
     if ((r=nr_resolver_resolve(config->resolver, &resource,
             nr_socket_proxy_tunnel_resolved_cb, (void *)sock, &sock->resolver_handle))) {
       r_log(LOG_GENERIC,LOG_ERR,"Could not invoke DNS resolver");
       ABORT(r);
     }
 
     ABORT(R_WOULDBLOCK);