gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r18588 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r18588 - gnunet/src/transport
Date: Wed, 14 Dec 2011 11:25:30 +0100

Author: wachs
Date: 2011-12-14 11:25:30 +0100 (Wed, 14 Dec 2011)
New Revision: 18588

Modified:
   gnunet/src/transport/plugin_transport_http.c
   gnunet/src/transport/plugin_transport_http.h
   gnunet/src/transport/plugin_transport_http_server.c
   gnunet/src/transport/plugin_transport_tcp.c
Log:
WAN/LAN for HTTP/S


Modified: gnunet/src/transport/plugin_transport_http.c
===================================================================
--- gnunet/src/transport/plugin_transport_http.c        2011-12-14 08:53:29 UTC 
(rev 18587)
+++ gnunet/src/transport/plugin_transport_http.c        2011-12-14 10:25:30 UTC 
(rev 18588)
@@ -264,16 +264,19 @@
 {
   struct Session *s = cls;
   struct Plugin *plugin = s->plugin;
-  struct GNUNET_ATS_Information distance;
   struct GNUNET_TIME_Relative delay;
+  struct GNUNET_ATS_Information atsi[2];
 
-  distance.type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE);
-  distance.value = htonl (1);
+  atsi[0].type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE);
+  atsi[0].value = htonl (1);
+  atsi[1].type = htonl (GNUNET_ATS_NETWORK_TYPE);
+  atsi[1].value = session->ats_address_network_type;
+  GNUNET_break (session->ats_address_network_type != ntohl 
(GNUNET_ATS_NET_UNSPECIFIED));
 
   delay =
       plugin->env->receive (plugin->env->cls, &s->target, message,
-                            (const struct GNUNET_ATS_Information *) &distance,
-                            1, s, s->addr, s->addrlen);
+                            (const struct GNUNET_ATS_Information *) &atsi,
+                            2, s, s->addr, s->addrlen);
   return delay;
 }
 
@@ -452,6 +455,7 @@
   s->addrlen = addrlen;
   s->next = NULL;
   s->next_receive = GNUNET_TIME_absolute_get_zero ();
+  s->ats_address_network_type = htonl (GNUNET_ATS_NET_UNSPECIFIED);
   return s;
 }
 
@@ -564,24 +568,37 @@
                      GNUNET_i2s (target));
 #endif
     int res = GNUNET_OK;
-
+    struct GNUNET_ATS_Information ats;
     if (addrlen == sizeof (struct IPv4HttpAddress))
     {
       struct IPv4HttpAddress *a4 = (struct IPv4HttpAddress *) addr;
+      struct sockaddr_in s4;
 
+      s4.sin_family = AF_INET;
+      s4.sin_addr.s_addr = a4->ipv4_addr;
+      s4.sin_port = a4->u4_port;
+      ats = plugin->env->get_address_type (plugin->env->cls, (const struct 
sockaddr *) &s4, sizeof (struct sockaddr_in));
+
       if ((ntohs (a4->u4_port) == 0) || (plugin->ipv4 == GNUNET_NO))
         res = GNUNET_SYSERR;
     }
     if (addrlen == sizeof (struct IPv6HttpAddress))
     {
       struct IPv6HttpAddress *a6 = (struct IPv6HttpAddress *) addr;
+      struct sockaddr_in6 s6;
 
+      s6.sin6_family = AF_INET6;
+      s6.sin6_addr = a6->ipv6_addr;
+      s6.sin6_port = a6->u6_port;
+      ats = plugin->env->get_address_type (plugin->env->cls, (const struct 
sockaddr *) &s6, sizeof (struct sockaddr_in6));
+
       if ((ntohs (a6->u6_port) == 0) || (plugin->ipv6 == GNUNET_NO))
         res = GNUNET_SYSERR;
     }
     if (res == GNUNET_OK)
     {
       s = create_session (plugin, target, addr, addrlen, cont, cont_cls);
+      s->ats_address_network_type = ats.value;
       GNUNET_CONTAINER_DLL_insert (plugin->head, plugin->tail, s);
       // initiate new connection
       res = client_connect (s);

Modified: gnunet/src/transport/plugin_transport_http.h
===================================================================
--- gnunet/src/transport/plugin_transport_http.h        2011-12-14 08:53:29 UTC 
(rev 18587)
+++ gnunet/src/transport/plugin_transport_http.h        2011-12-14 10:25:30 UTC 
(rev 18588)
@@ -325,6 +325,11 @@
   size_t addrlen;
 
   /**
+   * ATS network type in NBO
+   */
+  uint32_t ats_address_network_type;
+
+  /**
    * To whom are we talking to
    */
   struct GNUNET_PeerIdentity target;

Modified: gnunet/src/transport/plugin_transport_http_server.c
===================================================================
--- gnunet/src/transport/plugin_transport_http_server.c 2011-12-14 08:53:29 UTC 
(rev 18587)
+++ gnunet/src/transport/plugin_transport_http_server.c 2011-12-14 10:25:30 UTC 
(rev 18588)
@@ -369,7 +369,7 @@
   struct Session *t;
   struct ServerConnection *sc = NULL;
   const union MHD_ConnectionInfo *conn_info;
-
+  struct GNUNET_ATS_Information ats;
   struct IPv4HttpAddress a4;
   struct IPv6HttpAddress a6;
   struct sockaddr_in *s4;
@@ -521,6 +521,7 @@
                    GNUNET_i2s (&target));
 #endif
 
+
   switch (conn_info->client_addr->sa_family)
   {
   case (AF_INET):
@@ -529,6 +530,7 @@
     memcpy (&a4.ipv4_addr, &s4->sin_addr, sizeof (struct in_addr));
     a = &a4;
     a_len = sizeof (struct IPv4HttpAddress);
+    ats = plugin->env->get_address_type (plugin->env->cls, (const struct 
sockaddr *) s4, sizeof (struct sockaddr_in));
     break;
   case (AF_INET6):
     s6 = ((struct sockaddr_in6 *) conn_info->client_addr);
@@ -536,12 +538,14 @@
     memcpy (&a6.ipv6_addr, &s6->sin6_addr, sizeof (struct in6_addr));
     a = &a6;
     a_len = sizeof (struct IPv6HttpAddress);
+    ats = plugin->env->get_address_type (plugin->env->cls, (const struct 
sockaddr *) s6, sizeof (struct sockaddr_in6));
     break;
   default:
     GNUNET_break (0);
     goto error;
   }
   s = create_session (plugin, &target, a, a_len, NULL, NULL);
+  s->ats_address_network_type = ats.value;
 
   s->inbound = GNUNET_YES;
   s->next_receive = GNUNET_TIME_absolute_get_zero ();

Modified: gnunet/src/transport/plugin_transport_tcp.c
===================================================================
--- gnunet/src/transport/plugin_transport_tcp.c 2011-12-14 08:53:29 UTC (rev 
18587)
+++ gnunet/src/transport/plugin_transport_tcp.c 2011-12-14 10:25:30 UTC (rev 
18588)
@@ -581,6 +581,7 @@
   ret->client = client;
   ret->target = *target;
   ret->expecting_welcome = GNUNET_YES;
+  ret->ats_address_network_type = htonl (GNUNET_ATS_NET_UNSPECIFIED);
   pm = GNUNET_malloc (sizeof (struct PendingMessage) +
                       sizeof (struct WelcomeMessage));
   pm->msg = (const char *) &pm[1];




reply via email to

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