mirror of
https://github.com/zeek/zeek.git
synced 2025-10-06 16:48:19 +00:00
48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
// See the file "COPYING" in the main distribution directory for copyright.
|
|
|
|
#include "zeek/packet_analysis/Component.h"
|
|
|
|
#include "zeek/Desc.h"
|
|
#include "zeek/packet_analysis/Analyzer.h"
|
|
#include "zeek/packet_analysis/Manager.h"
|
|
|
|
using namespace zeek::packet_analysis;
|
|
|
|
Component::Component(const std::string& name, factory_callback arg_factory, Tag::subtype_t arg_subtype)
|
|
: plugin::Component(plugin::component::PACKET_ANALYZER, name, arg_subtype, packet_mgr->GetTagType()),
|
|
factory(std::move(arg_factory)) {}
|
|
|
|
void Component::Initialize() {
|
|
InitializeTag();
|
|
packet_mgr->RegisterComponent(this, "ANALYZER_");
|
|
}
|
|
|
|
void Component::SetEnabled(bool arg_enabled) {
|
|
auto analyzer = packet_mgr->GetAnalyzer(Tag().AsVal().get());
|
|
if ( analyzer ) {
|
|
// We can only toggle the analyzer if it's not replacing another one,
|
|
// otherwise our dispatching tables would be wrong.
|
|
if ( packet_mgr->ProvidesComponentMapping(Tag()) ) {
|
|
reporter->Warning(
|
|
"attempt to toggle packet analyzer %s, which replaces another one; toggling replacement analyzers is "
|
|
"not supported",
|
|
analyzer->GetAnalyzerName());
|
|
return;
|
|
}
|
|
|
|
// Update the existing analyzer's state.
|
|
analyzer->SetEnabled(arg_enabled);
|
|
}
|
|
|
|
plugin::Component::SetEnabled(arg_enabled);
|
|
}
|
|
|
|
void Component::DoDescribe(ODesc* d) const {
|
|
if ( factory ) {
|
|
d->Add("ANALYZER_");
|
|
d->Add(CanonicalName());
|
|
d->Add(", ");
|
|
}
|
|
|
|
d->Add(Enabled() ? "enabled" : "disabled");
|
|
}
|