mirror of
https://github.com/me-no-dev/ESPAsyncWebServer.git
synced 2025-09-28 07:11:01 +02:00
Merge pull request #109 from mathieucarbou/fix-108
Fix compilation issue with ArduinoJson 5 and 6 (closes #108)
This commit is contained in:
@@ -30,7 +30,7 @@ This fork is based on [yubox-node-org/ESPAsyncWebServer](https://github.com/yubo
|
|||||||
**WARNING** The library name was changed from `ESP Async WebServer` to `ESPAsyncWebServer` as per the Arduino Lint recommendations.
|
**WARNING** The library name was changed from `ESP Async WebServer` to `ESPAsyncWebServer` as per the Arduino Lint recommendations.
|
||||||
|
|
||||||
```
|
```
|
||||||
mathieucarbou/ESPAsyncWebServer @ 3.3.2
|
mathieucarbou/ESPAsyncWebServer @ 3.3.3
|
||||||
```
|
```
|
||||||
|
|
||||||
Dependency:
|
Dependency:
|
||||||
|
@@ -30,7 +30,7 @@ This fork is based on [yubox-node-org/ESPAsyncWebServer](https://github.com/yubo
|
|||||||
**WARNING** The library name was changed from `ESP Async WebServer` to `ESPAsyncWebServer` as per the Arduino Lint recommendations.
|
**WARNING** The library name was changed from `ESP Async WebServer` to `ESPAsyncWebServer` as per the Arduino Lint recommendations.
|
||||||
|
|
||||||
```
|
```
|
||||||
mathieucarbou/ESPAsyncWebServer @ 3.3.2
|
mathieucarbou/ESPAsyncWebServer @ 3.3.3
|
||||||
```
|
```
|
||||||
|
|
||||||
Dependency:
|
Dependency:
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ESPAsyncWebServer",
|
"name": "ESPAsyncWebServer",
|
||||||
"version": "3.3.2",
|
"version": "3.3.3",
|
||||||
"description": "Asynchronous HTTP and WebSocket Server Library for ESP32, ESP8266 and RP2040. Supports: WebSocket, SSE, Authentication, Arduino Json 7, File Upload, Static File serving, URL Rewrite, URL Redirect, etc.",
|
"description": "Asynchronous HTTP and WebSocket Server Library for ESP32, ESP8266 and RP2040. Supports: WebSocket, SSE, Authentication, Arduino Json 7, File Upload, Static File serving, URL Rewrite, URL Redirect, etc.",
|
||||||
"keywords": "http,async,websocket,webserver",
|
"keywords": "http,async,websocket,webserver",
|
||||||
"homepage": "https://github.com/mathieucarbou/ESPAsyncWebServer",
|
"homepage": "https://github.com/mathieucarbou/ESPAsyncWebServer",
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
name=ESPAsyncWebServer
|
name=ESPAsyncWebServer
|
||||||
version=3.3.2
|
version=3.3.3
|
||||||
author=Me-No-Dev
|
author=Me-No-Dev
|
||||||
maintainer=Mathieu Carbou <mathieu.carbou@gmail.com>
|
maintainer=Mathieu Carbou <mathieu.carbou@gmail.com>
|
||||||
sentence=Asynchronous HTTP and WebSocket Server Library for ESP32, ESP8266 and RP2040
|
sentence=Asynchronous HTTP and WebSocket Server Library for ESP32, ESP8266 and RP2040
|
||||||
|
@@ -24,6 +24,8 @@ upload_protocol = esptool
|
|||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
monitor_filters = esp32_exception_decoder, log2file
|
monitor_filters = esp32_exception_decoder, log2file
|
||||||
lib_deps =
|
lib_deps =
|
||||||
|
; bblanchon/ArduinoJson @ 5.13.4
|
||||||
|
; bblanchon/ArduinoJson @ 6.21.5
|
||||||
bblanchon/ArduinoJson @ 7.2.0
|
bblanchon/ArduinoJson @ 7.2.0
|
||||||
mathieucarbou/AsyncTCP @ 3.2.5
|
mathieucarbou/AsyncTCP @ 3.2.5
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
@@ -63,7 +65,7 @@ lib_deps =
|
|||||||
[env:raspberrypi]
|
[env:raspberrypi]
|
||||||
upload_protocol = picotool
|
upload_protocol = picotool
|
||||||
; platform = raspberrypi
|
; platform = raspberrypi
|
||||||
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
|
platform = https://github.com/maxgerhardt/platform-raspberrypi.git#f2687073f73d554c9db41f29b4769fd9703f4e55
|
||||||
board = rpipicow
|
board = rpipicow
|
||||||
lib_deps =
|
lib_deps =
|
||||||
bblanchon/ArduinoJson @ 7.2.0
|
bblanchon/ArduinoJson @ 7.2.0
|
||||||
@@ -100,7 +102,7 @@ lib_deps =
|
|||||||
|
|
||||||
[env:ci-raspberrypi]
|
[env:ci-raspberrypi]
|
||||||
; platform = raspberrypi
|
; platform = raspberrypi
|
||||||
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
|
platform = https://github.com/maxgerhardt/platform-raspberrypi.git#f2687073f73d554c9db41f29b4769fd9703f4e55
|
||||||
board = ${sysenv.PIO_BOARD}
|
board = ${sysenv.PIO_BOARD}
|
||||||
lib_deps =
|
lib_deps =
|
||||||
bblanchon/ArduinoJson @ 7.2.0
|
bblanchon/ArduinoJson @ 7.2.0
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#if ARDUINOJSON_VERSION_MAJOR == 5
|
#if ARDUINOJSON_VERSION_MAJOR == 5
|
||||||
AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
|
AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
|
||||||
_code = 200;
|
_code = 200;
|
||||||
_contentType = JSON_MIMETYPE;
|
_contentType = asyncsrv::T_application_json;
|
||||||
if (isArray)
|
if (isArray)
|
||||||
_root = _jsonBuffer.createArray();
|
_root = _jsonBuffer.createArray();
|
||||||
else
|
else
|
||||||
@@ -14,7 +14,7 @@ AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
|
|||||||
#elif ARDUINOJSON_VERSION_MAJOR == 6
|
#elif ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
AsyncJsonResponse::AsyncJsonResponse(bool isArray, size_t maxJsonBufferSize) : _jsonBuffer(maxJsonBufferSize), _isValid{false} {
|
AsyncJsonResponse::AsyncJsonResponse(bool isArray, size_t maxJsonBufferSize) : _jsonBuffer(maxJsonBufferSize), _isValid{false} {
|
||||||
_code = 200;
|
_code = 200;
|
||||||
_contentType = JSON_MIMETYPE;
|
_contentType = asyncsrv::T_application_json;
|
||||||
if (isArray)
|
if (isArray)
|
||||||
_root = _jsonBuffer.createNestedArray();
|
_root = _jsonBuffer.createNestedArray();
|
||||||
else
|
else
|
||||||
@@ -23,7 +23,7 @@ AsyncJsonResponse::AsyncJsonResponse(bool isArray, size_t maxJsonBufferSize) : _
|
|||||||
#else
|
#else
|
||||||
AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
|
AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
|
||||||
_code = 200;
|
_code = 200;
|
||||||
_contentType = JSON_MIMETYPE;
|
_contentType = asyncsrv::T_application_json;
|
||||||
if (isArray)
|
if (isArray)
|
||||||
_root = _jsonBuffer.add<JsonArray>();
|
_root = _jsonBuffer.add<JsonArray>();
|
||||||
else
|
else
|
||||||
@@ -100,7 +100,7 @@ bool AsyncCallbackJsonWebHandler::canHandle(AsyncWebServerRequest* request) {
|
|||||||
if (_uri.length() && (_uri != request->url() && !request->url().startsWith(_uri + "/")))
|
if (_uri.length() && (_uri != request->url() && !request->url().startsWith(_uri + "/")))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (request_method != HTTP_GET && !request->contentType().equalsIgnoreCase(JSON_MIMETYPE))
|
if (request_method != HTTP_GET && !request->contentType().equalsIgnoreCase(asyncsrv::T_application_json))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@@ -36,10 +36,15 @@
|
|||||||
#define ASYNC_JSON_H_
|
#define ASYNC_JSON_H_
|
||||||
|
|
||||||
#if __has_include("ArduinoJson.h")
|
#if __has_include("ArduinoJson.h")
|
||||||
|
|
||||||
#define ASYNC_JSON_SUPPORT 1
|
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR >= 5
|
||||||
|
#define ASYNC_JSON_SUPPORT 1
|
||||||
|
#else
|
||||||
|
#define ASYNC_JSON_SUPPORT 0
|
||||||
|
#endif // ARDUINOJSON_VERSION_MAJOR >= 5
|
||||||
|
#endif // __has_include("ArduinoJson.h")
|
||||||
|
|
||||||
|
#if ASYNC_JSON_SUPPORT == 1
|
||||||
#include <ESPAsyncWebServer.h>
|
#include <ESPAsyncWebServer.h>
|
||||||
|
|
||||||
#include "ChunkPrint.h"
|
#include "ChunkPrint.h"
|
||||||
@@ -50,12 +55,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
constexpr const char* JSON_MIMETYPE = "application/json";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Json Response
|
|
||||||
* */
|
|
||||||
|
|
||||||
class AsyncJsonResponse : public AsyncAbstractResponse {
|
class AsyncJsonResponse : public AsyncAbstractResponse {
|
||||||
protected:
|
protected:
|
||||||
#if ARDUINOJSON_VERSION_MAJOR == 5
|
#if ARDUINOJSON_VERSION_MAJOR == 5
|
||||||
@@ -127,8 +126,6 @@ class AsyncCallbackJsonWebHandler : public AsyncWebHandler {
|
|||||||
virtual bool isRequestHandlerTrivial() override final { return !_onRequest; }
|
virtual bool isRequestHandlerTrivial() override final { return !_onRequest; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#else // __has_include("ArduinoJson.h")
|
#endif // ASYNC_JSON_SUPPORT == 1
|
||||||
#define ASYNC_JSON_SUPPORT 0
|
|
||||||
#endif // __has_include("ArduinoJson.h")
|
|
||||||
|
|
||||||
#endif
|
#endif // ASYNC_JSON_H_
|
||||||
|
@@ -2,6 +2,16 @@
|
|||||||
|
|
||||||
#if ASYNC_MSG_PACK_SUPPORT == 1
|
#if ASYNC_MSG_PACK_SUPPORT == 1
|
||||||
|
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
|
AsyncMessagePackResponse::AsyncMessagePackResponse(bool isArray, size_t maxJsonBufferSize) : _jsonBuffer(maxJsonBufferSize), _isValid{false} {
|
||||||
|
_code = 200;
|
||||||
|
_contentType = asyncsrv::T_application_msgpack;
|
||||||
|
if (isArray)
|
||||||
|
_root = _jsonBuffer.createNestedArray();
|
||||||
|
else
|
||||||
|
_root = _jsonBuffer.createNestedObject();
|
||||||
|
}
|
||||||
|
#else
|
||||||
AsyncMessagePackResponse::AsyncMessagePackResponse(bool isArray) : _isValid{false} {
|
AsyncMessagePackResponse::AsyncMessagePackResponse(bool isArray) : _isValid{false} {
|
||||||
_code = 200;
|
_code = 200;
|
||||||
_contentType = asyncsrv::T_application_msgpack;
|
_contentType = asyncsrv::T_application_msgpack;
|
||||||
@@ -10,6 +20,7 @@ AsyncMessagePackResponse::AsyncMessagePackResponse(bool isArray) : _isValid{fals
|
|||||||
else
|
else
|
||||||
_root = _jsonBuffer.add<JsonObject>();
|
_root = _jsonBuffer.add<JsonObject>();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
size_t AsyncMessagePackResponse::setLength() {
|
size_t AsyncMessagePackResponse::setLength() {
|
||||||
_contentLength = measureMsgPack(_root);
|
_contentLength = measureMsgPack(_root);
|
||||||
@@ -25,8 +36,13 @@ size_t AsyncMessagePackResponse::_fillBuffer(uint8_t* data, size_t len) {
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncCallbackMessagePackWebHandler::AsyncCallbackMessagePackWebHandler(const String& uri, ArJsonRequestHandlerFunction onRequest)
|
#if ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
|
AsyncCallbackMessagePackWebHandler::AsyncCallbackMessagePackWebHandler(const String& uri, ArMessagePackRequestHandlerFunction onRequest, size_t maxJsonBufferSize)
|
||||||
|
: _uri(uri), _method(HTTP_GET | HTTP_POST | HTTP_PUT | HTTP_PATCH), _onRequest(onRequest), maxJsonBufferSize(maxJsonBufferSize), _maxContentLength(16384) {}
|
||||||
|
#else
|
||||||
|
AsyncCallbackMessagePackWebHandler::AsyncCallbackMessagePackWebHandler(const String& uri, ArMessagePackRequestHandlerFunction onRequest)
|
||||||
: _uri(uri), _method(HTTP_GET | HTTP_POST | HTTP_PUT | HTTP_PATCH), _onRequest(onRequest), _maxContentLength(16384) {}
|
: _uri(uri), _method(HTTP_GET | HTTP_POST | HTTP_PUT | HTTP_PATCH), _onRequest(onRequest), _maxContentLength(16384) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool AsyncCallbackMessagePackWebHandler::canHandle(AsyncWebServerRequest* request) {
|
bool AsyncCallbackMessagePackWebHandler::canHandle(AsyncWebServerRequest* request) {
|
||||||
if (!_onRequest)
|
if (!_onRequest)
|
||||||
@@ -51,13 +67,20 @@ void AsyncCallbackMessagePackWebHandler::handleRequest(AsyncWebServerRequest* re
|
|||||||
JsonVariant json;
|
JsonVariant json;
|
||||||
_onRequest(request, json);
|
_onRequest(request, json);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} else if (request->_tempObject != NULL) {
|
} else if (request->_tempObject != NULL) {
|
||||||
JsonDocument jsonBuffer;
|
|
||||||
DeserializationError error = deserializeMsgPack(jsonBuffer, (uint8_t*)(request->_tempObject));
|
|
||||||
|
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
|
DynamicJsonDocument jsonBuffer(this->maxJsonBufferSize);
|
||||||
|
DeserializationError error = deserializeMsgPack(jsonBuffer, (uint8_t*)(request->_tempObject));
|
||||||
if (!error) {
|
if (!error) {
|
||||||
JsonVariant json = jsonBuffer.as<JsonVariant>();
|
JsonVariant json = jsonBuffer.as<JsonVariant>();
|
||||||
|
#else
|
||||||
|
JsonDocument jsonBuffer;
|
||||||
|
DeserializationError error = deserializeMsgPack(jsonBuffer, (uint8_t*)(request->_tempObject));
|
||||||
|
if (!error) {
|
||||||
|
JsonVariant json = jsonBuffer.as<JsonVariant>();
|
||||||
|
#endif
|
||||||
|
|
||||||
_onRequest(request, json);
|
_onRequest(request, json);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -22,54 +22,81 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#if __has_include("ArduinoJson.h")
|
#if __has_include("ArduinoJson.h")
|
||||||
|
|
||||||
#define ASYNC_MSG_PACK_SUPPORT 1
|
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR >= 6
|
||||||
|
#define ASYNC_MSG_PACK_SUPPORT 1
|
||||||
|
#else
|
||||||
|
#define ASYNC_MSG_PACK_SUPPORT 0
|
||||||
|
#endif // ARDUINOJSON_VERSION_MAJOR >= 6
|
||||||
|
#endif // __has_include("ArduinoJson.h")
|
||||||
|
|
||||||
|
#if ASYNC_MSG_PACK_SUPPORT == 1
|
||||||
#include <ESPAsyncWebServer.h>
|
#include <ESPAsyncWebServer.h>
|
||||||
|
|
||||||
#include "ChunkPrint.h"
|
#include "ChunkPrint.h"
|
||||||
|
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
|
#ifndef DYNAMIC_JSON_DOCUMENT_SIZE
|
||||||
|
#define DYNAMIC_JSON_DOCUMENT_SIZE 1024
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
class AsyncMessagePackResponse : public AsyncAbstractResponse {
|
class AsyncMessagePackResponse : public AsyncAbstractResponse {
|
||||||
protected:
|
protected:
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
|
DynamicJsonDocument _jsonBuffer;
|
||||||
|
#else
|
||||||
JsonDocument _jsonBuffer;
|
JsonDocument _jsonBuffer;
|
||||||
|
#endif
|
||||||
|
|
||||||
JsonVariant _root;
|
JsonVariant _root;
|
||||||
bool _isValid;
|
bool _isValid;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
|
AsyncMessagePackResponse(bool isArray = false, size_t maxJsonBufferSize = DYNAMIC_JSON_DOCUMENT_SIZE);
|
||||||
|
#else
|
||||||
AsyncMessagePackResponse(bool isArray = false);
|
AsyncMessagePackResponse(bool isArray = false);
|
||||||
|
#endif
|
||||||
JsonVariant& getRoot() { return _root; }
|
JsonVariant& getRoot() { return _root; }
|
||||||
bool _sourceValid() const { return _isValid; }
|
bool _sourceValid() const { return _isValid; }
|
||||||
size_t setLength();
|
size_t setLength();
|
||||||
size_t getSize() const { return _jsonBuffer.size(); }
|
size_t getSize() const { return _jsonBuffer.size(); }
|
||||||
size_t _fillBuffer(uint8_t* data, size_t len);
|
size_t _fillBuffer(uint8_t* data, size_t len);
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR >= 6
|
||||||
|
bool overflowed() const { return _jsonBuffer.overflowed(); }
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
class AsyncCallbackMessagePackWebHandler : public AsyncWebHandler {
|
typedef std::function<void(AsyncWebServerRequest* request, JsonVariant& json)> ArMessagePackRequestHandlerFunction;
|
||||||
public:
|
|
||||||
typedef std::function<void(AsyncWebServerRequest* request, JsonVariant& json)> ArJsonRequestHandlerFunction;
|
|
||||||
|
|
||||||
|
class AsyncCallbackMessagePackWebHandler : public AsyncWebHandler {
|
||||||
protected:
|
protected:
|
||||||
const String _uri;
|
const String _uri;
|
||||||
WebRequestMethodComposite _method;
|
WebRequestMethodComposite _method;
|
||||||
ArJsonRequestHandlerFunction _onRequest;
|
ArMessagePackRequestHandlerFunction _onRequest;
|
||||||
size_t _contentLength;
|
size_t _contentLength;
|
||||||
|
#if ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
|
const size_t maxJsonBufferSize;
|
||||||
|
#endif
|
||||||
size_t _maxContentLength;
|
size_t _maxContentLength;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AsyncCallbackMessagePackWebHandler(const String& uri, ArJsonRequestHandlerFunction onRequest = nullptr);
|
#if ARDUINOJSON_VERSION_MAJOR == 6
|
||||||
|
AsyncCallbackMessagePackWebHandler(const String& uri, ArMessagePackRequestHandlerFunction onRequest = nullptr, size_t maxJsonBufferSize = DYNAMIC_JSON_DOCUMENT_SIZE);
|
||||||
|
#else
|
||||||
|
AsyncCallbackMessagePackWebHandler(const String& uri, ArMessagePackRequestHandlerFunction onRequest = nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
void setMethod(WebRequestMethodComposite method) { _method = method; }
|
void setMethod(WebRequestMethodComposite method) { _method = method; }
|
||||||
void setMaxContentLength(int maxContentLength) { _maxContentLength = maxContentLength; }
|
void setMaxContentLength(int maxContentLength) { _maxContentLength = maxContentLength; }
|
||||||
void onRequest(ArJsonRequestHandlerFunction fn) { _onRequest = fn; }
|
void onRequest(ArMessagePackRequestHandlerFunction fn) { _onRequest = fn; }
|
||||||
|
|
||||||
virtual bool canHandle(AsyncWebServerRequest* request) override final;
|
virtual bool canHandle(AsyncWebServerRequest* request) override final;
|
||||||
virtual void handleRequest(AsyncWebServerRequest* request) override final;
|
virtual void handleRequest(AsyncWebServerRequest* request) override final;
|
||||||
virtual void handleUpload(__unused AsyncWebServerRequest* request, __unused const String& filename, __unused size_t index, __unused uint8_t* data, __unused size_t len, __unused bool final) override final {}
|
virtual void handleUpload(__unused AsyncWebServerRequest* request, __unused const String& filename, __unused size_t index, __unused uint8_t* data, __unused size_t len, __unused bool final) override final {}
|
||||||
virtual void handleBody(AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) override final;
|
virtual void handleBody(AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) override final;
|
||||||
virtual bool isRequestHandlerTrivial() override final { return _onRequest ? false : true; }
|
virtual bool isRequestHandlerTrivial() override final { return !_onRequest; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#else // __has_include("ArduinoJson.h")
|
#endif // ASYNC_MSG_PACK_SUPPORT == 1
|
||||||
#define ASYNC_MSG_PACK_SUPPORT 0
|
|
||||||
#endif // __has_include("ArduinoJson.h")
|
|
||||||
|
@@ -48,10 +48,10 @@
|
|||||||
|
|
||||||
#include "literals.h"
|
#include "literals.h"
|
||||||
|
|
||||||
#define ASYNCWEBSERVER_VERSION "3.3.2"
|
#define ASYNCWEBSERVER_VERSION "3.3.3"
|
||||||
#define ASYNCWEBSERVER_VERSION_MAJOR 3
|
#define ASYNCWEBSERVER_VERSION_MAJOR 3
|
||||||
#define ASYNCWEBSERVER_VERSION_MINOR 3
|
#define ASYNCWEBSERVER_VERSION_MINOR 3
|
||||||
#define ASYNCWEBSERVER_VERSION_REVISION 2
|
#define ASYNCWEBSERVER_VERSION_REVISION 3
|
||||||
#define ASYNCWEBSERVER_FORK_mathieucarbou
|
#define ASYNCWEBSERVER_FORK_mathieucarbou
|
||||||
|
|
||||||
#ifdef ASYNCWEBSERVER_REGEX
|
#ifdef ASYNCWEBSERVER_REGEX
|
||||||
|
Reference in New Issue
Block a user