X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FConnectors.hh;h=0874551b5f12566712eb363d5d524fa5680fd169;hb=28e21cc5680c097e7daed8c412ee32cf26a75a60;hp=2750224e2e5d929ea8bf85505a8d633ed5ea2f7a;hpb=6fe5e7e732ecb03e10c9bb430883d72d9cf0a86c;p=senf.git diff --git a/PPI/Connectors.hh b/PPI/Connectors.hh index 2750224..0874551 100644 --- a/PPI/Connectors.hh +++ b/PPI/Connectors.hh @@ -53,11 +53,11 @@ namespace connector { \li it has an (optional) packet type \e Active connectors are activated from within the module, \e passive connectors are - signaled by the external framework. \e Input modules receive packets, \e output modules send - packets. + signaled by the external framework. \e Input connectors receive packets, \e output + connectors send packets. All passive connectors call some onRequest callback whenever I/O needs to be performed. All - input modules possess a packet queue. + input connectors possess a packet queue. We therefore have 4 connector types each of which is parameterized by the type of packet traversing the connector: @@ -90,7 +90,7 @@ namespace connector { private: void onRequest() { // 'input()' will return a senf::EthernetPacket packet handle - try { output( input().find() ); } + try { output( input().find() ); } catch (senf::InvalidPacketChainException & ex) { ; } } }; @@ -128,16 +128,20 @@ namespace connector { Connector & peer() const; ///< Get peer connected to this connector module::Module & module() const; ///< Get this connectors containing module + bool connected() const; ///< \c true, if connector connected, \c false otherwise + protected: Connector(); virtual ~Connector(); void connect(Connector & target); - + private: virtual std::type_info const & packetTypeID(); void setModule(module::Module & module); + void init(); + virtual void v_init() = 0; Connector * peer_; module::Module * module_; @@ -193,6 +197,8 @@ namespace connector { void emit(); private: + virtual void v_init(); + // Called by the routing to change the remote throttling state void notifyThrottle(); ///< Forward a throttle notification to this connector void notifyUnthrottle(); ///< Forward an unthrottle notification to this connector @@ -268,6 +274,8 @@ namespace connector { ActiveConnector(); private: + virtual void v_init(); + // called by the peer() to forward throttling notifications void notifyThrottle(); void notifyUnthrottle(); @@ -281,6 +289,8 @@ namespace connector { typedef std::vector NotifyRoutes; NotifyRoutes notifyRoutes_; + bool throttled_; + friend class senf::ppi::ForwardingRoute; friend class PassiveConnector; }; @@ -560,7 +570,7 @@ namespace connector { { public: operator()(PacketType packet); ///< Send out a packet - write(PacketType packet); ///< Alias for operator() + void write(PacketType packet); ///< Alias for operator() }; /** \brief Connector passively providing packets @@ -580,7 +590,7 @@ namespace connector { { public: operator()(PacketType packet); ///< Send out a packet - write(PacketType packet); ///< Alias for operator() + void write(PacketType packet); ///< Alias for operator() }; #endif