Merge b6a995d26f38dfc082d304733300e5f18ba5e3eb into 4103061a4a8d977fe0700e89b13c3ce51ec1d92f

This commit is contained in:
quetz 2015-03-23 03:43:34 +00:00
commit ca4bdfca6c

View File

@ -26,13 +26,15 @@ type (
Status() int
Size() int
Written() bool
Hijacked() bool
WriteHeaderNow()
}
responseWriter struct {
http.ResponseWriter
status int
size int
status int
size int
hijacked bool
}
)
@ -52,7 +54,7 @@ func (w *responseWriter) WriteHeader(code int) {
}
func (w *responseWriter) WriteHeaderNow() {
if !w.Written() {
if !w.Written() && !w.Hijacked() {
w.size = 0
w.ResponseWriter.WriteHeader(w.status)
}
@ -77,12 +79,17 @@ func (w *responseWriter) Written() bool {
return w.size != NoWritten
}
func (w *responseWriter) Hijacked() bool {
return w.hijacked
}
// Implements the http.Hijacker interface
func (w *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
hijacker, ok := w.ResponseWriter.(http.Hijacker)
if !ok {
return nil, nil, errors.New("the ResponseWriter doesn't support the Hijacker interface")
}
w.hijacked = true
return hijacker.Hijack()
}