1. 14 Jul, 2020 3 commits
  2. 09 Jul, 2020 1 commit
  3. 06 Jul, 2020 5 commits
  4. 19 Jun, 2020 1 commit
  5. 07 May, 2020 1 commit
  6. 05 May, 2020 1 commit
  7. 01 May, 2020 1 commit
    • David Fifield's avatar
      Format the establishDataChannel error log message like other log messages. · c8293a5d
      David Fifield authored
      It was sticking out in the context of other log messages.
      2020/04/30 22:39:10 WebRTC: DataChannel created.
      2020/04/30 22:39:20 establishDataChannel: timeout waiting for DataChannel.OnOpen
      2020/04/30 22:39:20 WebRTC: closing PeerConnection
      2020/04/30 22:39:20 WebRTC: Closing
      2020/04/30 22:39:20 WebRTC: WebRTC: Could not establish DataChannel  Retrying in 10s...
  8. 28 Apr, 2020 12 commits
  9. 27 Apr, 2020 3 commits
  10. 24 Apr, 2020 8 commits
  11. 23 Apr, 2020 4 commits
    • David Fifield's avatar
    • David Fifield's avatar
      Use a global RedialPacketConn and smux.Session. · 2022496d
      David Fifield authored
      This allows multiple SOCKS connections to share the available proxies,
      and in particular prevents a SOCKS connection from being starved of a
      proxy when the maximum proxy capacity is less then the number of the
      number of SOCKS connections.
      This is option 4 from https://bugs.torproject.org/33519.
    • David Fifield's avatar
      USERADDR support for turbotunnel sessions. · 07909540
      David Fifield authored
      The difficulty here is that the whole point of turbotunnel sessions is
      that they are not necessarily tied to a single WebSocket connection, nor
      even a single client IP address. We use a heuristic: whenever a
      WebSocket connection starts that has a new ClientID, we store a mapping
      from that ClientID to the IP address attached to the WebSocket
      connection in a lookup table. Later, when enough packets have arrived to
      establish a turbotunnel session, we recover the ClientID associated with
      the session (which kcp-go has stored in the RemoteAddr field), and look
      it up in the table to get an IP address. We introduce a new data type,
      clientIDMap, to store the clientID-to-IP mapping during the short time
      between when a WebSocket connection starts and handleSession receives a
      fully fledged KCP session.
    • David Fifield's avatar
      Turbo Tunnel client and server. · 70126177
      David Fifield authored
      The client opts into turbotunnel mode by sending a magic token at the
      beginning of each WebSocket connection (before sending even the
      ClientID). The token is just a random byte string I generated. The
      server peeks at the token and, if it matches, uses turbotunnel mode.
      Otherwise, it unreads the token and continues in the old
      one-session-per-WebSocket mode.