@@ -318,10 +318,38 @@ void WebServer::on(const Uri &uri, HTTPMethod method, WebServer::THandlerFunctio
318318 _addRequestHandler (new  FunctionRequestHandler (fn, ufn, uri, method));
319319}
320320
321+ bool  WebServer::removeRoute (const  char  *uri) {
322+  return  removeRoute (String (uri), HTTP_ANY);
323+ }
324+ 
325+ bool  WebServer::removeRoute (const  char  *uri, HTTPMethod method) {
326+  return  removeRoute (String (uri), method);
327+ }
328+ 
329+ bool  WebServer::removeRoute (const  String &uri) {
330+  return  removeRoute (uri, HTTP_ANY);
331+ }
332+ 
333+ bool  WebServer::removeRoute (const  String &uri, HTTPMethod method) {
334+  //  Loop through all request handlers and see if there is a match
335+  RequestHandler *handler = _firstHandler;
336+  while  (handler) {
337+  if  (handler->canHandle (method, uri)) {
338+  return  _removeRequestHandler (handler);
339+  }
340+  handler = handler->next ();
341+  }
342+  return  false ;
343+ }
344+ 
321345void  WebServer::addHandler (RequestHandler *handler) {
322346 _addRequestHandler (handler);
323347}
324348
349+ bool  WebServer::removeHandler (RequestHandler *handler) {
350+  return  _removeRequestHandler (handler);
351+ }
352+ 
325353void  WebServer::_addRequestHandler (RequestHandler *handler) {
326354 if  (!_lastHandler) {
327355 _firstHandler = handler;
@@ -332,6 +360,32 @@ void WebServer::_addRequestHandler(RequestHandler *handler) {
332360 }
333361}
334362
363+ bool  WebServer::_removeRequestHandler (RequestHandler *handler) {
364+  RequestHandler *current = _firstHandler;
365+  RequestHandler *previous = nullptr ;
366+ 
367+  while  (current != nullptr ) {
368+  if  (current == handler) {
369+  if  (previous == nullptr ) {
370+  _firstHandler = current->next ();
371+  } else  {
372+  previous->next (current->next ());
373+  }
374+ 
375+  if  (current == _lastHandler) {
376+  _lastHandler = previous;
377+  }
378+ 
379+  //  Delete 'matching' handler
380+  delete  current;
381+  return  true ;
382+  }
383+  previous = current;
384+  current = current->next ();
385+  }
386+  return  false ;
387+ }
388+ 
335389void  WebServer::serveStatic (const  char  *uri, FS &fs, const  char  *path, const  char  *cache_header) {
336390 _addRequestHandler (new  StaticRequestHandler (fs, path, uri, cache_header));
337391}
0 commit comments