From 9740b33e5bb6cb876474743599934887e8d8ffc7 Mon Sep 17 00:00:00 2001 From: SQ5RWU Date: Fri, 4 Jun 2021 20:33:03 +0200 Subject: [PATCH 1/5] Properly escape JSON --- src/taskWebServer.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index cfac245..c552e3c 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -36,8 +36,13 @@ void sendCacheHeader() { server.sendHeader("Cache-Control", "max-age=3600"); } void sendGzipHeader() { server.sendHeader("Content-Encoding", "gzip"); } String jsonEscape(String s){ - s.replace("\"", "\\\""); - s.replace("\\", "\\\\"); + s.replace("\\", "\\\\"); + s.replace("\"", "\\\""); + s.replace("\n", "\\n"); + s.replace("\b", "\\b"); + s.replace("\f", "\\f"); + s.replace("\n", "\\n"); + s.replace("\t", "\\t"); return s; } From e62a980abbc90a73a7ec024bf2145b26cadb7c85 Mon Sep 17 00:00:00 2001 From: SQ5RWU Date: Fri, 4 Jun 2021 20:33:03 +0200 Subject: [PATCH 2/5] Properly escape JSON --- src/taskWebServer.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index cfac245..1354487 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -36,8 +36,14 @@ void sendCacheHeader() { server.sendHeader("Cache-Control", "max-age=3600"); } void sendGzipHeader() { server.sendHeader("Content-Encoding", "gzip"); } String jsonEscape(String s){ - s.replace("\"", "\\\""); - s.replace("\\", "\\\\"); + s.replace("\\", "\\\\"); + s.replace("\"", "\\\""); + s.replace("\n", "\\n"); + s.replace("\r", "\\r"); + s.replace("\b", "\\b"); + s.replace("\f", "\\f"); + s.replace("\n", "\\n"); + s.replace("\t", "\\t"); return s; } From 151571e15ab36bc93d81cbb87f784e0ef3102676 Mon Sep 17 00:00:00 2001 From: SQ5RWU Date: Fri, 4 Jun 2021 20:59:05 +0200 Subject: [PATCH 3/5] Properly escape JSON --- src/taskWebServer.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index 1354487..72d25be 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -38,12 +38,10 @@ void sendGzipHeader() { server.sendHeader("Content-Encoding", "gzip"); } String jsonEscape(String s){ s.replace("\\", "\\\\"); s.replace("\"", "\\\""); - s.replace("\n", "\\n"); - s.replace("\r", "\\r"); - s.replace("\b", "\\b"); - s.replace("\f", "\\f"); - s.replace("\n", "\\n"); - s.replace("\t", "\\t"); + s.replace("\x7f", "\\\x7f"); + for(char i = 0; i < 0x1f; i++){ + s.replace(String(i), "\\" + String((char)i)); + } return s; } From 84700fc5dade7fd53054bee65a494c531a984d61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Nidecki?= Date: Fri, 11 Jun 2021 01:40:26 +0200 Subject: [PATCH 4/5] Use ArduinoJson to encode received packets list --- platformio.ini | 3 ++- src/taskWebServer.cpp | 29 ++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/platformio.ini b/platformio.ini index 2e0a7fe..b3eac91 100644 --- a/platformio.ini +++ b/platformio.ini @@ -26,7 +26,8 @@ lib_deps = Adafruit GFX Library Adafruit Unified Sensor https://github.com/SQ9MDD/AXP202X_Library.git - SparkFun u-blox Arduino Library + SparkFun u-blox Arduino Library + bblanchon/ArduinoJson build_flags = -Wl,--gc-sections,--relax -D 'KISS_PROTOCOL' diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index e1f2665..bcd2823 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -3,6 +3,8 @@ #include "preference_storage.h" #include "syslog_log.h" #include +#include + /** * @see board_build.embed_txtfiles in platformio.ini */ @@ -15,7 +17,7 @@ extern const char web_js_js_end[] asm("_binary_data_embed_js_js_out_end"); QueueHandle_t webListReceivedQueue = nullptr; std::list receivedPackets; -const int MAX_RECEIVED_LIST_SIZE = 50; +const int MAX_RECEIVED_LIST_SIZE = 10; String apSSID = ""; String apPassword = "xxxxxxxxxx"; @@ -151,24 +153,21 @@ void handle_Cfg() { } void handle_ReceivedList() { - String jsonData = "{\"received\": ["; - auto count = receivedPackets.size(); + DynamicJsonDocument doc(MAX_RECEIVED_LIST_SIZE * 500); + JsonObject root = doc.to(); + auto received = root.createNestedArray("received"); for (auto element: receivedPackets){ - jsonData += "{"; char buf[64]; strftime(buf, 64, "%Y.%m.%d %H:%M:%S", &element->rxTime); - jsonData += jsonLineFromString("time", buf); - jsonData += jsonLineFromString("packet", element->packet->c_str()); - jsonData += jsonLineFromInt("rssi", element->RSSI); - jsonData += jsonLineFromInt("snr", element->SNR, true); - jsonData += "}"; - count--; - if (count){ - jsonData += ","; - } + auto packet_data = received.createNestedObject(); + packet_data["time"] = String(buf); + packet_data["packet"] = element->packet->c_str(); + packet_data["rssi"] = element->RSSI; + packet_data["snr"] = element->SNR / 10.0f; + received.add(packet_data); } - jsonData += "]}"; - server.send(200,"application/json", jsonData); + + server.send(200,"application/json", doc.as()); } void handle_SaveAPRSCfg() { From 0a8d94641fc101b49f8a8a6dc5d0155d80511e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Nidecki?= Date: Fri, 11 Jun 2021 02:15:42 +0200 Subject: [PATCH 5/5] Fix doubling positions on rx list --- platformio.ini | 1 + src/TTGO_T-Beam_LoRa_APRS.ino | 2 +- src/taskWebServer.cpp | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index b3eac91..e9f8362 100644 --- a/platformio.ini +++ b/platformio.ini @@ -119,6 +119,7 @@ build_flags = -D ENABLE_BLUETOOTH -D ENABLE_SYSLOG -D 'SYSLOG_IP="192.168.0.102"' + -D DEVELOPMENT_DEBUG lib_deps = ${env.lib_deps} arcao/Syslog diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino index 692a059..f7b56cf 100644 --- a/src/TTGO_T-Beam_LoRa_APRS.ino +++ b/src/TTGO_T-Beam_LoRa_APRS.ino @@ -733,7 +733,7 @@ void setup(){ #ifdef ENABLE_WIFI webServerCfg = {.callsign = Tcall}; - xTaskCreate(taskWebServer, "taskWebServer", 42000, (void*)(&webServerCfg), 1, nullptr); + xTaskCreate(taskWebServer, "taskWebServer", 12000, (void*)(&webServerCfg), 1, nullptr); writedisplaytext("LoRa-APRS","","Init:","WiFi task started"," =:-) ",""); #endif diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index 1365ee1..83ab67c 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -168,7 +168,6 @@ void handle_ReceivedList() { packet_data["packet"] = element->packet->c_str(); packet_data["rssi"] = element->RSSI; packet_data["snr"] = element->SNR / 10.0f; - received.add(packet_data); } server.send(200,"application/json", doc.as());