aboutsummaryrefslogtreecommitdiff
path: root/route.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-25 20:04:45 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-03-25 20:04:45 +0100
commit57c53df2246eb79d77245e8f2cc9efe03f997c14 (patch)
treef1e1bd2bdcf966324b20e2cb7c66c235f6059e2e /route.go
parent80dbf3cbd4a37979f21116f4f03250c025ea41f1 (diff)
Add (working) stub for WebSocket Proxy
Diffstat (limited to 'route.go')
-rw-r--r--route.go17
1 files changed, 16 insertions, 1 deletions
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