Adding FIXMEs: if delay is FOREVER, session should be terminated
authorChristian Grothoff <christian@grothoff.org>
Sun, 23 Oct 2011 15:18:48 +0000 (15:18 +0000)
committerChristian Grothoff <christian@grothoff.org>
Sun, 23 Oct 2011 15:18:48 +0000 (15:18 +0000)
src/transport/plugin_transport_http.c
src/transport/plugin_transport_http_client.c
src/transport/plugin_transport_http_server.c
src/transport/plugin_transport_tcp.c
src/transport/plugin_transport_udp.c
src/transport/plugin_transport_wlan.c

index 784dd30026e8741b9133324961e35e9ab3bf5ff0..430d13330e637a1f8399ecac073bfbacc815e889 100644 (file)
@@ -248,6 +248,7 @@ http_plugin_address_suggested (void *cls, const void *addr, size_t addrlen)
   return GNUNET_OK;
 }
 
+
 struct GNUNET_TIME_Relative
 http_plugin_receive (void *cls, const struct GNUNET_PeerIdentity * peer,
     const struct  GNUNET_MessageHeader * message,
index a2024953c9498afe33eed9cf6651f5bd62eab87c..a27997d33fccd877a902e7747d5ad5b4db7c871f 100644 (file)
@@ -322,7 +322,11 @@ client_receive_mst_cb (void *cls, void *client,
   struct GNUNET_TIME_Relative delay;
 
   delay = http_plugin_receive (s, &s->target, message, s, s->addr, s->addrlen);
-  s->next_receive = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), delay);
+  if (delay.rel_value == GNUNET_TIME_UNIT_FOREVER_REL.rel_value)
+  {
+    // FIXME: terminate connection!
+  }
+  s->next_receive = GNUNET_TIME_relative_to_absolute (delay);
 
   if (GNUNET_TIME_absolute_get().abs_value < s->next_receive.abs_value)
   {
index 158532aca7c5b4eb9087630f00b58b1012d562c6..7733c63231a92a9c923bf3a547139030f326af4b 100644 (file)
@@ -278,8 +278,11 @@ server_receive_mst_cb (void *cls, void *client,
   struct GNUNET_TIME_Relative delay;
 
   delay = http_plugin_receive (s, &s->target, message, s, s->addr, s->addrlen);
-
-  s->next_receive = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), delay);
+  if (delay.rel_value == GNUNET_TIME_UNIT_FOREVER_REL.rel_value)
+  {
+    // FIXME: terminate connection!
+  }
+  s->next_receive = GNUNET_TIME_relative_to_absolute (delay);
 
   if (delay.rel_value > 0)
   {
index 5a77f25b57acee860475c677afaa245e57e07add..edbcb0e17a8ef531d2fabc40de40e7c7861f1e64 100644 (file)
@@ -1685,6 +1685,8 @@ delayed_done (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
                                      NULL, 0);
   if (delay.rel_value == 0)
     GNUNET_SERVER_receive_done (session->client, GNUNET_OK);
+  else if (delay.rel_value == GNUNET_TIME_UNIT_FOREVER_REL.rel_value)
+    GNUNET_SERVER_receive_done (session->client, GNUNET_SYSERR);
   else
     session->receive_delay_task =
         GNUNET_SCHEDULER_add_delayed (delay, &delayed_done, session);
index 9812416de66aedc0906d127b06181c824405a1ce..077fe38e3330bd39144087fe2bb6fa9a2a66d6f6 100644 (file)
@@ -861,6 +861,10 @@ process_inbound_tokenized_messages (void *cls, void *client,
                    "Giving Session %X %s  to transport\n", si->session, GNUNET_i2s(&si->session->target));
   delay = plugin->env->receive (plugin->env->cls, &si->sender, hdr, &distance, 1, si->session,
                         si->arg, si->args);
+  if (delay.rel_value == GNUNET_TIME_UNIT_FOREVER_REL.rel_value)
+  {
+    // FIXME: terminate session!
+  }
   si->session->flow_delay_for_other_peer = delay;
 }
 
index b3faf4480b32a1e1de1dee621de49c5005356807..160b5924c0e4a84d796a4fc597040ed0fe65ee55 100644 (file)
@@ -2333,7 +2333,7 @@ process_data (void *cls, void *client, const struct GNUNET_MessageHeader *hdr)
   GNUNET_assert (cls != NULL);
   struct Session *session = (struct Session *) client;
   struct Plugin *plugin = (struct Plugin *) cls;
-
+  struct GNUNET_TIME_Relative delay;
   struct GNUNET_ATS_Information distance;
 
   distance.type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE);
@@ -2348,11 +2348,16 @@ process_data (void *cls, void *client, const struct GNUNET_MessageHeader *hdr)
                    htons (hdr->size));
 #endif
 
-  plugin->env->receive (plugin->env->cls, &(session->target), hdr,
-                        (const struct GNUNET_ATS_Information *)
-                        &distance, 1, session,
-                        (const char *) &session->mac->addr,
-                        sizeof (session->mac->addr));
+  delay = plugin->env->receive (plugin->env->cls, &(session->target), hdr,
+                               (const struct GNUNET_ATS_Information *)
+                               &distance, 1, session,
+                               (const char *) &session->mac->addr,
+                               sizeof (session->mac->addr));
+  if (delay.rel_value == GNUNET_TIME_UNIT_FOREVER_REL.rel_value)
+  {
+    // FIXME: terminate session!
+  }
+
 }
 
 /**