Improve websocket support
This commit is contained in:
		
							parent
							
								
									ca89bb833d
								
							
						
					
					
						commit
						978c0a33e4
					
				|  | @ -4,6 +4,8 @@ | |||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net" | ||||
|  | @ -32,6 +34,14 @@ func (l *responseLogger) Header() http.Header { | |||
| 	return l.w.Header() | ||||
| } | ||||
| 
 | ||||
| // Support Websocket
 | ||||
| func (l *responseLogger) Hijack() (rwc net.Conn, buf *bufio.ReadWriter, err error) { | ||||
| 	if hj, ok := l.w.(http.Hijacker); ok { | ||||
| 		return hj.Hijack() | ||||
| 	} | ||||
| 	return nil, nil, errors.New("http.Hijacker is not available on writer") | ||||
| } | ||||
| 
 | ||||
| // ExtractGAPMetadata extracts and removes GAP headers from the ResponseWriter's
 | ||||
| // Header
 | ||||
| func (l *responseLogger) ExtractGAPMetadata() { | ||||
|  |  | |||
|  | @ -24,6 +24,11 @@ func TestLoggingHandler_ServeHTTP(t *testing.T) { | |||
| 	for _, test := range tests { | ||||
| 		buf := bytes.NewBuffer(nil) | ||||
| 		handler := func(w http.ResponseWriter, req *http.Request) { | ||||
| 			_, ok := w.(http.Hijacker) | ||||
| 			if !ok { | ||||
| 				t.Error("http.Hijacker is not available") | ||||
| 			} | ||||
| 
 | ||||
| 			w.Write([]byte("test")) | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -110,7 +110,7 @@ func (u *UpstreamProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) { | |||
| 		r.Header.Set("GAP-Auth", w.Header().Get("GAP-Auth")) | ||||
| 		u.auth.SignRequest(r) | ||||
| 	} | ||||
| 	if u.wsHandler != nil && r.Header.Get("Connection") == "Upgrade" && r.Header.Get("Upgrade") == "websocket" { | ||||
| 	if u.wsHandler != nil && strings.ToLower(r.Header.Get("Connection")) == "upgrade" && r.Header.Get("Upgrade") == "websocket" { | ||||
| 		u.wsHandler.ServeHTTP(w, r) | ||||
| 	} else { | ||||
| 		u.handler.ServeHTTP(w, r) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue