-add tests
[oweals/gnunet.git] / src / ats / ats_api_connectivity.c
index f1898af3f789ee3d523c6641237ee2985d64c14a..d551aacd4ab6353f778d5e78a860cb27c250fefd 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2010-2015 GNUnet e.V.
+     Copyright (C) 2010-2016 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -71,11 +71,6 @@ struct GNUNET_ATS_ConnectivityHandle
    */
   struct GNUNET_CONTAINER_MultiPeerMap *sug_requests;
 
-  /**
-   * Connection to ATS service.
-   */
-  struct GNUNET_CLIENT_Connection *client;
-
   /**
    * Message queue for sending requests to the ATS service.
    */
@@ -106,11 +101,9 @@ reconnect (struct GNUNET_ATS_ConnectivityHandle *ch);
  * Re-establish the connection to the ATS service.
  *
  * @param cls handle to use to re-connect.
- * @param tc scheduler context
  */
 static void
-reconnect_task (void *cls,
-                const struct GNUNET_SCHEDULER_TaskContext *tc)
+reconnect_task (void *cls)
 {
   struct GNUNET_ATS_ConnectivityHandle *ch = cls;
 
@@ -132,11 +125,6 @@ force_reconnect (struct GNUNET_ATS_ConnectivityHandle *ch)
     GNUNET_MQ_destroy (ch->mq);
     ch->mq = NULL;
   }
-  if (NULL != ch->client)
-  {
-    GNUNET_CLIENT_disconnect (ch->client);
-    ch->client = NULL;
-  }
   ch->backoff = GNUNET_TIME_STD_BACKOFF (ch->backoff);
   ch->task = GNUNET_SCHEDULER_add_delayed (ch->backoff,
                                            &reconnect_task,
@@ -206,17 +194,17 @@ reconnect (struct GNUNET_ATS_ConnectivityHandle *ch)
   struct GNUNET_MQ_Envelope *ev;
   struct ClientStartMessage *init;
 
-  GNUNET_assert (NULL == ch->client);
-  ch->client = GNUNET_CLIENT_connect ("ats", ch->cfg);
-  if (NULL == ch->client)
+  GNUNET_assert (NULL == ch->mq);
+  ch->mq = GNUNET_CLIENT_connect (ch->cfg,
+                                  "ats",
+                                  handlers,
+                                  &error_handler,
+                                  ch);
+  if (NULL == ch->mq)
   {
     force_reconnect (ch);
     return;
   }
-  ch->mq = GNUNET_MQ_queue_for_connection_client (ch->client,
-                                                  handlers,
-                                                  &error_handler,
-                                                  ch);
   ev = GNUNET_MQ_msg (init,
                       GNUNET_MESSAGE_TYPE_ATS_START);
   init->start_flag = htonl (START_FLAG_CONNECTION_SUGGESTION);
@@ -283,11 +271,6 @@ GNUNET_ATS_connectivity_done (struct GNUNET_ATS_ConnectivityHandle *ch)
     GNUNET_MQ_destroy (ch->mq);
     ch->mq = NULL;
   }
-  if (NULL != ch->client)
-  {
-    GNUNET_CLIENT_disconnect (ch->client);
-    ch->client = NULL;
-  }
   if (NULL != ch->task)
   {
     GNUNET_SCHEDULER_cancel (ch->task);
@@ -319,9 +302,6 @@ GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch,
 {
   struct GNUNET_ATS_ConnectivitySuggestHandle *s;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Requesting ATS to suggest address for `%s'\n",
-       GNUNET_i2s (peer));
   s = GNUNET_new (struct GNUNET_ATS_ConnectivitySuggestHandle);
   s->ch = ch;
   s->id = *peer;
@@ -332,9 +312,15 @@ GNUNET_ATS_connectivity_suggest (struct GNUNET_ATS_ConnectivityHandle *ch,
                                          s,
                                          GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
   {
-    GNUNET_break (0);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Not requesting ATS to suggest address for `%s', request already pending\n",
+         GNUNET_i2s (peer));
+    GNUNET_free (s);
     return NULL;
   }
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Requesting ATS to suggest address for `%s'\n",
+       GNUNET_i2s (peer));
   if (NULL == ch->mq)
     return s;
   (void) transmit_suggestion (ch,
@@ -368,7 +354,8 @@ GNUNET_ATS_connectivity_suggest_cancel (struct GNUNET_ATS_ConnectivitySuggestHan
     GNUNET_free (sh);
     return;
   }
-  ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL);
+  ev = GNUNET_MQ_msg (m,
+                     GNUNET_MESSAGE_TYPE_ATS_REQUEST_ADDRESS_CANCEL);
   m->strength = htonl (0);
   m->peer = sh->id;
   GNUNET_MQ_send (ch->mq, ev);