summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/encode/encode.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/caddyhttp/encode/encode.go')
-rw-r--r--modules/caddyhttp/encode/encode.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/modules/caddyhttp/encode/encode.go b/modules/caddyhttp/encode/encode.go
index e3a6267..8a6fc10 100644
--- a/modules/caddyhttp/encode/encode.go
+++ b/modules/caddyhttp/encode/encode.go
@@ -20,9 +20,11 @@
package encode
import (
+ "bufio"
"fmt"
"io"
"math"
+ "net"
"net/http"
"sort"
"strconv"
@@ -212,6 +214,18 @@ func (rw *responseWriter) Flush() {
rw.HTTPInterfaces.Flush()
}
+// Hijack implements http.Hijacker. It will flush status code if set. We don't track actual hijacked
+// status assuming http middlewares will track its status.
+func (rw *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
+ if !rw.wroteHeader {
+ if rw.statusCode != 0 {
+ rw.HTTPInterfaces.WriteHeader(rw.statusCode)
+ }
+ rw.wroteHeader = true
+ }
+ return rw.HTTPInterfaces.Hijack()
+}
+
// Write writes to the response. If the response qualifies,
// it is encoded using the encoder, which is initialized
// if not done so already.