Documentation ¶
Overview ¶
Package sm provides diameter state machines for clients and servers.
It currently handles CER/CEA handshakes, and automatic DWR/DWA. Peers that pass the handshake get metadata associated to their connection. See the peer sub-package for details on the metadata.
Index ¶
- Variables
- type Client
- func (cli *Client) Dial(addr string) (diam.Conn, error)
- func (cli *Client) DialExt(network, addr string, timeout time.Duration, laddr net.Addr) (diam.Conn, error)
- func (cli *Client) DialNetwork(network, addr string) (diam.Conn, error)
- func (cli *Client) DialNetworkBind(network, laddr, raddr string) (diam.Conn, error)
- func (cli *Client) DialNetworkTLS(network, addr, certFile, keyFile string, laddr net.Addr) (diam.Conn, error)
- func (cli *Client) DialTLS(addr, certFile, keyFile string) (diam.Conn, error)
- func (cli *Client) DialTLSExt(network, addr, certFile, keyFile string, timeout time.Duration, laddr net.Addr) (diam.Conn, error)
- func (cli *Client) DialTLSTimeout(addr, certFile, keyFile string, timeout time.Duration) (diam.Conn, error)
- func (cli *Client) DialTimeout(addr string, timeout time.Duration) (diam.Conn, error)
- func (cli *Client) NewConn(rw net.Conn, addr string) (diam.Conn, error)
- type HandshakeNotifier
- type Settings
- type StateMachine
- func (sm *StateMachine) Error(err *diam.ErrorReport)
- func (sm *StateMachine) ErrorReports() <-chan *diam.ErrorReport
- func (sm *StateMachine) Handle(cmd string, handler diam.Handler)
- func (sm *StateMachine) HandleFunc(cmd string, handler diam.HandlerFunc)
- func (sm *StateMachine) HandleIdx(cmd diam.CommandIndex, handler diam.Handler)
- func (sm *StateMachine) HandshakeNotify() <-chan diam.Conn
- func (sm *StateMachine) ServeDIAM(c diam.Conn, m *diam.Message)
- func (sm *StateMachine) Settings() *Settings
- type SupportedApp
Constants ¶
This section is empty.
Variables ¶
var ( // ErrMissingStateMachine is returned by Dial or DialTLS when // the Client does not have a valid StateMachine set. ErrMissingStateMachine = errors.New("client state machine is nil") // ErrHandshakeTimeout is returned by Dial or DialTLS when the // client does not receive a handshake answer from the server. // // If the client is configured to retransmit messages, the // handshake timeout only occurs after all retransmits are // attempted and none has an aswer. ErrHandshakeTimeout = errors.New("handshake timeout (no response)") )
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct { Dict *dict.Parser // Dictionary parser (uses dict.Default if unset) Handler *StateMachine // Message handler MaxRetransmits uint // Max number of retransmissions before aborting RetransmitInterval time.Duration // Interval between retransmissions (default 1s) EnableWatchdog bool // Enable automatic DWR WatchdogInterval time.Duration // Interval between DWRs (default 5s) WatchdogStream uint // Stream to send DWR on (for multistreaming protocols), default is 0 SupportedVendorID []*diam.AVP // Supported vendor ID AcctApplicationID []*diam.AVP // Acct applications AuthApplicationID []*diam.AVP // Auth applications VendorSpecificApplicationID []*diam.AVP // Vendor specific applications }
A Client is a diameter client that automatically performs a handshake with the server after the connection is established.
It sends a Capabilities-Exchange-Request with the AVPs defined in it, and expects a Capabilities-Exchange-Answer with a success (2001) result code. If enabled, the client will send Device-Watchdog-Request messages in background until the connection is terminated.
By default, retransmission and watchdog are disabled. Retransmission is enabled by setting MaxRetransmits to a number greater than zero, and watchdog is enabled by setting EnableWatchdog to true.
A custom message handler for Device-Watchdog-Answer (DWA) can be registered. However, that will be overwritten if watchdog is enabled.
func (*Client) Dial ¶
Dial calls the address set as ip:port, performs a handshake and optionally start a watchdog goroutine in background.
func (*Client) DialExt ¶
func (cli *Client) DialExt(network, addr string, timeout time.Duration, laddr net.Addr) (diam.Conn, error)
DialExt - Optionally binds client to laddr, calls the network address set as ip:port, performs a handshake and optionally start a watchdog goroutine in background.
func (*Client) DialNetwork ¶
DialNetwork calls the network address set as ip:port, performs a handshake and optionally start a watchdog goroutine in background.
func (*Client) DialNetworkBind ¶
DialNetworkBind calls the network address set as ip:port, performs a handshake and optionally start a watchdog goroutine in background.
func (*Client) DialNetworkTLS ¶
func (cli *Client) DialNetworkTLS(network, addr, certFile, keyFile string, laddr net.Addr) (diam.Conn, error)
DialNetworkTLS calls the network address set as ip:port, performs a handshake and optionally start a watchdog goroutine in background.
func (*Client) DialTLSExt ¶
func (cli *Client) DialTLSExt( network, addr, certFile, keyFile string, timeout time.Duration, laddr net.Addr) (diam.Conn, error)
DialTLSExt - Optionally binds client to laddr, calls the network address set as ip:port, performs a handshake and optionally start a watchdog goroutine in background.
func (*Client) DialTLSTimeout ¶
func (cli *Client) DialTLSTimeout(addr, certFile, keyFile string, timeout time.Duration) (diam.Conn, error)
DialTLSTimeout is like DialTimeout, but using TLS.
func (*Client) DialTimeout ¶
DialTimeout is like Dial, but with timeout
type HandshakeNotifier ¶
type HandshakeNotifier interface { // HandshakeNotify returns a channel that receives // a peer's diam.Conn after it passes the handshake. HandshakeNotify() <-chan diam.Conn }
The HandshakeNotifier interface is implemented by Handlers that allow detecting peers that have passed the CER/CEA handshake.
type Settings ¶
type Settings struct { OriginHost datatype.DiameterIdentity OriginRealm datatype.DiameterIdentity VendorID datatype.Unsigned32 ProductName datatype.UTF8String // OriginStateID is optional for clients, and not added if unset. // // On servers it has no effect because CEA will contain the // same value from CER, if present. // // May be set to datatype.Unsigned32(time.Now().Unix()). OriginStateID datatype.Unsigned32 // FirmwareRevision is optional, and not added if unset. FirmwareRevision datatype.Unsigned32 // HostIPAddress is optional for both clients and servers, when not set local // host IP address is used. // // This property may be set when the IP address of the host sending/receiving // the request is different from the configured allowed IPs in the other end, // for example when using a VPN or a gateway. // HostIPAddresses []datatype.Address // // Deprecated: HostIPAddress is depreciated, use HostIPAddresses instead HostIPAddress datatype.Address }
Settings used to configure the state machine with AVPs to be added to CER on clients or CEA on servers.
type StateMachine ¶
type StateMachine struct {
// contains filtered or unexported fields
}
StateMachine is a specialized type of diam.ServeMux that handles the CER/CEA handshake and DWR/DWA messages for clients or servers.
Other handlers registered in the state machine are only executed after the peer has passed the initial CER/CEA handshake.
func New ¶
func New(settings *Settings) *StateMachine
New creates and initializes a new StateMachine for clients or servers.
func (*StateMachine) Error ¶
func (sm *StateMachine) Error(err *diam.ErrorReport)
Error implements the diam.ErrorReporter interface.
func (*StateMachine) ErrorReports ¶
func (sm *StateMachine) ErrorReports() <-chan *diam.ErrorReport
ErrorReports implement the diam.ErrorReporter interface.
func (*StateMachine) Handle ¶
func (sm *StateMachine) Handle(cmd string, handler diam.Handler)
Handle implements the diam.Handler interface.
func (*StateMachine) HandleFunc ¶
func (sm *StateMachine) HandleFunc(cmd string, handler diam.HandlerFunc)
HandleFunc implements the diam.Handler interface.
func (*StateMachine) HandleIdx ¶
func (sm *StateMachine) HandleIdx(cmd diam.CommandIndex, handler diam.Handler)
func (*StateMachine) HandshakeNotify ¶
func (sm *StateMachine) HandshakeNotify() <-chan diam.Conn
HandshakeNotify implements the HandshakeNotifier interface.
func (*StateMachine) ServeDIAM ¶
func (sm *StateMachine) ServeDIAM(c diam.Conn, m *diam.Message)
ServeDIAM implements the diam.Handler interface.
func (*StateMachine) Settings ¶
func (sm *StateMachine) Settings() *Settings
Settings return the Settings object used by this StateMachine.
type SupportedApp ¶
SupportedApp holds properties of each locally supported App
func PrepareSupportedApps ¶
func PrepareSupportedApps(d *dict.Parser) []*SupportedApp
PrepareSupportedApps prepares a list of locally supported apps
Directories ¶
Path | Synopsis |
---|---|
Package smparser provides message parsers for the state machine.
|
Package smparser provides message parsers for the state machine. |
Package smpeer provides functions for extracting information from a CER or CEA, and associating with a Context.
|
Package smpeer provides functions for extracting information from a CER or CEA, and associating with a Context. |