Files
gortsplib/server.go
2021-01-07 13:16:52 +01:00

70 lines
1.4 KiB
Go

package gortsplib
import (
"fmt"
"net"
"time"
)
// Server is a RTSP server.
type Server struct {
conf ServerConf
listener net.Listener
}
func newServer(conf ServerConf, address string) (*Server, error) {
if conf.ReadTimeout == 0 {
conf.ReadTimeout = 10 * time.Second
}
if conf.WriteTimeout == 0 {
conf.WriteTimeout = 10 * time.Second
}
if conf.ReadBufferCount == 0 {
conf.ReadBufferCount = 1
}
if conf.Listen == nil {
conf.Listen = net.Listen
}
if conf.TLSConfig != nil && conf.UDPRTPListener != nil {
return nil, fmt.Errorf("TLS can't be used together with UDP")
}
if (conf.UDPRTPListener != nil && conf.UDPRTCPListener == nil) ||
(conf.UDPRTPListener == nil && conf.UDPRTCPListener != nil) {
return nil, fmt.Errorf("UDPRTPListener and UDPRTPListener must be used together")
}
if conf.UDPRTPListener != nil {
conf.UDPRTPListener.streamType = StreamTypeRTP
conf.UDPRTCPListener.streamType = StreamTypeRTCP
}
listener, err := conf.Listen("tcp", address)
if err != nil {
return nil, err
}
s := &Server{
conf: conf,
listener: listener,
}
return s, nil
}
// Close closes the server.
func (s *Server) Close() error {
return s.listener.Close()
}
// Accept accepts a connection.
func (s *Server) Accept() (*ServerConn, error) {
nconn, err := s.listener.Accept()
if err != nil {
return nil, err
}
return newServerConn(s.conf, nconn), nil
}