commit b65a141b2b438f398982e925f2741e4277445791 Author: David Fifield david@bamsoftware.com Date: Thu May 30 14:59:02 2013 -0700
Do logging in websocket-client like in websocket-server. --- websocket-transport/websocket-client.go | 43 ++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 10 deletions(-)
diff --git a/websocket-transport/websocket-client.go b/websocket-transport/websocket-client.go index 767205a..acca651 100644 --- a/websocket-transport/websocket-client.go +++ b/websocket-transport/websocket-client.go @@ -22,21 +22,30 @@ const ptMethodName = "websocket" const socksTimeout = 2 * time.Second const bufSiz = 1500
+var logFile = os.Stderr + // When a connection handler starts, +1 is written to this channel; when it // ends, -1 is written. var handlerChan = make(chan int)
+var logMutex sync.Mutex + func usage() { fmt.Printf("Usage: %s [OPTIONS]\n", os.Args[0]) fmt.Printf("WebSocket client pluggable transport for Tor.\n") fmt.Printf("Works only as a managed proxy.\n") fmt.Printf("\n") fmt.Printf(" -h, --help show this help.\n") + fmt.Printf(" --log FILE log messages to FILE (default stderr).\n") fmt.Printf(" --socks ADDR listen for SOCKS on ADDR.\n") }
-func logDebug(format string, v ...interface{}) { - fmt.Fprintf(os.Stderr, format+"\n", v...) +func Log(format string, v ...interface{}) { + dateStr := time.Now().Format("2006-01-02 15:04:05") + logMutex.Lock() + defer logMutex.Unlock() + msg := fmt.Sprintf(format, v...) + fmt.Fprintf(logFile, "%s %s\n", dateStr, msg) }
func proxy(local *net.TCPConn, ws *websocket.Conn) { @@ -63,7 +72,7 @@ func proxy(local *net.TCPConn, ws *websocket.Conn) { } } if err != nil && err != io.EOF { - logDebug("%s", err) + Log("%s", err) } local.CloseRead() ws.Close() @@ -92,7 +101,7 @@ func proxy(local *net.TCPConn, ws *websocket.Conn) { } } if err != nil && err != io.EOF { - logDebug("%s", err) + Log("%s", err) } local.CloseWrite() ws.Close() @@ -117,7 +126,7 @@ func handleConnection(conn *net.TCPConn) error { err := AwaitSocks4aConnect(conn, func(dest string) (*net.TCPAddr, error) { // Disable deadline. conn.SetDeadline(time.Time{}) - logDebug("SOCKS request for %s", dest) + Log("SOCKS request for %s", dest) destAddr, err := net.ResolveTCPAddr("tcp", dest) if err != nil { return nil, err @@ -127,7 +136,7 @@ func handleConnection(conn *net.TCPConn) error { if err != nil { return nil, err } - logDebug("WebSocket connection to %s", ws.Config().Location.String()) + Log("WebSocket connection to %s", ws.Config().Location.String()) return destAddr, nil }) if err != nil { @@ -147,7 +156,7 @@ func socksAcceptLoop(ln *net.TCPListener) error { go func() { err := handleConnection(socks) if err != nil { - logDebug("SOCKS from %s: %s", socks.RemoteAddr(), err) + Log("SOCKS from %s: %s", socks.RemoteAddr(), err) } }() } @@ -166,7 +175,7 @@ func startListener(addrStr string) (*net.TCPListener, error) { go func() { err := socksAcceptLoop(ln) if err != nil { - logDebug("accept: %s", err) + Log("accept: %s", err) } }() return ln, nil @@ -175,16 +184,29 @@ func startListener(addrStr string) (*net.TCPListener, error) { func main() { var defaultSocksAddrStrs = []string{"127.0.0.1:0"} var socksAddrStrs []string + var logFilename string
var socksArg = flag.String("socks", "", "address on which to listen for SOCKS connections") flag.Usage = usage + flag.StringVar(&logFilename, "log", "", "log file to write to") flag.Parse() + + if logFilename != "" { + f, err := os.OpenFile(logFilename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) + if err != nil { + fmt.Fprintf(os.Stderr, "Can't open log file %q: %s.\n", logFilename, err.Error()) + os.Exit(1) + } + logFile = f + } + if *socksArg != "" { socksAddrStrs = []string{*socksArg} } else { socksAddrStrs = defaultSocksAddrStrs }
+ Log("starting") PtClientSetup([]string{ptMethodName})
listeners := make([]*net.TCPListener, 0) @@ -194,6 +216,7 @@ func main() { PtCmethodError(ptMethodName, err.Error()) } PtCmethod(ptMethodName, "socks4", ln.Addr()) + Log("listening on %s", ln.Addr().String()) listeners = append(listeners, ln) } PtCmethodsDone() @@ -208,7 +231,7 @@ func main() { case n := <-handlerChan: numHandlers += n case <-signalChan: - logDebug("SIGINT") + Log("SIGINT") sigint = true } } @@ -223,7 +246,7 @@ func main() { case n := <-handlerChan: numHandlers += n case <-signalChan: - logDebug("SIGINT") + Log("SIGINT") sigint = true } }
tor-commits@lists.torproject.org