diff options
author | Ted Unangst <tedu@tedunangst.com> | 2019-03-07 00:54:44 -0500 |
---|---|---|
committer | Ted Unangst <tedu@tedunangst.com> | 2019-03-07 00:54:44 -0500 |
commit | b73247ee3afb33eca48e8573315bce72ddadb6ba (patch) | |
tree | c0468f30020e50874bb90ee172461f795b290e0b | |
parent | fe0308730848cc65ca0ce39c8e4e4062a5b3af13 (diff) |
attempt to deal with websockets. maybe it works. v0.9.9
-rw-r--r-- | filter.lua | 4 | ||||
-rw-r--r-- | miniwebproxy.go | 40 |
2 files changed, 26 insertions, 18 deletions
diff --git a/filter.lua b/filter.lua index 1440013..85cf1b7 100644 --- a/filter.lua +++ b/filter.lua @@ -29,7 +29,7 @@ function shouldfilter(host) if host:match("amazon.com") then return "" end if host:match("twitter.com") then return "" end if host:match("cdn.googlesource.com") then return "" end - return "yeah" + return "y" end function prefilter(req) @@ -40,7 +40,7 @@ end function filter(outw, req, host, path, root) print("trying to filter in lua", host, path) - if path == "/" then + if true or path == "/" then return "" end local article diff --git a/miniwebproxy.go b/miniwebproxy.go index a7d765a..a49e6de 100644 --- a/miniwebproxy.go +++ b/miniwebproxy.go @@ -235,13 +235,11 @@ func connect(ctx context.Context, dest string, desthost string) (net.Conn, error return conn, nil } -var MyTransport http.Transport - -func init() { - dt := http.DefaultTransport.(*http.Transport) - MyTransport = *dt - MyTransport.Proxy = nil - MyTransport.DialContext = getDialer().DialContext +var MyTransport = http.Transport{ + MaxIdleConns: 20, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + DialContext: getDialer().DialContext, } func (pxr *Proxer) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -283,15 +281,6 @@ func (pxr *Proxer) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } - serverconn, err := connect(ctx, dest, desthost) - if err != nil { - log.Printf("failed to connect: %s", err) - writeerror(clientconn, fmt.Sprintf("failed to connect: %s", err)) - return - } - defer serverconn.Close() - // serverconn.SetDeadline(deadline) - clientconn.Write([]byte("HTTP/1.0 200 OK\r\n\r\n")) tlsconf := getTLSConfig(desthost) clientconn = tls.Server(clientconn, tlsconf) @@ -325,12 +314,31 @@ func (pxr *Proxer) ServeHTTP(w http.ResponseWriter, r *http.Request) { if clientreq.Header.Get("Accept-Encoding") != "" { clientreq.Header.Set("Accept-Encoding", "gzip") } + log.Printf("clientreq url %s\n", clientreq.URL.String()) prefilter(L, clientreq) clientreq.URL.Host = clientreq.URL.Hostname() + if clientreq.Header.Get("Upgrade") == "websocket" { + log.Printf("attempted upgrade to websocket") + serverconn, err := connect(ctx, dest, desthost) + if err != nil { + log.Printf("failed to connect: %s", err) + writeerror(clientconn, fmt.Sprintf("failed to connect: %s", err)) + return + } + p := make(chan net.Conn) + clientreq.Write(serverconn) + go copyuntildone(clientconn, serverconn, p) + go copyuntildone(serverconn, clientconn, p) + closewhendone(p) + log.Printf("finished websocket") + return + } + serverresp, err := MyTransport.RoundTrip(clientreq) if err != nil { log.Printf("err requesting: %s", err) + writeerror(clientconn, "error proxying request") return } filter(L, clientconn, serverresp, clientreq) |