From 398d29064e770fbf1e79eec26542ec9fe9677fa4 Mon Sep 17 00:00:00 2001 From: Eric Severance Date: Fri, 20 Dec 2024 19:06:01 -0800 Subject: [PATCH] Separate host/port before checking for private IP (#5630) --- src/mqtt/MQTT.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp index 7b15e99f3..c7db4672a 100644 --- a/src/mqtt/MQTT.cpp +++ b/src/mqtt/MQTT.cpp @@ -227,6 +227,16 @@ bool isPrivateIpAddress(const IPAddress &ip) } return false; } + +std::pair parseHostAndPort(std::string address, uint16_t port = 0) +{ + const size_t delimIndex = address.find_first_of(':'); + if (delimIndex > 0) { + port = std::stoul(address.substr(delimIndex + 1, address.length())); + address.resize(delimIndex); + } + return std::make_pair(std::move(address), port); +} } // namespace void MQTT::mqttCallback(char *topic, byte *payload, unsigned int length) @@ -302,7 +312,8 @@ MQTT::MQTT() : concurrency::OSThread("mqtt"), mqttQueue(MAX_MQTT_QUEUE) } IPAddress ip; - isMqttServerAddressPrivate = ip.fromString(moduleConfig.mqtt.address) && isPrivateIpAddress(ip); + isMqttServerAddressPrivate = + ip.fromString(parseHostAndPort(moduleConfig.mqtt.address).first.c_str()) && isPrivateIpAddress(ip); #if HAS_NETWORKING if (!moduleConfig.mqtt.proxy_to_client_enabled) @@ -418,14 +429,9 @@ void MQTT::reconnect() pubSub.setClient(mqttClient); #endif - String server = String(serverAddr); - int delimIndex = server.indexOf(':'); - if (delimIndex > 0) { - String port = server.substring(delimIndex + 1, server.length()); - server[delimIndex] = 0; - serverPort = port.toInt(); - serverAddr = server.c_str(); - } + std::pair hostAndPort = parseHostAndPort(serverAddr, serverPort); + serverAddr = hostAndPort.first.c_str(); + serverPort = hostAndPort.second; pubSub.setServer(serverAddr, serverPort); pubSub.setBufferSize(512);