Socket: Fix handle.state() on invalid handles
[senf.git] / PPI / Connectors.cci
index 3f24b5d..ec587ce 100644 (file)
@@ -37,7 +37,7 @@ prefix_ senf::ppi::connector::Connector & senf::ppi::connector::Connector::peer(
     const
 {
     // The connector is not connected
-    SENF_ASSERT(peer_);
+    SENF_ASSERT(peer_ && "senf::ppi::connect() call missing");
     return *peer_;
 }
 
@@ -46,10 +46,20 @@ 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_);
+    SENF_ASSERT(module_ && "Connector not registered: Missing route() or noroute()");
     return *module_;
 }
 
+prefix_ void senf::ppi::connector::Connector::tracing(TraceState state)
+{
+    traceState_ = state;
+}
+
+prefix_ senf::ppi::connector::Connector::TraceState senf::ppi::connector::Connector::tracing()
+{
+    return traceState_;
+}
+
 ////////////////////////////////////////
 // protected members
 
@@ -100,12 +110,14 @@ prefix_ bool senf::ppi::connector::PassiveConnector::throttled()
 
 prefix_ void senf::ppi::connector::PassiveConnector::emitThrottle()
 {
+    throttleTrace("OUT", "throttle");
     if (connected())
         peer().notifyThrottle();
 }
 
 prefix_ void senf::ppi::connector::PassiveConnector::emitUnthrottle()
 {
+    throttleTrace("OUT", "unthrottle");
     if (connected()) {
         peer().notifyUnthrottle();
         v_unthrottleEvent();
@@ -140,7 +152,8 @@ prefix_ void senf::ppi::connector::PassiveConnector::throttle()
     if (!throttled()) {
         nativeThrottled_ = true;
         emitThrottle();
-    }
+    } else
+        nativeThrottled_ = true;
 }
 
 prefix_ void senf::ppi::connector::PassiveConnector::unthrottle()
@@ -162,10 +175,12 @@ prefix_ senf::ppi::connector::PassiveConnector::PassiveConnector()
 
 prefix_ void senf::ppi::connector::PassiveConnector::emit()
 {
-    // No event callback has been registered (onEvent() call missing)
-    SENF_ASSERT(callback_);
+    // No event callback has been registered (onRequest() call missing)
+    SENF_ASSERT(callback_ && "senf::ppi::connector::PassiveConnector: missing onRequest()");
     if (!throttled())
         callback_();
+    else
+        throttleTrace("IN ", "queueing packet");
 }
 
 ///////////////////////////////////////////////////////////////////////////
@@ -232,7 +247,8 @@ 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();
 }
 
@@ -275,6 +291,7 @@ prefix_ senf::ppi::connector::InputConnector & senf::ppi::connector::OutputConne
 
 prefix_ void senf::ppi::connector::OutputConnector::operator()(Packet const & p)
 {
+    trace(p, "OUT");
     if (connected())
         peer().enqueue(p);
 }