From f108633e2e98978a6e4ecd4ec9595910060e081b Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Sat, 5 Nov 2016 01:50:51 +0100 Subject: [PATCH] ssr compatibility --- .../internet/authenticators/http/http.go | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/transport/internet/authenticators/http/http.go b/transport/internet/authenticators/http/http.go index 07cfae00..66fdf7ac 100644 --- a/transport/internet/authenticators/http/http.go +++ b/transport/internet/authenticators/http/http.go @@ -15,6 +15,26 @@ const ( 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 { } @@ -34,6 +54,10 @@ func (*HeaderReader) Read(reader io.Reader) (*alloc.Buffer, error) { buffer.Slice(0, len(ENDING)) } } + if buffer.IsEmpty() { + buffer.Release() + return nil, nil + } return buffer, nil } @@ -61,11 +85,11 @@ type HttpConn struct { net.Conn readBuffer *alloc.Buffer - oneTimeReader *HeaderReader - oneTimeWriter *HeaderWriter + oneTimeReader Reader + oneTimeWriter Writer } -func NewHttpConn(conn net.Conn, reader *HeaderReader, writer *HeaderWriter) *HttpConn { +func NewHttpConn(conn net.Conn, reader Reader, writer Writer) *HttpConn { return &HttpConn{ Conn: conn, oneTimeReader: reader, @@ -145,7 +169,16 @@ func (this HttpAuthenticator) Client(conn net.Conn) net.Conn { if this.config.Request == nil && this.config.Response == nil { 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 {