[tor-commits] [snowflake/master] begin multiplex snowflake connect loop for #31
arlo at torproject.org
arlo at torproject.org
Sun Mar 27 16:09:19 UTC 2016
commit 451edb6decf7790db2ec0efceb94dc994952b0e8
Author: Serene Han <keroserene+git at gmail.com>
Date: Sun Mar 20 11:11:21 2016 -0700
begin multiplex snowflake connect loop for #31
---
client/snowflake.go | 21 ++++++++++++++++++---
client/webrtc.go | 3 ---
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/client/snowflake.go b/client/snowflake.go
index c78eed0..ac593a4 100644
--- a/client/snowflake.go
+++ b/client/snowflake.go
@@ -12,6 +12,7 @@ import (
"os/signal"
"sync"
"syscall"
+ "time"
"git.torproject.org/pluggable-transports/goptlib.git"
"github.com/keroserene/go-webrtc"
@@ -19,10 +20,10 @@ import (
var ptInfo pt.ClientInfo
-// var logFile *os.File
var brokerURL string
var frontDomain string
var iceServers IceServerList
+var snowflakes []*webRTCConn
// When a connection handler starts, +1 is written to this channel; when it
// ends, -1 is written.
@@ -30,6 +31,7 @@ var handlerChan = make(chan int)
const (
ReconnectTimeout = 5
+ SnowflakeCapacity = 1
)
func copyLoop(a, b net.Conn) {
@@ -53,6 +55,20 @@ type SnowflakeChannel interface {
Close() error
}
+// Maintain |WebRTCSlots| number of open connections to
+// transfer to SOCKS when needed. TODO: complete
+func SnowflakeConnectLoop() {
+ for len(snowflakes) < SnowflakeCapacity {
+ s, err := dialWebRTC()
+ if err != nil {
+ snowflakes = append(snowflakes, s)
+ continue
+ }
+ log.Println("WebRTC Error: ", err)
+ <-time.After(time.Second * ReconnectTimeout)
+ }
+}
+
// Initialize a WebRTC Connection.
func dialWebRTC() (*webRTCConn, error) {
// TODO: [#3] Fetch ICE server information from Broker.
@@ -82,8 +98,6 @@ func handler(conn *pt.SocksConn) error {
defer func() {
handlerChan <- -1
}()
- defer conn.Close()
- log.Println("handler fired:", conn)
remote, err := dialWebRTC()
if err != nil || remote == nil {
@@ -91,6 +105,7 @@ func handler(conn *pt.SocksConn) error {
return err
}
defer remote.Close()
+ defer conn.Close()
webrtcRemote = remote
err = conn.Grant(&net.TCPAddr{IP: net.IPv4zero, Port: 0})
diff --git a/client/webrtc.go b/client/webrtc.go
index 1300212..55f39e0 100644
--- a/client/webrtc.go
+++ b/client/webrtc.go
@@ -207,9 +207,6 @@ func (c *webRTCConn) establishDataChannel() error {
// Disable the DataChannel as a write destination.
log.Println("WebRTC: DataChannel.OnClose [remotely]")
c.snowflake = nil
- // TODO(issue #12): Need a way to update the circuit so that when a new WebRTC
- // data channel is available, the relay actually recognizes the new
- // snowflake.
c.Reset()
}
dc.OnMessage = func(msg []byte) {
More information about the tor-commits
mailing list