mirror of
https://github.com/me-no-dev/ESPAsyncWebServer.git
synced 2025-08-02 20:24:40 +02:00
AsyncWebServerRequest::_params replace with STL container
- LinkedList<AsyncWebRewrite*> _rewrites; + std::list<std::shared_ptr<AsyncWebRewrite> > _rewrites;
This commit is contained in:
committed by
Mathieu Carbou
parent
aefc4a0f4e
commit
d5c2af8dc2
@@ -292,9 +292,11 @@ class AsyncWebServerRequest {
|
|||||||
bool hasParam(const String& name, bool post=false, bool file=false) const;
|
bool hasParam(const String& name, bool post=false, bool file=false) const;
|
||||||
bool hasParam(const __FlashStringHelper * data, bool post=false, bool file=false) const;
|
bool hasParam(const __FlashStringHelper * data, bool post=false, bool file=false) const;
|
||||||
|
|
||||||
AsyncWebParameter* getParam(const String& name, bool post=false, bool file=false) const;
|
const AsyncWebParameter* getParam(const String& name, bool post=false, bool file=false) const;
|
||||||
AsyncWebParameter* getParam(const __FlashStringHelper * data, bool post, bool file) const;
|
#ifdef ESP8266
|
||||||
AsyncWebParameter* getParam(size_t num) const;
|
const AsyncWebParameter* getParam(const __FlashStringHelper * data, bool post, bool file) const;
|
||||||
|
#endif
|
||||||
|
const AsyncWebParameter* getParam(size_t num) const;
|
||||||
|
|
||||||
size_t args() const { return params(); } // get arguments count
|
size_t args() const { return params(); } // get arguments count
|
||||||
const String& arg(const String& name) const; // get request argument value by name
|
const String& arg(const String& name) const; // get request argument value by name
|
||||||
@@ -317,7 +319,7 @@ class AsyncWebServerRequest {
|
|||||||
* FILTER :: Callback to filter AsyncWebRewrite and AsyncWebHandler (done by the Server)
|
* FILTER :: Callback to filter AsyncWebRewrite and AsyncWebHandler (done by the Server)
|
||||||
* */
|
* */
|
||||||
|
|
||||||
typedef std::function<bool(AsyncWebServerRequest *request)> ArRequestFilterFunction;
|
using ArRequestFilterFunction = std::function<bool(AsyncWebServerRequest *request)>;
|
||||||
|
|
||||||
bool ON_STA_FILTER(AsyncWebServerRequest *request);
|
bool ON_STA_FILTER(AsyncWebServerRequest *request);
|
||||||
|
|
||||||
@@ -332,9 +334,9 @@ class AsyncWebRewrite {
|
|||||||
String _from;
|
String _from;
|
||||||
String _toUrl;
|
String _toUrl;
|
||||||
String _params;
|
String _params;
|
||||||
ArRequestFilterFunction _filter;
|
ArRequestFilterFunction _filter{nullptr};
|
||||||
public:
|
public:
|
||||||
AsyncWebRewrite(const char* from, const char* to): _from(from), _toUrl(to), _params(String()), _filter(NULL){
|
AsyncWebRewrite(const char* from, const char* to) : _from(from), _toUrl(to){
|
||||||
int index = _toUrl.indexOf('?');
|
int index = _toUrl.indexOf('?');
|
||||||
if (index > 0) {
|
if (index > 0) {
|
||||||
_params = _toUrl.substring(index +1);
|
_params = _toUrl.substring(index +1);
|
||||||
@@ -427,7 +429,7 @@ typedef std::function<void(AsyncWebServerRequest *request, uint8_t *data, size_t
|
|||||||
class AsyncWebServer {
|
class AsyncWebServer {
|
||||||
protected:
|
protected:
|
||||||
AsyncServer _server;
|
AsyncServer _server;
|
||||||
LinkedList<AsyncWebRewrite*> _rewrites;
|
std::list<std::shared_ptr<AsyncWebRewrite> > _rewrites;
|
||||||
LinkedList<AsyncWebHandler*> _handlers;
|
LinkedList<AsyncWebHandler*> _handlers;
|
||||||
AsyncCallbackWebHandler* _catchAllHandler;
|
AsyncCallbackWebHandler* _catchAllHandler;
|
||||||
|
|
||||||
@@ -444,9 +446,46 @@ class AsyncWebServer {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
AsyncWebRewrite& addRewrite(AsyncWebRewrite* rewrite);
|
AsyncWebRewrite& addRewrite(AsyncWebRewrite* rewrite);
|
||||||
bool removeRewrite(AsyncWebRewrite* rewrite);
|
|
||||||
|
/**
|
||||||
|
* @brief (compat) Add url rewrite rule by pointer
|
||||||
|
* a deep copy of the pounter object will be created,
|
||||||
|
* it is up to user to manage further lifetime of the object in argument
|
||||||
|
*
|
||||||
|
* @param rewrite pointer to rewrite object to copy setting from
|
||||||
|
* @return AsyncWebRewrite& reference to a newly created rewrite rule
|
||||||
|
*/
|
||||||
|
AsyncWebRewrite& addRewrite(std::shared_ptr<AsyncWebRewrite> rewrite);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief add url rewrite rule
|
||||||
|
*
|
||||||
|
* @param from
|
||||||
|
* @param to
|
||||||
|
* @return AsyncWebRewrite&
|
||||||
|
*/
|
||||||
AsyncWebRewrite& rewrite(const char* from, const char* to);
|
AsyncWebRewrite& rewrite(const char* from, const char* to);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief (compat) remove rewrite rule via referenced object
|
||||||
|
* this will NOT deallocate pointed object itself, internal rule with same from/to urls will be removed if any
|
||||||
|
* it's a compat method, better use `removeRewrite(const char* from, const char* to)`
|
||||||
|
* @param rewrite
|
||||||
|
* @return true
|
||||||
|
* @return false
|
||||||
|
*/
|
||||||
|
bool removeRewrite(AsyncWebRewrite* rewrite);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief remove rewrite rule
|
||||||
|
*
|
||||||
|
* @param from
|
||||||
|
* @param to
|
||||||
|
* @return true
|
||||||
|
* @return false
|
||||||
|
*/
|
||||||
|
bool removeRewrite(const char* from, const char* to);
|
||||||
|
|
||||||
AsyncWebHandler& addHandler(AsyncWebHandler* handler);
|
AsyncWebHandler& addHandler(AsyncWebHandler* handler);
|
||||||
bool removeHandler(AsyncWebHandler* handler);
|
bool removeHandler(AsyncWebHandler* handler);
|
||||||
|
|
||||||
|
@@ -705,8 +705,8 @@ const AsyncWebParameter* AsyncWebServerRequest::getParam(const String& name, boo
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
AsyncWebParameter* AsyncWebServerRequest::getParam(const __FlashStringHelper * data, bool post, bool file) const {
|
const AsyncWebParameter* AsyncWebServerRequest::getParam(const __FlashStringHelper * data, bool post, bool file) const {
|
||||||
return getParam(String(data).c_str(), post, file);
|
return getParam(String(data), post, file);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -37,7 +37,6 @@ const char *fs::FileOpenMode::append = "a";
|
|||||||
|
|
||||||
AsyncWebServer::AsyncWebServer(uint16_t port)
|
AsyncWebServer::AsyncWebServer(uint16_t port)
|
||||||
: _server(port)
|
: _server(port)
|
||||||
, _rewrites(LinkedList<AsyncWebRewrite*>([](AsyncWebRewrite* r){ delete r; }))
|
|
||||||
, _handlers(LinkedList<AsyncWebHandler*>([](AsyncWebHandler* h){ delete h; }))
|
, _handlers(LinkedList<AsyncWebHandler*>([](AsyncWebHandler* h){ delete h; }))
|
||||||
{
|
{
|
||||||
_catchAllHandler = new AsyncCallbackWebHandler();
|
_catchAllHandler = new AsyncCallbackWebHandler();
|
||||||
@@ -62,17 +61,34 @@ AsyncWebServer::~AsyncWebServer(){
|
|||||||
if(_catchAllHandler) delete _catchAllHandler;
|
if(_catchAllHandler) delete _catchAllHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AsyncWebRewrite& AsyncWebServer::addRewrite(std::shared_ptr<AsyncWebRewrite> rewrite){
|
||||||
|
_rewrites.emplace_back(rewrite);
|
||||||
|
return *_rewrites.back().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
AsyncWebRewrite& AsyncWebServer::addRewrite(AsyncWebRewrite* rewrite){
|
AsyncWebRewrite& AsyncWebServer::addRewrite(AsyncWebRewrite* rewrite){
|
||||||
_rewrites.add(rewrite);
|
_rewrites.emplace_back(rewrite);
|
||||||
return *rewrite;
|
return *_rewrites.back().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AsyncWebServer::removeRewrite(AsyncWebRewrite *rewrite){
|
bool AsyncWebServer::removeRewrite(AsyncWebRewrite *rewrite){
|
||||||
return _rewrites.remove(rewrite);
|
return removeRewrite(rewrite->from().c_str(), rewrite->toUrl().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AsyncWebServer::removeRewrite(const char* from, const char* to){
|
||||||
|
for(auto r = _rewrites.begin(); r != _rewrites.end(); ++r ){
|
||||||
|
if (r->get()->from() == from && r->get()->toUrl() == to){
|
||||||
|
_rewrites.erase(r);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncWebRewrite& AsyncWebServer::rewrite(const char* from, const char* to){
|
AsyncWebRewrite& AsyncWebServer::rewrite(const char* from, const char* to){
|
||||||
return addRewrite(new AsyncWebRewrite(from, to));
|
_rewrites.emplace_back(std::make_shared<AsyncWebRewrite>(from, to));
|
||||||
|
return *_rewrites.back().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncWebHandler& AsyncWebServer::addHandler(AsyncWebHandler* handler){
|
AsyncWebHandler& AsyncWebServer::addHandler(AsyncWebHandler* handler){
|
||||||
@@ -186,7 +202,7 @@ void AsyncWebServer::onRequestBody(ArBodyHandlerFunction fn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AsyncWebServer::reset(){
|
void AsyncWebServer::reset(){
|
||||||
_rewrites.free();
|
_rewrites.clear();
|
||||||
_handlers.free();
|
_handlers.free();
|
||||||
|
|
||||||
if (_catchAllHandler != NULL){
|
if (_catchAllHandler != NULL){
|
||||||
|
Reference in New Issue
Block a user