fix: ats suggested address for unknown plugin
authorMatthias Wachs <wachs@net.in.tum.de>
Thu, 23 Feb 2012 15:34:23 +0000 (15:34 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Thu, 23 Feb 2012 15:34:23 +0000 (15:34 +0000)
src/transport/gnunet-service-transport_neighbours.c

index 47baea956280cea66f53d84103e0d5027c2ed9db..3e8ef5aca5e661f1996abffafb90c034e4e8a049 100644 (file)
@@ -1495,7 +1495,24 @@ GST_neighbours_switch_to_address (const struct GNUNET_PeerIdentity *peer,
   /* Obtain an session for this address from plugin */
   struct GNUNET_TRANSPORT_PluginFunctions *papi;
   papi = GST_plugins_find (address->transport_name);
-  GNUNET_assert (papi != NULL);
+
+  if (papi == NULL)
+  {
+    /* we don't have the plugin for this address */
+    GNUNET_ATS_address_destroyed (GST_ats, n->address, NULL);
+
+    if (n->ats_suggest != GNUNET_SCHEDULER_NO_TASK)
+      GNUNET_SCHEDULER_cancel (n->ats_suggest);
+    n->ats_suggest =  GNUNET_SCHEDULER_add_delayed (ATS_RESPONSE_TIMEOUT,
+                                      ats_suggest_cancel,
+                                      n);
+    GNUNET_ATS_suggest_address (GST_ats, &n->id);
+    GNUNET_HELLO_address_free (n->address);
+    n->address = NULL;
+    n->session = NULL;
+    return GNUNET_NO;
+  }
+
   if (session == NULL)
   {
     n->session = papi->get_session (papi->cls, address);