Merge branch 'master' of ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / cadet / cadet_api_new.c
index 100c02a694573453a37ad40c948f21b1c3da210a..2d5d853b3700fc210e0be7cdec10438f1fd6700a 100644 (file)
@@ -441,22 +441,6 @@ notify_window_size (struct GNUNET_CADET_Channel *ch)
 }
 
 
-/**
- * Allow the MQ implementation to send the next message.
- *
- * @param cls Closure (channel whose mq to activate).
- */
-static void
-cadet_mq_send_continue (void *cls)
-{
-  struct GNUNET_CADET_Channel *ch = cls;
-
-  ch->mq_cont = NULL;
-  GNUNET_assert (NULL == ch->pending_env);
-  GNUNET_MQ_impl_send_continue (ch->mq);
-}
-
-
 /**
  * Transmit the next message from our queue.
  *
@@ -482,13 +466,10 @@ cadet_mq_send_now (void *cls)
     return;
   }
   ch->allow_send--;
-  GNUNET_MQ_impl_send_in_flight (ch->mq);
   ch->pending_env = NULL;
-  GNUNET_MQ_notify_sent (env,
-                         &cadet_mq_send_continue,
-                         ch);
   GNUNET_MQ_send (ch->cadet->mq,
                   env);
+  GNUNET_MQ_impl_send_continue (ch->mq);
 }
 
 
@@ -604,6 +585,11 @@ cadet_mq_cancel_impl (struct GNUNET_MQ_Handle *mq,
   GNUNET_assert (NULL != ch->pending_env);
   GNUNET_MQ_discard (ch->pending_env);
   ch->pending_env = NULL;
+  if (NULL != ch->mq_cont)
+  {
+    GNUNET_SCHEDULER_cancel (ch->mq_cont);
+    ch->mq_cont = NULL;
+  }
 }
 
 
@@ -640,7 +626,6 @@ handle_channel_created (void *cls,
     struct GNUNET_CADET_LocalChannelDestroyMessage *d_msg;
     struct GNUNET_MQ_Envelope *env;
 
-    GNUNET_break (0);
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "No handler for incoming channel %X (on port %s, recently closed?)\n",
          ntohl (ccn.channel_of_client),
@@ -696,16 +681,18 @@ handle_channel_destroy (void *cls,
   struct GNUNET_CADET_Handle *h = cls;
   struct GNUNET_CADET_Channel *ch;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received channel destroy for channel %X from CADET service\n",
-       ntohl (msg->ccn.channel_of_client));
   ch = find_channel (h,
                      msg->ccn);
   if (NULL == ch)
   {
-    GNUNET_break (0);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Received channel destroy for unknown channel %X from CADET service (recently close?)\n",
+         ntohl (msg->ccn.channel_of_client));
     return;
   }
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Received channel destroy for channel %X from CADET service\n",
+       ntohl (msg->ccn.channel_of_client));
   destroy_channel (ch);
 }
 
@@ -722,8 +709,6 @@ static int
 check_local_data (void *cls,
                   const struct GNUNET_CADET_LocalData *message)
 {
-  struct GNUNET_CADET_Handle *h = cls;
-  struct GNUNET_CADET_Channel *ch;
   uint16_t size;
 
   size = ntohs (message->header.size);
@@ -732,15 +717,6 @@ check_local_data (void *cls,
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
-
-  ch = find_channel (h,
-                     message->ccn);
-  if (NULL == ch)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
   return GNUNET_OK;
 }
 
@@ -765,8 +741,9 @@ handle_local_data (void *cls,
                      message->ccn);
   if (NULL == ch)
   {
-    GNUNET_break (0);
-    reconnect (h);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Unknown channel %X for incoming data (recently closed?)\n",
+         ntohl (message->ccn.channel_of_client));
     return;
   }
 
@@ -1182,6 +1159,7 @@ destroy_port_cb (void *cls,
   /* struct GNUNET_CADET_Handle *handle = cls; */
   struct GNUNET_CADET_Port *port = value;
 
+  /* This is a warning, the app should have cleanly closed all open ports */
   GNUNET_break (0);
   GNUNET_CADET_close_port (port);
   return GNUNET_OK;