From d0355b5b5b9cc2aefb288d5deb53f9ace52b557f Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 19 Apr 2025 16:07:09 +0200 Subject: [PATCH 1/2] sends now the hostname (serverDescription) so that syslog server can create the right log file. Fix for https://github.com/wled/WLED/issues/4647 --- wled00/net_debug.cpp | 60 +++++++++++++++++++++++++++++--------------- wled00/net_debug.h | 8 +++--- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/wled00/net_debug.cpp b/wled00/net_debug.cpp index 4d9552a867..f09e6ac9e5 100644 --- a/wled00/net_debug.cpp +++ b/wled00/net_debug.cpp @@ -2,9 +2,7 @@ #ifdef WLED_DEBUG_HOST -size_t NetworkDebugPrinter::write(uint8_t c) { - if (!WLED_CONNECTED || !netDebugEnabled) return 0; - +void NetworkDebugPrinter::resolveHostName() { if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) { #ifdef ESP8266 WiFi.hostByName(netDebugPrintHost, debugPrintHostIP, 750); @@ -16,34 +14,56 @@ size_t NetworkDebugPrinter::write(uint8_t c) { #endif #endif } +} +void NetworkDebugPrinter::flushBuffer() { + if (buffer.length() == 0) return; + + resolveHostName(); + debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort); - debugUdp.write(c); + debugUdp.printf("%s %s", serverDescription, buffer.c_str()); debugUdp.endPacket(); + buffer = ""; +} + +size_t NetworkDebugPrinter::write(uint8_t c) { + if (!WLED_CONNECTED || !netDebugEnabled) return 0; + + buffer += (char)c; + + // Flush on newline or if buffer gets too large + if (c == '\n' || buffer.length() >= MAX_BUFFER_SIZE) { + flushBuffer(); + } + return 1; } size_t NetworkDebugPrinter::write(const uint8_t *buf, size_t size) { if (!WLED_CONNECTED || buf == nullptr || !netDebugEnabled) return 0; - - if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) { - #ifdef ESP8266 - WiFi.hostByName(netDebugPrintHost, debugPrintHostIP, 750); - #else - #ifdef WLED_USE_ETHERNET - ETH.hostByName(netDebugPrintHost, debugPrintHostIP); - #else - WiFi.hostByName(netDebugPrintHost, debugPrintHostIP); - #endif - #endif + + // Check if we can find a newline in the buffer + bool hasNewline = false; + size_t lastNewlinePos = 0; + + for (size_t i = 0; i < size; i++) { + buffer += (char)buf[i]; + if (buf[i] == '\n') { + hasNewline = true; + lastNewlinePos = i; + flushBuffer(); + } } - - debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort); - size = debugUdp.write(buf, size); - debugUdp.endPacket(); + + // If buffer is large but no newline was found, flush anyway + if (!hasNewline && buffer.length() >= MAX_BUFFER_SIZE) { + flushBuffer(); + } + return size; } NetworkDebugPrinter NetDebug; -#endif +#endif \ No newline at end of file diff --git a/wled00/net_debug.h b/wled00/net_debug.h index 13028fdc1a..64825ee42b 100644 --- a/wled00/net_debug.h +++ b/wled00/net_debug.h @@ -6,14 +6,16 @@ class NetworkDebugPrinter : public Print { private: - WiFiUDP debugUdp; // needs to be here otherwise UDP messages get truncated upon destruction + WiFiUDP debugUdp; IPAddress debugPrintHostIP; + String buffer; + const size_t MAX_BUFFER_SIZE = 1024; // Safety limit + void resolveHostName(); + void flushBuffer(); public: virtual size_t write(uint8_t c); virtual size_t write(const uint8_t *buf, size_t s); }; - -// use it on your linux/macOS with: nc -p 7868 -u -l -s extern NetworkDebugPrinter NetDebug; #endif \ No newline at end of file From 087a62a5de06e1673fc3f9d9ad937223db47309a Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 19 Apr 2025 16:24:52 +0200 Subject: [PATCH 2/2] removed unneeded varaibles, which were leftovers from testing --- wled00/net_debug.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/wled00/net_debug.cpp b/wled00/net_debug.cpp index f09e6ac9e5..1069007f0d 100644 --- a/wled00/net_debug.cpp +++ b/wled00/net_debug.cpp @@ -43,21 +43,15 @@ size_t NetworkDebugPrinter::write(uint8_t c) { size_t NetworkDebugPrinter::write(const uint8_t *buf, size_t size) { if (!WLED_CONNECTED || buf == nullptr || !netDebugEnabled) return 0; - // Check if we can find a newline in the buffer - bool hasNewline = false; - size_t lastNewlinePos = 0; - for (size_t i = 0; i < size; i++) { buffer += (char)buf[i]; if (buf[i] == '\n') { - hasNewline = true; - lastNewlinePos = i; flushBuffer(); } } // If buffer is large but no newline was found, flush anyway - if (!hasNewline && buffer.length() >= MAX_BUFFER_SIZE) { + if (buffer.length() >= MAX_BUFFER_SIZE) { flushBuffer(); }