From 35cf10e1d62af3aa4ba12e9bc8cdab4ca7f21b57 Mon Sep 17 00:00:00 2001 From: Mike Lang Date: Wed, 2 Nov 2016 13:29:25 -0700 Subject: [PATCH] middleware/errorhandler: Implement Hijacker so it works with ws proxy --- common/middleware/errorhandler.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/common/middleware/errorhandler.go b/common/middleware/errorhandler.go index fdb539d37..9608c3750 100644 --- a/common/middleware/errorhandler.go +++ b/common/middleware/errorhandler.go @@ -1,6 +1,9 @@ package middleware import ( + "bufio" + "fmt" + "net" "net/http" ) @@ -78,3 +81,14 @@ func (i *errorInterceptor) Write(data []byte) (int, error) { } return len(data), nil } + +// errorInterceptor also implements net.Hijacker, to let the downstream Handler +// hijack the connection. This is needed by the app-mapper's proxy. +func (i *errorInterceptor) Hijack() (net.Conn, *bufio.ReadWriter, error) { + hj, ok := i.originalWriter.(http.Hijacker) + if !ok { + return nil, nil, fmt.Errorf("error interceptor: can't cast original ResponseWriter to Hijacker") + } + i.gotCode = true + return hj.Hijack() +}