NEW FILE HEADER / COPYRIGHT FORMAT
[senf.git] / PPI / Connectors.cci
index 3862aab..51aff51 100644 (file)
@@ -1,8 +1,8 @@
 // $Id$
 //
 // Copyright (C) 2007 
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
+// Fraunhofer Institute for Open Communication Systems (FOKUS) 
+// Competence Center NETwork research (NET), St. Augustin, GERMANY 
 //     Stefan Bund <g0dil@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
@@ -53,10 +53,14 @@ prefix_ senf::ppi::connector::Connector::Connector()
 {}
 
 prefix_ senf::ppi::connector::Connector::~Connector()
-{}
+{
+    if (peer_)
+        peer_->peer_ = 0;
+}
 
 prefix_ void senf::ppi::connector::Connector::connect(Connector & target)
 {
+    BOOST_ASSERT( ! peer_ && ! target.peer_ );
     peer_ = & target;
     target.peer_ = this;
 }
@@ -86,9 +90,10 @@ prefix_ bool senf::ppi::connector::PassiveConnector::nativeThrottled()
 
 prefix_ void senf::ppi::connector::PassiveConnector::throttle()
 {
-    if (!throttled())
+    if (!throttled()) {
+        nativeThrottled_ = true;
         emitThrottle();
-    nativeThrottled_ = true;
+    }
 }
 
 prefix_ void senf::ppi::connector::PassiveConnector::unthrottle()
@@ -134,16 +139,6 @@ prefix_ void senf::ppi::connector::PassiveConnector::notifyThrottle()
         remoteThrottled_ = true;
 }
 
-prefix_ void senf::ppi::connector::PassiveConnector::notifyUnthrottle()
-{
-    if (throttled() && !nativeThrottled_) {
-        remoteThrottled_ = false;
-        emitUnthrottle();
-    } 
-    else
-        remoteThrottled_ = false;
-}
-
 prefix_ void senf::ppi::connector::PassiveConnector::emitThrottle()
 {
     peer().notifyThrottle();
@@ -158,6 +153,11 @@ prefix_ void senf::ppi::connector::PassiveConnector::emitUnthrottle()
 prefix_ void senf::ppi::connector::PassiveConnector::v_unthrottleEvent()
 {}
 
+prefix_ void senf::ppi::connector::PassiveConnector::registerRoute(ForwardingRoute & route)
+{
+    routes_.push_back(&route);
+}
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::ppi::connector::ActiveConnector
 
@@ -177,6 +177,12 @@ prefix_ void senf::ppi::connector::ActiveConnector::onUnthrottle()
     unthrottleCallback_ = Callback();
 }
 
+prefix_ bool senf::ppi::connector::ActiveConnector::throttled()
+    const
+{
+    return peer().throttled();
+}
+
 ////////////////////////////////////////
 // protected members
 
@@ -187,6 +193,11 @@ prefix_ senf::ppi::connector::ActiveConnector::ActiveConnector()
 ///////////////////////////////////////////////////////////////////////////
 // senf::ppi::connector::InputConnector
 
+prefix_ senf::Packet senf::ppi::connector::InputConnector::read()
+{
+    return operator()();
+}
+
 prefix_ senf::ppi::connector::OutputConnector & senf::ppi::connector::InputConnector::peer()
     const
 {
@@ -250,6 +261,11 @@ prefix_ void senf::ppi::connector::OutputConnector::operator()(Packet p)
     peer().enqueue(p);
 }
 
+prefix_ void senf::ppi::connector::OutputConnector::write(Packet p)
+{
+    operator()(p);
+}
+
 prefix_ senf::ppi::connector::InputConnector & senf::ppi::connector::OutputConnector::peer()
     const
 {