ssr compatibility

pull/314/head
Darien Raymond 2016-11-05 01:50:51 +01:00
parent d2263a452d
commit f108633e2e
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
1 changed files with 37 additions and 4 deletions

View File

@ -15,6 +15,26 @@ const (
ENDING = CRLF + CRLF ENDING = CRLF + CRLF
) )
type Reader interface {
Read(io.Reader) (*alloc.Buffer, error)
}
type Writer interface {
Write(io.Writer) error
}
type NoOpReader struct{}
func (this *NoOpReader) Read(io.Reader) (*alloc.Buffer, error) {
return nil, nil
}
type NoOpWriter struct{}
func (this *NoOpWriter) Write(io.Writer) error {
return nil
}
type HeaderReader struct { type HeaderReader struct {
} }
@ -34,6 +54,10 @@ func (*HeaderReader) Read(reader io.Reader) (*alloc.Buffer, error) {
buffer.Slice(0, len(ENDING)) buffer.Slice(0, len(ENDING))
} }
} }
if buffer.IsEmpty() {
buffer.Release()
return nil, nil
}
return buffer, nil return buffer, nil
} }
@ -61,11 +85,11 @@ type HttpConn struct {
net.Conn net.Conn
readBuffer *alloc.Buffer readBuffer *alloc.Buffer
oneTimeReader *HeaderReader oneTimeReader Reader
oneTimeWriter *HeaderWriter oneTimeWriter Writer
} }
func NewHttpConn(conn net.Conn, reader *HeaderReader, writer *HeaderWriter) *HttpConn { func NewHttpConn(conn net.Conn, reader Reader, writer Writer) *HttpConn {
return &HttpConn{ return &HttpConn{
Conn: conn, Conn: conn,
oneTimeReader: reader, oneTimeReader: reader,
@ -145,7 +169,16 @@ func (this HttpAuthenticator) Client(conn net.Conn) net.Conn {
if this.config.Request == nil && this.config.Response == nil { if this.config.Request == nil && this.config.Response == nil {
return conn return conn
} }
return NewHttpConn(conn, new(HeaderReader), this.GetClientWriter()) var reader Reader = new(NoOpReader)
if this.config.Request != nil {
reader = new(HeaderReader)
}
var writer Writer = new(NoOpWriter)
if this.config.Response != nil {
writer = this.GetClientWriter()
}
return NewHttpConn(conn, reader, writer)
} }
func (this HttpAuthenticator) Server(conn net.Conn) net.Conn { func (this HttpAuthenticator) Server(conn net.Conn) net.Conn {