mirror of
https://github.com/thooge/esp32-nmea2000-obp60.git
synced 2026-08-18 18:32:30 +02:00
Fix for PageNavigation
This commit is contained in:
@@ -10,10 +10,20 @@ extern "C" {
|
|||||||
// Constructor
|
// Constructor
|
||||||
NetworkClient::NetworkClient(size_t reserveSize)
|
NetworkClient::NetworkClient(size_t reserveSize)
|
||||||
: _doc(reserveSize),
|
: _doc(reserveSize),
|
||||||
_valid(false)
|
_valid(false),
|
||||||
|
_jsonRaw(nullptr),
|
||||||
|
_jsonRawLen(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NetworkClient::~NetworkClient() {
|
||||||
|
if (_jsonRaw != nullptr) {
|
||||||
|
free(_jsonRaw);
|
||||||
|
_jsonRaw = nullptr;
|
||||||
|
_jsonRawLen = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Skip GZIP Header an goto DEFLATE content
|
// Skip GZIP Header an goto DEFLATE content
|
||||||
int NetworkClient::skipGzipHeader(const uint8_t* data, size_t len) {
|
int NetworkClient::skipGzipHeader(const uint8_t* data, size_t len) {
|
||||||
if (len < 10) return -1;
|
if (len < 10) return -1;
|
||||||
@@ -324,6 +334,13 @@ bool NetworkClient::httpGetGzip(const String& url, uint8_t*& outData, size_t& ou
|
|||||||
bool NetworkClient::fetchAndDecompressJson(const String& url) {
|
bool NetworkClient::fetchAndDecompressJson(const String& url) {
|
||||||
|
|
||||||
_valid = false;
|
_valid = false;
|
||||||
|
_doc.clear();
|
||||||
|
|
||||||
|
if (_jsonRaw != nullptr) {
|
||||||
|
free(_jsonRaw);
|
||||||
|
_jsonRaw = nullptr;
|
||||||
|
_jsonRawLen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t* raw = nullptr;
|
uint8_t* raw = nullptr;
|
||||||
size_t rawLen = 0;
|
size_t rawLen = 0;
|
||||||
@@ -333,14 +350,18 @@ bool NetworkClient::fetchAndDecompressJson(const String& url) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeserializationError err = deserializeJson(_doc, raw, rawLen);
|
// Parse in zero-copy mode and keep the backing buffer alive in the class.
|
||||||
free(raw);
|
DeserializationError err = deserializeJson(_doc, reinterpret_cast<char*>(raw), rawLen);
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
Serial.printf("JSON ERROR: %s\n", err.c_str());
|
Serial.printf("JSON ERROR: %s\n", err.c_str());
|
||||||
|
free(raw);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_jsonRaw = raw;
|
||||||
|
_jsonRawLen = rawLen;
|
||||||
|
|
||||||
if (DEBUGING) {Serial.println("JSON OK!");}
|
if (DEBUGING) {Serial.println("JSON OK!");}
|
||||||
_valid = true;
|
_valid = true;
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
class NetworkClient {
|
class NetworkClient {
|
||||||
public:
|
public:
|
||||||
NetworkClient(size_t reserveSize = 0);
|
NetworkClient(size_t reserveSize = 0);
|
||||||
|
~NetworkClient();
|
||||||
|
|
||||||
bool fetchAndDecompressJson(const String& url);
|
bool fetchAndDecompressJson(const String& url);
|
||||||
JsonDocument& json();
|
JsonDocument& json();
|
||||||
@@ -20,6 +21,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
DynamicJsonDocument _doc;
|
DynamicJsonDocument _doc;
|
||||||
bool _valid;
|
bool _valid;
|
||||||
|
uint8_t* _jsonRaw;
|
||||||
|
size_t _jsonRawLen;
|
||||||
|
|
||||||
int skipGzipHeader(const uint8_t* data, size_t len);
|
int skipGzipHeader(const uint8_t* data, size_t len);
|
||||||
bool httpGetGzip(const String& url, uint8_t*& outData, size_t& outLen);
|
bool httpGetGzip(const String& url, uint8_t*& outData, size_t& outLen);
|
||||||
|
|||||||
Reference in New Issue
Block a user