X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FMonitorModule.hh;h=74e7600e0cc1f4a3d3a393fc4940fbf417827b78;hb=b89e3166f7680755683dccee5e48cb3a820185c0;hp=30c8ff1d5462ec67eb78f8780868918a146f1abe;hpb=7e35699acd77562184ae1b769bf967ffe0109500;p=senf.git diff --git a/PPI/MonitorModule.hh b/PPI/MonitorModule.hh index 30c8ff1..74e7600 100644 --- a/PPI/MonitorModule.hh +++ b/PPI/MonitorModule.hh @@ -37,6 +37,41 @@ namespace senf { namespace ppi { namespace module { + /** \brief Base class providing simple monitor %module support + + A monitor %module is a \ref senf::ppi::module::Module "module" which needs information + about traversing packets but does not really act on the packets. Because of this, it is + \e optional to connect the output: If the output is not connected, the packets will be + silently dropped. + + This allows to add monitor modules either into an existing chain or add them using an + ActiveDuplicator. + + To write a monitor %module, derive from senf::ppi::module::MonitorModule instead of + senf::ppi::module and implement v_handlePacket(): + + \code + class CountPackets + : public senf::ppi::module::MonitorModule<> + { + SENF_PPI_MODULE(CountPackets); + public: + CountPackets() : counter_ (0u) {} + + private: + virtual void v_handlePacket(Packet const & p) + { ++ counter_; } + + unsigned counter_; + }; + \endcode + + You may of course add events (or even further connectors besides \c input and \c output + provided by MonitorModule) to the %module. + + \tparam PacketType type of packet expected on input and sent on output. This is also the + type of the v_handlePacket() argument. + */ template class MonitorModule : public Module { @@ -47,7 +82,7 @@ namespace module { protected: MonitorModule(); - virtual void v_handlePacket(PacketType const & p) = 0; + virtual void v_handlePacket(PacketType const & p) = 0; ///< Called for each packet private: void request();