gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r18587 - in gnunet/src: include transport


From: gnunet
Subject: [GNUnet-SVN] r18587 - in gnunet/src: include transport
Date: Wed, 14 Dec 2011 09:53:29 +0100

Author: wachs
Date: 2011-12-14 09:53:29 +0100 (Wed, 14 Dec 2011)
New Revision: 18587

Modified:
   gnunet/src/include/gnunet_transport_plugin.h
   gnunet/src/transport/gnunet-service-transport.c
   gnunet/src/transport/gnunet-service-transport_plugins.c
   gnunet/src/transport/gnunet-service-transport_plugins.h
   gnunet/src/transport/plugin_transport_tcp.c
Log:
removing ats functions from plugins, instead provide callback function


Modified: gnunet/src/include/gnunet_transport_plugin.h
===================================================================
--- gnunet/src/include/gnunet_transport_plugin.h        2011-12-14 08:52:27 UTC 
(rev 18586)
+++ gnunet/src/include/gnunet_transport_plugin.h        2011-12-14 08:53:29 UTC 
(rev 18587)
@@ -128,6 +128,20 @@
 
 
 /**
+ * Function that will be called to figure if an address is an loopback,
+ * LAN, WAN etc. address
+ *
+ * @param cls closure
+ * @param addr binary address
+ * @param addrlen length of the address
+ * @return ATS Information containing the network type
+ */
+typedef const struct GNUNET_ATS_Information
+(*GNUNET_TRANSPORT_AddressToType) (void *cls,
+                                   const struct sockaddr *addr,
+                                   size_t addrlen);
+
+/**
  * Function that will be called for each address the transport
  * is aware that it might be reachable under.
  *
@@ -203,12 +217,6 @@
   struct GNUNET_STATISTICS_Handle *stats;
 
   /**
-   * ATS Handle to request address type.
-   */
-  struct GNUNET_ATS_SchedulingHandle *ats;
-
-
-  /**
    * Function that should be called by the transport plugin
    * whenever a message is received.
    */
@@ -234,6 +242,13 @@
   GNUNET_TRANSPORT_SessionEnd session_end;
 
   /**
+   * Function that will be called to figure if an address is an loopback,
+   * LAN, WAN etc. address
+   */
+  GNUNET_TRANSPORT_AddressToType get_address_type;
+
+
+  /**
    * What is the maximum number of connections that this transport
    * should allow?  Transports that do not have sessions (such as
    * UDP) can ignore this value.
@@ -464,7 +479,6 @@
    * to a string (numeric conversion only).
    */
   GNUNET_TRANSPORT_AddressToString address_to_string;
