From 0aaf4d45d8f3ad7ede7a5489dad76bb0f3369258 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Wed, 16 Dec 2020 11:33:49 +0100 Subject: [PATCH] add pointers to all Read() methods --- pkg/base/content.go | 27 +++++++++++++++------------ pkg/base/header.go | 8 +++++--- pkg/base/request.go | 5 ++--- pkg/base/response.go | 5 ++--- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/pkg/base/content.go b/pkg/base/content.go index 2a7a2dfa..da6d8878 100644 --- a/pkg/base/content.go +++ b/pkg/base/content.go @@ -7,36 +7,39 @@ import ( "strconv" ) -func contentRead(rb *bufio.Reader, header Header) ([]byte, error) { +type content []byte + +func (c *content) read(rb *bufio.Reader, header Header) error { cls, ok := header["Content-Length"] if !ok || len(cls) != 1 { - return nil, nil + *c = nil + return nil } cl, err := strconv.ParseInt(cls[0], 10, 64) if err != nil { - return nil, fmt.Errorf("invalid Content-Length") + return fmt.Errorf("invalid Content-Length") } if cl > rtspMaxContentLength { - return nil, fmt.Errorf("Content-Length exceeds %d", rtspMaxContentLength) + return fmt.Errorf("Content-Length exceeds %d", rtspMaxContentLength) } - ret := make([]byte, cl) - n, err := io.ReadFull(rb, ret) - if err != nil && n != len(ret) { - return nil, err + *c = make([]byte, cl) + n, err := io.ReadFull(rb, *c) + if err != nil && n != len(*c) { + return err } - return ret, nil + return nil } -func contentWrite(bw *bufio.Writer, content []byte) error { - if len(content) == 0 { +func (c content) write(bw *bufio.Writer) error { + if len(c) == 0 { return nil } - _, err := bw.Write(content) + _, err := bw.Write(c) if err != nil { return err } diff --git a/pkg/base/header.go b/pkg/base/header.go index 1fb28e31..0ffb61f7 100644 --- a/pkg/base/header.go +++ b/pkg/base/header.go @@ -34,7 +34,9 @@ type HeaderValue []string // Header is a RTSP reader, present in both Requests and Responses. type Header map[string]HeaderValue -func (h Header) read(rb *bufio.Reader) error { +func (h *Header) read(rb *bufio.Reader) error { + *h = make(Header) + for { byt, err := rb.ReadByte() if err != nil { @@ -50,7 +52,7 @@ func (h Header) read(rb *bufio.Reader) error { break } - if len(h) >= headerMaxEntryCount { + if len(*h) >= headerMaxEntryCount { return fmt.Errorf("headers count exceeds %d", headerMaxEntryCount) } @@ -91,7 +93,7 @@ func (h Header) read(rb *bufio.Reader) error { return err } - h[key] = append(h[key], val) + (*h)[key] = append((*h)[key], val) } return nil diff --git a/pkg/base/request.go b/pkg/base/request.go index 32085638..ece18457 100644 --- a/pkg/base/request.go +++ b/pkg/base/request.go @@ -94,13 +94,12 @@ func (req *Request) Read(rb *bufio.Reader) error { return err } - req.Header = make(Header) err = req.Header.read(rb) if err != nil { return err } - req.Content, err = contentRead(rb, req.Header) + err = (*content)(&req.Content).read(rb, req.Header) if err != nil { return err } @@ -125,7 +124,7 @@ func (req Request) Write(bw *bufio.Writer) error { return err } - err = contentWrite(bw, req.Content) + err = content(req.Content).write(bw) if err != nil { return err } diff --git a/pkg/base/response.go b/pkg/base/response.go index 901592eb..3dbcd0a3 100644 --- a/pkg/base/response.go +++ b/pkg/base/response.go @@ -172,13 +172,12 @@ func (res *Response) Read(rb *bufio.Reader) error { return err } - res.Header = make(Header) err = res.Header.read(rb) if err != nil { return err } - res.Content, err = contentRead(rb, res.Header) + err = (*content)(&res.Content).read(rb, res.Header) if err != nil { return err } @@ -208,7 +207,7 @@ func (res Response) Write(bw *bufio.Writer) error { return err } - err = contentWrite(bw, res.Content) + err = content(res.Content).write(bw) if err != nil { return err }