Update oxy dependency
This commit is contained in:
parent
d81c4e6d1a
commit
07be89d6e9
31 changed files with 636 additions and 195 deletions
55
vendor/github.com/vulcand/oxy/utils/netutils.go
generated
vendored
55
vendor/github.com/vulcand/oxy/utils/netutils.go
generated
vendored
|
@ -12,18 +12,29 @@ import (
|
|||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// ProxyWriter calls recorder, used to debug logs
|
||||
type ProxyWriter struct {
|
||||
W http.ResponseWriter
|
||||
w http.ResponseWriter
|
||||
code int
|
||||
length int64
|
||||
|
||||
log *log.Logger
|
||||
}
|
||||
|
||||
func NewProxyWriter(writer http.ResponseWriter) *ProxyWriter {
|
||||
// NewProxyWriter creates a new ProxyWriter
|
||||
func NewProxyWriter(w http.ResponseWriter) *ProxyWriter {
|
||||
return NewProxyWriterWithLogger(w, log.StandardLogger())
|
||||
}
|
||||
|
||||
// NewProxyWriterWithLogger creates a new ProxyWriter
|
||||
func NewProxyWriterWithLogger(w http.ResponseWriter, l *log.Logger) *ProxyWriter {
|
||||
return &ProxyWriter{
|
||||
W: writer,
|
||||
w: w,
|
||||
log: l,
|
||||
}
|
||||
}
|
||||
|
||||
// StatusCode gets status code
|
||||
func (p *ProxyWriter) StatusCode() int {
|
||||
if p.code == 0 {
|
||||
// per contract standard lib will set this to http.StatusOK if not set
|
||||
|
@ -33,46 +44,54 @@ func (p *ProxyWriter) StatusCode() int {
|
|||
return p.code
|
||||
}
|
||||
|
||||
// GetLength gets content length
|
||||
func (p *ProxyWriter) GetLength() int64 {
|
||||
return p.length
|
||||
}
|
||||
|
||||
// Header gets response header
|
||||
func (p *ProxyWriter) Header() http.Header {
|
||||
return p.W.Header()
|
||||
return p.w.Header()
|
||||
}
|
||||
|
||||
func (p *ProxyWriter) Write(buf []byte) (int, error) {
|
||||
p.length = p.length + int64(len(buf))
|
||||
return p.W.Write(buf)
|
||||
return p.w.Write(buf)
|
||||
}
|
||||
|
||||
// WriteHeader writes status code
|
||||
func (p *ProxyWriter) WriteHeader(code int) {
|
||||
p.code = code
|
||||
p.W.WriteHeader(code)
|
||||
p.w.WriteHeader(code)
|
||||
}
|
||||
|
||||
// Flush flush the writer
|
||||
func (p *ProxyWriter) Flush() {
|
||||
if f, ok := p.W.(http.Flusher); ok {
|
||||
if f, ok := p.w.(http.Flusher); ok {
|
||||
f.Flush()
|
||||
}
|
||||
}
|
||||
|
||||
// CloseNotify returns a channel that receives at most a single value (true)
|
||||
// when the client connection has gone away.
|
||||
func (p *ProxyWriter) CloseNotify() <-chan bool {
|
||||
if cn, ok := p.W.(http.CloseNotifier); ok {
|
||||
if cn, ok := p.w.(http.CloseNotifier); ok {
|
||||
return cn.CloseNotify()
|
||||
}
|
||||
log.Debugf("Upstream ResponseWriter of type %v does not implement http.CloseNotifier. Returning dummy channel.", reflect.TypeOf(p.W))
|
||||
p.log.Debugf("Upstream ResponseWriter of type %v does not implement http.CloseNotifier. Returning dummy channel.", reflect.TypeOf(p.w))
|
||||
return make(<-chan bool)
|
||||
}
|
||||
|
||||
// Hijack lets the caller take over the connection.
|
||||
func (p *ProxyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
|
||||
if hi, ok := p.W.(http.Hijacker); ok {
|
||||
if hi, ok := p.w.(http.Hijacker); ok {
|
||||
return hi.Hijack()
|
||||
}
|
||||
log.Debugf("Upstream ResponseWriter of type %v does not implement http.Hijacker. Returning dummy channel.", reflect.TypeOf(p.W))
|
||||
return nil, nil, fmt.Errorf("the response writer that was wrapped in this proxy, does not implement http.Hijacker. It is of type: %v", reflect.TypeOf(p.W))
|
||||
p.log.Debugf("Upstream ResponseWriter of type %v does not implement http.Hijacker. Returning dummy channel.", reflect.TypeOf(p.w))
|
||||
return nil, nil, fmt.Errorf("the response writer that was wrapped in this proxy, does not implement http.Hijacker. It is of type: %v", reflect.TypeOf(p.w))
|
||||
}
|
||||
|
||||
// NewBufferWriter creates a new BufferWriter
|
||||
func NewBufferWriter(w io.WriteCloser) *BufferWriter {
|
||||
return &BufferWriter{
|
||||
W: w,
|
||||
|
@ -80,16 +99,19 @@ func NewBufferWriter(w io.WriteCloser) *BufferWriter {
|
|||
}
|
||||
}
|
||||
|
||||
// BufferWriter buffer writer
|
||||
type BufferWriter struct {
|
||||
H http.Header
|
||||
Code int
|
||||
W io.WriteCloser
|
||||
}
|
||||
|
||||
// Close close the writer
|
||||
func (b *BufferWriter) Close() error {
|
||||
return b.W.Close()
|
||||
}
|
||||
|
||||
// Header gets response header
|
||||
func (b *BufferWriter) Header() http.Header {
|
||||
return b.H
|
||||
}
|
||||
|
@ -98,11 +120,13 @@ func (b *BufferWriter) Write(buf []byte) (int, error) {
|
|||
return b.W.Write(buf)
|
||||
}
|
||||
|
||||
// WriteHeader sets rw.Code.
|
||||
// WriteHeader writes status code
|
||||
func (b *BufferWriter) WriteHeader(code int) {
|
||||
b.Code = code
|
||||
}
|
||||
|
||||
// CloseNotify returns a channel that receives at most a single value (true)
|
||||
// when the client connection has gone away.
|
||||
func (b *BufferWriter) CloseNotify() <-chan bool {
|
||||
if cn, ok := b.W.(http.CloseNotifier); ok {
|
||||
return cn.CloseNotify()
|
||||
|
@ -111,6 +135,7 @@ func (b *BufferWriter) CloseNotify() <-chan bool {
|
|||
return make(<-chan bool)
|
||||
}
|
||||
|
||||
// Hijack lets the caller take over the connection.
|
||||
func (b *BufferWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
|
||||
if hi, ok := b.W.(http.Hijacker); ok {
|
||||
return hi.Hijack()
|
||||
|
@ -125,10 +150,10 @@ type nopWriteCloser struct {
|
|||
|
||||
func (*nopWriteCloser) Close() error { return nil }
|
||||
|
||||
// NopCloser returns a WriteCloser with a no-op Close method wrapping
|
||||
// NopWriteCloser returns a WriteCloser with a no-op Close method wrapping
|
||||
// the provided Writer w.
|
||||
func NopWriteCloser(w io.Writer) io.WriteCloser {
|
||||
return &nopWriteCloser{w}
|
||||
return &nopWriteCloser{Writer: w}
|
||||
}
|
||||
|
||||
// CopyURL provides update safe copy by avoiding shallow copying User field
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue