Documentation
¶
Index ¶
- func ClientRequestAddRecordRoute(c *Client, r *sip.Request) error
- func ClientRequestAddVia(c *Client, r *sip.Request) error
- func ClientRequestDecreaseMaxForward(c *Client, r *sip.Request) error
- func ClientResponseRemoveVia(c *Client, r *sip.Response)
- func GenerateTLSConfig(certFile string, keyFile string, rootPems []byte) (*tls.Config, error)
- func Init()
- type Client
- type ClientOption
- type ClientRequestOption
- type RequestHandler
- type Server
- func (srv *Server) Close()
- func (srv *Server) ListenAndServe(ctx context.Context, network string, addr string) error
- func (srv *Server) ListenAndServeTLS(ctx context.Context, network string, addr string, conf *tls.Config) error
- func (srv *Server) OnAck(handler RequestHandler)
- func (srv *Server) OnBye(handler RequestHandler)
- func (srv *Server) OnCancel(handler RequestHandler)
- func (srv *Server) OnInfo(handler RequestHandler)
- func (srv *Server) OnInvite(handler RequestHandler)
- func (srv *Server) OnMessage(handler RequestHandler)
- func (srv *Server) OnNoRoute(handler RequestHandler)
- func (srv *Server) OnNotify(handler RequestHandler)
- func (srv *Server) OnOptions(handler RequestHandler)
- func (srv *Server) OnPrack(handler RequestHandler)
- func (srv *Server) OnPublish(handler RequestHandler)
- func (srv *Server) OnRefer(handler RequestHandler)
- func (srv *Server) OnRegister(handler RequestHandler)
- func (srv *Server) OnRequest(method sip.RequestMethod, handler RequestHandler)
- func (srv *Server) OnSubscribe(handler RequestHandler)
- func (srv *Server) OnUpdate(handler RequestHandler)
- func (srv *Server) ServeRequest(f func(r *sip.Request))
- func (srv *Server) ServeTCP(l net.Listener) error
- func (srv *Server) ServeTLS(l net.Listener, conf *tls.Config) error
- func (srv *Server) ServeUDP(l net.PacketConn) error
- func (srv *Server) TransportLayer() *transport.Layer
- func (srv *Server) WriteResponse(r *sip.Response) error
- type ServerDialog
- type ServerOption
- type UserAgent
- type UserAgentOption
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ClientRequestAddRecordRoute ¶
ClientRequestAddRecordRoute is option for adding record route header Based on proxy setup https://www.rfc-editor.org/rfc/rfc3261#section-16
func ClientRequestAddVia ¶
ClientRequestAddVia is option for adding via header Based on proxy setup https://www.rfc-editor.org/rfc/rfc3261.html#section-16.6
func ClientRequestDecreaseMaxForward ¶
Based on proxy setup https://www.rfc-editor.org/rfc/rfc3261#section-16 ClientRequestDecreaseMaxForward should be used when forwarding request. It decreases max forward in case of 0 it returnes error
func ClientResponseRemoveVia ¶
ClientResponseRemoveVia is needed when handling client transaction response, where previously used in TransactionRequest with ClientRequestAddVia
func GenerateTLSConfig ¶
GenerateTLSConfig creates basic tls.Config that you can pass for ServerTLS It needs rootPems for client side
Types ¶
type Client ¶
type Client struct { *UserAgent // contains filtered or unexported fields }
func NewClient ¶
func NewClient(ua *UserAgent, options ...ClientOption) (*Client, error)
NewClient creates client handle for user agent
func (*Client) GetHostname ¶
func (*Client) TransactionRequest ¶
func (c *Client) TransactionRequest(req *sip.Request, options ...ClientRequestOption) (sip.ClientTransaction, error)
TransactionRequest uses transaction layer to send request and returns transaction By default the following header fields will be added if not exist: To, From, CSeq, Call-ID, Max-Forwards, Via Passing custom options will override this behavior. This is useful when using client handle in proxy building
NOTE: request will not be cloned and header adding will be present after this action
func (*Client) WriteRequest ¶
func (c *Client) WriteRequest(req *sip.Request, options ...ClientRequestOption) error
WriteRequest sends request directly to transport layer Behavior is same as TransactionRequest Non-transaction ACK request should be passed like this
type ClientOption ¶
func WithClientHostname ¶
func WithClientHostname(hostname string) ClientOption
WithClientHost allows setting default route host default it will be used user agent IP
func WithClientLogger ¶
func WithClientLogger(logger zerolog.Logger) ClientOption
WithClientLogger allows customizing client logger
func WithClientPort ¶
func WithClientPort(port int) ClientOption
WithClientPort allows setting default route port
type RequestHandler ¶
type RequestHandler func(req *sip.Request, tx sip.ServerTransaction)
RequestHandler is a callback that will be called on the incoming request
type Server ¶
type Server struct { *UserAgent // contains filtered or unexported fields }
Server is a SIP server
func NewServer ¶
func NewServer(ua *UserAgent, options ...ServerOption) (*Server, error)
NewServer creates new instance of SIP server handle. Allows creating server transaction handlers It uses User Agent transport and transaction layer
func (*Server) ListenAndServe ¶
Serve will fire all listeners. Ctx allows canceling
func (*Server) ListenAndServeTLS ¶
func (srv *Server) ListenAndServeTLS(ctx context.Context, network string, addr string, conf *tls.Config) error
Serve will fire all listeners that are secured. Ctx allows canceling
func (*Server) OnAck ¶
func (srv *Server) OnAck(handler RequestHandler)
OnAck registers Ack request handler
func (*Server) OnBye ¶
func (srv *Server) OnBye(handler RequestHandler)
OnBye registers Bye request handler
func (*Server) OnCancel ¶
func (srv *Server) OnCancel(handler RequestHandler)
OnCancel registers Cancel request handler
func (*Server) OnInfo ¶
func (srv *Server) OnInfo(handler RequestHandler)
OnInfo registers Info request handler
func (*Server) OnInvite ¶
func (srv *Server) OnInvite(handler RequestHandler)
OnInvite registers Invite request handler
func (*Server) OnMessage ¶
func (srv *Server) OnMessage(handler RequestHandler)
OnMessage registers Message request handler
func (*Server) OnNoRoute ¶
func (srv *Server) OnNoRoute(handler RequestHandler)
OnNoRoute registers no route handler default is handling is responding 405 Method Not allowed This allows customizing your response for any non handled message
Example ¶
// Creating no route handler allows you to respond for non handled (non routed) requests ua, _ := NewUA() srv, _ := NewServer(ua) srv.OnNoRoute(func(req *sip.Request, tx sip.ServerTransaction) { res := sip.NewResponseFromRequest(req, 405, "Method Not Allowed", nil) // Send response directly and let transaction terminate if err := srv.WriteResponse(res); err != nil { srv.log.Error().Err(err).Msg("respond '405 Method Not Allowed' failed") } })
func (*Server) OnNotify ¶
func (srv *Server) OnNotify(handler RequestHandler)
OnNotify registers Notify request handler
func (*Server) OnOptions ¶
func (srv *Server) OnOptions(handler RequestHandler)
OnOptions registers Options request handler
func (*Server) OnPrack ¶
func (srv *Server) OnPrack(handler RequestHandler)
OnPrack registers Prack request handler
func (*Server) OnPublish ¶
func (srv *Server) OnPublish(handler RequestHandler)
OnPublish registers Publish request handler
func (*Server) OnRefer ¶
func (srv *Server) OnRefer(handler RequestHandler)
OnRefer registers Refer request handler
func (*Server) OnRegister ¶
func (srv *Server) OnRegister(handler RequestHandler)
OnRegister registers Register request handler
func (*Server) OnRequest ¶
func (srv *Server) OnRequest(method sip.RequestMethod, handler RequestHandler)
OnRequest registers new request callback. Can be used as generic way to add handler
func (*Server) OnSubscribe ¶
func (srv *Server) OnSubscribe(handler RequestHandler)
OnSubscribe registers Subscribe request handler
func (*Server) OnUpdate ¶
func (srv *Server) OnUpdate(handler RequestHandler)
OnUpdate registers Update request handler
func (*Server) ServeRequest ¶
ServeRequest can be used as middleware for preprocessing message
func (*Server) ServeUDP ¶
func (srv *Server) ServeUDP(l net.PacketConn) error
ServeUDP starts serving request on UDP type listener.
func (*Server) TransportLayer ¶
Transport is function to get transport layer of server Can be used for modifying
type ServerDialog ¶
type ServerDialog struct { Server // contains filtered or unexported fields }
ServerDialog is extension of Server to support Dialog handling
func NewServerDialog ¶
func NewServerDialog(ua *UserAgent, options ...ServerOption) (*ServerDialog, error)
func (*ServerDialog) OnDialog ¶
func (s *ServerDialog) OnDialog(f func(d sip.Dialog))
OnDialog allows monitoring new dialogs
func (*ServerDialog) OnDialogChan ¶
func (s *ServerDialog) OnDialogChan(ch chan sip.Dialog)
OnDialogChan same as onDialog but we channel instead callback func
type ServerOption ¶
func WithServerLogger ¶
func WithServerLogger(logger zerolog.Logger) ServerOption
WithServerLogger allows customizing server logger
type UserAgent ¶
type UserAgent struct {
// contains filtered or unexported fields
}
func NewUA ¶
func NewUA(options ...UserAgentOption) (*UserAgent, error)
NewUA creates User Agent User Agent will create transport and transaction layer Check options for customizing user agent
func (*UserAgent) TransportLayer ¶
type UserAgentOption ¶
func WithUserAgent ¶
func WithUserAgent(ua string) UserAgentOption
WithUserAgent changes user agent name Default: sipgo
func WithUserAgentDNSResolver ¶
func WithUserAgentDNSResolver(r *net.Resolver) UserAgentOption
WithUserAgentDNSResolver allows customizing default DNS resolver for transport layer
func WithUserAgentIP ¶
func WithUserAgentIP(ip net.IP) UserAgentOption
WithUserAgentIP sets local IP that will be used in building request If not used IP will be resolved