Skip to content

Commit

Permalink
add --mqttclientid (fixes #226)
Browse files Browse the repository at this point in the history
  • Loading branch information
john30 committed Dec 2, 2018
1 parent a84c3cb commit 224c947
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/ebusd/mqtthandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ using std::dec;

#define O_HOST 1
#define O_PORT (O_HOST+1)
#define O_USER (O_PORT+1)
#define O_CLID (O_PORT+1)
#define O_USER (O_CLID+1)
#define O_PASS (O_USER+1)
#define O_TOPI (O_PASS+1)
#define O_RETA (O_TOPI+1)
Expand All @@ -47,6 +48,8 @@ static const struct argp_option g_mqtt_argp_options[] = {
{nullptr, 0, nullptr, 0, "MQTT options:", 1 },
{"mqtthost", O_HOST, "HOST", 0, "Connect to MQTT broker on HOST [localhost]", 0 },
{"mqttport", O_PORT, "PORT", 0, "Connect to MQTT broker on PORT (usually 1883), 0 to disable [0]", 0 },
{"mqttclientid",O_CLID, "ID", 0, "Set client ID for connection to MQTT broker [" PACKAGE_NAME "_"
PACKAGE_VERSION "_<pid>]", 0 },
{"mqttuser", O_USER, "USER", 0, "Connect as USER to MQTT broker (no default)", 0 },
{"mqttpass", O_PASS, "PASSWORD", 0, "Use PASSWORD when connecting to MQTT broker (no default)", 0 },
{"mqtttopic", O_TOPI, "TOPIC", 0,
Expand All @@ -69,6 +72,7 @@ static const struct argp_option g_mqtt_argp_options[] = {

static const char* g_host = "localhost"; //!< host name of MQTT broker [localhost]
static uint16_t g_port = 0; //!< optional port of MQTT broker, 0 to disable [0]
static const char* g_clientId = nullptr; //!< optional clientid override for MQTT broker
static const char* g_username = nullptr; //!< optional user name for MQTT broker (no default)
static const char* g_password = nullptr; //!< optional password for MQTT broker (no default)
/** the MQTT topic string parts. */
Expand Down Expand Up @@ -116,6 +120,14 @@ static error_t mqtt_parse_opt(int key, char *arg, struct argp_state *state) {
}
break;

case O_CLID: // --mqttclientid=clientid
if (arg == nullptr || arg[0] == 0) {
argp_error(state, "invalid mqttclientid");
return EINVAL;
}
g_clientId = arg;
break;

case O_USER: // --mqttuser=username
if (arg == nullptr) {
argp_error(state, "invalid mqttuser");
Expand Down Expand Up @@ -353,7 +365,11 @@ MqttHandler::MqttHandler(UserInfo* userInfo, BusHandler* busHandler, MessageMap*
} else {
signal(SIGPIPE, SIG_IGN); // needed before libmosquitto v. 1.1.3
ostringstream clientId;
clientId << PACKAGE_NAME << '_' << PACKAGE_VERSION << '_' << static_cast<unsigned>(getpid());
if (g_clientId) {
clientId << g_clientId;
} else {
clientId << PACKAGE_NAME << '_' << PACKAGE_VERSION << '_' << static_cast<unsigned>(getpid());
}
#if (LIBMOSQUITTO_MAJOR >= 1)
m_mosquitto = mosquitto_new(clientId.str().c_str(), true, this);
#else
Expand Down

0 comments on commit 224c947

Please sign in to comment.