aboutsummaryrefslogtreecommitdiff
path: root/src/ats/ats_api_peer_change_preference.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ats/ats_api_peer_change_preference.c')
-rw-r--r--src/ats/ats_api_peer_change_preference.c51
1 files changed, 22 insertions, 29 deletions
diff --git a/src/ats/ats_api_peer_change_preference.c b/src/ats/ats_api_peer_change_preference.c
index 322727e63..7290ebb7a 100644
--- a/src/ats/ats_api_peer_change_preference.c
+++ b/src/ats/ats_api_peer_change_preference.c
@@ -49,17 +49,16 @@ struct GNUNET_ATS_InformationRequestContext
49 GNUNET_ATS_PeerConfigurationInfoCallback info; 49 GNUNET_ATS_PeerConfigurationInfoCallback info;
50 50
51 void *info_cls; 51 void *info_cls;
52 52
53 struct GNUNET_PeerIdentity peer; 53 struct GNUNET_PeerIdentity peer;
54 54
55 GNUNET_SCHEDULER_TaskIdentifier task; 55 GNUNET_SCHEDULER_TaskIdentifier task;
56 56
57}; 57};
58 58
59 59
60static void 60static void
61exec_pcp (void *cls, 61exec_pcp (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
62 const struct GNUNET_SCHEDULER_TaskContext *tc)
63{ 62{
64 struct GNUNET_ATS_InformationRequestContext *irc = cls; 63 struct GNUNET_ATS_InformationRequestContext *irc = cls;
65 int32_t want_reserv; 64 int32_t want_reserv;
@@ -69,16 +68,13 @@ exec_pcp (void *cls,
69 68
70 rdelay = GNUNET_TIME_UNIT_ZERO; 69 rdelay = GNUNET_TIME_UNIT_ZERO;
71 want_reserv = irc->amount; 70 want_reserv = irc->amount;
72 ar = GNUNET_CONTAINER_multihashmap_get (irc->h->peers, &irc->peer.hashPubKey); 71 ar = GNUNET_CONTAINER_multihashmap_get (irc->h->peers, &irc->peer.hashPubKey);
73 if (NULL == ar) 72 if (NULL == ar)
74 { 73 {
75 /* attempt to change preference on peer that is not connected */ 74 /* attempt to change preference on peer that is not connected */
76 /* FIXME: this can happen if the 'service' didn't yet tell us about 75 /* FIXME: this can happen if the 'service' didn't yet tell us about
77 a new connection, fake it! */ 76 * a new connection, fake it! */
78 irc->info (irc->info_cls, 77 irc->info (irc->info_cls, &irc->peer, want_reserv, rdelay);
79 &irc->peer,
80 want_reserv,
81 rdelay);
82 GNUNET_free (irc); 78 GNUNET_free (irc);
83 return; 79 return;
84 } 80 }
@@ -89,21 +85,18 @@ exec_pcp (void *cls,
89 else if (want_reserv > 0) 85 else if (want_reserv > 0)
90 { 86 {
91 rdelay = 87 rdelay =
92 GNUNET_BANDWIDTH_tracker_get_delay (&ar->available_recv_window, 88 GNUNET_BANDWIDTH_tracker_get_delay (&ar->available_recv_window,
93 want_reserv); 89 want_reserv);
94 if (rdelay.rel_value == 0) 90 if (rdelay.rel_value == 0)
95 got_reserv = want_reserv; 91 got_reserv = want_reserv;
96 else 92 else
97 got_reserv = 0; /* all or nothing */ 93 got_reserv = 0; /* all or nothing */
98 } 94 }
99 else 95 else
100 got_reserv = 0; 96 got_reserv = 0;
101 GNUNET_BANDWIDTH_tracker_consume (&ar->available_recv_window, got_reserv); 97 GNUNET_BANDWIDTH_tracker_consume (&ar->available_recv_window, got_reserv);
102 98
103 irc->info (irc->info_cls, 99 irc->info (irc->info_cls, &irc->peer, got_reserv, rdelay);
104 &irc->peer,
105 got_reserv,
106 rdelay);
107 GNUNET_free (irc); 100 GNUNET_free (irc);
108} 101}
109 102
@@ -125,10 +118,10 @@ exec_pcp (void *cls,
125 */ 118 */
126struct GNUNET_ATS_InformationRequestContext * 119struct GNUNET_ATS_InformationRequestContext *
127GNUNET_ATS_peer_change_preference (struct GNUNET_ATS_SchedulingHandle *h, 120GNUNET_ATS_peer_change_preference (struct GNUNET_ATS_SchedulingHandle *h,
128 const struct GNUNET_PeerIdentity *peer, 121 const struct GNUNET_PeerIdentity *peer,
129 int32_t amount, uint64_t preference, 122 int32_t amount, uint64_t preference,
130 GNUNET_ATS_PeerConfigurationInfoCallback 123 GNUNET_ATS_PeerConfigurationInfoCallback
131 info, void *info_cls) 124 info, void *info_cls)
132{ 125{
133 struct GNUNET_ATS_InformationRequestContext *irc; 126 struct GNUNET_ATS_InformationRequestContext *irc;
134 127
@@ -157,8 +150,8 @@ GNUNET_ATS_peer_change_preference (struct GNUNET_ATS_SchedulingHandle *h,
157 */ 150 */
158void 151void
159GNUNET_ATS_peer_change_preference_cancel (struct 152GNUNET_ATS_peer_change_preference_cancel (struct
160 GNUNET_ATS_InformationRequestContext 153 GNUNET_ATS_InformationRequestContext
161 *irc) 154 *irc)
162{ 155{
163 GNUNET_SCHEDULER_cancel (irc->task); 156 GNUNET_SCHEDULER_cancel (irc->task);
164 GNUNET_free (irc); 157 GNUNET_free (irc);
@@ -219,10 +212,10 @@ change_preference_send_continuation (void *cls, int success)
219 */ 212 */
220struct GNUNET_ATS_InformationRequestContext * 213struct GNUNET_ATS_InformationRequestContext *
221GNUNET_ATS_peer_change_preference (struct GNUNET_ATS_SchedulingHandle *h, 214GNUNET_ATS_peer_change_preference (struct GNUNET_ATS_SchedulingHandle *h,
222 const struct GNUNET_PeerIdentity *peer, 215 const struct GNUNET_PeerIdentity *peer,
223 int32_t amount, uint64_t preference, 216 int32_t amount, uint64_t preference,
224 GNUNET_ATS_PeerConfigurationInfoCallback 217 GNUNET_ATS_PeerConfigurationInfoCallback
225 info, void *info_cls) 218 info, void *info_cls)
226{ 219{
227 struct GNUNET_ATS_InformationRequestContext *irc; 220 struct GNUNET_ATS_InformationRequestContext *irc;
228 struct PeerRecord *pr; 221 struct PeerRecord *pr;
@@ -287,8 +280,8 @@ GNUNET_ATS_peer_change_preference (struct GNUNET_ATS_SchedulingHandle *h,
287 */ 280 */
288void 281void
289GNUNET_ATS_peer_change_preference_cancel (struct 282GNUNET_ATS_peer_change_preference_cancel (struct
290 GNUNET_ATS_InformationRequestContext 283 GNUNET_ATS_InformationRequestContext
291 *irc) 284 *irc)
292{ 285{
293 struct GNUNET_ATS_SchedulingHandle *h = irc->h; 286 struct GNUNET_ATS_SchedulingHandle *h = irc->h;
294 struct PeerRecord *pr = irc->pr; 287 struct PeerRecord *pr = irc->pr;