gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r18559 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r18559 - gnunet/src/ats
Date: Mon, 12 Dec 2011 13:52:42 +0100

Author: wachs
Date: 2011-12-12 13:52:42 +0100 (Mon, 12 Dec 2011)
New Revision: 18559

Modified:
   gnunet/src/ats/gnunet-service-ats_addresses.c
   gnunet/src/ats/gnunet-service-ats_addresses.h
Log:
WAN/LAN detection


Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2011-12-12 12:05:39 UTC 
(rev 18558)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2011-12-12 12:52:42 UTC 
(rev 18559)
@@ -73,7 +73,21 @@
 
 };
 
+struct ATS_Network
+{
+  struct ATS_Network * next;
 
+  struct ATS_Network * prev;
+
+  void *network;
+  socklen_t length;
+};
+
+
+struct ATS_Network * net_head;
+
+struct ATS_Network * net_tail;
+
 static struct GNUNET_CONTAINER_MultiHashMap *addresses;
 
 static unsigned long long wan_quota_in;
@@ -82,7 +96,9 @@
 
 static unsigned int active_addr_count;
 
+static GNUNET_SCHEDULER_TaskIdentifier interface_task;
 
+
 /**
  * Update a bandwidth assignment for a peer.  This trivial method currently
  * simply assigns the same share to all active connections.
@@ -458,7 +474,67 @@
   // do nothing for now...
 }
 
+/**
+ * Returns where the address is located: LAN or WAN or ...
+ * @param addr address
+ * @param addrlen address length
+ * @return location as GNUNET_ATS_Information
+ */
 
+struct GNUNET_ATS_Information
+GAS_addresses_type (struct sockaddr * addr, socklen_t addrlen)
+{
+  struct GNUNET_ATS_Information ats;
+  /* FIXME */
+  ats.type = ntohl(GNUNET_ATS_ARRAY_TERMINATOR);
+  ats.value = ntohl(GNUNET_ATS_ARRAY_TERMINATOR);
+  return ats;
+}
+
+static int
+interface_proc (void *cls, const char *name,
+                int isDefault,
+                const struct sockaddr *
+                addr,
+                const struct sockaddr *
+                broadcast_addr,
+                const struct sockaddr *
+                netmask, socklen_t addrlen)
+{
+ // GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Address: %s\n", GNUNET_a2s(addr, 
addrlen));
+
+  struct ATS_Network *net = GNUNET_malloc(sizeof (struct ATS_Network) + 
addrlen);
+  /* Calculate network */
+  net->length = addrlen;
+
+  /* Store in list */
+  GNUNET_CONTAINER_DLL_insert(net_head, net_tail, net);
+
+  return GNUNET_OK;
+}
+
+static void
+delete_networks ()
+{
+  struct ATS_Network * cur = net_head;
+  while (cur != NULL)
+  {
+    GNUNET_CONTAINER_DLL_remove(net_head, net_tail, cur);
+    GNUNET_free (cur);
+    cur = net_head;
+  }
+}
+
+static void
+get_addresses (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  interface_task = GNUNET_SCHEDULER_NO_TASK;
+  delete_networks ();
+  GNUNET_OS_network_interfaces_list(interface_proc, NULL);
+
+  interface_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, 
get_addresses, NULL);
+}
+
 /**
  * Initialize address subsystem.
  *
@@ -476,6 +552,8 @@
                                                       "WAN_QUOTA_OUT",
                                                       &wan_quota_out));
   addresses = GNUNET_CONTAINER_multihashmap_create (128);
+
+  interface_task = GNUNET_SCHEDULER_add_now(get_addresses, NULL);
 }
 
 
@@ -512,6 +590,12 @@
 void
 GAS_addresses_done ()
 {
+  delete_networks ();
+  if (interface_task != GNUNET_SCHEDULER_NO_TASK)
+  {
+    GNUNET_SCHEDULER_cancel(interface_task);
+    interface_task = GNUNET_SCHEDULER_NO_TASK;
+  }
   GAS_addresses_destroy_all ();
   GNUNET_CONTAINER_multihashmap_destroy (addresses);
   addresses = NULL;

Modified: gnunet/src/ats/gnunet-service-ats_addresses.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.h       2011-12-12 12:05:39 UTC 
(rev 18558)
+++ gnunet/src/ats/gnunet-service-ats_addresses.h       2011-12-12 12:52:42 UTC 
(rev 18559)
@@ -45,7 +45,16 @@
 void
 GAS_addresses_done (void);
 
+/**
+ * Returns where the address is located: LAN or WAN or ...
+ * @param addr address
+ * @param addrlen address length
+ * @return location as GNUNET_ATS_Information
+ */
 
+struct GNUNET_ATS_Information
+GAS_addresses_type (struct sockaddr * addr, socklen_t addrlen);
+
 /**
  * This address is now used or not used anymore
  */




reply via email to

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