commit b26c7a7a7330586c3be3ece02c68999bb279ff40
Author: Shane Howearth <[email protected]>
Date:   Tue Sep 24 09:00:13 2019 +1000

    Handle generated errors in client
---
 client/lib/snowflake.go | 10 +++++-----
 client/lib/webrtc.go    | 11 ++++++++---
 client/snowflake.go     | 21 +++++++++++++++------
 3 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go
index 4af3d88..1c9c34d 100644
--- a/client/lib/snowflake.go
+++ b/client/lib/snowflake.go
@@ -56,18 +56,18 @@ func Handler(socks SocksConnector, snowflakes 
SnowflakeCollector) error {
 
 // Exchanges bytes between two ReadWriters.
 // (In this case, between a SOCKS and WebRTC connection.)
-func copyLoop(a, b io.ReadWriter) {
+func copyLoop(WebRTC, SOCKS io.ReadWriter) {
        var wg sync.WaitGroup
        wg.Add(2)
        go func() {
-               if _, err := io.Copy(ORPort, WebRTC); err != nil {
-                       log.Printf("copying WebRTC to ORPort resulted in error: 
%v", err)
+               if _, err := io.Copy(SOCKS, WebRTC); err != nil {
+                       log.Printf("copying WebRTC to SOCKS resulted in error: 
%v", err)
                }
                wg.Done()
        }()
        go func() {
-               if _, err := io.Copy(WebRTC, ORPort); err != nil {
-                       log.Printf("copying ORPort to WebRTC resulted in error: 
%v", err)
+               if _, err := io.Copy(WebRTC, SOCKS); err != nil {
+                       log.Printf("copying SOCKS to WebRTC resulted in error: 
%v", err)
                }
                wg.Done()
        }()
diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go
index 7d361ef..84494d5 100644
--- a/client/lib/webrtc.go
+++ b/client/lib/webrtc.go
@@ -138,7 +138,8 @@ func (c *WebRTCPeer) Connect() error {
        }
        err = c.establishDataChannel()
        if err != nil {
-               return errors.New("WebRTC: Could not establish DataChannel.")
+               // nolint: golint
+               return errors.New("WebRTC: Could not establish DataChannel")
        }
        err = c.exchangeSDP()
        if err != nil {
@@ -151,7 +152,9 @@ func (c *WebRTCPeer) Connect() error {
 // Create and prepare callbacks on a new WebRTC PeerConnection.
 func (c *WebRTCPeer) preparePeerConnection() error {
        if nil != c.pc {
-               c.pc.Close()
+               if err := c.pc.Close(); err != nil {
+                       log.Printf("c.pc.Close returned error: %v", err)
+               }
                c.pc = nil
        }
 
@@ -267,7 +270,9 @@ func (c *WebRTCPeer) establishDataChannel() error {
                if err != nil {
                        // TODO: Maybe shouldn't actually close.
                        log.Println("Error writing to SOCKS pipe")
-                       c.writePipe.CloseWithError(err)
+                       if inerr := c.writePipe.CloseWithError(err); inerr != 
nil {
+                               log.Printf("c.writePipe.CloseWithError returned 
error: %v", inerr)
+                       }
                }
                if n != len(msg.Data) {
                        log.Println("Error: short write")
diff --git a/client/snowflake.go b/client/snowflake.go
index 01c89d8..883a665 100644
--- a/client/snowflake.go
+++ b/client/snowflake.go
@@ -45,7 +45,7 @@ func ConnectLoop(snowflakes sf.SnowflakeCollector) {
 }
 
 // Accept local SOCKS connections and pass them to the handler.
-func socksAcceptLoop(ln *pt.SocksListener, snowflakes sf.SnowflakeCollector) 
error {
+func socksAcceptLoop(ln *pt.SocksListener, snowflakes sf.SnowflakeCollector) {
        defer ln.Close()
        log.Println("Started SOCKS listener.")
        for {
@@ -55,7 +55,8 @@ func socksAcceptLoop(ln *pt.SocksListener, snowflakes 
sf.SnowflakeCollector) err
                        if e, ok := err.(net.Error); ok && e.Temporary() {
                                continue
                        }
-                       return err
+                       log.Printf("SOCKS accept error: %s", err)
+                       break
                }
                log.Println("SOCKS accepted: ", conn.Req)
                err = sf.Handler(conn, snowflakes)
@@ -155,7 +156,9 @@ func main() {
                log.Fatal(err)
        }
        if ptInfo.ProxyURL != nil {
-               pt.ProxyError("proxy is not supported")
+               if err := pt.ProxyError("proxy is not supported"); err != nil {
+                       log.Printf("call to pt.ProxyError generated error: %v", 
err)
+               }
                os.Exit(1)
        }
        listeners := make([]net.Listener, 0)
@@ -165,14 +168,18 @@ func main() {
                        // TODO: Be able to recover when SOCKS dies.
                        ln, err := pt.ListenSocks("tcp", "127.0.0.1:0")
                        if err != nil {
-                               pt.CmethodError(methodName, err.Error())
+                               if inerr := pt.CmethodError(methodName, 
err.Error()); inerr != nil {
+                                       log.Printf("handling error generated by 
pt.ListenSocks with pt.CmethodError generated error: %v", inerr)
+                               }
                                break
                        }
                        go socksAcceptLoop(ln, snowflakes)
                        pt.Cmethod(methodName, ln.Version(), ln.Addr())
                        listeners = append(listeners, ln)
                default:
-                       pt.CmethodError(methodName, "no such method")
+                       if err := pt.CmethodError(methodName, "no such 
method"); err != nil {
+                               log.Printf("calling pt.CmethodError generated 
error: %v", err)
+                       }
                }
        }
        pt.CmethodsDone()
@@ -186,7 +193,9 @@ func main() {
                // This environment variable means we should treat EOF on stdin
                // just like SIGTERM: https://bugs.torproject.org/15435.
                go func() {
-                       io.Copy(ioutil.Discard, os.Stdin)
+                       if _, err := io.Copy(ioutil.Discard, os.Stdin); err != 
nil {
+                               log.Printf("calling io.Copy(ioutil.Discard, 
os.Stdin) returned error: %v", err)
+                       }
                        log.Printf("synthesizing SIGTERM because of stdin 
close")
                        sigChan <- syscall.SIGTERM
                }()



_______________________________________________
tor-commits mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to