create firewall rule set on startup

This commit is contained in:
Florian Hoss 2022-04-18 17:55:34 +02:00
parent 06b122de64
commit 66dffbc2fc

View file

@ -3,6 +3,7 @@
ESPFirewall::ESPFirewall(int port) ESPFirewall::ESPFirewall(int port)
{ {
this->setup_eeprom(); this->setup_eeprom();
this->eeprom_read_firewall_rules();
log_i("Starting Firewall-API on %i", port); log_i("Starting Firewall-API on %i", port);
this->firewall_api = new AsyncWebServer(port); this->firewall_api = new AsyncWebServer(port);
this->setup_routing(); this->setup_routing();
@ -57,9 +58,6 @@ firewall_target_t ESPFirewall::string_to_target(String &target)
void ESPFirewall::setup_eeprom() void ESPFirewall::setup_eeprom()
{ {
EEPROM.begin(this->eeprom_size); EEPROM.begin(this->eeprom_size);
this->amount_of_rules = 0;
// this->amount_of_rules = EEPROM.readUChar(this->eeprom_settings_head);
log_i("Amount of Rules %i", this->amount_of_rules);
} }
void ESPFirewall::eeprom_write_firewall_rule(firewall_rule_t *rule_ptr) void ESPFirewall::eeprom_write_firewall_rule(firewall_rule_t *rule_ptr)
@ -87,15 +85,18 @@ void ESPFirewall::eeprom_read_firewall_rule(uint8_t &eeprom_address)
eeprom_address += sizeof(firewall_protocol_t); eeprom_address += sizeof(firewall_protocol_t);
rule_ptr->target = static_cast<firewall_target_t>(EEPROM.read(eeprom_address)); rule_ptr->target = static_cast<firewall_target_t>(EEPROM.read(eeprom_address));
eeprom_address += sizeof(firewall_target_t); eeprom_address += sizeof(firewall_target_t);
log_i("Source: %s, Destination: %s, Protocol: %u, Target: %u", add_rule_to_firewall(rule_ptr);
log_i("%s, %s, %s, %s",
rule_ptr->source, rule_ptr->source,
rule_ptr->destination, rule_ptr->destination,
rule_ptr->protocol, protocol_to_string(rule_ptr->protocol),
rule_ptr->target); target_to_string(rule_ptr->target));
} }
void ESPFirewall::eeprom_read_firewall_rules() void ESPFirewall::eeprom_read_firewall_rules()
{ {
this->amount_of_rules = EEPROM.readUChar(this->eeprom_settings_head);
log_i("Amount of existing Rules %i", this->amount_of_rules);
uint8_t eeprom_address = eeprom_start_firewall_rules; uint8_t eeprom_address = eeprom_start_firewall_rules;
for (uint8_t i = 0; i < this->amount_of_rules; i++) for (uint8_t i = 0; i < this->amount_of_rules; i++)
{ {
@ -103,29 +104,29 @@ void ESPFirewall::eeprom_read_firewall_rules()
} }
} }
void ESPFirewall::add_rule_to_firewall(firewall_rule_t *rule) void ESPFirewall::add_rule_to_firewall(firewall_rule_t *rule_ptr)
{ {
firewall_rule_t *temp; firewall_rule_t *temp;
if (head == NULL) if (this->head == NULL)
{ {
head = rule; this->head = rule_ptr;
rule->next = NULL; rule_ptr->next = NULL;
return; return;
} }
temp = head; temp = this->head;
while (temp->next != NULL) while (temp->next != NULL)
{ {
temp = temp->next; temp = temp->next;
} }
temp->next = rule; temp->next = rule_ptr;
rule->next = NULL; rule_ptr->next = NULL;
return; return;
} }
firewall_rule_t *ESPFirewall::get_rule_from_firewall(int key) firewall_rule_t *ESPFirewall::get_rule_from_firewall(int key)
{ {
firewall_rule_t *rule_ptr = this->head; firewall_rule_t *rule_ptr = this->head;
if (head == NULL) if (this->head == NULL)
{ {
return NULL; return NULL;
} }
@ -258,7 +259,6 @@ void ESPFirewall::get_firewall_rule_handler(AsyncWebServerRequest *request)
void ESPFirewall::get_firewall_rules_handler(AsyncWebServerRequest *request) void ESPFirewall::get_firewall_rules_handler(AsyncWebServerRequest *request)
{ {
eeprom_read_firewall_rules();
String response = construct_json_firewall(); String response = construct_json_firewall();
request->send(200, "application/json", response); request->send(200, "application/json", response);
} }