mirror of
https://github.com/logos-messaging/go-multiaddr.git
synced 2026-01-02 21:13:12 +00:00
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package missinggo
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
"net"
|
|
"net/http"
|
|
)
|
|
|
|
// A http.ResponseWriter that tracks the status of the response. The status
|
|
// code, and number of bytes written for example.
|
|
type StatusResponseWriter struct {
|
|
RW http.ResponseWriter
|
|
Code int
|
|
BytesWritten int64
|
|
}
|
|
|
|
var _ http.ResponseWriter = &StatusResponseWriter{}
|
|
|
|
func (me *StatusResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
|
|
return me.RW.(http.Hijacker).Hijack()
|
|
}
|
|
|
|
func (me *StatusResponseWriter) CloseNotify() <-chan bool {
|
|
return me.RW.(http.CloseNotifier).CloseNotify()
|
|
}
|
|
|
|
func (me *StatusResponseWriter) Flush() {
|
|
me.RW.(http.Flusher).Flush()
|
|
}
|
|
|
|
func (me *StatusResponseWriter) Header() http.Header {
|
|
return me.RW.Header()
|
|
}
|
|
|
|
func (me *StatusResponseWriter) Write(b []byte) (n int, err error) {
|
|
if me.Code == 0 {
|
|
me.Code = 200
|
|
}
|
|
n, err = me.RW.Write(b)
|
|
me.BytesWritten += int64(n)
|
|
return
|
|
}
|
|
|
|
func (me *StatusResponseWriter) WriteHeader(code int) {
|
|
me.RW.WriteHeader(code)
|
|
me.Code = code
|
|
}
|
|
|
|
type ReaderFromStatusResponseWriter struct {
|
|
StatusResponseWriter
|
|
io.ReaderFrom
|
|
}
|
|
|
|
func NewReaderFromStatusResponseWriter(w http.ResponseWriter) *ReaderFromStatusResponseWriter {
|
|
return &ReaderFromStatusResponseWriter{
|
|
StatusResponseWriter{RW: w},
|
|
w.(io.ReaderFrom),
|
|
}
|
|
}
|