mirror of
https://github.com/aler9/gortsplib
synced 2025-10-08 00:20:05 +08:00
expose Request and Response read/write functions
This commit is contained in:
@@ -101,7 +101,7 @@ func (c *ConnClient) ReadFrameOrResponse(frame *InterleavedFrame) (interface{},
|
|||||||
return frame, err
|
return frame, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return readResponse(c.br)
|
return ReadResponse(c.br)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do writes a Request and reads a Response.
|
// Do writes a Request and reads a Response.
|
||||||
@@ -132,7 +132,7 @@ func (c *ConnClient) Do(req *Request) (*Response, error) {
|
|||||||
req.Header["CSeq"] = HeaderValue{strconv.FormatInt(int64(c.curCSeq), 10)}
|
req.Header["CSeq"] = HeaderValue{strconv.FormatInt(int64(c.curCSeq), 10)}
|
||||||
|
|
||||||
c.conf.Conn.SetWriteDeadline(time.Now().Add(c.conf.WriteTimeout))
|
c.conf.Conn.SetWriteDeadline(time.Now().Add(c.conf.WriteTimeout))
|
||||||
err := req.write(c.bw)
|
err := req.Write(c.bw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -142,7 +142,7 @@ func (c *ConnClient) Do(req *Request) (*Response, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.conf.Conn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout))
|
c.conf.Conn.SetReadDeadline(time.Now().Add(c.conf.ReadTimeout))
|
||||||
res, err := readResponse(c.br)
|
res, err := ReadResponse(c.br)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@@ -56,7 +56,7 @@ func (s *ConnServer) NetConn() net.Conn {
|
|||||||
// ReadRequest reads a Request.
|
// ReadRequest reads a Request.
|
||||||
func (s *ConnServer) ReadRequest() (*Request, error) {
|
func (s *ConnServer) ReadRequest() (*Request, error) {
|
||||||
s.conf.Conn.SetReadDeadline(time.Time{}) // disable deadline
|
s.conf.Conn.SetReadDeadline(time.Time{}) // disable deadline
|
||||||
return readRequest(s.br)
|
return ReadRequest(s.br)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadFrameOrRequest reads an InterleavedFrame or a Request.
|
// ReadFrameOrRequest reads an InterleavedFrame or a Request.
|
||||||
@@ -76,13 +76,13 @@ func (s *ConnServer) ReadFrameOrRequest(frame *InterleavedFrame) (interface{}, e
|
|||||||
return frame, err
|
return frame, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return readRequest(s.br)
|
return ReadRequest(s.br)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteResponse writes a response.
|
// WriteResponse writes a Response.
|
||||||
func (s *ConnServer) WriteResponse(res *Response) error {
|
func (s *ConnServer) WriteResponse(res *Response) error {
|
||||||
s.conf.Conn.SetWriteDeadline(time.Now().Add(s.conf.WriteTimeout))
|
s.conf.Conn.SetWriteDeadline(time.Now().Add(s.conf.WriteTimeout))
|
||||||
return res.write(s.bw)
|
return res.Write(s.bw)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteFrame writes an InterleavedFrame.
|
// WriteFrame writes an InterleavedFrame.
|
||||||
|
@@ -51,7 +51,8 @@ type Request struct {
|
|||||||
SkipResponse bool
|
SkipResponse bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func readRequest(rb *bufio.Reader) (*Request, error) {
|
// ReadRequest reads a request from a buffered reader.
|
||||||
|
func ReadRequest(rb *bufio.Reader) (*Request, error) {
|
||||||
req := &Request{}
|
req := &Request{}
|
||||||
|
|
||||||
byts, err := readBytesLimited(rb, ' ', requestMaxLethodLength)
|
byts, err := readBytesLimited(rb, ' ', requestMaxLethodLength)
|
||||||
@@ -112,7 +113,8 @@ func readRequest(rb *bufio.Reader) (*Request, error) {
|
|||||||
return req, nil
|
return req, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (req *Request) write(bw *bufio.Writer) error {
|
// Write writes a request into a buffered writer.
|
||||||
|
func (req *Request) Write(bw *bufio.Writer) error {
|
||||||
// remove credentials
|
// remove credentials
|
||||||
u := &url.URL{
|
u := &url.URL{
|
||||||
Scheme: req.Url.Scheme,
|
Scheme: req.Url.Scheme,
|
||||||
|
@@ -117,7 +117,7 @@ var casesRequest = []struct {
|
|||||||
func TestRequestRead(t *testing.T) {
|
func TestRequestRead(t *testing.T) {
|
||||||
for _, c := range casesRequest {
|
for _, c := range casesRequest {
|
||||||
t.Run(c.name, func(t *testing.T) {
|
t.Run(c.name, func(t *testing.T) {
|
||||||
req, err := readRequest(bufio.NewReader(bytes.NewBuffer(c.byts)))
|
req, err := ReadRequest(bufio.NewReader(bytes.NewBuffer(c.byts)))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, c.req, req)
|
require.Equal(t, c.req, req)
|
||||||
})
|
})
|
||||||
@@ -129,7 +129,7 @@ func TestRequestWrite(t *testing.T) {
|
|||||||
t.Run(c.name, func(t *testing.T) {
|
t.Run(c.name, func(t *testing.T) {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
bw := bufio.NewWriter(&buf)
|
bw := bufio.NewWriter(&buf)
|
||||||
err := c.req.write(bw)
|
err := c.req.Write(bw)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
// do NOT call flush(), write() must have already done it
|
// do NOT call flush(), write() must have already done it
|
||||||
require.Equal(t, c.byts, buf.Bytes())
|
require.Equal(t, c.byts, buf.Bytes())
|
||||||
|
@@ -132,7 +132,8 @@ type Response struct {
|
|||||||
Content []byte
|
Content []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func readResponse(rb *bufio.Reader) (*Response, error) {
|
// ReadResponse reads a response from a buffered reader.
|
||||||
|
func ReadResponse(rb *bufio.Reader) (*Response, error) {
|
||||||
res := &Response{}
|
res := &Response{}
|
||||||
|
|
||||||
byts, err := readBytesLimited(rb, ' ', 255)
|
byts, err := readBytesLimited(rb, ' ', 255)
|
||||||
@@ -185,7 +186,8 @@ func readResponse(rb *bufio.Reader) (*Response, error) {
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (res *Response) write(bw *bufio.Writer) error {
|
// Write writes a Response into a buffered writer.
|
||||||
|
func (res *Response) Write(bw *bufio.Writer) error {
|
||||||
if res.StatusMessage == "" {
|
if res.StatusMessage == "" {
|
||||||
if status, ok := statusMessages[res.StatusCode]; ok {
|
if status, ok := statusMessages[res.StatusCode]; ok {
|
||||||
res.StatusMessage = status
|
res.StatusMessage = status
|
||||||
|
@@ -111,7 +111,7 @@ var casesResponse = []struct {
|
|||||||
func TestResponseRead(t *testing.T) {
|
func TestResponseRead(t *testing.T) {
|
||||||
for _, c := range casesResponse {
|
for _, c := range casesResponse {
|
||||||
t.Run(c.name, func(t *testing.T) {
|
t.Run(c.name, func(t *testing.T) {
|
||||||
res, err := readResponse(bufio.NewReader(bytes.NewBuffer(c.byts)))
|
res, err := ReadResponse(bufio.NewReader(bytes.NewBuffer(c.byts)))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, c.res, res)
|
require.Equal(t, c.res, res)
|
||||||
})
|
})
|
||||||
@@ -123,7 +123,7 @@ func TestResponseWrite(t *testing.T) {
|
|||||||
t.Run(c.name, func(t *testing.T) {
|
t.Run(c.name, func(t *testing.T) {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
bw := bufio.NewWriter(&buf)
|
bw := bufio.NewWriter(&buf)
|
||||||
err := c.res.write(bw)
|
err := c.res.Write(bw)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
// do NOT call flush(), write() must have already done it
|
// do NOT call flush(), write() must have already done it
|
||||||
require.Equal(t, c.byts, buf.Bytes())
|
require.Equal(t, c.byts, buf.Bytes())
|
||||||
@@ -155,7 +155,7 @@ func TestResponseWriteStatusAutofill(t *testing.T) {
|
|||||||
|
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
bw := bufio.NewWriter(&buf)
|
bw := bufio.NewWriter(&buf)
|
||||||
err := res.write(bw)
|
err := res.Write(bw)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, byts, buf.Bytes())
|
require.Equal(t, byts, buf.Bytes())
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user