Adding one
- Control panel
- smsg.properties
Servers → Add server. Name and port are the only required fields; everything else has a
working default.
What a bind is checked against, in order
1
The credential
systemId and password must match an enabled SMPP credential. See
credentials.yml.2
allowedIps, if set
Empty means no restriction.
3
Connection limits
srv.maxConnections overall, srv.maxConnectionsPerIP, and
conf.maxConnectionsPerUser.default per account.4
The product, if conf.product.required is on
The resolved product must name an enabled row in the product catalogue. Blank or unknown is
refused with
0x40F — at bind, not at submit, because the product lives on the session context.Where the product comes from
system_type on the bind request, falling back to the credential’s product field.
What a listener applies to everyone bound to it
The states a listener can be in
The panel shows these as one badge per card.
Listening with nobody bound is not a fault — a
listener with no customers connected is quiet, not broken, which is why it is not painted red the way
a vendor with no session is.
Dropping one customer’s bind
fireflo health. They are the listener’s own counter, so they collide between
listeners and restart with the gateway.
This ends a connection; it does not withdraw permission. A healthy client rebinds within seconds
unless you also disable its login.
Inbound messages
mo.owner.map decides which account owns which inbound address. mo.owner.default is where an
unmatched one goes — and empty means nowhere: the listener logs message.mo.unmapped and consumes
it rather than guessing an owner.
Deliberate, because delivering a stranger’s message to the wrong customer is worse. But unmapped
traffic disappears quietly unless you watch for that line.