Skip to main content

The configuration directory

FIREFLO_CONF_DIR decides where the four configuration files live, and it moves all four together.
A relative value — including the conf default — resolves against the process working directory, not the artefact.That is right for a checkout and wrong for a service. A unit with WorkingDirectory=/opt/fireflo and no FIREFLO_CONF_DIR reads /opt/fireflo/conf/, which is not where anybody edited anything. A packaged install sets it to an absolute path.
Each file can still be moved on its own, and a per-file override wins over FIREFLO_CONF_DIR — environment sources sit at a higher precedence than application.properties: In the Docker image the working directory is /work, so the default configuration directory is /work/conf. See Docker.

Gateway-wide property defaults

Any outSms.instance.<name>.<property> lookup that finds no value falls back to outSms.default.<property> before the built-in default. That gives one baseline every worker inherits, overridable per instance:
The doubled word in outSms.default.default.tlvs.submit is correct. The first default is the fallback tier; the second is part of the property name default.tlvs.submit.
So a worker setting resolves through three tiers, most specific first:
1

outSms.instance.<name>.<key>

This worker’s own value, from smsg.properties or from app_worker_property in database mode.
2

outSms.default.<key>

The deployment-wide baseline.
3

The coded default

What the vendor or listener falls back to when nothing sets it. These are listed in SMPP settings.
Not every setting can be scoped to one listener. One that cannot keeps its bare form, reads a global nobody sets, and therefore reads its coded default however you configure it.whitelist.tlvs.replace shipped that way once, and stamped nothing over SMPP for as long as it lasted. If a per-listener setting appears to do nothing, this is the first thing to check.

The four files

In db mode every file watcher stands down and none of these are read after startup — except smsg.properties, which is still read at startup, because the source switch and the datasource have to come from somewhere. See Database.

OpenAPI endpoints

While the HTTP server is running:
Prefer the REST API reference on this site over any OpenAPI document you generate a client from. An older specification is still in circulation that types custom_tlvs as an array the parser rejects and omits product entirely.