// See the file "COPYING" in the main distribution directory for copyright. #pragma once #include "zeek-config.h" #include ZEEK_FORWARD_DECLARE_NAMESPACED(ODesc, zeek); namespace zeek::plugin { namespace component { /** * Component types. */ enum Type { READER, /// An input reader (not currently used). WRITER, /// A logging writer (not currently used). ANALYZER, /// A protocol analyzer. PACKET_ANALYZER, /// A packet analyzer. FILE_ANALYZER, /// A file analyzer. IOSOURCE, /// An I/O source, excluding packet sources. PKTSRC, /// A packet source. PKTDUMPER /// A packet dumper. }; } // namespace component /** * Base class for plugin components. A component is a specific piece of * functionality that a plugin provides, such as a protocol analyzer or a log * writer. */ class Component { public: /** * Constructor. * * @param type The type of the compoment. * * @param name A descriptive name for the component. This name must * be unique across all components of the same type. */ Component(component::Type type, const std::string& name); /** * Destructor. */ virtual ~Component(); /** * Initialization function. This function has to be called before any * plugin component functionality is used; it commonly is used to add the * plugin component to the list of components and to initialize tags */ virtual void Initialize() {} /** * Returns the compoment's type. */ component::Type Type() const; /** * Returns the compoment's name. */ const std::string& Name() const; /** * Returns a canonocalized version of the components's name. The * returned name is derived from what's passed to the constructor but * upper-cased and transformed to allow being part of a script-level * ID. */ const std::string& CanonicalName() const { return canon_name; } /** * Returns a textual representation of the component. This goes into * the output of "bro -NN". * * By default, this just outputs the type and the name. Derived * versions can override DoDescribe() to add type specific details. * * @param d The description object to use. */ void Describe(ODesc* d) const; protected: /** * Adds type specific information to the output of Describe(). * * The default version does nothing. * * @param d The description object to use. */ virtual void DoDescribe(ODesc* d) const { } private: // Disable. Component(const Component& other); Component operator=(const Component& other); component::Type type; std::string name; std::string canon_name; }; } // namespace zeek::plugin namespace plugin { using Component [[deprecated("Remove in v4.1. Use zeek::plugin::Component instead.")]] = zeek::plugin::Component; namespace component { using Type [[deprecated("Remove in v4.1. Use zeek::plugin::component::Type instead.")]] = zeek::plugin::component::Type; [[deprecated("Remove in v4.1. Use zeek::plugin::component::READER instead.")]] constexpr auto READER = zeek::plugin::component::READER; [[deprecated("Remove in v4.1. Use zeek::plugin::component::WRITER instead.")]] constexpr auto WRITER = zeek::plugin::component::WRITER; [[deprecated("Remove in v4.1. Use zeek::plugin::component::ANALYZER instead.")]] constexpr auto ANALYZER = zeek::plugin::component::ANALYZER; [[deprecated("Remove in v4.1. Use zeek::plugin::component::FILE_ANALYZER instead.")]] constexpr auto FILE_ANALYZER = zeek::plugin::component::FILE_ANALYZER; [[deprecated("Remove in v4.1. Use zeek::plugin::component::IOSOURCE instead.")]] constexpr auto IOSOURCE = zeek::plugin::component::IOSOURCE; [[deprecated("Remove in v4.1. Use zeek::plugin::component::PKTSRC instead.")]] constexpr auto PKTSRC = zeek::plugin::component::PKTSRC; [[deprecated("Remove in v4.1. Use zeek::plugin::component::PKTDUMPER instead.")]] constexpr auto PKTDUMPER = zeek::plugin::component::PKTDUMPER; } // namespace component } // namespace plugin