45 lines
1019 B
Python
45 lines
1019 B
Python
from dataclasses import dataclass, field
|
|
from enum import Enum
|
|
|
|
class Action(Enum):
|
|
"""Action to be taken by the filter"""
|
|
ACCEPT = 0
|
|
DROP = 1
|
|
REJECT = 2
|
|
MANGLE = 3
|
|
|
|
class FullStreamAction(Enum):
|
|
"""Action to be taken by the filter when the stream is full"""
|
|
FLUSH = 0
|
|
ACCEPT = 1
|
|
REJECT = 2
|
|
DROP = 3
|
|
|
|
@dataclass
|
|
class FilterHandler:
|
|
"""Filter handler"""
|
|
func: callable
|
|
name: str
|
|
params: dict[type, callable]
|
|
proto: str
|
|
|
|
@dataclass
|
|
class PacketHandlerResult:
|
|
"""Packet handler result"""
|
|
glob: dict = field(repr=False)
|
|
action: Action = Action.ACCEPT
|
|
matched_by: str = None
|
|
mangled_packet: bytes = None
|
|
|
|
def set_result(self) -> None:
|
|
self.glob["__firegex_pyfilter_result"] = {
|
|
"action": self.action.value,
|
|
"matched_by": self.matched_by,
|
|
"mangled_packet": self.mangled_packet
|
|
}
|
|
|
|
def reset_result(self) -> None:
|
|
self.glob["__firegex_pyfilter_result"] = None
|
|
|
|
|