[tor-commits] [snowflake/master] Bug 18628: Pass the client_ip parameter in the JavaScript proxy as well.

dcf at torproject.org dcf at torproject.org
Sat Oct 14 19:12:34 UTC 2017


commit eca7ebb2652b0a1588e31799da77c1a312eb7287
Author: David Fifield <david at bamsoftware.com>
Date:   Tue Aug 15 18:15:48 2017 -0700

    Bug 18628: Pass the client_ip parameter in the JavaScript proxy as well.
---
 proxy/proxypair.coffee | 15 ++++++++++++++-
 proxy/websocket.coffee |  4 ++--
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/proxy/proxypair.coffee b/proxy/proxypair.coffee
index 28696e2..2adbc23 100644
--- a/proxy/proxypair.coffee
+++ b/proxy/proxypair.coffee
@@ -93,7 +93,20 @@ class ProxyPair
   # Assumes WebRTC datachannel is connected.
   connectRelay: =>
     dbg 'Connecting to relay...'
-    @relay = makeWebsocket @relayAddr
+
+    # Get a remote IP address from the PeerConnection, if possible. Add it to
+    # the WebSocket URL's query string if available.
+    # MDN marks remoteDescription as "experimental". However the other two
+    # options, currentRemoteDescription and pendingRemoteDescription, which
+    # are not marked experimental, were undefined when I tried them in Firefox
+    # 52.2.0.
+    # https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/remoteDescription
+    peer_ip = Parse.ipFromSDP(@pc.remoteDescription?.sdp)
+    params = []
+    if peer_ip?
+      params.push(["client_ip", peer_ip])
+
+    @relay = makeWebsocket @relayAddr, params
     @relay.label = 'websocket-relay'
     @relay.onopen = =>
       if @timer
diff --git a/proxy/websocket.coffee b/proxy/websocket.coffee
index a23f53d..5487df1 100644
--- a/proxy/websocket.coffee
+++ b/proxy/websocket.coffee
@@ -46,9 +46,9 @@ buildUrl = (scheme, host, port, path, params) ->
 
   parts.join ''
 
-makeWebsocket = (addr) ->
+makeWebsocket = (addr, params) ->
   wsProtocol = if WSS_ENABLED then 'wss' else 'ws'
-  url = buildUrl wsProtocol, addr.host, addr.port, '/'
+  url = buildUrl wsProtocol, addr.host, addr.port, '/', params
   ws = new WebSocket url
   ###
   'User agents can use this as a hint for how to handle incoming binary data: if





More information about the tor-commits mailing list