Summary
Create the airhound-handlers crate as a lightweight std crate containing the two genuinely stateful processors and the category-driven output pipeline. This replaces the original 4-handler design.
Crate Structure
crates/airhound-handlers/
Cargo.toml # depends on airhound-core
src/
lib.rs
drone.rs # DroneProcessor (ODID state accumulation)
proximity.rs # ProximityTracker (multi-target RSSI tracking)
pipeline.rs # Category-driven output routing + dedup
network_catalog.rs # BSSID dedup map + WiGLE CSV export
gps.rs # Shared GPS position
persistence.rs # NVS abstraction
Design Philosophy
The rule engine (airhound-core) handles all matching. This crate handles:
-
Stateful processors that need to accumulate state over time:
-
Category-driven output pipeline — simple dedup + routing:
- Surveillance/Watchlist: MAC dedup with configurable cooldown → alerts
- Network: BSSID dedup with infinite TTL → catalog + WiGLE CSV export
- Drone/Proximity: forward to respective processors
-
Shared infrastructure: GPS, NVS persistence
No EventHandler trait — just concrete structs with clear responsibilities.
Requirements
std crate (HashMap, String, etc.)
- Depends on
airhound-core for scan events, filter types, protocol types, proximity math
cargo test passes on host
- Each component independently testable
Replaces
Summary
Create the
airhound-handlerscrate as a lightweightstdcrate containing the two genuinely stateful processors and the category-driven output pipeline. This replaces the original 4-handler design.Crate Structure
Design Philosophy
The rule engine (airhound-core) handles all matching. This crate handles:
Stateful processors that need to accumulate state over time:
DroneProcessor— merges ODID message types into per-drone records (Implement DroneProcessor (ODID state accumulation) #76)ProximityTracker— tracks RSSI of user-designated target MACs (Implement ProximityTracker (multi-target RSSI tracking) #77)Category-driven output pipeline — simple dedup + routing:
Shared infrastructure: GPS, NVS persistence
No
EventHandlertrait — just concrete structs with clear responsibilities.Requirements
stdcrate (HashMap, String, etc.)airhound-corefor scan events, filter types, protocol types, proximity mathcargo testpasses on hostReplaces
Create airhound-handlers crate with EventHandler trait #73 EventHandler trait(closed)Implement shared DedupEngine #74 DedupEngine(closed — dedup is now inline in pipeline.rs)Implement SurveillanceHandler #75 SurveillanceHandler(closed — rule engine + pipeline dedup)Implement WardriverHandler #78 WardriverHandler(closed — network_catalog.rs + pipeline routing)