aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_reservations.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ats/gnunet-service-ats_reservations.c')
-rw-r--r--src/ats/gnunet-service-ats_reservations.c56
1 files changed, 22 insertions, 34 deletions
diff --git a/src/ats/gnunet-service-ats_reservations.c b/src/ats/gnunet-service-ats_reservations.c
index 492751254..f40e54516 100644
--- a/src/ats/gnunet-service-ats_reservations.c
+++ b/src/ats/gnunet-service-ats_reservations.c
@@ -27,7 +27,7 @@
27#include "gnunet-service-ats_reservations.h" 27#include "gnunet-service-ats_reservations.h"
28 28
29/** 29/**
30 * Number of seconds that available bandwidth carries over 30 * Number of seconds that available bandwidth carries over
31 * (can accumulate). 31 * (can accumulate).
32 */ 32 */
33#define MAX_BANDWIDTH_CARRY_S 5 33#define MAX_BANDWIDTH_CARRY_S 5
@@ -52,32 +52,27 @@ static struct GNUNET_CONTAINER_MultiHashMap *trackers;
52 */ 52 */
53struct GNUNET_TIME_Relative 53struct GNUNET_TIME_Relative
54GAS_reservations_reserve (const struct GNUNET_PeerIdentity *peer, 54GAS_reservations_reserve (const struct GNUNET_PeerIdentity *peer,
55 int32_t amount) 55 int32_t amount)
56{ 56{
57 struct GNUNET_BANDWIDTH_Tracker *tracker; 57 struct GNUNET_BANDWIDTH_Tracker *tracker;
58 struct GNUNET_TIME_Relative ret; 58 struct GNUNET_TIME_Relative ret;
59 59
60 tracker = GNUNET_CONTAINER_multihashmap_get (trackers, 60 tracker = GNUNET_CONTAINER_multihashmap_get (trackers, &peer->hashPubKey);
61 &peer->hashPubKey);
62 if (NULL == tracker) 61 if (NULL == tracker)
63 return GNUNET_TIME_UNIT_ZERO; /* not connected, satisfy now */ 62 return GNUNET_TIME_UNIT_ZERO; /* not connected, satisfy now */
64 if (amount >= 0) 63 if (amount >= 0)
65 { 64 {
66 ret = GNUNET_BANDWIDTH_tracker_get_delay (tracker, 65 ret = GNUNET_BANDWIDTH_tracker_get_delay (tracker, amount);
67 amount);
68 if (ret.rel_value > 0) 66 if (ret.rel_value > 0)
69 { 67 {
70 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 68 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
71 "Delay to satisfy reservation for %d bytes is %llu ms\n", 69 "Delay to satisfy reservation for %d bytes is %llu ms\n",
72 (int) amount, 70 (int) amount, (unsigned long long) ret.rel_value);
73 (unsigned long long) ret.rel_value);
74 return ret; 71 return ret;
75 } 72 }
76 } 73 }
77 (void) GNUNET_BANDWIDTH_tracker_consume (tracker, amount); 74 (void) GNUNET_BANDWIDTH_tracker_consume (tracker, amount);
78 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 75 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Reserved %d bytes\n", (int) amount);
79 "Reserved %d bytes\n",
80 (int) amount);
81 return GNUNET_TIME_UNIT_ZERO; 76 return GNUNET_TIME_UNIT_ZERO;
82} 77}
83 78
@@ -85,42 +80,37 @@ GAS_reservations_reserve (const struct GNUNET_PeerIdentity *peer,
85/** 80/**
86 * Set the amount of bandwidth the other peer could currently transmit 81 * Set the amount of bandwidth the other peer could currently transmit
87 * to us (as far as we know) to the given value. 82 * to us (as far as we know) to the given value.
88 * 83 *
89 * @param peer identity of the peer 84 * @param peer identity of the peer
90 * @param bandwidth_in currently available bandwidth from that peer to 85 * @param bandwidth_in currently available bandwidth from that peer to
91 * this peer (estimate) 86 * this peer (estimate)
92 */ 87 */
93void 88void
94GAS_reservations_set_bandwidth (const struct GNUNET_PeerIdentity *peer, 89GAS_reservations_set_bandwidth (const struct GNUNET_PeerIdentity *peer,
95 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in) 90 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
96{ 91{
97 struct GNUNET_BANDWIDTH_Tracker *tracker; 92 struct GNUNET_BANDWIDTH_Tracker *tracker;
98 93
99 tracker = GNUNET_CONTAINER_multihashmap_get (trackers, 94 tracker = GNUNET_CONTAINER_multihashmap_get (trackers, &peer->hashPubKey);
100 &peer->hashPubKey);
101 if (0 == ntohl (bandwidth_in.value__)) 95 if (0 == ntohl (bandwidth_in.value__))
102 { 96 {
103 GNUNET_assert (GNUNET_YES == 97 GNUNET_assert (GNUNET_YES ==
104 GNUNET_CONTAINER_multihashmap_remove (trackers, 98 GNUNET_CONTAINER_multihashmap_remove (trackers,
105 &peer->hashPubKey, 99 &peer->hashPubKey,
106 tracker)); 100 tracker));
107 GNUNET_free (tracker); 101 GNUNET_free (tracker);
108 return; 102 return;
109 } 103 }
110 if (NULL == tracker) 104 if (NULL == tracker)
111 { 105 {
112 tracker = GNUNET_malloc (sizeof (struct GNUNET_BANDWIDTH_Tracker)); 106 tracker = GNUNET_malloc (sizeof (struct GNUNET_BANDWIDTH_Tracker));
113 GNUNET_BANDWIDTH_tracker_init (tracker, 107 GNUNET_BANDWIDTH_tracker_init (tracker, bandwidth_in,
114 bandwidth_in, 108 MAX_BANDWIDTH_CARRY_S);
115 MAX_BANDWIDTH_CARRY_S); 109 GNUNET_CONTAINER_multihashmap_put (trackers, &peer->hashPubKey, tracker,
116 GNUNET_CONTAINER_multihashmap_put (trackers, 110 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
117 &peer->hashPubKey,
118 tracker,
119 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
120 return; 111 return;
121 } 112 }
122 GNUNET_BANDWIDTH_tracker_update_quota (tracker, 113 GNUNET_BANDWIDTH_tracker_update_quota (tracker, bandwidth_in);
123 bandwidth_in);
124} 114}
125 115
126 116
@@ -130,7 +120,7 @@ GAS_reservations_set_bandwidth (const struct GNUNET_PeerIdentity *peer,
130void 120void
131GAS_reservations_init () 121GAS_reservations_init ()
132{ 122{
133 trackers = GNUNET_CONTAINER_multihashmap_create(128); 123 trackers = GNUNET_CONTAINER_multihashmap_create (128);
134} 124}
135 125
136 126
@@ -142,10 +132,8 @@ GAS_reservations_init ()
142 * @param value the 'struct GNUNET_BANDWIDTH_Tracker' to free 132 * @param value the 'struct GNUNET_BANDWIDTH_Tracker' to free
143 * @return GNUNET_OK (continue to iterate) 133 * @return GNUNET_OK (continue to iterate)
144 */ 134 */
145static int 135static int
146free_tracker (void *cls, 136free_tracker (void *cls, const GNUNET_HashCode * key, void *value)
147 const GNUNET_HashCode * key,
148 void *value)
149{ 137{
150 struct GNUNET_BANDWIDTH_Tracker *tracker = value; 138 struct GNUNET_BANDWIDTH_Tracker *tracker = value;
151 139