mirror of
https://github.com/zeek/zeek.git
synced 2025-10-14 04:28:20 +00:00

With the recent packet manager work, it broke to register a protocol analyzer for a specific port from inside a plugin's initialization code. That's because that registration now depends on the packet manager being set up, which isn't case at that time a plugin's `InitPostInit()` runs. This fix contains two parts: - Initialize the packet manager before the analyzer manager, so that the latter's `InitPostScript()` can rely on the former being ready. - Change the analyzer manager to (only) record port registrations happening before it's fully initialized. Its `InitPostScript()` then performs the actual registrations, knowing it can use the packet manager now. This comes with a `cmake/` to add a missing include directory.
33 lines
820 B
C++
33 lines
820 B
C++
|
|
#include "Plugin.h"
|
|
#include "analyzer/Component.h"
|
|
#include "analyzer/Manager.h"
|
|
|
|
#include "Foo.h"
|
|
|
|
namespace btest::plugin::Demo_Foo { Plugin plugin; }
|
|
|
|
using namespace btest::plugin::Demo_Foo;
|
|
|
|
zeek::plugin::Configuration Plugin::Configure()
|
|
{
|
|
AddComponent(new zeek::analyzer::Component("Foo", btest::plugin::Demo_Foo::Foo::Instantiate, 1));
|
|
|
|
zeek::plugin::Configuration config;
|
|
config.name = "Demo::Foo";
|
|
config.description = "A Foo test analyzer";
|
|
config.version.major = 1;
|
|
config.version.minor = 0;
|
|
config.version.patch = 0;
|
|
return config;
|
|
}
|
|
|
|
|
|
void Plugin::InitPostScript()
|
|
{
|
|
auto tag = ::zeek::analyzer_mgr->GetAnalyzerTag("Foo");
|
|
if ( ! tag )
|
|
::zeek::reporter->FatalError("cannot get analyzer Tag");
|
|
|
|
zeek::analyzer_mgr->RegisterAnalyzerForPort(tag, TransportProto::TRANSPORT_TCP, 4243);
|
|
}
|