From ae93cfbf8cdc9cd055c59cddb4f90f436cd2e405 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 4 Apr 2016 14:26:05 +0200 Subject: Tweak WS Proxy --- ws.go | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/ws.go b/ws.go index b54c2ce..b1cb1a3 100644 --- a/ws.go +++ b/ws.go @@ -5,7 +5,6 @@ import ( "net" "net/http" "net/url" - "path" ) type WebSocketProxy struct { @@ -13,33 +12,32 @@ type WebSocketProxy struct { } func (p *WebSocketProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) { - hj, ok := w.(http.Hijacker) - if !ok { - http.Error(w, "Not a hijacker", http.StatusInternalServerError) - return - } - - conn, _, err := hj.Hijack() + p.Director(r) + d, err := net.Dial("tcp", r.URL.Host) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } - defer conn.Close() - - p.Director(r) + defer d.Close() - d, err := net.Dial("tcp", r.URL.Host) + // pass first request to upstream + err = r.Write(d) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } - defer d.Close() - err = r.Write(d) + hj, ok := w.(http.Hijacker) + if !ok { + http.Error(w, "Not a hijacker", http.StatusInternalServerError) + return + } + conn, _, err := hj.Hijack() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } + defer conn.Close() errc := make(chan error, 2) cp := func(dst io.Writer, src io.Reader) { @@ -55,7 +53,6 @@ func NewWebSocketProxy(target *url.URL) *WebSocketProxy { director := func(req *http.Request) { req.URL.Scheme = target.Scheme req.URL.Host = target.Host - req.URL.Path = path.Join(target.Path, req.URL.Path) } return &WebSocketProxy{Director: director} } -- cgit v1.2.3