X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FConnectors.cci;h=10d3399947b3e044680359275f5642001d02591e;hb=9bc655e14d2d8c204ed835896cb51e42d49bd68f;hp=2abd3b1214811be906d451ed9682b19a73902a03;hpb=45b346fa3a120720280b67b0f405b1954c0885d4;p=senf.git diff --git a/senf/PPI/Connectors.cci b/senf/PPI/Connectors.cci index 2abd3b1..10d3399 100644 --- a/senf/PPI/Connectors.cci +++ b/senf/PPI/Connectors.cci @@ -26,10 +26,19 @@ // Custom includes #include #include +#include "Module.hh" #define prefix_ inline ///////////////////////////////cci.p/////////////////////////////////////// +#ifdef SENF_PPI_NOTRACE +# define SENF_PPI_THROTTLE_TRACE(label, type) +# define SENF_PPI_TRACE(packet, label) +#else +# define SENF_PPI_THROTTLE_TRACE(label, type) throttleTrace(label, type) +# define SENF_PPI_TRACE(packet, label) trace(packet, label) +#endif + /////////////////////////////////////////////////////////////////////////// // senf::ppi::connector::Connector @@ -37,7 +46,7 @@ prefix_ senf::ppi::connector::Connector & senf::ppi::connector::Connector::peer( const { // The connector is not connected - SENF_ASSERT(peer_ && "senf::ppi::connect() call missing"); + SENF_ASSERT(peer_, "senf::ppi::connect() call missing"); return *peer_; } @@ -46,7 +55,7 @@ prefix_ senf::ppi::module::Module & senf::ppi::connector::Connector::module() { // The connector is not registered in the module -> probably a route() or noroute() statement is // missing. - SENF_ASSERT(module_ && "Connector not registered: Missing route() or noroute()"); + SENF_ASSERT(module_, "Connector not registered: Missing route() or noroute()"); return *module_; } @@ -67,23 +76,18 @@ prefix_ senf::ppi::connector::Connector::Connector() : peer_(), module_() {} -prefix_ senf::ppi::connector::Connector::~Connector() -{ - if (connected()) { - Connector & peer (*peer_); - peer_->peer_ = 0; - if (! peer.initializationScheduled()) - peer.enqueueInitializable(); - peer.v_disconnected(); - } -} - prefix_ bool senf::ppi::connector::Connector::connected() const { return peer_; } +prefix_ void senf::ppi::connector::Connector::unregisterConnector() +{ + if (module_) + module_->unregisterConnector(*this); +} + //////////////////////////////////////// // private members @@ -112,14 +116,14 @@ prefix_ bool senf::ppi::connector::PassiveConnector::throttled() prefix_ void senf::ppi::connector::PassiveConnector::emitThrottle() { - throttleTrace("OUT", "throttle"); + SENF_PPI_THROTTLE_TRACE("OUT", "throttle"); if (connected()) peer().notifyThrottle(); } prefix_ void senf::ppi::connector::PassiveConnector::emitUnthrottle() { - throttleTrace("OUT", "unthrottle"); + SENF_PPI_THROTTLE_TRACE("OUT", "unthrottle"); if (connected()) { peer().notifyUnthrottle(); v_unthrottleEvent(); @@ -136,12 +140,7 @@ prefix_ void senf::ppi::connector::PassiveConnector::notifyThrottle() remoteThrottled_ = true; } -prefix_ void senf::ppi::connector::PassiveConnector::registerRoute(ForwardingRoute & route) -{ - routes_.push_back(&route); -} - -// public members +// public members prefix_ bool senf::ppi::connector::PassiveConnector::nativeThrottled() const @@ -178,11 +177,12 @@ prefix_ senf::ppi::connector::PassiveConnector::PassiveConnector() prefix_ void senf::ppi::connector::PassiveConnector::emit() { // No event callback has been registered (onRequest() call missing) - SENF_ASSERT(callback_ && "senf::ppi::connector::PassiveConnector: missing onRequest()"); - if (!throttled()) + SENF_ASSERT(callback_, "senf::ppi::connector::PassiveConnector: missing onRequest()"); + if (!throttled()) { callback_(); - else - throttleTrace("IN ", "queueing packet"); + } else { + SENF_PPI_THROTTLE_TRACE("IN ", "queueing packet"); + } } /////////////////////////////////////////////////////////////////////////// @@ -249,7 +249,7 @@ prefix_ senf::Packet senf::ppi::connector::InputConnector::peek() const { // Cannot peek() head of empty queue - SENF_ASSERT( ! queue_.empty() && + SENF_ASSERT( ! queue_.empty(), "senf::ppi::connector::InputConnector: cannot call peek() on empty queue" ); return queue_.back(); } @@ -293,7 +293,7 @@ prefix_ senf::ppi::connector::InputConnector & senf::ppi::connector::OutputConne prefix_ void senf::ppi::connector::OutputConnector::operator()(Packet const & p) { - trace(p, "OUT"); + SENF_PPI_TRACE(p, "OUT"); if (connected()) peer().enqueue(p); }