Files
gortsplib/conn-server.go

57 lines
1.5 KiB
Go

package gortsplib
import (
"bufio"
"net"
"time"
)
// ConnServer is a server-side RTSP connection.
type ConnServer struct {
nconn net.Conn
br *bufio.Reader
bw *bufio.Writer
readTimeout time.Duration
writeTimeout time.Duration
}
// NewConnServer allocates a ConnClient.
func NewConnServer(nconn net.Conn, readTimeout time.Duration, writeTimeout time.Duration) *ConnServer {
return &ConnServer{
nconn: nconn,
br: bufio.NewReaderSize(nconn, 4096),
bw: bufio.NewWriterSize(nconn, 4096),
readTimeout: readTimeout,
writeTimeout: writeTimeout,
}
}
// NetConn returns the underlying net.Conn.
func (s *ConnServer) NetConn() net.Conn {
return s.nconn
}
// ReadRequest reads a Request.
func (s *ConnServer) ReadRequest() (*Request, error) {
s.nconn.SetReadDeadline(time.Time{}) // disable deadline
return readRequest(s.br)
}
// WriteResponse writes a response.
func (s *ConnServer) WriteResponse(res *Response) error {
s.nconn.SetWriteDeadline(time.Now().Add(s.writeTimeout))
return res.write(s.bw)
}
// ReadInterleavedFrame reads an InterleavedFrame.
func (s *ConnServer) ReadInterleavedFrame() (*InterleavedFrame, error) {
s.nconn.SetReadDeadline(time.Now().Add(s.readTimeout))
return readInterleavedFrame(s.br)
}
// WriteInterleavedFrame writes an InterleavedFrame.
func (s *ConnServer) WriteInterleavedFrame(frame *InterleavedFrame) error {
s.nconn.SetWriteDeadline(time.Now().Add(s.writeTimeout))
return frame.write(s.bw)
}