gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r26443 - gnunet/src/transport
Date: Fri, 15 Mar 2013 10:53:24 +0100

Author: wachs
Date: 2013-03-15 10:53:24 +0100 (Fri, 15 Mar 2013)
New Revision: 26443

Modified:
   gnunet/src/transport/gnunet-service-transport.c
   gnunet/src/transport/gnunet-service-transport_manipulation.c
   gnunet/src/transport/gnunet-service-transport_manipulation.h
Log:
changes to manipulation


Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2013-03-15 09:48:20 UTC 
(rev 26442)
+++ gnunet/src/transport/gnunet-service-transport.c     2013-03-15 09:53:24 UTC 
(rev 26443)
@@ -667,7 +667,7 @@
   GST_blacklist_start (GST_server);
   GST_ats =
       GNUNET_ATS_scheduling_init (GST_cfg, &ats_request_address_change, NULL);
-  GST_manipulation_init ();
+  GST_manipulation_init (GST_cfg);
   GST_plugins_load (&GST_manipulation_recv,
                     &plugin_env_address_change_notification,
                     &plugin_env_session_end,

Modified: gnunet/src/transport/gnunet-service-transport_manipulation.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_manipulation.c        
2013-03-15 09:48:20 UTC (rev 26442)
+++ gnunet/src/transport/gnunet-service-transport_manipulation.c        
2013-03-15 09:53:24 UTC (rev 26443)
@@ -34,13 +34,33 @@
 #include "gnunet-service-transport.h"
 #include "transport.h"
 
-static struct GNUNET_CONTAINER_MultiHashMap *peers;
-
 #define DELAY 0
 #define DISTANCE 1
 
+struct GST_ManipulationHandle man_handle;
+
+
+struct GST_ManipulationHandle
+{
+       struct GNUNET_CONTAINER_MultiHashMap *peers;
+
+       /**
+        * General inbound delay
+        */
+       struct GNUNET_TIME_Relative delay_in;
+
+       /**
+        * General outbound delay
+        */
+       struct GNUNET_TIME_Relative delay_out;
+
+};
+
+
 struct TM_Peer;
 
+
+
 struct DelayQueueEntry
 {
        struct DelayQueueEntry *prev;
@@ -146,7 +166,7 @@
        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received traffic metrics for peer 
`%s'\n",
                        GNUNET_i2s(&tm->peer));
 
-       if (NULL == (tmp = GNUNET_CONTAINER_multihashmap_get (peers, 
&tm->peer.hashPubKey)))
+       if (NULL == (tmp = GNUNET_CONTAINER_multihashmap_get (man_handle.peers, 
&tm->peer.hashPubKey)))
        {
                        tmp = GNUNET_malloc (sizeof (struct TM_Peer));
                        tmp->peer = (tm->peer);
@@ -157,7 +177,7 @@
                                                        tmp->metrics[c][c2] = 
UINT32_MAX;
                                        }
                        }
-                       GNUNET_CONTAINER_multihashmap_put (peers, 
&tm->peer.hashPubKey, tmp, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
+                       GNUNET_CONTAINER_multihashmap_put (man_handle.peers, 
&tm->peer.hashPubKey, tmp, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
        }
 
        ats = (struct GNUNET_ATS_Information *) &tm[1];
@@ -211,7 +231,7 @@
        struct DelayQueueEntry *dqe;
        struct GNUNET_TIME_Relative delay;
 
-       if (NULL != (tmp = GNUNET_CONTAINER_multihashmap_get (peers, 
&target->hashPubKey)))
+       if (NULL != (tmp = GNUNET_CONTAINER_multihashmap_get (man_handle.peers, 
&target->hashPubKey)))
        {
                        /* Manipulate here */
                        /* Delay */
@@ -234,6 +254,25 @@
                                        return;
                        }
        }
+       else if (man_handle.delay_out.rel_value != 0)
+       {
+                       /* We have a delay */
+                       delay = man_handle.delay_out;
+                       dqe = GNUNET_malloc (sizeof (struct DelayQueueEntry) + 
msg_size);
+                       dqe->tmp = tmp;
+                       dqe->sent_at = GNUNET_TIME_absolute_add 
(GNUNET_TIME_absolute_get(), delay);
+                       dqe->cont = cont;
+                       dqe->cont_cls = cont_cls;
+                       dqe->msg = &dqe[1];
+                       dqe->msg_size = msg_size;
+                       dqe->timeout = timeout;
+                       memcpy (dqe->msg, msg, msg_size);
+                       GNUNET_CONTAINER_DLL_insert_tail (tmp->send_head, 
tmp->send_tail, dqe);
+                       if (GNUNET_SCHEDULER_NO_TASK == tmp->send_delay_task)
+                               tmp->send_delay_task 
=GNUNET_SCHEDULER_add_delayed (delay, &send_delayed, dqe);
+                       return;
+       }
+
        /* Normal sending */
        GST_neighbours_send (target, msg, msg_size, timeout, cont, cont_cls);
 }
@@ -254,7 +293,7 @@
 
        for (d = 0; d < ats_count; d++)
 
-       if (NULL != (tmp = GNUNET_CONTAINER_multihashmap_get (peers, 
&peer->hashPubKey)))
+       if (NULL != (tmp = GNUNET_CONTAINER_multihashmap_get (man_handle.peers, 
&peer->hashPubKey)))
        {
                        /* Manipulate distance */
                        for (d = 0; d < ats_count; d++)
@@ -291,9 +330,24 @@
 }
 
 void
-GST_manipulation_init ()
+GST_manipulation_init (const struct GNUNET_CONFIGURATION_Handle *GST_cfg)
 {
-       peers = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
+
+       if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_time (GST_cfg,
+                       "transport", "MANIPULATE_DELAY_IN", 
&man_handle.delay_in))
+               GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Delaying inbound traffic 
for %llu ms\n",
+                               (unsigned long long) 
man_handle.delay_in.rel_value);
+       else
+               man_handle.delay_in.rel_value = 0;
+
+       if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_time (GST_cfg,
+                       "transport", "MANIPULATE_DELAY_OUT", 
&man_handle.delay_out))
+               GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Delaying outbound traffic 
for %llu ms\n",
+                       (unsigned long long) man_handle.delay_out.rel_value);
+       else
+               man_handle.delay_out.rel_value = 0;
+
+       man_handle.peers = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
 }
 
 int free_tmps (void *cls,
@@ -305,7 +359,7 @@
        if (NULL != value)
        {
                        struct TM_Peer *tmp = (struct TM_Peer *) value;
-                       GNUNET_CONTAINER_multihashmap_remove (peers, key, 
value);
+                       GNUNET_CONTAINER_multihashmap_remove (man_handle.peers, 
key, value);
                        next = tmp->send_head;
                        while (NULL != (dqe = next))
                        {
@@ -326,10 +380,10 @@
 void
 GST_manipulation_stop ()
 {
-       GNUNET_CONTAINER_multihashmap_iterate (peers, &free_tmps,NULL);
+       GNUNET_CONTAINER_multihashmap_iterate (man_handle.peers, 
&free_tmps,NULL);
 
-       GNUNET_CONTAINER_multihashmap_destroy (peers);
-       peers = NULL;
+       GNUNET_CONTAINER_multihashmap_destroy (man_handle.peers);
+       man_handle.peers = NULL;
 }
 
 

Modified: gnunet/src/transport/gnunet-service-transport_manipulation.h
===================================================================
--- gnunet/src/transport/gnunet-service-transport_manipulation.h        
2013-03-15 09:48:20 UTC (rev 26442)
+++ gnunet/src/transport/gnunet-service-transport_manipulation.h        
2013-03-15 09:53:24 UTC (rev 26443)
@@ -54,7 +54,7 @@
     uint16_t sender_address_len);
 
 void
-GST_manipulation_init ();
+GST_manipulation_init (const struct GNUNET_CONFIGURATION_Handle *GST_cfg);
 
 void
 GST_manipulation_stop ();




reply via email to

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