commit f3e0abe0e169f6e5467aae75286ace935924370f Author: Serene Han keroserene+git@gmail.com Date: Thu Feb 25 01:23:59 2016 -0800
only flush datachannel with nonzero bytes, which prevents Tor from marking the SOCKS for close (#12) --- client/snowflake.go | 3 ++- client/webrtc.go | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/client/snowflake.go b/client/snowflake.go index 615038c..2c40796 100644 --- a/client/snowflake.go +++ b/client/snowflake.go @@ -101,7 +101,7 @@ func handler(conn *pt.SocksConn) error { log.Println("handler fired:", conn)
remote, err := dialWebRTC() - if err != nil { + if err != nil || remote == nil { conn.Reject() return err } @@ -123,6 +123,7 @@ func handler(conn *pt.SocksConn) error { func acceptLoop(ln *pt.SocksListener) error { defer ln.Close() for { + log.Println("SOCKS listening...") conn, err := ln.AcceptSocks() if err != nil { if e, ok := err.(net.Error); ok && e.Temporary() { diff --git a/client/webrtc.go b/client/webrtc.go index 0c865fa..d60f212 100644 --- a/client/webrtc.go +++ b/client/webrtc.go @@ -172,11 +172,13 @@ func (c *webRTCConn) establishDataChannel() error { if nil != c.snowflake { panic("PeerConnection snowflake already exists.") } - // Flush the buffer, then enable datachannel. - dc.Send(c.buffer.Bytes()) - log.Println("Flushed", c.buffer.Len(), "bytes") - c.buffer.Reset() - + // Flush the buffer if necessary. + if c.buffer.Len() > 0 { + dc.Send(c.buffer.Bytes()) + log.Println("Flushed", c.buffer.Len(), "bytes.") + c.buffer.Reset() + } + // Then enable the datachannel. c.snowflake = dc } dc.OnClose = func() { @@ -190,6 +192,7 @@ func (c *webRTCConn) establishDataChannel() error { } } dc.OnMessage = func(msg []byte) { + // log.Println("ONMESSAGE: ", len(msg)) if len(msg) <= 0 { log.Println("0 length---") }
tor-commits@lists.torproject.org