X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FConnectors.hh;h=ff44b48afd30a9abee004bfc22a5dcf4df220dba;hb=ab7ff164ab5ae711ec09ce2b24228510f1ffdcff;hp=0dfe9cfafaf797b720c54ea15456a4c0e16fd8c7;hpb=69b25a4904fa86324aedc7147502255ce4117885;p=senf.git diff --git a/senf/PPI/Connectors.hh b/senf/PPI/Connectors.hh index 0dfe9cf..ff44b48 100644 --- a/senf/PPI/Connectors.hh +++ b/senf/PPI/Connectors.hh @@ -2,23 +2,28 @@ // // Copyright (C) 2007 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// Stefan Bund // -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Stefan Bund /** \file \brief Connectors public header */ @@ -39,7 +44,7 @@ #include "ModuleManager.hh" //#include "Connectors.mpp" -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { namespace ppi { @@ -63,8 +68,8 @@ namespace connector { We therefore have 4 connector types each of which is parameterized by the type of packet traversing the connector: \li senf::ppi::connector::ActiveInput - \li senf::ppi::connector::ActiveOutput - \li senf::ppi::connector::PassiveInput + \li senf::ppi::connector::ActiveOutput + \li senf::ppi::connector::PassiveInput \li senf::ppi::connector::PassiveOutput. Connectors are declared as module data members and are then externally connected to other @@ -115,7 +120,7 @@ namespace connector { senf::ppi::connector::ActiveInputJack input; senf::ppi::connector::ActiveOutputJack output; - MyGroup() + MyGroup() : queue (), analyzer (), input (queue.input), output (analyzer.output) { senf::ppi::connect(queue, analyzer); @@ -186,11 +191,12 @@ namespace connector { void throttleTrace(char const * label, char const * type); void unregisterConnector(); - + + virtual void v_disconnected(); + virtual void v_connected(); + private: virtual std::type_info const & packetTypeID(); - - virtual void v_disconnected() const; void setModule(module::Module & module); @@ -251,6 +257,9 @@ namespace connector { void emit(); + virtual void v_disconnected(); + virtual void v_connected(); + private: virtual void v_init(); @@ -269,6 +278,8 @@ namespace connector { void registerRoute(ForwardingRoute & route); void unregisterRoute(ForwardingRoute & route); + ActiveConnector * peer_; + typedef ppi::detail::Callback<>::type Callback; Callback callback_; @@ -331,6 +342,9 @@ namespace connector { protected: ActiveConnector(); + virtual void v_disconnected(); + virtual void v_connected(); + private: virtual void v_init(); @@ -342,13 +356,15 @@ namespace connector { void registerRoute(ForwardingRoute & route); void unregisterRoute(ForwardingRoute & route); + PassiveConnector * peer_; + Callback throttleCallback_; Callback unthrottleCallback_; typedef std::vector NotifyRoutes; NotifyRoutes notifyRoutes_; - bool throttled_; + bool throttled_; friend class senf::ppi::ForwardingRoute; friend class PassiveConnector; @@ -389,9 +405,8 @@ namespace connector { dequeue a packet from the packet queue. If the connector is active, the connector will request new packets from the connected module. If the packet - request cannot be fulfilled, this is considered to be a - logic error in the module implementation and an - exception is raised. */ + request cannot be fulfilled an in-valid Packet is + returned. */ Packet read(); ///< Alias for operator()() @@ -407,6 +422,9 @@ namespace connector { protected: InputConnector(); + virtual void v_disconnected(); + virtual void v_connected(); + private: void enqueue(Packet const & p); @@ -414,6 +432,7 @@ namespace connector { virtual void v_enqueueEvent(); virtual void v_dequeueEvent(); + OutputConnector * peer_; Queue queue_; friend class OutputConnector; @@ -437,6 +456,12 @@ namespace connector { protected: OutputConnector(); + + virtual void v_disconnected(); + virtual void v_connected(); + + private: + InputConnector * peer_; }; /** \brief Combination of PassiveConnector and InputConnector @@ -463,15 +488,21 @@ namespace connector { QueueingDiscipline interface. \param[in] disc New queueing discipline */ + void qdisc(QueueingDiscipline::None_t); + ///< Disable queueing discipline protected: GenericPassiveInput(); + virtual void v_disconnected(); + virtual void v_connected(); + private: void v_enqueueEvent(); void v_dequeueEvent(); void v_unthrottleEvent(); + GenericActiveOutput * peer_; boost::scoped_ptr qdisc_; }; @@ -493,6 +524,11 @@ namespace connector { protected: GenericPassiveOutput(); + virtual void v_disconnected(); + virtual void v_connected(); + + private: + GenericActiveInput * peer_; }; /** \brief Combination of ActiveConnector and InputConnector @@ -511,8 +547,13 @@ namespace connector { protected: GenericActiveInput(); + virtual void v_disconnected(); + virtual void v_connected(); + private: void v_requestEvent(); + + GenericPassiveOutput * peer_; }; /** \brief Combination of ActiveConnector and OutputConnector @@ -531,8 +572,14 @@ namespace connector { protected: GenericActiveOutput(); + virtual void v_disconnected(); + virtual void v_connected(); + + private: + GenericPassiveInput * peer_; }; + #ifndef DOXYGEN # define TypedConnector_Input read @@ -568,12 +615,12 @@ namespace connector { #else /** \brief Connector actively reading packets - + \tparam PacketType Type of packet to read. Defaults to senf::Packet The %ActiveInput %connector template reads data actively from a connected %module. This - class is completely implemented via it's base-class, GenericActiveInput, the only - difference is that read packets are returned as \a PacketType instead of generic + class is completely implemented via it's base-class, GenericActiveInput, the only + difference is that read packets are returned as \a PacketType instead of generic senf::Packet references. \see GenericActiveInput \n @@ -595,7 +642,7 @@ namespace connector { \tparam PacketType Type of packet to read. Defaults to senf::Packet The %PassiveInput %connector template receives packets sent to it from a connected - %module. This class is completely implemented via it's base-class, GenericPassiveInput, + %module. This class is completely implemented via it's base-class, GenericPassiveInput, the only difference is that read packets are returned as \a PacketType instead of generic senf::Packet references. @@ -617,7 +664,7 @@ namespace connector { \tparam PacketType Type of packet to send. Defaults to senf::Packet - The %ActiveOutput %connector template sends data actively to a connected %module. This + The %ActiveOutput %connector template sends data actively to a connected %module. This class is completely implemented via it's base-class, GenericActiveOutput, the only difference is that it only sends packets of type \a PacketType. @@ -628,17 +675,17 @@ namespace connector { class ActiveOutput : public GenericActiveOutput { public: - operator()(PacketType packet); ///< Send out a packet - void write(PacketType packet); ///< Alias for operator() + void operator()(PacketType packet); ///< Send out a packet + void write(PacketType packet); ///< Alias for operator() }; /** \brief Connector passively providing packets \tparam PacketType Type of packet to send. Defaults to senf::Packet - The %PassiveOutput %connector template provides data passively to a connected %module - whenever signaled. This class is completely implemented via it's base-class, - GenericPassiveOutput, the only difference is that it only sends packets of type + The %PassiveOutput %connector template provides data passively to a connected %module + whenever signaled. This class is completely implemented via it's base-class, + GenericPassiveOutput, the only difference is that it only sends packets of type \a PacketType. \see GenericPassiveOutput \n @@ -648,17 +695,17 @@ namespace connector { class PassiveOutput : public GenericPassiveOutput { public: - operator()(PacketType packet); ///< Send out a packet - void write(PacketType packet); ///< Alias for operator() + void operator()(PacketType packet); ///< Send out a packet + void write(PacketType packet); ///< Alias for operator() }; #endif }}} -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #include "Connectors.cci" -//#include "Connectors.ct" +#include "Connectors.ct" #include "Connectors.cti" #endif