[Top][All Lists]
[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
*/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r18559 - gnunet/src/ats,
gnunet <=