#ifndef PACKET_FILTER_H #define PACKET_FILTER_H #include "common.h" #include "rule_engine.h" #include "logger.h" #ifdef _WIN32 #include // Forward declare WINDIVERT_ADDRESS to avoid including windivert.h in header struct WINDIVERT_ADDRESS_; typedef struct WINDIVERT_ADDRESS_ WINDIVERT_ADDRESS; #else // Placeholder types for non-Windows platforms (for development) typedef void* HANDLE; typedef struct {} WINDIVERT_ADDRESS; #define INVALID_HANDLE_VALUE nullptr #endif #include #include #include class PacketFilter { public: PacketFilter(RuleEngine* rule_engine, Logger* logger); ~PacketFilter(); // Initialize WinDivert bool Initialize(); // Start packet filtering (blocking call) void Start(); // Stop packet filtering void Stop(); // Get statistics const PacketStats& GetStats() const; private: HANDLE windivert_handle_; RuleEngine* rule_engine_; Logger* logger_; PacketStats stats_; std::atomic running_; // Packet processing void ProcessPackets(); void HandlePacket(uint8_t* packet, unsigned int packet_len, WINDIVERT_ADDRESS* addr); // Extract source IP for logging std::string ExtractSourceIP(const uint8_t* packet, const WINDIVERT_ADDRESS* addr); }; #endif // PACKET_FILTER_H