View Source SMPPEX.MC (smppex v3.2.3)
This is a module for launching a TCP listener (or any other listener supported by ranch
, for example, ssl
) which handles incoming connections with the passed SMPPEX.Session
implementations.
To start an MC one generally should do the following.
- Implement an
SMPPEX.Session
behaviour.
defmodule MyMCSession do
use SMPPEX.Session
# ...Callback implementation
end
- Pass the child specification to a supervisor, using implemented behaviour as a session module:
Supervisor.start_link(
[
{
SMPPEX.MC,
session: {MyESMESession, session_arg},
transport_opts: [port: 2775]
},
...
],
...
)
Note that each received connection is served with its own process which uses passed callback module (MyESMESession
) for handling connection events. Each process has his own state initialized by init
callback receiving socket
, transport
and a copy of arguments (session_arg
).
Summary
Functions
Returns a supervisor child specification for starting listener for MC entity.
Starts listener for MC entity.
Stops MC listener and all its sessions.
Functions
@spec child_spec(Keyword.t()) :: Supervisor.child_spec()
Returns a supervisor child specification for starting listener for MC entity.
Starting under a supervisor:
Supervisor.start_link(
[
{SMPPEX.MC, session: {MyESMESession, session_arg}, ...},
...
],
...
)
Options:
:session
(required) a{module, arg}
tuple, wheremodule
is the callback module which should implementSMPPEX.Session
behaviour, whilearg
is the argument passed to theinit
callback each time a new connection is received.:transport
is :ranch transport used for TCP connections: eitherranch_tcp
(the default) orranch_ssl
;:transport_opts
is a map of :ranch transport options. The major key issocket_opts
which contains a list of important options such as{:port, port}
. The port is set to0
by default, which means that the listener will accept connections on a random free port. For backward compatibility one can pass a list of socket options instead oftransport_opts
map (as in :ranch 1.x).:session_module
is a module to use as an alternative toSMPPEX.Session
for handling sessions (if needed). For example,SMPPEX.TelemetrySession
.:acceptor_count
is the number of :ranch listener acceptors, 50 by default.:mc_opts
is a keyword list of MC options::session_init_limit
is the maximum time for which a session waits an incoming bind request. If no bind request is received within this interval of time, the session stops. The default value is 10000 ms;:enquire_link_limit
is value for enquire_link SMPP timer, i.e. the interval of SMPP session inactivity after which enquire_link PDU is send to "ping" the connetion. The default value is 30000 ms;:enquire_link_resp_limit
is the maximum time for which a session waits for enquire_link PDU response. If the response is not received within this interval of time and no activity from the peer occurs, the session is then considered dead and the session stops. The default value is 30000 ms;:inactivity_limit
is the maximum time for which a peer is allowed not to send PDUs (which are not response PDUs). If no such PDUs are received within this interval of time, the session stops. The default is :infinity ms;:response_limit
is the maximum time to wait for a response for a previously sent PDU. If the response is not received within this interval,handle_resp_timeout
callback is triggered for the original pdu. If the response is received later, it is discarded. The default value is 60000 ms.:response_limit_resolution
is the maximum time after reachingresponse_limit
for which a PDU without a response is not collected. Setting to0
will make PDUs without responses to be collected immediately afterresponse_limit
ms. Setting to greater values improve performance since such PDUs are collected in batches. The default value is 100 ms.:default_call_timeout
is an integer greater than zero which specifies how many milliseconds to wait for a reply, or the atom :infinity to wait indefinitely.If no reply is received within the specified time, the function call fails and the caller exits. The default value is 5000 ms. If:mc_opts
list of options is ommited, all options take their default values. The returned value is either{:ok, ref}
or{:error, reason}
. Theref
can be later used to stop the whole MC listener and all sessions received by it.
@spec start( {module(), args :: term()}, opts :: Keyword.t() ) :: {:ok, listener_ref :: :ranch.ref()} | {:error, reason :: term()}
Starts listener for MC entity.
The listener is started in the supervision tree of the :ranch
application.
Therefore, prefer child_spec/1
, which allows you to start the MC in your own supervision tree.
The first argument must be a {module, arg}
tuple, where module
is the callback module which should implement SMPPEX.Session
behaviour, while arg
is the argument passed to the init
callback each time a new connection is received.
For the list of other options see child_spec/1
.
@spec stop(:ranch.ref()) :: :ok
Stops MC listener and all its sessions.