From 57c53df2246eb79d77245e8f2cc9efe03f997c14 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 25 Mar 2016 20:04:45 +0100 Subject: Add (working) stub for WebSocket Proxy --- route.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'route.go') diff --git a/route.go b/route.go index 1440546..67b3c88 100644 --- a/route.go +++ b/route.go @@ -29,6 +29,15 @@ func (r Route) GetCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error) return nil, errors.New("no cert for " + h.ServerName) } +func NewReverseProxy(target *url.URL) *httputil.ReverseProxy { + director := func(req *http.Request) { + //log.Println("director", req) + req.URL.Scheme = target.Scheme + req.URL.Host = target.Host + } + return &httputil.ReverseProxy{Director: director} +} + // Restore and update routes from in-memory state func (r Route) Restore() error { mux := http.NewServeMux() @@ -48,7 +57,13 @@ func (r Route) Restore() error { if !strings.HasSuffix(v.ServerName, "/") { v.ServerName += "/" } - mux.Handle(v.ServerName, httputil.NewSingleHostReverseProxy(up)) + //mux.Handle(v.ServerName, httputil.NewSingleHostReverseProxy(up)) + switch up.Scheme { + case "ws": + mux.Handle(v.ServerName, NewWebSocketProxy(up)) + default: + mux.Handle(v.ServerName, NewReverseProxy(up)) + } } server.Handler = mux return nil -- cgit v1.2.3