mirror of
https://github.com/me-no-dev/ESPAsyncWebServer.git
synced 2025-08-02 12:14:39 +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 __FlashStringHelper * data, bool post=false, bool file=false) const;
|
||||
|
||||
AsyncWebParameter* getParam(const String& name, bool post=false, bool file=false) const;
|
||||
AsyncWebParameter* getParam(const __FlashStringHelper * data, bool post, bool file) const;
|
||||
AsyncWebParameter* getParam(size_t num) const;
|
||||
const AsyncWebParameter* getParam(const String& name, bool post=false, bool file=false) const;
|
||||
#ifdef ESP8266
|
||||
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
|
||||
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)
|
||||
* */
|
||||
|
||||
typedef std::function<bool(AsyncWebServerRequest *request)> ArRequestFilterFunction;
|
||||
using ArRequestFilterFunction = std::function<bool(AsyncWebServerRequest *request)>;
|
||||
|
||||
bool ON_STA_FILTER(AsyncWebServerRequest *request);
|
||||
|
||||
@@ -332,9 +334,9 @@ class AsyncWebRewrite {
|
||||
String _from;
|
||||
String _toUrl;
|
||||
String _params;
|
||||
ArRequestFilterFunction _filter;
|
||||
ArRequestFilterFunction _filter{nullptr};
|
||||
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('?');
|
||||
if (index > 0) {
|
||||
_params = _toUrl.substring(index +1);
|
||||
@@ -427,7 +429,7 @@ typedef std::function<void(AsyncWebServerRequest *request, uint8_t *data, size_t
|
||||
class AsyncWebServer {
|
||||
protected:
|
||||
AsyncServer _server;
|
||||
LinkedList<AsyncWebRewrite*> _rewrites;
|
||||
std::list<std::shared_ptr<AsyncWebRewrite> > _rewrites;
|
||||
LinkedList<AsyncWebHandler*> _handlers;
|
||||
AsyncCallbackWebHandler* _catchAllHandler;
|
||||
|
||||
@@ -444,9 +446,46 @@ class AsyncWebServer {
|
||||
#endif
|
||||
|
||||
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);
|
||||
|
||||
/**
|
||||
* @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);
|
||||
bool removeHandler(AsyncWebHandler* handler);
|
||||
|
||||
|
@@ -705,8 +705,8 @@ const AsyncWebParameter* AsyncWebServerRequest::getParam(const String& name, boo
|
||||
}
|
||||
|
||||
#ifdef ESP8266
|
||||
AsyncWebParameter* AsyncWebServerRequest::getParam(const __FlashStringHelper * data, bool post, bool file) const {
|
||||
return getParam(String(data).c_str(), post, file);
|
||||
const AsyncWebParameter* AsyncWebServerRequest::getParam(const __FlashStringHelper * data, bool post, bool file) const {
|
||||
return getParam(String(data), post, file);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@@ -37,7 +37,6 @@ const char *fs::FileOpenMode::append = "a";
|
||||
|
||||
AsyncWebServer::AsyncWebServer(uint16_t port)
|
||||
: _server(port)
|
||||
, _rewrites(LinkedList<AsyncWebRewrite*>([](AsyncWebRewrite* r){ delete r; }))
|
||||
, _handlers(LinkedList<AsyncWebHandler*>([](AsyncWebHandler* h){ delete h; }))
|
||||
{
|
||||
_catchAllHandler = new AsyncCallbackWebHandler();
|
||||
@@ -62,17 +61,34 @@ AsyncWebServer::~AsyncWebServer(){
|
||||
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){
|
||||
_rewrites.add(rewrite);
|
||||
return *rewrite;
|
||||
_rewrites.emplace_back(rewrite);
|
||||
return *_rewrites.back().get();
|
||||
}
|
||||
|
||||
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){
|
||||
return addRewrite(new AsyncWebRewrite(from, to));
|
||||
_rewrites.emplace_back(std::make_shared<AsyncWebRewrite>(from, to));
|
||||
return *_rewrites.back().get();
|
||||
}
|
||||
|
||||
AsyncWebHandler& AsyncWebServer::addHandler(AsyncWebHandler* handler){
|
||||
@@ -186,7 +202,7 @@ void AsyncWebServer::onRequestBody(ArBodyHandlerFunction fn){
|
||||
}
|
||||
|
||||
void AsyncWebServer::reset(){
|
||||
_rewrites.free();
|
||||
_rewrites.clear();
|
||||
_handlers.free();
|
||||
|
||||
if (_catchAllHandler != NULL){
|
||||
|
Reference in New Issue
Block a user