[tor-commits] [flashproxy/master] Do logging in websocket-client like in websocket-server.

dcf at torproject.org dcf at torproject.org
Thu May 30 23:40:11 UTC 2013


commit b65a141b2b438f398982e925f2741e4277445791
Author: David Fifield <david at 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
 		}
 	}





More information about the tor-commits mailing list