diff options
Diffstat (limited to 'src/ats/gnunet-service-ats_reservations.c')
-rw-r--r-- | src/ats/gnunet-service-ats_reservations.c | 56 |
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 | */ |
53 | struct GNUNET_TIME_Relative | 53 | struct GNUNET_TIME_Relative |
54 | GAS_reservations_reserve (const struct GNUNET_PeerIdentity *peer, | 54 | GAS_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 | */ |
93 | void | 88 | void |
94 | GAS_reservations_set_bandwidth (const struct GNUNET_PeerIdentity *peer, | 89 | GAS_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, | |||
130 | void | 120 | void |
131 | GAS_reservations_init () | 121 | GAS_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 | */ |
145 | static int | 135 | static int |
146 | free_tracker (void *cls, | 136 | free_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 | ||