Socket: Add missing InetSocketProtocol baseclass to relevant socket protocols
[senf.git] / PPI / Connectors.cci
index 8db9cd9..12c14a1 100644 (file)
@@ -56,10 +56,16 @@ prefix_ senf::ppi::connector::Connector::Connector()
 
 prefix_ senf::ppi::connector::Connector::~Connector()
 {
-    if (peer_)
+    if (connected())
         peer_->peer_ = 0;
 }
 
+prefix_ bool senf::ppi::connector::Connector::connected()
+    const
+{
+    return peer_;
+}
+
 ////////////////////////////////////////
 // private members
 
@@ -68,6 +74,11 @@ prefix_ void senf::ppi::connector::Connector::setModule(module::Module & module)
     module_ = &module;
 }
 
+prefix_ void senf::ppi::connector::Connector::init()
+{
+    v_init();
+}
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::ppi::connector::PassiveConnector
 
@@ -88,13 +99,16 @@ prefix_ bool senf::ppi::connector::PassiveConnector::throttled()
 
 prefix_ void senf::ppi::connector::PassiveConnector::emitThrottle()
 {
-    peer().notifyThrottle();
+    if (connected())
+        peer().notifyThrottle();
 }
 
 prefix_ void senf::ppi::connector::PassiveConnector::emitUnthrottle()
 {
-    peer().notifyUnthrottle();
-    v_unthrottleEvent();
+    if (connected()) {
+        peer().notifyUnthrottle();
+        v_unthrottleEvent();
+    }
 }
 
 prefix_ void senf::ppi::connector::PassiveConnector::notifyThrottle()
@@ -107,9 +121,6 @@ prefix_ void senf::ppi::connector::PassiveConnector::notifyThrottle()
         remoteThrottled_ = true;
 }
 
-prefix_ void senf::ppi::connector::PassiveConnector::v_unthrottleEvent()
-{}
-
 prefix_ void senf::ppi::connector::PassiveConnector::registerRoute(ForwardingRoute & route)
 {
     routes_.push_back(&route);
@@ -177,14 +188,14 @@ prefix_ void senf::ppi::connector::ActiveConnector::onUnthrottle()
 prefix_ bool senf::ppi::connector::ActiveConnector::throttled()
     const
 {
-    return peer().throttled();
+    return ! connected() || peer().throttled();
 }
 
 ////////////////////////////////////////
 // protected members
 
 prefix_ senf::ppi::connector::ActiveConnector::ActiveConnector()
-    : throttleCallback_(), unthrottleCallback_(), notifyRoutes_()
+    : throttleCallback_(), unthrottleCallback_(), notifyRoutes_(), throttled_(false)
 {}
 
 ///////////////////////////////////////////////////////////////////////////
@@ -261,7 +272,8 @@ prefix_ senf::ppi::connector::InputConnector & senf::ppi::connector::OutputConne
 
 prefix_ void senf::ppi::connector::OutputConnector::operator()(Packet p)
 {
-    peer().enqueue(p);
+    if (connected())
+        peer().enqueue(p);
 }
 
 prefix_ void senf::ppi::connector::OutputConnector::write(Packet p)
@@ -329,12 +341,13 @@ prefix_ senf::ppi::connector::GenericPassiveOutput & senf::ppi::connector::Gener
 prefix_ bool senf::ppi::connector::GenericActiveInput::boolean_test()
     const
 {
-    return ! empty() || ! peer().throttled();
+    return ! empty() || (connected() && ! peer().throttled());
 }
 
 prefix_ void senf::ppi::connector::GenericActiveInput::request()
 {
-    peer().emit();
+    if (connected())
+        peer().emit();
 }
 
 prefix_ senf::ppi::connector::GenericActiveInput::GenericActiveInput()
@@ -352,7 +365,7 @@ prefix_ senf::ppi::connector::GenericPassiveInput & senf::ppi::connector::Generi
 prefix_ bool senf::ppi::connector::GenericActiveOutput::boolean_test()
     const
 {
-    return ! peer().throttled();
+    return connected() && ! peer().throttled();
 }
 
 prefix_ void senf::ppi::connector::GenericActiveOutput::connect(GenericPassiveInput & target)