Skip to content

Commit 1032c17

Browse files
committed
Add 'routing_group_id' as bridge option
By specifying that manually, loop detection works accross multiple FlashMQ servers bridged together.
1 parent f413d1b commit 1032c17

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

bridgeconfig.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,11 @@ const std::optional<std::string> &BridgeConfig::getFmqClientGroupId() const
334334
return this->fmq_client_group_id;
335335
}
336336

337+
void BridgeConfig::setFmqClientGroupId(const std::string &group_id)
338+
{
339+
this->fmq_client_group_id = group_id;
340+
}
341+
337342
void BridgeConfig::isValid()
338343
{
339344
if (sslPrivkey.empty() != sslFullchain.empty())
@@ -432,7 +437,8 @@ std::vector<BridgeConfig> BridgeConfig::multiply() const
432437
*/
433438
result.back().appendConnectionNumber(i);
434439

435-
result.back().fmq_client_group_id = group_id;
440+
if (!result.back().fmq_client_group_id)
441+
result.back().fmq_client_group_id = group_id;
436442
}
437443

438444
result.back().setClientId();

bridgeconfig.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ class BridgeConfig
123123
void setClientId(const std::string &prefix, const std::string &id);
124124
const std::string &getClientid() const;
125125
const std::optional<std::string> &getFmqClientGroupId() const;
126+
void setFmqClientGroupId(const std::string &group_id);
126127
void isValid();
127128
std::vector<BridgeConfig> multiply() const;
128129
void setSharedSubscriptionName(const std::string &share_name);

configfileparser.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ ConfigFileParser::ConfigFileParser(const std::string &path) :
302302
validBridgeKeys.insert("minimum_tls_version");
303303
validBridgeKeys.insert("connection_count");
304304
validBridgeKeys.insert("max_buffer_size");
305+
validBridgeKeys.insert("routing_group_id");
305306

306307
validBridgeLazySubscriptionKeys.insert("subscribe");
307308
validBridgeLazySubscriptionKeys.insert("qos");
@@ -948,6 +949,13 @@ void ConfigFileParser::loadFile(bool test)
948949

949950
curBridge->maxBufferSize = val;
950951
}
952+
if (testKeyValidity(key, "routing_group_id", validBridgeKeys))
953+
{
954+
if (valueTrimmed.length() != 12)
955+
throw ConfigFileException("Length of " + key + " must be 12 chars (and fully random)");
956+
957+
curBridge->setFmqClientGroupId(valueTrimmed);
958+
}
951959

952960
testCorrectNumberOfValues(key, number_of_expected_values, values);
953961
continue;

0 commit comments

Comments
 (0)