From 4c712d2370a34fc74da50ee529832d3de31ea52f Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sat, 4 Jul 2020 18:24:35 +0200 Subject: [PATCH] add ConnServer.ReadInterleavedFrameOrRequest(); remove ConnServer.ReadInterleavedFrame() --- conn-client.go | 52 +++++++++++++++++++++++++------------------------- conn-server.go | 26 +++++++++++++++++++------ 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/conn-client.go b/conn-client.go index 6d44d332..12408f99 100644 --- a/conn-client.go +++ b/conn-client.go @@ -78,6 +78,32 @@ func (c *ConnClient) NetConn() net.Conn { return c.conf.NConn } +// ReadInterleavedFrameOrResponse reads an InterleavedFrame or a Response. +func (c *ConnClient) ReadInterleavedFrameOrResponse(frame *InterleavedFrame) (interface{}, error) { + c.conf.NConn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout)) + b, err := c.br.ReadByte() + if err != nil { + return nil, err + } + c.br.UnreadByte() + + if b == _INTERLEAVED_FRAME_MAGIC { + err := frame.read(c.br) + if err != nil { + return nil, err + } + return frame, err + } + + return readResponse(c.br) +} + +// ReadInterleavedFrame reads an InterleavedFrame. +func (c *ConnClient) ReadInterleavedFrame(frame *InterleavedFrame) error { + c.conf.NConn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout)) + return frame.read(c.br) +} + func (c *ConnClient) writeRequest(req *Request) error { if req.Header == nil { req.Header = make(Header) @@ -143,32 +169,6 @@ func (c *ConnClient) WriteRequestNoResponse(req *Request) error { return c.writeRequest(req) } -// ReadInterleavedFrameOrResponse reads an InterleavedFrame or a Response. -func (c *ConnClient) ReadInterleavedFrameOrResponse(frame *InterleavedFrame) (interface{}, error) { - c.conf.NConn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout)) - b, err := c.br.ReadByte() - if err != nil { - return nil, err - } - c.br.UnreadByte() - - if b == _INTERLEAVED_FRAME_MAGIC { - err := frame.read(c.br) - if err != nil { - return nil, err - } - return frame, err - } - - return readResponse(c.br) -} - -// ReadInterleavedFrame reads an InterleavedFrame. -func (c *ConnClient) ReadInterleavedFrame(frame *InterleavedFrame) error { - c.conf.NConn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout)) - return frame.read(c.br) -} - // WriteInterleavedFrame writes an InterleavedFrame. func (c *ConnClient) WriteInterleavedFrame(frame *InterleavedFrame) error { c.conf.NConn.SetWriteDeadline(time.Now().Add(c.conf.WriteTimeout)) diff --git a/conn-server.go b/conn-server.go index 2c6afe4e..a916bac7 100644 --- a/conn-server.go +++ b/conn-server.go @@ -68,18 +68,32 @@ func (s *ConnServer) ReadRequest() (*Request, error) { return readRequest(s.br) } +// ReadInterleavedFrameOrRequest reads an InterleavedFrame or a Request. +func (s *ConnServer) ReadInterleavedFrameOrRequest(frame *InterleavedFrame) (interface{}, error) { + s.conf.NConn.SetReadDeadline(time.Time{}) // disable deadline + b, err := s.br.ReadByte() + if err != nil { + return nil, err + } + s.br.UnreadByte() + + if b == _INTERLEAVED_FRAME_MAGIC { + err := frame.read(s.br) + if err != nil { + return nil, err + } + return frame, err + } + + return readRequest(s.br) +} + // WriteResponse writes a response. func (s *ConnServer) WriteResponse(res *Response) error { s.conf.NConn.SetWriteDeadline(time.Now().Add(s.conf.WriteTimeout)) return res.write(s.bw) } -// ReadInterleavedFrame reads an InterleavedFrame. -func (s *ConnServer) ReadInterleavedFrame(frame *InterleavedFrame) error { - s.conf.NConn.SetReadDeadline(time.Now().Add(s.conf.ReadTimeout)) - return frame.read(s.br) -} - // WriteInterleavedFrame writes an InterleavedFrame. func (s *ConnServer) WriteInterleavedFrame(frame *InterleavedFrame) error { s.conf.NConn.SetWriteDeadline(time.Now().Add(s.conf.WriteTimeout))