cancel address suggests
authorMatthias Wachs <wachs@net.in.tum.de>
Wed, 9 Nov 2011 16:37:44 +0000 (16:37 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Wed, 9 Nov 2011 16:37:44 +0000 (16:37 +0000)
src/ats/ats_api_scheduling.c
src/ats/gnunet-service-ats.c
src/ats/gnunet-service-ats_scheduling.c
src/ats/gnunet-service-ats_scheduling.h

index 13a4ce8308352f4c3c7a061c35e7fa02cbcdc795..dd06916a197c8c4304cfbfd9ad551b219669fab2 100644 (file)
@@ -499,8 +499,9 @@ process_ats_message (void *cls, const struct GNUNET_MessageHeader *msg)
     s = find_session (sh, session_id, &m->peer);
     if (s == NULL)
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "ATS tries to use outdated session `%s'\n", GNUNET_i2s(&m->peer));
-      GNUNET_break (0);
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS tries to use outdated session `%s'\n", GNUNET_i2s(&m->peer));
+      //GNUNET_break (0);
+      return;
     }
   }
   address.peer = m->peer;
@@ -633,6 +634,32 @@ GNUNET_ATS_suggest_address (struct GNUNET_ATS_SchedulingHandle *sh,
 }
 
 
+/**
+ * We would like to stop receiving address updates for this peer
+ *
+ * @param sh handle
+ * @param peer identity of the peer
+ */
+void
+GNUNET_ATS_suggest_address_cancel (struct GNUNET_ATS_SchedulingHandle *sh,
+                                   const struct GNUNET_PeerIdentity *peer)
+{
+  struct PendingMessage *p;
+  struct RequestAddressMessage *m;
+
+  p = GNUNET_malloc (sizeof (struct PendingMessage) +
+                     sizeof (struct RequestAddressMessage));
+  p->size = sizeof (struct RequestAddressMessage);
+  p->is_init = GNUNET_NO;
+  m = (struct RequestAddressMessage *) &p[1];
+  m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL);
+  m->header.size = htons (sizeof (struct RequestAddressMessage));
+  m->reserved = htonl (0);
+  m->peer = *peer;
+  GNUNET_CONTAINER_DLL_insert_tail (sh->pending_head, sh->pending_tail, p);
+  do_transmit (sh);
+}
+
 /**
  * We have updated performance statistics for a given address.  Note
  * that this function can be called for addresses that are currently
index ec374aef8e1aa9ce9da6615a6f3902ab851c6404..355a44c430a528693422e2c22261599d7fe89b09 100644 (file)
@@ -135,6 +135,9 @@ run (void *cls, struct GNUNET_SERVER_Handle *server,
     {&GAS_handle_request_address, NULL,
      GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS,
      sizeof (struct RequestAddressMessage)},
+    {&GAS_handle_request_address_cancel, NULL,
+     GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL,
+     sizeof (struct RequestAddressMessage)},
     {&GAS_handle_address_update, NULL,
      GNUNET_MESSAGE_TYPE_ATS_ADDRESS_UPDATE, 0},
     {&GAS_handle_address_in_use, NULL,
index fb404041793a8123f69d38570ef96b4b06487ac3..d289ae59450bf2ebe9c47478fb8dc3e5af7efe76 100644 (file)
@@ -170,6 +170,30 @@ GAS_handle_request_address (void *cls, struct GNUNET_SERVER_Client *client,
 }
 
 
+/**
+ * Handle 'request address' messages from clients.
+ *
+ * @param cls unused, NULL
+ * @param client client that sent the request
+ * @param message the request message
+ */
+void
+GAS_handle_request_address_cancel (void *cls, struct GNUNET_SERVER_Client *client,
+                            const struct GNUNET_MessageHeader *message)
+{
+  const struct RequestAddressMessage *msg =
+      (const struct RequestAddressMessage *) message;
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n",
+              "REQUEST_ADDRESS_CANCEL");
+  GNUNET_break (0 == ntohl (msg->reserved));
+
+  /* TODO */
+
+  GNUNET_SERVER_receive_done (client, GNUNET_OK);
+}
+
+
 /**
  * Handle 'address update' messages from clients.
  *
index b97430b62eb3a63f80552d6742d5ad4e8e6d3c1d..cb4e5e08e0c4f58dcf285ef6ed1a6d7507348c8e 100644 (file)
@@ -90,6 +90,16 @@ GAS_handle_request_address (void *cls, struct GNUNET_SERVER_Client *client,
                             const struct GNUNET_MessageHeader *message);
 
 
+/**
+ * Cancel 'request address' messages from clients.
+ *
+ * @param cls unused, NULL
+ * @param client client that sent the request
+ * @param message the request message
+ */
+void
+GAS_handle_request_address_cancel (void *cls, struct GNUNET_SERVER_Client *client,
+    const struct GNUNET_MessageHeader *message);
 
 /**
  * Handle 'address update' messages from clients.