mirror of
https://github.com/zeek/zeek.git
synced 2025-10-03 07:08:19 +00:00
Internal refactoring of how plugin components are tagged/managed.
Made some class templates for code that seemed duplicated between file/protocol tags and managers. Seems like it helps a bit and hopefully can be also be used to transition other things that have enum value "tags" (e.g. logging writers, input readers) to the plugin system.
This commit is contained in:
parent
9bd7a65071
commit
99c89b42d7
26 changed files with 432 additions and 366 deletions
|
@ -18,10 +18,8 @@ TableVal* Manager::disabled = 0;
|
|||
string Manager::salt;
|
||||
|
||||
Manager::Manager()
|
||||
: ComponentManager<file_analysis::Tag, file_analysis::Component>("Files")
|
||||
{
|
||||
tag_enum_type = new EnumType("Files::Tag");
|
||||
::ID* id = install_ID("Tag", "Files", true, true);
|
||||
add_type(id, tag_enum_type, 0, 0);
|
||||
}
|
||||
|
||||
Manager::~Manager()
|
||||
|
@ -35,27 +33,7 @@ void Manager::InitPreScript()
|
|||
|
||||
for ( std::list<Component*>::const_iterator i = analyzers.begin();
|
||||
i != analyzers.end(); ++i )
|
||||
RegisterAnalyzerComponent(*i);
|
||||
}
|
||||
|
||||
void Manager::RegisterAnalyzerComponent(Component* component)
|
||||
{
|
||||
const char* cname = component->CanonicalName();
|
||||
|
||||
if ( tag_enum_type->Lookup("Files", cname) != -1 )
|
||||
reporter->FatalError("File Analyzer %s defined more than once", cname);
|
||||
|
||||
DBG_LOG(DBG_FILE_ANALYSIS, "Registering analyzer %s (tag %s)",
|
||||
component->Name(), component->Tag().AsString().c_str());
|
||||
|
||||
analyzers_by_name.insert(std::make_pair(cname, component));
|
||||
analyzers_by_tag.insert(std::make_pair(component->Tag(), component));
|
||||
analyzers_by_val.insert(std::make_pair(
|
||||
component->Tag().AsEnumVal()->InternalInt(), component));
|
||||
|
||||
string id = fmt("ANALYZER_%s", cname);
|
||||
tag_enum_type->AddName("Files", id.c_str(),
|
||||
component->Tag().AsEnumVal()->InternalInt(), true);
|
||||
RegisterComponent(*i, "ANALYZER_");
|
||||
}
|
||||
|
||||
void Manager::InitPostScript()
|
||||
|
@ -193,7 +171,7 @@ void Manager::SetSize(uint64 size, analyzer::Tag tag, Connection* conn,
|
|||
|
||||
bool Manager::SetTimeoutInterval(const string& file_id, double interval) const
|
||||
{
|
||||
File* file = Lookup(file_id);
|
||||
File* file = LookupFile(file_id);
|
||||
|
||||
if ( ! file )
|
||||
return false;
|
||||
|
@ -208,7 +186,7 @@ bool Manager::SetTimeoutInterval(const string& file_id, double interval) const
|
|||
bool Manager::AddAnalyzer(const string& file_id, file_analysis::Tag tag,
|
||||
RecordVal* args) const
|
||||
{
|
||||
File* file = Lookup(file_id);
|
||||
File* file = LookupFile(file_id);
|
||||
|
||||
if ( ! file )
|
||||
return false;
|
||||
|
@ -219,7 +197,7 @@ bool Manager::AddAnalyzer(const string& file_id, file_analysis::Tag tag,
|
|||
bool Manager::RemoveAnalyzer(const string& file_id, file_analysis::Tag tag,
|
||||
RecordVal* args) const
|
||||
{
|
||||
File* file = Lookup(file_id);
|
||||
File* file = LookupFile(file_id);
|
||||
|
||||
if ( ! file )
|
||||
return false;
|
||||
|
@ -257,7 +235,7 @@ File* Manager::GetFile(const string& file_id, Connection* conn,
|
|||
return rval;
|
||||
}
|
||||
|
||||
File* Manager::Lookup(const string& file_id) const
|
||||
File* Manager::LookupFile(const string& file_id) const
|
||||
{
|
||||
IDMap::const_iterator it = id_map.find(file_id);
|
||||
|
||||
|
@ -269,7 +247,7 @@ File* Manager::Lookup(const string& file_id) const
|
|||
|
||||
void Manager::Timeout(const string& file_id, bool is_terminating)
|
||||
{
|
||||
File* file = Lookup(file_id);
|
||||
File* file = LookupFile(file_id);
|
||||
|
||||
if ( ! file )
|
||||
return;
|
||||
|
@ -370,59 +348,15 @@ bool Manager::IsDisabled(analyzer::Tag tag)
|
|||
|
||||
Analyzer* Manager::InstantiateAnalyzer(Tag tag, RecordVal* args, File* f) const
|
||||
{
|
||||
analyzer_map_by_tag::const_iterator it = analyzers_by_tag.find(tag);
|
||||
Component* c = Lookup(tag);
|
||||
|
||||
if ( it == analyzers_by_tag.end() )
|
||||
if ( ! c )
|
||||
reporter->InternalError("cannot instantiate unknown file analyzer: %s",
|
||||
tag.AsString().c_str());
|
||||
|
||||
Component* c = it->second;
|
||||
|
||||
if ( ! c->Factory() )
|
||||
reporter->InternalError("file analyzer %s cannot be instantiated "
|
||||
"dynamically", c->CanonicalName());
|
||||
|
||||
return c->Factory()(args, f);
|
||||
}
|
||||
|
||||
const char* Manager::GetAnalyzerName(Val* v) const
|
||||
{
|
||||
return GetAnalyzerName(file_analysis::Tag(v->AsEnumVal()));
|
||||
}
|
||||
|
||||
const char* Manager::GetAnalyzerName(file_analysis::Tag tag) const
|
||||
{
|
||||
analyzer_map_by_tag::const_iterator it = analyzers_by_tag.find(tag);
|
||||
|
||||
if ( it == analyzers_by_tag.end() )
|
||||
reporter->InternalError("cannot get name of unknown file analyzer: %s",
|
||||
tag.AsString().c_str());
|
||||
|
||||
return it->second->CanonicalName();
|
||||
}
|
||||
|
||||
file_analysis::Tag Manager::GetAnalyzerTag(const char* name) const
|
||||
{
|
||||
analyzer_map_by_name::const_iterator it = analyzers_by_name.find(name);
|
||||
|
||||
if ( it == analyzers_by_name.end() )
|
||||
return file_analysis::Tag();
|
||||
|
||||
return it->second->Tag();
|
||||
}
|
||||
|
||||
file_analysis::Tag Manager::GetAnalyzerTag(Val* v) const
|
||||
{
|
||||
analyzer_map_by_val::const_iterator it =
|
||||
analyzers_by_val.find(v->AsEnumVal()->InternalInt());
|
||||
|
||||
if ( it == analyzers_by_val.end() )
|
||||
return file_analysis::Tag();
|
||||
|
||||
return it->second->Tag();
|
||||
}
|
||||
|
||||
EnumType* Manager::GetTagEnumType()
|
||||
{
|
||||
return tag_enum_type;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue