mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 23:58:20 +00:00
Infrastructure for modularizing protocol analyzers.
There's now a new directory "src/protocols/", and the plan is for each protocol analyzer to eventually have its own subdirectory in there that contains everything it defines (C++/pac/bif). The infrastructure to make that happen is in place, and two analyzers have been converted to the new model, HTTP and SSL; there's no further HTTP/SSL-specific code anywhere else in the core anymore (I believe :-) Further changes: - -N lists available plugins, -NN lists more details on what these plugins provide (analyzers, bif elements). (The latter does not work for analyzers that haven't been converted yet). - *.bif.bro files now go into scripts/base/bif/; and scripts/base/bif/plugins/ for bif files provided by plugins. - I've factored out the bifcl/binpac CMake magic from src/CMakeLists.txt to cmake/{BifCl,Binpac} - There's a new cmake/BroPlugin that contains magic to allow plugins to have a simple CMakeLists.txt. The hope is that eventually the same CMakeLists.txt can be used for compiling a plugin either statically or dynamically. - bifcl has a new option -c that changes the code it generates so that it can be used with a plugin. TODOs: - "make install" is probably broken. - Broxygen is probably broken for plugin-defined events. - event groups are broken (do we want to keep them?)
This commit is contained in:
parent
2be985433c
commit
19c1816ebb
44 changed files with 974 additions and 663 deletions
|
@ -31,21 +31,7 @@ bool Manager::LoadPluginsFrom(const std::string& dir)
|
|||
|
||||
bool Manager::RegisterPlugin(Plugin *plugin)
|
||||
{
|
||||
assert(! init);
|
||||
|
||||
plugin::Description desc = plugin->GetDescription();
|
||||
|
||||
if ( desc.version != plugin::API_BUILTIN )
|
||||
{
|
||||
if ( desc.api_version == API_ERROR )
|
||||
reporter->InternalError("API version of plugin %s not initialized", desc.name.c_str());
|
||||
|
||||
if ( desc.api_version != API_VERSION )
|
||||
reporter->FatalError("API version mismatch for plugin %s: expected %d, but have %d",
|
||||
desc.name.c_str(), API_VERSION, desc.version);
|
||||
}
|
||||
|
||||
plugins.push_back(plugin);
|
||||
Manager::PluginsInternal()->push_back(plugin);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -53,29 +39,48 @@ void Manager::InitPlugins()
|
|||
{
|
||||
assert(! init);
|
||||
|
||||
for ( plugin_list::iterator i = plugins.begin(); i != plugins.end(); i++ )
|
||||
for ( plugin_list::iterator i = Manager::PluginsInternal()->begin(); i != Manager::PluginsInternal()->end(); i++ )
|
||||
(*i)->Init();
|
||||
|
||||
init = true;
|
||||
}
|
||||
|
||||
void Manager::InitPluginsBif()
|
||||
{
|
||||
assert(init);
|
||||
|
||||
for ( plugin_list::iterator i = Manager::PluginsInternal()->begin(); i != Manager::PluginsInternal()->end(); i++ )
|
||||
(*i)->InitBif();
|
||||
|
||||
init = true;
|
||||
}
|
||||
|
||||
void Manager::FinishPlugins()
|
||||
{
|
||||
assert(init);
|
||||
|
||||
for ( plugin_list::iterator i = plugins.begin(); i != plugins.end(); i++ )
|
||||
for ( plugin_list::iterator i = Manager::PluginsInternal()->begin(); i != Manager::PluginsInternal()->end(); i++ )
|
||||
{
|
||||
(*i)->Done();
|
||||
delete *i;
|
||||
// delete *i;
|
||||
}
|
||||
|
||||
plugins.clear();
|
||||
Manager::PluginsInternal()->clear();
|
||||
|
||||
init = false;
|
||||
}
|
||||
|
||||
Manager::plugin_list Manager::Plugins() const
|
||||
{
|
||||
return plugins;
|
||||
}
|
||||
return *Manager::PluginsInternal();
|
||||
}
|
||||
|
||||
Manager::plugin_list* Manager::PluginsInternal()
|
||||
{
|
||||
static plugin_list* plugins = 0;
|
||||
|
||||
if ( ! plugins )
|
||||
plugins = new plugin_list;
|
||||
|
||||
return plugins;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue