-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfirewallRules.cpp
More file actions
68 lines (57 loc) · 1.86 KB
/
firewallRules.cpp
File metadata and controls
68 lines (57 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//
// firewallRules.cpp
// Firewall-Classification-Engine
//
// Created by Ezzat Qupty on 06/03/2021.
//
#include "firewallRules.hpp"
#include <iostream>
PacketRules::PacketRules(string ip, bool allowed){
this->ip = ip;
this->allowed = allowed;
}
string PacketRules::getIP() const {
return ip;
}
bool PacketRules::isAllowed() const{
return allowed;
}
bool PacketRules::operator<(const PacketRules& p) const {
return this->ip < p.ip;
}
bool PacketRules::operator>(const PacketRules& p) const {
return this->ip > p.ip;
}
bool PacketRules::operator==(const PacketRules& p) const {
return this->ip == p.ip;
}
void FirewallRules::insert(string username, string ip, bool allowed){
PacketRules ipRule(ip, allowed);
FirewallMap::iterator user = rules.find(username);
if(user == rules.end()){ //username does not exist
set<PacketRules> userRule;
userRule.insert(ipRule);
rules.insert(MapPair(username, userRule));
} else {//username exists
set<PacketRules>::iterator packetRule = user->second.find(ipRule);
if(packetRule != user->second.end()){ // rule for ip has already been defined
cout << "Rule Redefinition: rule for user: " << username << " and ip: " << ip << " has already been defined" << endl;
} else { //rule wasn't definned
user->second.insert(ipRule);
}
}
}
bool FirewallRules::isAllowed(string username, string ip){
PacketRules ipRule(ip, false);
FirewallMap::iterator user = rules.find(username);
if(user == rules.end()){
return true;//if no rules for user, allow
} else {
set<PacketRules>::iterator packetRule = user->second.find(ipRule);
if(packetRule == user->second.end()){
return true; // no rule for specified ip
} else {
return packetRule->isAllowed();
}
}
}