add http hijack methods (#555)

This commit is contained in:
Kevin Wan
2021-03-09 21:30:45 +08:00
committed by GitHub
parent 60c7edf8f8
commit 1a1a6f5239
4 changed files with 41 additions and 7 deletions

View File

@@ -1,10 +1,12 @@
package handler
import (
"bufio"
"bytes"
"context"
"fmt"
"io"
"net"
"net/http"
"net/http/httputil"
"time"
@@ -25,10 +27,22 @@ type loggedResponseWriter struct {
code int
}
func (w *loggedResponseWriter) Flush() {
if flusher, ok := w.w.(http.Flusher); ok {
flusher.Flush()
}
}
func (w *loggedResponseWriter) Header() http.Header {
return w.w.Header()
}
// Hijack implements the http.Hijacker interface.
// This expands the Response to fulfill http.Hijacker if the underlying http.ResponseWriter supports it.
func (w *loggedResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
return w.w.(http.Hijacker).Hijack()
}
func (w *loggedResponseWriter) Write(bytes []byte) (int, error) {
return w.w.Write(bytes)
}
@@ -38,12 +52,6 @@ func (w *loggedResponseWriter) WriteHeader(code int) {
w.code = code
}
func (w *loggedResponseWriter) Flush() {
if flusher, ok := w.w.(http.Flusher); ok {
flusher.Flush()
}
}
// LogHandler returns a middleware that logs http request and response.
func LogHandler(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {