-bringing copyright tags up to FSF standard
[oweals/gnunet.git] / src / transport / gnunet-service-transport_plugins.c
index c5b15cf42aa09d444ba23c5e44500c92989d7c1e..3e0e6601dc0b616c63b78e6d1419bb4074a9d2a1 100644 (file)
@@ -1,21 +1,21 @@
 /*
-     This file is part of GNUnet.
-     (C) 2010,2011 Christian Grothoff (and other contributing authors)
-
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+  This file is part of GNUnet.
+  Copyright (C) 2010-2014 Christian Grothoff (and other contributing authors)
+
+  GNUnet is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published
+  by the Free Software Foundation; either version 3, or (at your
+  option) any later version.
+
+  GNUnet is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with GNUnet; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+  Boston, MA 02111-1307, USA.
 */
 
 /**
@@ -78,7 +78,6 @@ static struct TransportPlugin *plugins_head;
 static struct TransportPlugin *plugins_tail;
 
 
-
 /**
  * Load and initialize all plugins.  The respective functions will be
  * invoked by the plugins when the respective events happen.  The
@@ -94,8 +93,6 @@ static struct TransportPlugin *plugins_tail;
  */
 void
 GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
-                  GNUNET_TRANSPORT_RegisterQuotaNotification register_quota_cb,
-                  GNUNET_TRANSPORT_UnregisterQuotaNotification unregister_quota_cb,
                   GNUNET_TRANSPORT_AddressNotification address_cb,
                   GNUNET_TRANSPORT_SessionStart session_start_cb,
                   GNUNET_TRANSPORT_SessionEnd session_end_cb,
@@ -144,15 +141,13 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
     plug->env.session_end = session_end_cb;
     plug->env.get_address_type = address_type_cb;
     plug->env.update_address_metrics = metric_update_cb;
-    plug->env.register_quota_notification = register_quota_cb;
-    plug->env.unregister_quota_notification = unregister_quota_cb;
     plug->env.max_connections = tneigh;
     plug->env.stats = GST_stats;
     GNUNET_CONTAINER_DLL_insert (plugins_head, plugins_tail, plug);
   }
   GNUNET_free (plugs);
   next = plugins_head;
-  while (next != NULL)
+  while (NULL != next)
   {
     plug = next;
     next = plug->next;
@@ -195,7 +190,7 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
     }
     if (NULL == plug->api->check_address)
     {
-       fail = GNUNET_YES;
+      fail = GNUNET_YES;
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   _("Missing function `%s' in transport plugin for `%s'\n"),
                   "check_address",
@@ -203,7 +198,7 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
     }
     if (NULL == plug->api->get_session)
     {
-       fail = GNUNET_YES;
+      fail = GNUNET_YES;
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   _("Missing function `%s' in transport plugin for `%s'\n"),
                   "get_session",
@@ -211,7 +206,7 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
     }
     if (NULL == plug->api->get_network)
     {
-       fail = GNUNET_YES;
+      fail = GNUNET_YES;
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   _("Missing function `%s' in transport plugin for `%s'\n"),
                   "get_network",
@@ -219,7 +214,7 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
     }
     if (NULL == plug->api->send)
     {
-       fail = GNUNET_YES;
+      fail = GNUNET_YES;
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   _("Missing function `%s' in transport plugin for `%s'\n"),
                   "send",
@@ -300,13 +295,14 @@ GST_plugins_unload ()
 struct GNUNET_TRANSPORT_PluginFunctions *
 GST_plugins_find (const char *name)
 {
-  struct TransportPlugin *head = plugins_head;
+  struct TransportPlugin *pos;
 
-  while ((head != NULL) && (0 != strcmp (name, head->short_name)))
-    head = head->next;
-  if (NULL == head)
+  for (pos = plugins_head; NULL != pos; pos = pos->next)
+    if (0 == strcmp (name, pos->short_name))
+      break;
+  if (NULL == pos)
     return NULL;
-  return head->api;
+  return pos->api;
 }
 
 
@@ -323,23 +319,19 @@ GST_plugins_find (const char *name)
 struct GNUNET_TRANSPORT_PluginFunctions *
 GST_plugins_printer_find (const char *name)
 {
-  struct TransportPlugin *head = plugins_head;
-
+  struct TransportPlugin *pos;
   char *stripped = GNUNET_strdup (name);
   char *sep = strchr (stripped, '_');
+
   if (NULL != sep)
     sep[0] = '\0';
-
-  while (head != NULL)
-  {
-    if (head->short_name == strstr (head->short_name, stripped))
+  for (pos = plugins_head; NULL != pos; pos = pos->next)
+    if (pos->short_name == strstr (pos->short_name, stripped))
         break;
-    head = head->next;
-  }
   GNUNET_free (stripped);
-  if (NULL == head)
+  if (NULL == pos)
     return NULL;
-  return head->api;
+  return pos->api;
 }
 
 
@@ -357,11 +349,8 @@ GST_plugins_a2s (const struct GNUNET_HELLO_Address *address)
   static char unable_to_show[1024];
   static const char *s;
 
-  if (address == NULL)
-  {
-       GNUNET_break (0); /* a HELLO address cannot be NULL */
-    return "<invalid>";
-  }
+  if (NULL == address)
+    return "<NULL>";
   if (0 == address->address_length)
     return TRANSPORT_SESSION_INBOUND_STRING; /* Addresse with length 0 are inbound, address->address itself may be NULL */
   api = GST_plugins_printer_find (address->transport_name);
@@ -380,4 +369,25 @@ GST_plugins_a2s (const struct GNUNET_HELLO_Address *address)
 }
 
 
+/**
+ * Register callback with all plugins to monitor their status.
+ *
+ * @param cb callback to register, NULL to unsubscribe
+ * @param cb_cls closure for @a cb
+ */
+void
+GST_plugins_monitor_subscribe (GNUNET_TRANSPORT_SessionInfoCallback cb,
+                              void *cb_cls)
+{
+  struct TransportPlugin *pos;
+
+  for (pos = plugins_head; NULL != pos; pos = pos->next)
+    if (NULL == pos->api->setup_monitor)
+      GNUNET_break (0);
+    else
+      pos->api->setup_monitor (pos->api->cls,
+                              cb, cb_cls);
+}
+
+
 /* end of file gnunet-service-transport_plugins.c */