From b993df6776bd954c5d7dc069590b5b1a688fa2be Mon Sep 17 00:00:00 2001 From: xtaci Date: Fri, 28 Sep 2018 19:40:24 +0800 Subject: [PATCH] simplify header handling --- frame.go | 2 +- session.go | 20 ++++++++++---------- session_test.go | 1 - stream.go | 2 +- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/frame.go b/frame.go index 36062d7..71d3d44 100644 --- a/frame.go +++ b/frame.go @@ -36,7 +36,7 @@ func newFrame(cmd byte, sid uint32) Frame { return Frame{ver: version, cmd: cmd, sid: sid} } -type rawHeader []byte +type rawHeader [headerSize]byte func (h rawHeader) Version() byte { return h[0] diff --git a/session.go b/session.go index e93317e..c29634e 100644 --- a/session.go +++ b/session.go @@ -210,30 +210,30 @@ func (s *Session) returnTokens(n int) { // session read a frame from underlying connection // it's data is pointed to the input buffer func (s *Session) readFrame(buffer []byte) (f Frame, err error) { - if _, err := io.ReadFull(s.conn, buffer[:headerSize]); err != nil { + var hdr rawHeader + if _, err := io.ReadFull(s.conn, hdr[:]); err != nil { return f, errors.Wrap(err, "readFrame") } - dec := rawHeader(buffer) - if dec.Version() != version { + if hdr.Version() != version { return f, errors.New(errInvalidProtocol) } - f.ver = dec.Version() - f.cmd = dec.Cmd() - f.sid = dec.StreamID() - if length := dec.Length(); length > 0 { - if _, err := io.ReadFull(s.conn, buffer[headerSize:headerSize+length]); err != nil { + f.ver = hdr.Version() + f.cmd = hdr.Cmd() + f.sid = hdr.StreamID() + if length := hdr.Length(); length > 0 { + f.data = buffer[:length] + if _, err := io.ReadFull(s.conn, f.data); err != nil { return f, errors.Wrap(err, "readFrame") } - f.data = buffer[headerSize : headerSize+length] } return f, nil } // recvLoop keeps on reading from underlying connection if tokens are available func (s *Session) recvLoop() { - buffer := make([]byte, (1<<16)+headerSize) + buffer := make([]byte, 1<<16) for { for atomic.LoadInt32(&s.bucket) <= 0 && !s.IsClosed() { <-s.bucketNotify diff --git a/session_test.go b/session_test.go index 760642d..9bfdf70 100644 --- a/session_test.go +++ b/session_test.go @@ -523,7 +523,6 @@ func TestRandomFrame(t *testing.T) { copy(buf[headerSize:], f.data) session.conn.Write(buf) - t.Log(rawHeader(buf)) cli.Close() } diff --git a/stream.go b/stream.go index 57a0bc6..2ce00d2 100644 --- a/stream.go +++ b/stream.go @@ -62,7 +62,7 @@ func (s *Stream) Read(b []byte) (n int, err error) { READ: s.bufferLock.Lock() - n, err = s.buffer.Read(b) + n, _ = s.buffer.Read(b) s.bufferLock.Unlock() if n > 0 {