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:
Robin Sommer 2013-03-28 21:47:44 -07:00
parent 2be985433c
commit 19c1816ebb
44 changed files with 974 additions and 663 deletions

View file

@ -29,15 +29,22 @@ public:
/**
*
* @param plugin: The plugin to register. The method takes ownership.
* @param plugin: The plugin to register. The method does not take
* ownershop but assume the pointer will leave at least until the
* Manager is destroyed.
*/
bool RegisterPlugin(Plugin *plugin); // Takes ownership.
static bool RegisterPlugin(Plugin *plugin);
/**
*
*/
void InitPlugins();
/**
*
*/
void InitPluginsBif();
/**
*
*/
@ -55,8 +62,9 @@ public:
std::list<T *> Components(component::Type type) const;
private:
static plugin_list* PluginsInternal();
bool init;
plugin_list plugins;
};
template<class T>
@ -64,7 +72,7 @@ std::list<T *> Manager::Components(component::Type type) const
{
std::list<T *> result;
for ( plugin_list::const_iterator p = plugins.begin(); p != plugins.end(); p++ )
for ( plugin_list::const_iterator p = PluginsInternal()->begin(); p != PluginsInternal()->end(); p++ )
{
component_list components = (*p)->Components();