MQTT Implementation (aligned with DStarGateway / MMDVMHost):
- Rewrite MQTTConnection with mosquitto_loop_stop() fix to prevent
background thread zombies on shutdown
- Add MQTT authentication support (mqttAuth, mqttUsername, mqttPassword)
- Add configurable client name (mqttName) used as topic prefix
- Use PID-based client IDs (avoids time_t truncation on 32-bit ARM)
- Use std::string interface throughout (no wxString in MQTT layer)
- Align JSON link status fields with DStarGateway (repeater/reflector/
protocol/reason/action) for dashboard compatibility
Shutdown Safety:
- Add MQTTLogFinalise() calls to both daemon (IRCDDBGatewayAppD::run)
and GUI (IRCDDBGatewayApp::OnExit) shutdown paths to ensure clean
MQTT disconnection and thread cleanup before process exit
JSON Status Events:
- Update all ~30 WriteJSON call sites across DPlus, DExtra, DCS, and
CCS protocol handlers to use new function signatures
- Simplify IRCDDBGatewayThread::writeJSONStatus to delegate to
WriteJSONStatus
Config Parser Hardening:
- Add empty-line crash guard to IRCDDBGatewayConfig, TimerControlConfig,
and TimeServerConfig parsers (str.IsEmpty() check before GetChar)
Documentation:
- Add MQTT.md with topic structure, JSON examples, and troubleshooting
- Add CONFIGURATION.md with full reference for all config files
- Add BUILD.md with build parameters and dependency information
- Add linux/ example configs for ircddbgateway, timeserver, timercontrol
- Modernise README.md with feature list and DStarGateway recommendation
Generate dependency files so that when changing one file only stuff
dependant on that file gets rebuilt. Avoid cleaning the whole thing on
every small change