commit f3e0abe0e169f6e5467aae75286ace935924370f
Author: Serene Han <[email protected]>
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 mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to