Documentation ¶
Index ¶
- Variables
- func ClientRequestAddRecordRoute(c *Client, r *sip.Request) error
- func ClientRequestAddVia(c *Client, r *sip.Request) error
- func ClientRequestBuild(c *Client, r *sip.Request) error
- func ClientRequestDecreaseMaxForward(c *Client, r *sip.Request) error
- func GenerateTLSConfig(certFile string, keyFile string, rootPems []byte) (*tls.Config, error)
- func Init()
- type AnswerOptions
- type Client
- func (c *Client) Close() error
- func (c *Client) Do(ctx context.Context, req *sip.Request) (*sip.Response, error)
- func (c *Client) DoDigestAuth(ctx context.Context, req *sip.Request, res *sip.Response, auth DigestAuth) (sip.ClientTransaction, error)
- func (c *Client) Hostname() string
- func (c *Client) TransactionRequest(ctx context.Context, req *sip.Request, options ...ClientRequestOption) (sip.ClientTransaction, error)
- func (c *Client) WriteRequest(req *sip.Request, options ...ClientRequestOption) error
- type ClientOption
- type ClientRequestOption
- type ClientTransactionRequester
- type Dialog
- type DialogClientCache
- func (c *DialogClientCache) Invite(ctx context.Context, recipient sip.Uri, body []byte, headers ...sip.Header) (*DialogClientSession, error)
- func (s *DialogClientCache) MatchRequestDialog(req *sip.Request) (*DialogClientSession, error)
- func (c *DialogClientCache) ReadBye(req *sip.Request, tx sip.ServerTransaction) error
- func (c *DialogClientCache) WriteInvite(ctx context.Context, inviteRequest *sip.Request) (*DialogClientSession, error)
- type DialogClientSession
- func (s *DialogClientSession) Ack(ctx context.Context) error
- func (s *DialogClientSession) Bye(ctx context.Context) error
- func (s *DialogClientSession) Close() error
- func (s *DialogClientSession) Do(ctx context.Context, req *sip.Request) (*sip.Response, error)
- func (s *DialogClientSession) ReadBye(req *sip.Request, tx sip.ServerTransaction) error
- func (s *DialogClientSession) ReadRequest(req *sip.Request, tx sip.ServerTransaction) error
- func (s *DialogClientSession) TransactionRequest(ctx context.Context, req *sip.Request) (sip.ClientTransaction, error)
- func (s *DialogClientSession) WaitAnswer(ctx context.Context, opts AnswerOptions) error
- func (s *DialogClientSession) WriteAck(ctx context.Context, ack *sip.Request) error
- func (s *DialogClientSession) WriteBye(ctx context.Context, bye *sip.Request) error
- func (s *DialogClientSession) WriteRequest(req *sip.Request) error
- type DialogServerCache
- func (s *DialogServerCache) MatchDialogRequest(req *sip.Request) (*DialogServerSession, error)
- func (s *DialogServerCache) ReadAck(req *sip.Request, tx sip.ServerTransaction) error
- func (s *DialogServerCache) ReadBye(req *sip.Request, tx sip.ServerTransaction) error
- func (s *DialogServerCache) ReadInvite(req *sip.Request, tx sip.ServerTransaction) (*DialogServerSession, error)
- type DialogServerSession
- func (s *DialogServerSession) Bye(ctx context.Context) error
- func (s *DialogServerSession) Close() error
- func (s *DialogServerSession) Do(ctx context.Context, req *sip.Request) (*sip.Response, error)
- func (s *DialogServerSession) ReadAck(req *sip.Request, tx sip.ServerTransaction) error
- func (s *DialogServerSession) ReadBye(req *sip.Request, tx sip.ServerTransaction) error
- func (s *DialogServerSession) ReadRequest(req *sip.Request, tx sip.ServerTransaction) error
- func (s *DialogServerSession) Respond(statusCode sip.StatusCode, reason string, body []byte, headers ...sip.Header) error
- func (s *DialogServerSession) RespondSDP(sdp []byte) error
- func (s *DialogServerSession) TransactionRequest(ctx context.Context, req *sip.Request) (sip.ClientTransaction, error)
- func (s *DialogServerSession) WriteBye(ctx context.Context, bye *sip.Request) error
- func (s *DialogServerSession) WriteRequest(req *sip.Request) error
- func (s *DialogServerSession) WriteResponse(res *sip.Response) error
- type DialogStateFn
- type DialogUA
- func (ua *DialogUA) Invite(ctx context.Context, recipient sip.Uri, body []byte, headers ...sip.Header) (*DialogClientSession, error)
- func (c *DialogUA) ReadInvite(inviteReq *sip.Request, tx sip.ServerTransaction) (*DialogServerSession, error)
- func (c *DialogUA) WriteInvite(ctx context.Context, inviteReq *sip.Request, options ...ClientRequestOption) (*DialogClientSession, error)
- type DigestAuth
- type ErrDialogResponse
- type ListenReadyCtxValue
- type ListenReadyFuncCtxValue
- type RequestHandler
- type Server
- func (srv *Server) Close() error
- 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) RegisteredMethods() []string
- func (srv *Server) ServeRequest(f func(r *sip.Request))
- func (srv *Server) ServeTCP(l net.Listener) error
- func (srv *Server) ServeTLS(l net.Listener) error
- func (srv *Server) ServeUDP(l net.PacketConn) error
- func (srv *Server) ServeWS(l net.Listener) error
- func (srv *Server) ServeWSS(l net.Listener) error
- func (srv *Server) TransportLayer() *sip.TransportLayer
- func (srv *Server) WriteResponse(r *sip.Response) error
- type ServerOption
- type UserAgent
- type UserAgentOption
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrDialogOutsideDialog = errors.New("Call/Transaction Outside Dialog") ErrDialogDoesNotExists = errors.New("Call/Transaction Does Not Exist") ErrDialogInviteNoContact = errors.New("No Contact header") ErrDialogCanceled = errors.New("Dialog canceled") ErrDialogInvalidCseq = errors.New("Invalid CSEQ number") )
var (
// Used only for testing, better way is to pass listener with Serve{Transport}
ListenReadyCtxKey = "ListenReadyCtxKey"
)
var (
WaitAnswerForceCancelErr = errors.New("Context cancel forced")
)
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 ClientRequestBuild ¶ added in v0.16.0
ClientRequestBuild will build missing fields in request This is by default but can be used to combine with other ClientRequestOptions
func ClientRequestDecreaseMaxForward ¶ added in v0.7.0
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 GenerateTLSConfig ¶ added in v0.7.0
GenerateTLSConfig creates basic tls.Config that you can pass for ServerTLS It needs rootPems for client side
Types ¶
type AnswerOptions ¶ added in v0.15.1
type Client ¶
type Client struct { *UserAgent // TxRequester allows you to use your transaction requester instead default from transaction layer // Useful only for testing // // Experimental TxRequester ClientTransactionRequester // contains filtered or unexported fields }
func NewClient ¶
func NewClient(ua *UserAgent, options ...ClientOption) (*Client, error)
NewClient creates client handle for user agent
func (*Client) Close ¶ added in v0.13.0
Close client handle. UserAgent must be closed for full transaction and transport layer closing.
func (*Client) Do ¶ added in v0.22.0
Do request is HTTP client like Do request/response. It returns on final response. NOTE: Canceling ctx WILL not send Cancel Request which is needed for INVITE. Use dialog API for dealing with dialogs For more lower API use TransactionRequest directly
func (*Client) DoDigestAuth ¶ added in v0.19.0
func (c *Client) DoDigestAuth(ctx context.Context, req *sip.Request, res *sip.Response, auth DigestAuth) (sip.ClientTransaction, error)
DoDigestAuth will apply digest authentication if initial request is chalenged by 401 or 407. It returns new transaction that is created for this request
func (*Client) Hostname ¶ added in v0.25.0
Hostname returns default hostname or what is set WithHostname option
func (*Client) TransactionRequest ¶
func (c *Client) TransactionRequest(ctx context.Context, req *sip.Request, options ...ClientRequestOption) (sip.ClientTransaction, error)
TransactionRequest uses transaction layer to send request and returns transaction For more correct behavior use client.Do instead which acts same like HTTP req/response
By default request will not be cloned and it will populate request with missing headers unless options are used In most cases you want this as you will retry with additional headers
Following header fields will be added if not exist to have correct SIP request: To, From, CSeq, Call-ID, Max-Forwards, Via Passing options will override this behavior, that is, it is expected that your request is already prebuild This is mostly the case when creating proxy
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 WithClientAddr ¶ added in v0.12.0
func WithClientAddr(addr string) ClientOption
WithClientAddr is merge of WithClientHostname and WithClientPort addr is format <host>:<port>
func WithClientHostname ¶ added in v0.11.0
func WithClientHostname(hostname string) ClientOption
WithClientHost allows setting default route host or IP on Via in case of IP it will enforce transport layer to create/reuse connection with this IP This is useful when you need to act as client first and avoid creating server handle listeners. NOTE: From header hostname is WithUserAgentHostname option on UA or modify request manually
func WithClientLogger ¶ added in v0.7.2
func WithClientLogger(logger zerolog.Logger) ClientOption
WithClientLogger allows customizing client logger
func WithClientNAT ¶ added in v0.16.0
func WithClientNAT() ClientOption
WithClientNAT makes client aware that is behind NAT.
func WithClientPort ¶ added in v0.11.0
func WithClientPort(port int) ClientOption
WithClientPort allows setting default route Via port it will enforce transport layer to create connection with this port if does NOT exist transport layer will choose existing connection by default unless TransportLayer.ConnectionReuse is set to false default: ephemeral port
type ClientTransactionRequester ¶ added in v0.24.1
type Dialog ¶ added in v0.15.0
type Dialog struct { ID string // InviteRequest is set when dialog is created. It is not thread safe! // Use it only as read only and use methods to change headers InviteRequest *sip.Request // InviteResponse is last response received or sent. It is not thread safe! // Use it only as read only and do not change values InviteResponse *sip.Response // contains filtered or unexported fields }
func (*Dialog) InitWithState ¶ added in v0.23.0
func (d *Dialog) InitWithState(s sip.DialogState)
func (*Dialog) LoadState ¶ added in v0.23.0
func (d *Dialog) LoadState() sip.DialogState
func (*Dialog) OnState ¶ added in v0.24.0
func (d *Dialog) OnState(f DialogStateFn)
func (*Dialog) StateRead ¶ added in v0.23.0
func (d *Dialog) StateRead() <-chan sip.DialogState
type DialogClientCache ¶ added in v0.24.0
type DialogClientCache struct {
// contains filtered or unexported fields
}
func NewDialogClientCache ¶ added in v0.24.0
func NewDialogClientCache(client *Client, contactHDR sip.ContactHeader) *DialogClientCache
NewDialogClientCache provides simple cache layer for managing UAC dialogs. It is generally recomended to build your own cache layer Contact hdr is default to be provided for correct invite. It is not used if you provided hdr as part of request, but contact hdr must be present so this makes sure correct dialog is established. In case handling different transports you should have multiple instances per transport
func (*DialogClientCache) Invite ¶ added in v0.24.0
func (c *DialogClientCache) Invite(ctx context.Context, recipient sip.Uri, body []byte, headers ...sip.Header) (*DialogClientSession, error)
Invite sends INVITE request and creates early dialog session. This is actually not yet dialog (ID is empty) You need to call WaitAnswer after for establishing dialog For passing custom Invite request use WriteInvite
func (*DialogClientCache) MatchRequestDialog ¶ added in v0.24.0
func (s *DialogClientCache) MatchRequestDialog(req *sip.Request) (*DialogClientSession, error)
func (*DialogClientCache) ReadBye ¶ added in v0.24.0
func (c *DialogClientCache) ReadBye(req *sip.Request, tx sip.ServerTransaction) error
func (*DialogClientCache) WriteInvite ¶ added in v0.24.0
func (c *DialogClientCache) WriteInvite(ctx context.Context, inviteRequest *sip.Request) (*DialogClientSession, error)
type DialogClientSession ¶ added in v0.15.0
type DialogClientSession struct { Dialog // contains filtered or unexported fields }
func (*DialogClientSession) Ack ¶ added in v0.15.0
func (s *DialogClientSession) Ack(ctx context.Context) error
Ack sends ack. Use WriteAck for more customizing
func (*DialogClientSession) Bye ¶ added in v0.15.0
func (s *DialogClientSession) Bye(ctx context.Context) error
Bye sends bye and terminates session. Use WriteBye if you want to customize bye request
func (*DialogClientSession) Close ¶ added in v0.15.1
func (s *DialogClientSession) Close() error
Close must be always called in order to cleanup some internal resources Consider that this will not send BYE or CANCEL or change dialog state
func (*DialogClientSession) Do ¶ added in v0.23.0
Do sends request and waits final response using Dialog rules For more control use TransactionRequest
NOTE: It does not provide INVITE CANCEL as it could be REINVITE Use WaitAnswer when creating initial INVITE to have CANCEL sending.
func (*DialogClientSession) ReadBye ¶ added in v0.23.0
func (s *DialogClientSession) ReadBye(req *sip.Request, tx sip.ServerTransaction) error
func (*DialogClientSession) ReadRequest ¶ added in v0.23.0
func (s *DialogClientSession) ReadRequest(req *sip.Request, tx sip.ServerTransaction) error
ReadRequest is generic func to validate new request in dialog and update seq. Use it if there are no predefined
func (*DialogClientSession) TransactionRequest ¶ added in v0.21.0
func (s *DialogClientSession) TransactionRequest(ctx context.Context, req *sip.Request) (sip.ClientTransaction, error)
TransactionRequest is doing client DIALOG request based on RFC https://www.rfc-editor.org/rfc/rfc3261#section-12.2.1 This ensures that you have proper request done within dialog. You should avoid setting any Dialog header (cseq, from, to, callid)
func (*DialogClientSession) WaitAnswer ¶ added in v0.15.1
func (s *DialogClientSession) WaitAnswer(ctx context.Context, opts AnswerOptions) error
WaitAnswer waits for success response or returns ErrDialogResponse in case non 2xx Canceling context while waiting 2xx will send Cancel request. It will block until 1xx provisional is not received If Canceling succesfull context.Canceled error is returned Returns errors: - ErrDialogResponse in case non 2xx response - any internal in case waiting answer failed for different reasons
func (*DialogClientSession) WriteRequest ¶ added in v0.21.0
func (s *DialogClientSession) WriteRequest(req *sip.Request) error
type DialogServerCache ¶ added in v0.24.0
type DialogServerCache struct {
// contains filtered or unexported fields
}
DialogServerCache serves as quick way to start building dialog server It is not optimized version and it is recomended that you build own dialog caching
func NewDialogServerCache ¶ added in v0.24.0
func NewDialogServerCache(client *Client, contactHDR sip.ContactHeader) *DialogServerCache
NewDialogServerCache provides simple cache layer for managing UAS dialog Contact hdr is default that is provided for responses. Client is needed for termination dialog session In case handling different transports you should have multiple instances per transport
Using DialogUA is now better way for genereting dialogs without caching and giving you as caller whole control of dialog
func (*DialogServerCache) MatchDialogRequest ¶ added in v0.24.0
func (s *DialogServerCache) MatchDialogRequest(req *sip.Request) (*DialogServerSession, error)
func (*DialogServerCache) ReadAck ¶ added in v0.24.0
func (s *DialogServerCache) ReadAck(req *sip.Request, tx sip.ServerTransaction) error
ReadAck should read from your OnAck handler
func (*DialogServerCache) ReadBye ¶ added in v0.24.0
func (s *DialogServerCache) ReadBye(req *sip.Request, tx sip.ServerTransaction) error
ReadBye should read from your OnBye handler. Returns error if it fails
func (*DialogServerCache) ReadInvite ¶ added in v0.24.0
func (s *DialogServerCache) ReadInvite(req *sip.Request, tx sip.ServerTransaction) (*DialogServerSession, error)
ReadInvite should read from your OnInvite handler for which it creates dialog context You need to use DialogServerSession for all further responses Do not forget to add ReadAck and ReadBye for confirming dialog and terminating
type DialogServerSession ¶ added in v0.15.0
type DialogServerSession struct { Dialog // contains filtered or unexported fields }
func (*DialogServerSession) Bye ¶ added in v0.15.0
func (s *DialogServerSession) Bye(ctx context.Context) error
func (*DialogServerSession) Close ¶ added in v0.15.1
func (s *DialogServerSession) Close() error
Close is always good to call for cleanup or terminating dialog state
func (*DialogServerSession) ReadAck ¶ added in v0.23.0
func (s *DialogServerSession) ReadAck(req *sip.Request, tx sip.ServerTransaction) error
ReadAck changes dialog state to confiremed
func (*DialogServerSession) ReadBye ¶ added in v0.23.0
func (s *DialogServerSession) ReadBye(req *sip.Request, tx sip.ServerTransaction) error
func (*DialogServerSession) ReadRequest ¶ added in v0.23.0
func (s *DialogServerSession) ReadRequest(req *sip.Request, tx sip.ServerTransaction) error
ReadRequest is generic func to validate new request in dialog and update seq. Use it if there are no predefined
func (*DialogServerSession) Respond ¶ added in v0.15.0
func (s *DialogServerSession) Respond(statusCode sip.StatusCode, reason string, body []byte, headers ...sip.Header) error
Respond should be called for Invite request, you may want to call this multiple times like 100 Progress or 180 Ringing 2xx for creating dialog or other code in case failure
In case Cancel request received: ErrDialogCanceled is responded
func (*DialogServerSession) RespondSDP ¶ added in v0.21.0
func (s *DialogServerSession) RespondSDP(sdp []byte) error
RespondSDP is just wrapper to call 200 with SDP. It is better to use this when answering as it provide correct headers
func (*DialogServerSession) TransactionRequest ¶ added in v0.21.0
func (s *DialogServerSession) TransactionRequest(ctx context.Context, req *sip.Request) (sip.ClientTransaction, error)
TransactionRequest is doing client DIALOG request based on RFC https://www.rfc-editor.org/rfc/rfc3261#section-12.2.1 This ensures that you have proper request done within dialog
func (*DialogServerSession) WriteRequest ¶ added in v0.21.0
func (s *DialogServerSession) WriteRequest(req *sip.Request) error
func (*DialogServerSession) WriteResponse ¶ added in v0.15.0
func (s *DialogServerSession) WriteResponse(res *sip.Response) error
WriteResponse allows passing you custom response
type DialogStateFn ¶ added in v0.24.0
type DialogStateFn func(s sip.DialogState)
type DialogUA ¶ added in v0.23.0
type DialogUA struct { // Client (required) is used to build and send subsequent request (CANCEL, BYE) Client *Client // ContactHDR (required) is used as default one to build request/response. // You can pass custom on each request, but in dialog it is required to be present ContactHDR sip.ContactHeader RewriteContact bool }
DialogUA defines UserAgent that will be used in controling your dialog. It needs client handle for cancelation or sending more subsequent request during dialog
func (*DialogUA) ReadInvite ¶ added in v0.23.0
func (c *DialogUA) ReadInvite(inviteReq *sip.Request, tx sip.ServerTransaction) (*DialogServerSession, error)
func (*DialogUA) WriteInvite ¶ added in v0.23.0
func (c *DialogUA) WriteInvite(ctx context.Context, inviteReq *sip.Request, options ...ClientRequestOption) (*DialogClientSession, error)
type DigestAuth ¶ added in v0.19.0
type ErrDialogResponse ¶ added in v0.15.0
func (ErrDialogResponse) Error ¶ added in v0.15.0
func (e ErrDialogResponse) Error() string
type ListenReadyCtxValue ¶ added in v0.14.0
type ListenReadyCtxValue chan struct{}
type ListenReadyFuncCtxValue ¶ added in v0.26.0
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) Close ¶ added in v0.8.0
Close server handle. UserAgent must be closed for full transaction and transport layer closing.
func (*Server) ListenAndServe ¶ added in v0.7.0
Serve will fire all listeners Network supported: udp, tcp, ws
func (*Server) ListenAndServeTLS ¶ added in v0.7.0
func (srv *Server) ListenAndServeTLS(ctx context.Context, network string, addr string, conf *tls.Config) error
Serve will fire all listeners that are secured. Network supported: tls, wss, tcp, tcp4, tcp6, ws, ws4, ws6
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 ¶ added in v0.9.0
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") } })
Output:
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) RegisteredMethods ¶ added in v0.12.1
RegisteredMethods returns list of registered handlers. Can be used for constructing Allow header
func (*Server) ServeRequest ¶
ServeRequest can be used as middleware for preprocessing message
func (*Server) ServeUDP ¶ added in v0.10.0
func (srv *Server) ServeUDP(l net.PacketConn) error
ServeUDP starts serving request on UDP type listener.
func (*Server) TransportLayer ¶
func (srv *Server) TransportLayer() *sip.TransportLayer
Transport is function to get transport layer of server Can be used for modifying
type ServerOption ¶
func WithServerLogger ¶ added in v0.7.2
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) TransactionLayer ¶ added in v0.19.0
func (ua *UserAgent) TransactionLayer() *sip.TransactionLayer
func (*UserAgent) TransportLayer ¶ added in v0.10.0
func (ua *UserAgent) TransportLayer() *sip.TransportLayer
type UserAgentOption ¶
func WithUserAgenTLSConfig ¶ added in v0.12.0
func WithUserAgenTLSConfig(c *tls.Config) UserAgentOption
WithUserAgenTLSConfig allows customizing default tls config.
func WithUserAgent ¶
func WithUserAgent(ua string) UserAgentOption
WithUserAgent changes user agent name Default: sipgo
func WithUserAgentDNSResolver ¶ added in v0.7.2
func WithUserAgentDNSResolver(r *net.Resolver) UserAgentOption
WithUserAgentDNSResolver allows customizing default DNS resolver for transport layer
func WithUserAgentHostname ¶ added in v0.17.0
func WithUserAgentHostname(hostname string) UserAgentOption
WithUserAgentHostname represents FQDN of user that can be presented in From header
func WithUserAgentParser ¶ added in v0.16.1
func WithUserAgentParser(p *sip.Parser) UserAgentOption
WithUserAgentParser allows removing default behavior of parser You can define and remove default headers parser map and pass here. Only use if your benchmarks are better than default