Compare commits

..

2 Commits

Author SHA1 Message Date
Ben Meadors
f39a9c5083
Clean up some straggler NRF52 json (#5628)
Some checks are pending
CI / setup (stm32) (push) Waiting to run
CI / check (push) Blocked by required conditions
CI / build-esp32 (push) Blocked by required conditions
CI / build-esp32-s3 (push) Blocked by required conditions
CI / build-esp32-c3 (push) Blocked by required conditions
CI / build-esp32-c6 (push) Blocked by required conditions
CI / build-nrf52 (push) Blocked by required conditions
CI / build-rpi2040 (push) Blocked by required conditions
CI / build-stm32 (push) Blocked by required conditions
CI / package-raspbian (push) Waiting to run
CI / package-raspbian-armv7l (push) Waiting to run
CI / package-native (push) Waiting to run
CI / build-docker (push) Waiting to run
CI / after-checks (push) Blocked by required conditions
CI / gather-artifacts (esp32) (push) Blocked by required conditions
CI / gather-artifacts (esp32c3) (push) Blocked by required conditions
CI / gather-artifacts (esp32c6) (push) Blocked by required conditions
CI / gather-artifacts (esp32s3) (push) Blocked by required conditions
CI / gather-artifacts (nrf52840) (push) Blocked by required conditions
CI / gather-artifacts (rp2040) (push) Blocked by required conditions
CI / gather-artifacts (stm32) (push) Blocked by required conditions
CI / release-artifacts (push) Blocked by required conditions
CI / release-firmware (esp32) (push) Blocked by required conditions
CI / release-firmware (esp32c3) (push) Blocked by required conditions
CI / release-firmware (esp32c6) (push) Blocked by required conditions
CI / release-firmware (esp32s3) (push) Blocked by required conditions
CI / release-firmware (nrf52840) (push) Blocked by required conditions
CI / release-firmware (rp2040) (push) Blocked by required conditions
CI / release-firmware (stm32) (push) Blocked by required conditions
Flawfinder Scan / Flawfinder (push) Waiting to run
2024-12-21 14:42:54 +11:00
Eric Severance
398d29064e
Separate host/port before checking for private IP (#5630) 2024-12-21 14:06:01 +11:00
2 changed files with 25 additions and 11 deletions

View File

@ -19,8 +19,10 @@
#include <WiFi.h> #include <WiFi.h>
#endif #endif
#include "Default.h" #include "Default.h"
#if !defined(ARCH_NRF52) || NRF52_USE_JSON
#include "serialization/JSON.h" #include "serialization/JSON.h"
#include "serialization/MeshPacketSerializer.h" #include "serialization/MeshPacketSerializer.h"
#endif
#include <Throttle.h> #include <Throttle.h>
#include <assert.h> #include <assert.h>
#include <pb_decode.h> #include <pb_decode.h>
@ -119,6 +121,7 @@ inline void onReceiveProto(char *topic, byte *payload, size_t length)
router->enqueueReceivedMessage(p.release()); router->enqueueReceivedMessage(p.release());
} }
#if !defined(ARCH_NRF52) || NRF52_USE_JSON
// returns true if this is a valid JSON envelope which we accept on downlink // returns true if this is a valid JSON envelope which we accept on downlink
inline bool isValidJsonEnvelope(JSONObject &json) inline bool isValidJsonEnvelope(JSONObject &json)
{ {
@ -204,6 +207,7 @@ inline void onReceiveJson(byte *payload, size_t length)
LOG_DEBUG("JSON ignore downlink message with unsupported type"); LOG_DEBUG("JSON ignore downlink message with unsupported type");
} }
} }
#endif
/// Determines if the given IPAddress is a private IPv4 address, i.e. not routable on the public internet. /// Determines if the given IPAddress is a private IPv4 address, i.e. not routable on the public internet.
bool isPrivateIpAddress(const IPAddress &ip) bool isPrivateIpAddress(const IPAddress &ip)
@ -227,6 +231,16 @@ bool isPrivateIpAddress(const IPAddress &ip)
} }
return false; return false;
} }
std::pair<std::string, uint16_t> 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 } // namespace
void MQTT::mqttCallback(char *topic, byte *payload, unsigned int length) void MQTT::mqttCallback(char *topic, byte *payload, unsigned int length)
@ -248,6 +262,7 @@ void MQTT::onReceive(char *topic, byte *payload, size_t length)
// check if this is a json payload message by comparing the topic start // check if this is a json payload message by comparing the topic start
if (moduleConfig.mqtt.json_enabled && (strncmp(topic, jsonTopic.c_str(), jsonTopic.length()) == 0)) { if (moduleConfig.mqtt.json_enabled && (strncmp(topic, jsonTopic.c_str(), jsonTopic.length()) == 0)) {
#if !defined(ARCH_NRF52) || NRF52_USE_JSON
// parse the channel name from the topic string // parse the channel name from the topic string
// the topic has been checked above for having jsonTopic prefix, so just move past it // the topic has been checked above for having jsonTopic prefix, so just move past it
char *channelName = topic + jsonTopic.length(); char *channelName = topic + jsonTopic.length();
@ -261,6 +276,7 @@ void MQTT::onReceive(char *topic, byte *payload, size_t length)
return; return;
} }
onReceiveJson(payload, length); onReceiveJson(payload, length);
#endif
return; return;
} }
@ -302,7 +318,8 @@ MQTT::MQTT() : concurrency::OSThread("mqtt"), mqttQueue(MAX_MQTT_QUEUE)
} }
IPAddress ip; 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 HAS_NETWORKING
if (!moduleConfig.mqtt.proxy_to_client_enabled) if (!moduleConfig.mqtt.proxy_to_client_enabled)
@ -418,14 +435,9 @@ void MQTT::reconnect()
pubSub.setClient(mqttClient); pubSub.setClient(mqttClient);
#endif #endif
String server = String(serverAddr); std::pair<std::string, uint16_t> hostAndPort = parseHostAndPort(serverAddr, serverPort);
int delimIndex = server.indexOf(':'); serverAddr = hostAndPort.first.c_str();
if (delimIndex > 0) { serverPort = hostAndPort.second;
String port = server.substring(delimIndex + 1, server.length());
server[delimIndex] = 0;
serverPort = port.toInt();
serverAddr = server.c_str();
}
pubSub.setServer(serverAddr, serverPort); pubSub.setServer(serverAddr, serverPort);
pubSub.setBufferSize(512); pubSub.setBufferSize(512);
@ -748,4 +760,4 @@ void MQTT::perhapsReportToMap()
// Update the last report time // Update the last report time
last_report_to_map = millis(); last_report_to_map = millis();
} }

View File

@ -5,7 +5,9 @@
#include "concurrency/OSThread.h" #include "concurrency/OSThread.h"
#include "mesh/Channels.h" #include "mesh/Channels.h"
#include "mesh/generated/meshtastic/mqtt.pb.h" #include "mesh/generated/meshtastic/mqtt.pb.h"
#if !defined(ARCH_NRF52) || NRF52_USE_JSON
#include "serialization/JSON.h" #include "serialization/JSON.h"
#endif
#if HAS_WIFI #if HAS_WIFI
#include <WiFiClient.h> #include <WiFiClient.h>
#if !defined(ARCH_PORTDUINO) #if !defined(ARCH_PORTDUINO)
@ -127,4 +129,4 @@ class MQTT : private concurrency::OSThread
void mqttInit(); void mqttInit();
extern MQTT *mqtt; extern MQTT *mqtt;