From 51a8dd5a86eeca744e0add680b1f4796c4babe2b Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Mon, 12 May 2014 23:04:39 +0000 Subject: Fix logging again. On second thought instead of using log.Panicf(), panic() and do the logging with recover(). This somewhat centralizes logging in obfs4proxy, which will be easier to change when I invariably decide to do logging differently in the future. --- obfs4proxy/obfs4proxy.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'obfs4proxy') diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go index 34027fc..42a6740 100644 --- a/obfs4proxy/obfs4proxy.go +++ b/obfs4proxy/obfs4proxy.go @@ -75,28 +75,37 @@ var ptListeners []net.Listener // ends, -1 is written. var handlerChan = make(chan int) +func logAndRecover() { + if err := recover(); err != nil { + log.Println("[ERROR] Panic:", err) + } +} + func copyLoop(a, b net.Conn) { var wg sync.WaitGroup wg.Add(2) - // XXX: Log/propagate errors. go func() { + defer logAndRecover() + defer wg.Done() + _, err := io.Copy(b, a) if err != nil { b.Close() a.Close() log.Printf("[WARN] Connection closed: %s", err) } - wg.Done() }() go func() { + defer logAndRecover() + defer wg.Done() + _, err := io.Copy(a, b) if err != nil { a.Close() b.Close() log.Printf("[WARN] Connection closed: %s", err) } - wg.Done() }() wg.Wait() @@ -104,6 +113,7 @@ func copyLoop(a, b net.Conn) { func serverHandler(conn net.Conn, info *pt.ServerInfo) error { defer conn.Close() + defer logAndRecover() handlerChan <- 1 defer func() { @@ -216,6 +226,7 @@ func clientHandler(conn *pt.SocksConn) error { handlerChan <- -1 }() + defer logAndRecover() remote, err := obfs4.Dial("tcp", conn.Req.Target, nodeID, publicKey) if err != nil { log.Printf("[ERROR] client: Handshake failed: %s", err) -- cgit v1.2.3