#ifndef FIREWALL_H #define FIREWALL_H #include "Arduino.h" #include "AsyncJson.h" #include "ArduinoJson.h" #ifdef ESP32 #include "WiFi.h" #include "AsyncTCP.h" #elif defined(ESP8266) #include "ESP8266WiFi.h" #include "ESPAsyncTCP.h" #endif #include "ESPAsyncWebServer.h" #define PROTOCOL_LENGTH 4 #define TARGET_LENGTH 7 typedef struct firewall_rule { int key; char source[IP4ADDR_STRLEN_MAX]; char destination[IP4ADDR_STRLEN_MAX]; char protocol[PROTOCOL_LENGTH]; char target[TARGET_LENGTH]; struct firewall_rule *next; } firewall_rule_t; class ESPFirewall { AsyncWebServer *firewall_api; unsigned int amount_of_rules = 0; struct firewall_rule *head = NULL; void add_rule_to_firewall(firewall_rule_t *rule); void get_firewall_rules_handler(AsyncWebServerRequest *request); void get_firewall_rule_handler(AsyncWebServerRequest *request); void post_firewall_handler(AsyncWebServerRequest *request); void not_found(AsyncWebServerRequest *request); bool request_has_firewall_parameter(AsyncWebServerRequest *request); void setup_routing(); public: ESPFirewall(int port = 8080); }; #endif