[tor-commits] [flashproxy/master] Proxy ORPort to WebSocket.
dcf at torproject.org
dcf at torproject.org
Wed Jan 30 05:11:38 UTC 2013
commit fb9a61125ca148256d965fe875c3973a0998d7b3
Author: David Fifield <david at bamsoftware.com>
Date: Mon Nov 26 01:44:39 2012 -0800
Proxy ORPort to WebSocket.
---
websocket-transport/websocket-server.go | 49 +++++++++++++++++++++++++++++-
1 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/websocket-transport/websocket-server.go b/websocket-transport/websocket-server.go
index 8b62b60..fcdcd7f 100644
--- a/websocket-transport/websocket-server.go
+++ b/websocket-transport/websocket-server.go
@@ -4,15 +4,19 @@ import (
"encoding/base64"
"errors"
"fmt"
+ "io"
"net"
"net/http"
"os"
"os/signal"
+ "sync"
"time"
)
const defaultPort = 9901
+var ptInfo ptServerInfo
+
// When a connection handler starts, +1 is written to this channel; when it
// ends, -1 is written.
var handlerChan = make(chan int)
@@ -114,8 +118,49 @@ func NewWebsocketConn(ws *websocket) websocketConn {
return conn
}
+func proxy(local *net.TCPConn, conn *websocketConn) {
+ var wg sync.WaitGroup
+
+ wg.Add(2)
+
+ go func() {
+ _, err := io.Copy(conn, local)
+ if err != nil {
+ logDebug("error copying ORPort to WebSocket: " + err.Error())
+ }
+ local.CloseRead()
+ conn.Close()
+ wg.Done()
+ }()
+
+ go func() {
+ _, err := io.Copy(local, conn)
+ if err != nil {
+ logDebug("error copying WebSocket to ORPort: " + err.Error())
+ }
+ local.CloseWrite()
+ conn.Close()
+ wg.Done()
+ }()
+
+ wg.Wait()
+}
+
func websocketHandler(ws *websocket) {
- fmt.Printf("blah\n")
+ conn := NewWebsocketConn(ws)
+
+ handlerChan <- 1
+ defer func() {
+ handlerChan <- -1
+ }()
+
+ s, err := net.DialTCP("tcp", nil, ptInfo.OrAddr)
+ if err != nil {
+ logDebug("Failed to connect to ORPort: " + err.Error())
+ return
+ }
+
+ proxy(s, &conn)
}
func startListener(addr *net.TCPAddr) (*net.TCPListener, error) {
@@ -139,7 +184,7 @@ func startListener(addr *net.TCPAddr) (*net.TCPListener, error) {
func main() {
const ptMethodName = "websocket"
- ptInfo := ptServerSetup([]string{ptMethodName})
+ ptInfo = ptServerSetup([]string{ptMethodName})
listeners := make([]*net.TCPListener, 0)
for _, bindAddr := range ptInfo.BindAddrs {
More information about the tor-commits
mailing list