-
 };
 
 

Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2011-12-14 08:52:27 UTC 
(rev 18586)
+++ gnunet/src/transport/gnunet-service-transport.c     2011-12-14 08:53:29 UTC 
(rev 18587)
@@ -360,6 +360,40 @@
 
 
 /**
+ * Function that will be called to figure if an address is an loopback,
+ * LAN, WAN etc. address
+ *
+ * @param cls closure
+ * @param addr binary address
+ * @param addrlen length of the address
+ * @return ATS Information containing the network type
+ */
+static const struct GNUNET_ATS_Information
+plugin_env_address_to_type (void *cls,
+                            const struct sockaddr *addr,
+                            size_t addrlen)
+{
+  struct GNUNET_ATS_Information ats;
+  ats.type = htonl (GNUNET_ATS_NETWORK_TYPE);
+  ats.value = htonl (GNUNET_ATS_NET_UNSPECIFIED);
+  if (GST_ats == NULL)
+  {
+    GNUNET_break (0);
+    return ats;
+  }
+  if ((addrlen != sizeof (struct sockaddr_in)) && (addrlen != sizeof (struct 
sockaddr_in6)))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Malformed address with length %u 
`%s'\n",
+                addrlen,
+                GNUNET_a2s(addr, addrlen));
+    GNUNET_break (0);
+    return ats;
+  }
+  return GNUNET_ATS_address_get_type(GST_ats, addr, addrlen);
+}
+
+
+/**
  * Function called by ATS to notify the callee that the
  * assigned bandwidth or address for a given peer was changed.  If the
  * callback is called with address/bandwidth assignments of zero, the
@@ -551,7 +585,8 @@
       GNUNET_ATS_scheduling_init (GST_cfg, &ats_request_address_change, NULL);
   GST_plugins_load (&plugin_env_receive_callback,
                     &plugin_env_address_change_notification,
-                    &plugin_env_session_end);
+                    &plugin_env_session_end,
+                    &plugin_env_address_to_type);
   GST_neighbours_start (NULL, &neighbours_connect_notification,
                         &neighbours_disconnect_notification);
   GST_clients_start (server);

Modified: gnunet/src/transport/gnunet-service-transport_plugins.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_plugins.c     2011-12-14 
08:52:27 UTC (rev 18586)
+++ gnunet/src/transport/gnunet-service-transport_plugins.c     2011-12-14 
08:53:29 UTC (rev 18587)
@@ -88,11 +88,13 @@
  * @param recv_cb function to call when data is received
  * @param address_cb function to call when our public addresses changed
  * @param session_end_cb function to call when a session was terminated
+ * @param address_type_cb function to call when a address type is requested
  */
 void
 GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
                   GNUNET_TRANSPORT_AddressNotification address_cb,
-                  GNUNET_TRANSPORT_SessionEnd session_end_cb)
+                  GNUNET_TRANSPORT_SessionEnd session_end_cb,
+                  GNUNET_TRANSPORT_AddressToType address_type_cb)
 {
   struct TransportPlugin *plug;
   struct TransportPlugin *next;
@@ -130,9 +132,9 @@
     plug->env.receive = recv_cb;
     plug->env.notify_address = address_cb;
     plug->env.session_end = session_end_cb;
+    plug->env.get_address_type = address_type_cb;
     plug->env.max_connections = tneigh;
     plug->env.stats = GST_stats;
-    plug->env.ats = GST_ats;
     GNUNET_CONTAINER_DLL_insert (plugins_head, plugins_tail, plug);
   }
   GNUNET_free (plugs);

Modified: gnunet/src/transport/gnunet-service-transport_plugins.h
===================================================================
--- gnunet/src/transport/gnunet-service-transport_plugins.h     2011-12-14 
08:52:27 UTC (rev 18586)
+++ gnunet/src/transport/gnunet-service-transport_plugins.h     2011-12-14 
08:53:29 UTC (rev 18587)
@@ -42,13 +42,14 @@
  * @param recv_cb function to call when data is received
  * @param address_cb function to call when our public addresses changed
  * @param session_end_cb function to call when a session was terminated
+ * @param address_type_cb function to call when a address type is requested
  */
 void
 GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
                   GNUNET_TRANSPORT_AddressNotification address_cb,
-                  GNUNET_TRANSPORT_SessionEnd session_end_cb);
+                  GNUNET_TRANSPORT_SessionEnd session_end_cb,
+                  GNUNET_TRANSPORT_AddressToType address_type_cb);
 
-
 /**
  * Unload all plugins
  */

Modified: gnunet/src/transport/plugin_transport_tcp.c
===================================================================
--- gnunet/src/transport/plugin_transport_tcp.c 2011-12-14 08:52:27 UTC (rev 
18586)
+++ gnunet/src/transport/plugin_transport_tcp.c 2011-12-14 08:53:29 UTC (rev 
18587)
@@ -1126,11 +1126,10 @@
     session->connect_addr = GNUNET_malloc (addrlen);
     memcpy (session->connect_addr, addr, addrlen);
     session->connect_alen = addrlen;
-    if ((addrlen != 0) && (plugin->env->ats != NULL))
+    if (addrlen != 0)
     {
       struct GNUNET_ATS_Information ats;
-      GNUNET_assert(plugin->env->ats != NULL);
-      ats = GNUNET_ATS_address_get_type(plugin->env->ats, sb ,sbs);
+      ats = plugin->env->get_address_type (plugin->env->cls, sb ,sbs);
       session->ats_address_network_type = ats.value;
     }
     else
@@ -1638,15 +1637,10 @@
         session->connect_alen = sizeof (struct IPv6TcpAddress);
       }
 
-      if (plugin->env->ats != NULL)
-      {
-        struct GNUNET_ATS_Information ats;
-        GNUNET_assert(plugin->env->ats != NULL);
-        ats = GNUNET_ATS_address_get_type(plugin->env->ats, vaddr ,alen);
-        session->ats_address_network_type = ats.value;
-      }
-      else
-        GNUNET_break (0);
+      struct GNUNET_ATS_Information ats;
+      ats = plugin->env->get_address_type (plugin->env->cls, vaddr ,alen);
+      session->ats_address_network_type = ats.value;
+
       GNUNET_free (vaddr);
     }
     else




reply via email to

[Prev in Thread] Current Thread [Next in Thread]