[tor-commits] [flashproxy/master] Remove websocket-client.
dcf at torproject.org
dcf at torproject.org
Wed Jan 30 05:11:39 UTC 2013
commit 6ad919a95c0a54d318d660c8fe71f054680a0b4f
Author: David Fifield <david at bamsoftware.com>
Date: Mon Jan 28 01:49:27 2013 -0800
Remove websocket-client.
Go's kinda built-in WebSocket support is lame. I'm afraid it's going to
crash if you feed it a giant message. websocket-client has nothing to do
with flash proxy per se; it just happens to be able to connect to the
same bridges that flash proxies connect to.
---
.gitignore | 1 -
websocket-transport/Makefile | 3 +-
websocket-transport/websocket-client.go | 220 -------------------------------
3 files changed, 1 insertions(+), 223 deletions(-)
diff --git a/.gitignore b/.gitignore
index ff6ddd5..3edea77 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
/facilitator.log
*.pyc
/dist
-/websocket-transport/websocket-client
/websocket-transport/websocket-server
diff --git a/websocket-transport/Makefile b/websocket-transport/Makefile
index ac6fa08..5cdba65 100644
--- a/websocket-transport/Makefile
+++ b/websocket-transport/Makefile
@@ -1,7 +1,7 @@
PREFIX = /usr/local
BINDIR = $(PREFIX)/bin
-PROGRAMS = websocket-client websocket-server
+PROGRAMS = websocket-server
GOBUILDFLAGS =
# Alternate flags to use gccgo, allowing cross-compiling for x86 from
@@ -11,7 +11,6 @@ GOBUILDFLAGS =
all: websocket-server
-websocket-client: websocket-client.go socks.go pt.go
websocket-server: websocket-server.go pt.go websocket.go
%: %.go
diff --git a/websocket-transport/websocket-client.go b/websocket-transport/websocket-client.go
deleted file mode 100644
index 129e90a..0000000
--- a/websocket-transport/websocket-client.go
+++ /dev/null
@@ -1,220 +0,0 @@
-// Tor websocket client transport plugin.
-//
-// Usage:
-// ClientTransportPlugin websocket exec ./websocket-client
-
-package main
-
-import (
- "code.google.com/p/go.net/websocket"
- "flag"
- "fmt"
- "io"
- "net"
- "net/url"
- "os"
- "os/signal"
- "sync"
- "time"
-)
-
-const socksTimeout = 2
-const bufSiz = 1500
-
-// When a connection handler starts, +1 is written to this channel; when it
-// ends, -1 is written.
-var handlerChan = make(chan int)
-
-func logDebug(format string, v ...interface{}) {
- fmt.Fprintf(os.Stderr, format+"\n", v...)
-}
-
-func proxy(local *net.TCPConn, ws *websocket.Conn) {
- var wg sync.WaitGroup
-
- wg.Add(2)
-
- // Local-to-WebSocket read loop.
- go func() {
- buf := make([]byte, bufSiz)
- var err error
- for {
- n, er := local.Read(buf[:])
- if n > 0 {
- ew := websocket.Message.Send(ws, buf[:n])
- if ew != nil {
- err = ew
- break
- }
- }
- if er != nil {
- err = er
- break
- }
- }
- if err != nil && err != io.EOF {
- logDebug("%s", err)
- }
- local.CloseRead()
- ws.Close()
-
- wg.Done()
- }()
-
- // WebSocket-to-local read loop.
- go func() {
- var buf []byte
- var err error
- for {
- er := websocket.Message.Receive(ws, &buf)
- if er != nil {
- err = er
- break
- }
- n, ew := local.Write(buf)
- if ew != nil {
- err = ew
- break
- }
- if n != len(buf) {
- err = io.ErrShortWrite
- break
- }
- }
- if err != nil && err != io.EOF {
- logDebug("%s", err)
- }
- local.CloseWrite()
- ws.Close()
-
- wg.Done()
- }()
-
- wg.Wait()
-}
-
-func handleConnection(conn *net.TCPConn) error {
- defer conn.Close()
-
- handlerChan <- 1
- defer func() {
- handlerChan <- -1
- }()
-
- var ws *websocket.Conn
-
- conn.SetDeadline(time.Now().Add(socksTimeout * time.Second))
- err := AwaitSocks4aConnect(conn, func(dest string) (*net.TCPAddr, error) {
- // Disable deadline.
- conn.SetDeadline(time.Time{})
- logDebug("SOCKS request for %s", dest)
- destAddr, err := net.ResolveTCPAddr("tcp", dest)
- if err != nil {
- return nil, err
- }
- wsUrl := url.URL{Scheme: "ws", Host: dest}
- ws, err = websocket.Dial(wsUrl.String(), "", wsUrl.String())
- if err != nil {
- return nil, err
- }
- logDebug("WebSocket connection to %s", ws.Config().Location.String())
- return destAddr, nil
- })
- if err != nil {
- return err
- }
- defer ws.Close()
- proxy(conn, ws)
- return nil
-}
-
-func socksAcceptLoop(ln *net.TCPListener) error {
- for {
- socks, err := ln.AcceptTCP()
- if err != nil {
- return err
- }
- go func() {
- err := handleConnection(socks)
- if err != nil {
- logDebug("SOCKS from %s: %s", socks.RemoteAddr(), err)
- }
- }()
- }
- return nil
-}
-
-func startListener(addrStr string) (*net.TCPListener, error) {
- addr, err := net.ResolveTCPAddr("tcp", addrStr)
- if err != nil {
- return nil, err
- }
- ln, err := net.ListenTCP("tcp", addr)
- if err != nil {
- return nil, err
- }
- go func() {
- err := socksAcceptLoop(ln)
- if err != nil {
- logDebug("accept: %s", err)
- }
- }()
- return ln, nil
-}
-
-func main() {
- const ptMethodName = "websocket"
- var defaultSocksAddrStrs = []string{"127.0.0.1:0"}
- var socksAddrStrs []string
-
- var socksArg = flag.String("socks", "", "address on which to listen for SOCKS connections")
- flag.Parse()
- if *socksArg != "" {
- socksAddrStrs = []string{*socksArg}
- } else {
- socksAddrStrs = defaultSocksAddrStrs
- }
-
- PtClientSetup([]string{ptMethodName})
-
- listeners := make([]*net.TCPListener, 0)
- for _, socksAddrStr := range socksAddrStrs {
- ln, err := startListener(socksAddrStr)
- if err != nil {
- PtCmethodError(ptMethodName, err.Error())
- }
- PtCmethod(ptMethodName, "socks4", ln.Addr())
- listeners = append(listeners, ln)
- }
- PtCmethodsDone()
-
- var numHandlers int = 0
-
- signalChan := make(chan os.Signal, 1)
- signal.Notify(signalChan, os.Interrupt)
- var sigint bool = false
- for !sigint {
- select {
- case n := <-handlerChan:
- numHandlers += n
- case <-signalChan:
- logDebug("SIGINT")
- sigint = true
- }
- }
-
- for _, ln := range listeners {
- ln.Close()
- }
-
- sigint = false
- for numHandlers != 0 && !sigint {
- select {
- case n := <-handlerChan:
- numHandlers += n
- case <-signalChan:
- logDebug("SIGINT")
- sigint = true
- }
- }
-}
More information about the tor-commits
mailing list