#include "Plugin.h" namespace zeek::run_state { extern double processing_start_time; } namespace btest::plugin::Demo_Iosource { Plugin plugin; } using namespace btest::plugin::Demo_Iosource; zeek::plugin::Configuration Plugin::Configure() { EnableHook(zeek::plugin::HOOK_DRAIN_EVENTS, 0); zeek::plugin::Configuration config; config.name = "Demo::Iosource"; config.description = "This is a iosource"; config.version.major = 1; config.version.minor = 0; config.version.patch = 0; return config; } void Plugin::InitPostScript() { std::fprintf(stdout, "%.6f InitPostScript\n", zeek::run_state::network_time); ts1 = new TimeoutSource("timeout-source-1"); ts2 = new TimeoutSource("timeout-source-2"); fd1 = new FdSource("fd-source-1"); fd2 = new FdSource("fd-source-2"); } void Plugin::HookDrainEvents() { ++round; if ( zeek::run_state::processing_start_time != 0.0 ) // ignore drains from dispatch_packet return; // std::fprintf(stdout, "%.6f HookDrainEvents %d\n", zeek::run_state::network_time, round); if ( (round % 9) == 0 ) { std::fprintf(stdout, "%.6f Firing %s\n", zeek::run_state::network_time, ts1->Tag()); ts1->Fire(); } if ( (round % 19) == 0 ) { std::fprintf(stdout, "%.6f Firing %s\n", zeek::run_state::network_time, ts2->Tag()); ts2->Fire(); } if ( (round % 19) == 0 ) { std::fprintf(stdout, "%.6f Firing %s\n", zeek::run_state::network_time, fd1->Tag()); fd1->Fire(); } if ( (round % 23) == 0 ) { std::fprintf(stdout, "%.6f Firing %s\n", zeek::run_state::network_time, fd2->Tag()); fd2->Fire(); } }