Documentation ¶
Index ¶
- Constants
- Variables
- func IsReliable(network string) bool
- func IsStreamed(network string) bool
- func NetworkToLower(network string) string
- type Connection
- type ConnectionPool
- type Layer
- func (l *Layer) ClientRequestConnection(req *sip.Request) (c Connection, err error)
- func (l *Layer) Close() error
- func (l *Layer) CreateConnection(network, addr string) (Connection, error)
- func (l *Layer) GetConnection(network, addr string) (Connection, error)
- func (l *Layer) ListenAndServe(ctx context.Context, network string, addr string) error
- func (l *Layer) ListenAndServeTLS(ctx context.Context, network string, addr string, conf *tls.Config) error
- func (l *Layer) OnMessage(h sip.MessageHandler)
- func (l *Layer) ServeTCP(c net.Listener) error
- func (l *Layer) ServeTLS(c net.Listener) error
- func (l *Layer) ServeUDP(c net.PacketConn) error
- func (l *Layer) ServeWS(c net.Listener) error
- func (l *Layer) WriteMsg(msg sip.Message) error
- func (l *Layer) WriteMsgTo(msg sip.Message, addr string, network string) error
- type TCPConnection
- type TCPPool
- type TCPTransport
- func (t *TCPTransport) Close() error
- func (t *TCPTransport) CreateConnection(addr string, handler sip.MessageHandler) (Connection, error)
- func (t *TCPTransport) GetConnection(addr string) (Connection, error)
- func (t *TCPTransport) Network() string
- func (t *TCPTransport) ResolveAddr(addr string) (net.Addr, error)
- func (t *TCPTransport) Serve(l net.Listener, handler sip.MessageHandler) error
- func (t *TCPTransport) String() string
- type TLSTransport
- type Transport
- type UDPConnection
- func (c *UDPConnection) Close() error
- func (c *UDPConnection) Read(b []byte) (n int, err error)
- func (c *UDPConnection) ReadFrom(b []byte) (n int, addr net.Addr, err error)
- func (c *UDPConnection) Ref(i int)
- func (c *UDPConnection) TryClose() (int, error)
- func (c *UDPConnection) Write(b []byte) (n int, err error)
- func (c *UDPConnection) WriteMsg(msg sip.Message) error
- func (c *UDPConnection) WriteTo(b []byte, addr net.Addr) (n int, err error)
- type UDPTransport
- func (t *UDPTransport) Close() error
- func (t *UDPTransport) CreateConnection(addr string, handler sip.MessageHandler) (Connection, error)
- func (t *UDPTransport) GetConnection(addr string) (Connection, error)
- func (t *UDPTransport) ListenAndServe(addr string, handler sip.MessageHandler) error
- func (t *UDPTransport) Network() string
- func (t *UDPTransport) ResolveAddr(addr string) (net.Addr, error)
- func (t *UDPTransport) Serve(conn net.PacketConn, handler sip.MessageHandler) error
- func (t *UDPTransport) String() string
- type WSConnection
- type WSTransport
- func (t *WSTransport) Close() error
- func (t *WSTransport) CreateConnection(addr string, handler sip.MessageHandler) (Connection, error)
- func (t *WSTransport) GetConnection(addr string) (Connection, error)
- func (t *WSTransport) Network() string
- func (t *WSTransport) ResolveAddr(addr string) (net.Addr, error)
- func (t *WSTransport) Serve(l net.Listener, handler sip.MessageHandler) error
- func (t *WSTransport) String() string
Constants ¶
const ( // Transport for different sip messages. GO uses lowercase, but for message parsing, we should // use this constants for setting message Transport TransportUDP = "UDP" TransportTCP = "TCP" TransportTLS = "TLS" TransportWS = "WS" )
Variables ¶
var ( // UDPReadWorkers defines how many listeners will work // Best performance is achieved with low value, to remove high concurency UDPReadWorkers int = 1 UDPMTUSize = 1500 ErrUDPMTUCongestion = errors.New("size of packet larger than MTU") )
var (
ErrNetworkNotSuported = errors.New("protocol not supported")
)
var (
SIPDebug bool
)
Functions ¶
func IsReliable ¶
func IsStreamed ¶
func NetworkToLower ¶
NetworkToLower is faster function converting UDP, TCP to udp, tcp
Types ¶
type Connection ¶
type Connection interface { // WriteMsg marshals message and sends to socket WriteMsg(msg sip.Message) error // Reference of connection can be increased/decreased to prevent closing to earlyss Ref(i int) // Close decreases reference and if ref = 0 closes connection. Returns last ref. If 0 then it is closed TryClose() (int, error) Close() error }
type ConnectionPool ¶
func NewConnectionPool ¶
func NewConnectionPool() ConnectionPool
func (*ConnectionPool) Add ¶
func (p *ConnectionPool) Add(a string, c Connection)
func (*ConnectionPool) Del ¶
func (p *ConnectionPool) Del(a string)
func (*ConnectionPool) Get ¶
func (p *ConnectionPool) Get(a string) (c Connection)
func (*ConnectionPool) Size ¶
func (p *ConnectionPool) Size() int
type Layer ¶
type Layer struct { // Parser used by transport layer. It can be overrided before setuping network transports Parser sip.Parser // ConnectionReuse will force connection reuse when passing request ConnectionReuse bool // contains filtered or unexported fields }
Layer implementation.
func NewLayer ¶
NewLayer creates transport layer. dns Resolver sip parser tls config - can be nil to use default tls
func (*Layer) ClientRequestConnection ¶
func (l *Layer) ClientRequestConnection(req *sip.Request) (c Connection, err error)
ClientRequestConnection is based on https://www.rfc-editor.org/rfc/rfc3261#section-18.1.1 It is wrapper for getting and creating connection
func (*Layer) CreateConnection ¶
func (l *Layer) CreateConnection(network, addr string) (Connection, error)
func (*Layer) GetConnection ¶
func (l *Layer) GetConnection(network, addr string) (Connection, error)
GetConnection gets existing or creates new connection based on addr
func (*Layer) ListenAndServe ¶
Serve on any network. This function will block Network supported: udp, tcp, ws
func (*Layer) ListenAndServeTLS ¶
func (l *Layer) ListenAndServeTLS(ctx context.Context, network string, addr string, conf *tls.Config) error
Serve on any tls network. This function will block Network supported: tcp
func (*Layer) OnMessage ¶
func (l *Layer) OnMessage(h sip.MessageHandler)
OnMessage is main function which will be called on any new message by transport layer
func (*Layer) ServeUDP ¶
func (l *Layer) ServeUDP(c net.PacketConn) error
ServeUDP will listen on udp connection
type TCPConnection ¶
func (*TCPConnection) Close ¶
func (c *TCPConnection) Close() error
func (*TCPConnection) Ref ¶
func (c *TCPConnection) Ref(i int)
func (*TCPConnection) TryClose ¶
func (c *TCPConnection) TryClose() (int, error)
type TCPPool ¶
func NewTCPPool ¶
func NewTCPPool() TCPPool
type TCPTransport ¶
type TCPTransport struct {
// contains filtered or unexported fields
}
TCP transport implementation
func NewTCPTransport ¶
func NewTCPTransport(par sip.Parser) *TCPTransport
func (*TCPTransport) Close ¶
func (t *TCPTransport) Close() error
func (*TCPTransport) CreateConnection ¶
func (t *TCPTransport) CreateConnection(addr string, handler sip.MessageHandler) (Connection, error)
func (*TCPTransport) GetConnection ¶
func (t *TCPTransport) GetConnection(addr string) (Connection, error)
func (*TCPTransport) Network ¶
func (t *TCPTransport) Network() string
func (*TCPTransport) ResolveAddr ¶
func (t *TCPTransport) ResolveAddr(addr string) (net.Addr, error)
func (*TCPTransport) Serve ¶
func (t *TCPTransport) Serve(l net.Listener, handler sip.MessageHandler) error
Serve is direct way to provide conn on which this worker will listen
func (*TCPTransport) String ¶
func (t *TCPTransport) String() string
type TLSTransport ¶
type TLSTransport struct { *TCPTransport // contains filtered or unexported fields }
TLS transport implementation
func NewTLSTransport ¶
func NewTLSTransport(par sip.Parser, dialTLSConf *tls.Config) *TLSTransport
NewTLSTransport needs dialTLSConf for creating connections when dialing
func (*TLSTransport) CreateConnection ¶
func (t *TLSTransport) CreateConnection(addr string, handler sip.MessageHandler) (Connection, error)
CreateConnection creates TLS connection for TCP transport
func (*TLSTransport) String ¶
func (t *TLSTransport) String() string
type Transport ¶
type Transport interface { Network() string GetConnection(addr string) (Connection, error) CreateConnection(addr string, handler sip.MessageHandler) (Connection, error) String() string Close() error }
Protocol implements network specific features.
type UDPConnection ¶
type UDPConnection struct { // mutual exclusive for now // TODO Refactor PacketConn net.PacketConn Conn net.Conn // contains filtered or unexported fields }
func (*UDPConnection) Close ¶
func (c *UDPConnection) Close() error
func (*UDPConnection) Ref ¶
func (c *UDPConnection) Ref(i int)
func (*UDPConnection) TryClose ¶
func (c *UDPConnection) TryClose() (int, error)
type UDPTransport ¶
type UDPTransport struct {
// contains filtered or unexported fields
}
UDP transport implementation
func NewUDPTransport ¶
func NewUDPTransport(par sip.Parser) *UDPTransport
func (*UDPTransport) Close ¶
func (t *UDPTransport) Close() error
func (*UDPTransport) CreateConnection ¶
func (t *UDPTransport) CreateConnection(addr string, handler sip.MessageHandler) (Connection, error)
CreateConnection will create new connection. Generally we only
func (*UDPTransport) GetConnection ¶
func (t *UDPTransport) GetConnection(addr string) (Connection, error)
GetConnection will return same listener connection
func (*UDPTransport) ListenAndServe ¶
func (t *UDPTransport) ListenAndServe(addr string, handler sip.MessageHandler) error
TODO This is more generic way to provide listener and it is blocking
func (*UDPTransport) Network ¶
func (t *UDPTransport) Network() string
func (*UDPTransport) ResolveAddr ¶
func (t *UDPTransport) ResolveAddr(addr string) (net.Addr, error)
func (*UDPTransport) Serve ¶
func (t *UDPTransport) Serve(conn net.PacketConn, handler sip.MessageHandler) error
ServeConn is direct way to provide conn on which this worker will listen UDPReadWorkers are used to create more workers
func (*UDPTransport) String ¶
func (t *UDPTransport) String() string
type WSConnection ¶
func (*WSConnection) Close ¶
func (c *WSConnection) Close() error
func (*WSConnection) Ref ¶
func (c *WSConnection) Ref(i int)
func (*WSConnection) TryClose ¶
func (c *WSConnection) TryClose() (int, error)
type WSTransport ¶
type WSTransport struct {
// contains filtered or unexported fields
}
WS transport implementation
func NewWSTransport ¶
func NewWSTransport(par sip.Parser) *WSTransport
func (*WSTransport) Close ¶
func (t *WSTransport) Close() error
func (*WSTransport) CreateConnection ¶
func (t *WSTransport) CreateConnection(addr string, handler sip.MessageHandler) (Connection, error)
func (*WSTransport) GetConnection ¶
func (t *WSTransport) GetConnection(addr string) (Connection, error)
func (*WSTransport) Network ¶
func (t *WSTransport) Network() string
func (*WSTransport) ResolveAddr ¶
func (t *WSTransport) ResolveAddr(addr string) (net.Addr, error)
func (*WSTransport) Serve ¶
func (t *WSTransport) Serve(l net.Listener, handler sip.MessageHandler) error
Serve is direct way to provide conn on which this worker will listen
func (*WSTransport) String ¶
func (t *WSTransport) String() string