summaryrefslogtreecommitdiff
path: root/obfs4proxy
diff options
context:
space:
mode:
authorYawning Angel <yawning@schwanenlied.me>2014-05-12 23:04:39 +0000
committerYawning Angel <yawning@schwanenlied.me>2014-05-12 23:04:39 +0000
commit51a8dd5a86eeca744e0add680b1f4796c4babe2b (patch)
tree94fa1900ae3a230a23460df57151b618183b0b24 /obfs4proxy
parentc3acefb7e5aa5ef4cd65fc77ad4caa917efda130 (diff)
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.
Diffstat (limited to 'obfs4proxy')
-rw-r--r--obfs4proxy/obfs4proxy.go17
1 files changed, 14 insertions, 3 deletions
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)