diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-02-05 16:26:23 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-02-05 16:26:23 +0000 |
commit | 3d7aad54ba7e7d2e51f5090eabffb29715854ad8 (patch) | |
tree | 6d565f2b60e7e56d2e06be3e592b71fba7d8d5f8 /src/ats | |
parent | b2a4dcbce4f56046fbdcd4b114ec7a3feb4793fd (diff) | |
download | gnunet-3d7aad54ba7e7d2e51f5090eabffb29715854ad8.tar.gz gnunet-3d7aad54ba7e7d2e51f5090eabffb29715854ad8.zip |
separating out feedback from preferences
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/Makefile.am | 4 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats.c | 4 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_feedback.c | 124 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_feedback.h | 41 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_plugins.h | 1 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_preferences.c | 168 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_preferences.h | 53 |
7 files changed, 214 insertions, 181 deletions
diff --git a/src/ats/Makefile.am b/src/ats/Makefile.am index 123c868ed..59e8d178b 100644 --- a/src/ats/Makefile.am +++ b/src/ats/Makefile.am | |||
@@ -45,6 +45,7 @@ gnunet_ats_solver_eval_SOURCES = \ | |||
45 | gnunet-ats-solver-eval.c gnunet-ats-solver-eval.h \ | 45 | gnunet-ats-solver-eval.c gnunet-ats-solver-eval.h \ |
46 | gnunet-service-ats_addresses.c gnunet-service-ats_addresses.h \ | 46 | gnunet-service-ats_addresses.c gnunet-service-ats_addresses.h \ |
47 | gnunet-service-ats_plugins.c gnunet-service-ats_plugins.h \ | 47 | gnunet-service-ats_plugins.c gnunet-service-ats_plugins.h \ |
48 | gnunet-service-ats_feedback.c gnunet-service-ats_feedback.h \ | ||
48 | gnunet-service-ats_performance.c gnunet-service-ats_performance.h \ | 49 | gnunet-service-ats_performance.c gnunet-service-ats_performance.h \ |
49 | gnunet-service-ats_preferences.c gnunet-service-ats_preferences.h \ | 50 | gnunet-service-ats_preferences.c gnunet-service-ats_preferences.h \ |
50 | gnunet-service-ats_reservations.c gnunet-service-ats_reservations.h \ | 51 | gnunet-service-ats_reservations.c gnunet-service-ats_reservations.h \ |
@@ -107,10 +108,11 @@ libexec_PROGRAMS = \ | |||
107 | gnunet_service_ats_SOURCES = \ | 108 | gnunet_service_ats_SOURCES = \ |
108 | gnunet-service-ats.c gnunet-service-ats.h\ | 109 | gnunet-service-ats.c gnunet-service-ats.h\ |
109 | gnunet-service-ats_addresses.c gnunet-service-ats_addresses.h \ | 110 | gnunet-service-ats_addresses.c gnunet-service-ats_addresses.h \ |
110 | gnunet-service-ats_plugins.c gnunet-service-ats_plugins.h \ | ||
111 | gnunet-service-ats_connectivity.c gnunet-service-ats_connectivity.h \ | 111 | gnunet-service-ats_connectivity.c gnunet-service-ats_connectivity.h \ |
112 | gnunet-service-ats_feedback.c gnunet-service-ats_feedback.h \ | ||
112 | gnunet-service-ats_normalization.c gnunet-service-ats_normalization.h \ | 113 | gnunet-service-ats_normalization.c gnunet-service-ats_normalization.h \ |
113 | gnunet-service-ats_performance.c gnunet-service-ats_performance.h \ | 114 | gnunet-service-ats_performance.c gnunet-service-ats_performance.h \ |
115 | gnunet-service-ats_plugins.c gnunet-service-ats_plugins.h \ | ||
114 | gnunet-service-ats_preferences.c gnunet-service-ats_preferences.h \ | 116 | gnunet-service-ats_preferences.c gnunet-service-ats_preferences.h \ |
115 | gnunet-service-ats_scheduling.c gnunet-service-ats_scheduling.h \ | 117 | gnunet-service-ats_scheduling.c gnunet-service-ats_scheduling.h \ |
116 | gnunet-service-ats_reservations.c gnunet-service-ats_reservations.h | 118 | gnunet-service-ats_reservations.c gnunet-service-ats_reservations.h |
diff --git a/src/ats/gnunet-service-ats.c b/src/ats/gnunet-service-ats.c index a93be5466..0014f7350 100644 --- a/src/ats/gnunet-service-ats.c +++ b/src/ats/gnunet-service-ats.c | |||
@@ -111,7 +111,7 @@ client_disconnect_handler (void *cls, | |||
111 | GAS_scheduling_remove_client (client); | 111 | GAS_scheduling_remove_client (client); |
112 | GAS_connectivity_remove_client (client); | 112 | GAS_connectivity_remove_client (client); |
113 | GAS_normalization_preference_client_disconnect (client); | 113 | GAS_normalization_preference_client_disconnect (client); |
114 | GAS_addresses_preference_client_disconnect (client); | 114 | GAS_preference_client_disconnect (client); |
115 | } | 115 | } |
116 | 116 | ||
117 | 117 | ||
@@ -189,6 +189,7 @@ run (void *cls, | |||
189 | GSA_stats = GNUNET_STATISTICS_create ("ats", cfg); | 189 | GSA_stats = GNUNET_STATISTICS_create ("ats", cfg); |
190 | GAS_reservations_init (server); | 190 | GAS_reservations_init (server); |
191 | GAS_connectivity_init (); | 191 | GAS_connectivity_init (); |
192 | GAS_preference_init (); | ||
192 | GAS_normalization_start (); | 193 | GAS_normalization_start (); |
193 | GAS_addresses_init (server); | 194 | GAS_addresses_init (server); |
194 | if (GNUNET_OK != | 195 | if (GNUNET_OK != |
@@ -199,6 +200,7 @@ run (void *cls, | |||
199 | GAS_normalization_stop (); | 200 | GAS_normalization_stop (); |
200 | GAS_reservations_done (); | 201 | GAS_reservations_done (); |
201 | GAS_connectivity_done (); | 202 | GAS_connectivity_done (); |
203 | GAS_preference_done (); | ||
202 | if (NULL != GSA_stats) | 204 | if (NULL != GSA_stats) |
203 | { | 205 | { |
204 | GNUNET_STATISTICS_destroy (GSA_stats, GNUNET_NO); | 206 | GNUNET_STATISTICS_destroy (GSA_stats, GNUNET_NO); |
diff --git a/src/ats/gnunet-service-ats_feedback.c b/src/ats/gnunet-service-ats_feedback.c new file mode 100644 index 000000000..72f4aa039 --- /dev/null +++ b/src/ats/gnunet-service-ats_feedback.c | |||
@@ -0,0 +1,124 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | (C) 2011-2015 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | /** | ||
21 | * @file ats/gnunet-service-ats_feedback.c | ||
22 | * @brief ats service, handling of feedback | ||
23 | * @author Matthias Wachs | ||
24 | * @author Christian Grothoff | ||
25 | */ | ||
26 | #include "platform.h" | ||
27 | #include "gnunet-service-ats.h" | ||
28 | #include "gnunet-service-ats_plugins.h" | ||
29 | #include "gnunet-service-ats_feedback.h" | ||
30 | #include "ats.h" | ||
31 | |||
32 | |||
33 | /** | ||
34 | * Change the preference for a peer | ||
35 | * | ||
36 | * @param application the client sending this request | ||
37 | * @param peer the peer id | ||
38 | * @param scope the time interval for this feedback: [now - scope .. now] | ||
39 | * @param kind the preference kind to change | ||
40 | * @param score_abs the new preference score | ||
41 | */ | ||
42 | static void | ||
43 | preference_feedback (struct GNUNET_SERVER_Client *application, | ||
44 | const struct GNUNET_PeerIdentity *peer, | ||
45 | const struct GNUNET_TIME_Relative scope, | ||
46 | enum GNUNET_ATS_PreferenceKind kind, | ||
47 | float score_abs) | ||
48 | { | ||
49 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
50 | "Received PREFERENCE FEEDBACK for peer `%s'\n", | ||
51 | GNUNET_i2s (peer)); | ||
52 | GAS_plugin_preference_feedback (application, | ||
53 | peer, | ||
54 | scope, | ||
55 | kind, | ||
56 | score_abs); | ||
57 | } | ||
58 | |||
59 | |||
60 | /** | ||
61 | * Handle 'preference feedback' messages from clients. | ||
62 | * | ||
63 | * @param cls unused, NULL | ||
64 | * @param client client that sent the request | ||
65 | * @param message the request message | ||
66 | */ | ||
67 | void | ||
68 | GAS_handle_preference_feedback (void *cls, | ||
69 | struct GNUNET_SERVER_Client *client, | ||
70 | const struct GNUNET_MessageHeader *message) | ||
71 | { | ||
72 | const struct FeedbackPreferenceMessage *msg; | ||
73 | const struct PreferenceInformation *pi; | ||
74 | uint16_t msize; | ||
75 | uint32_t nump; | ||
76 | uint32_t i; | ||
77 | |||
78 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
79 | "Received PREFERENCE_FEEDBACK message\n"); | ||
80 | msize = ntohs (message->size); | ||
81 | if (msize < sizeof (struct FeedbackPreferenceMessage)) | ||
82 | { | ||
83 | GNUNET_break (0); | ||
84 | GNUNET_SERVER_receive_done (client, | ||
85 | GNUNET_SYSERR); | ||
86 | return; | ||
87 | } | ||
88 | msg = (const struct FeedbackPreferenceMessage *) message; | ||
89 | nump = ntohl (msg->num_feedback); | ||
90 | if (msize != | ||
91 | sizeof (struct FeedbackPreferenceMessage) + | ||
92 | nump * sizeof (struct PreferenceInformation)) | ||
93 | { | ||
94 | GNUNET_break (0); | ||
95 | GNUNET_SERVER_receive_done (client, | ||
96 | GNUNET_SYSERR); | ||
97 | return; | ||
98 | } | ||
99 | if (GNUNET_NO == | ||
100 | GNUNET_CONTAINER_multipeermap_contains (GSA_addresses, | ||
101 | &msg->peer)) | ||
102 | { | ||
103 | GNUNET_log(GNUNET_ERROR_TYPE_WARNING, | ||
104 | "Received PREFERENCE FEEDBACK for unknown peer `%s'\n", | ||
105 | GNUNET_i2s (&msg->peer)); | ||
106 | return; | ||
107 | } | ||
108 | |||
109 | GNUNET_STATISTICS_update (GSA_stats, | ||
110 | "# preference feedbacks requests processed", | ||
111 | 1, | ||
112 | GNUNET_NO); | ||
113 | pi = (const struct PreferenceInformation *) &msg[1]; | ||
114 | for (i = 0; i < nump; i++) | ||
115 | preference_feedback (client, | ||
116 | &msg->peer, | ||
117 | GNUNET_TIME_relative_ntoh(msg->scope), | ||
118 | (enum GNUNET_ATS_PreferenceKind) ntohl (pi[i].preference_kind), | ||
119 | pi[i].preference_value); | ||
120 | GNUNET_SERVER_receive_done (client, | ||
121 | GNUNET_OK); | ||
122 | } | ||
123 | |||
124 | /* end of gnunet-service-ats_feedback.c */ | ||
diff --git a/src/ats/gnunet-service-ats_feedback.h b/src/ats/gnunet-service-ats_feedback.h new file mode 100644 index 000000000..dab37d06e --- /dev/null +++ b/src/ats/gnunet-service-ats_feedback.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | (C) 2011-2014 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | /** | ||
21 | * @file ats/gnunet-service-ats_feedback.h | ||
22 | * @brief handle client feedback | ||
23 | * @author Matthias Wachs | ||
24 | * @author Christian Grothoff | ||
25 | */ | ||
26 | #ifndef GNUNET_SERVICE_ATS_FEEDBACK_H | ||
27 | #define GNUNET_SERVICE_ATS_FEEDBACK_H | ||
28 | |||
29 | /** | ||
30 | * Handle 'preference feedback' messages from clients. | ||
31 | * | ||
32 | * @param cls unused, NULL | ||
33 | * @param client client that sent the request | ||
34 | * @param message the request message | ||
35 | */ | ||
36 | void | ||
37 | GAS_handle_preference_feedback (void *cls, | ||
38 | struct GNUNET_SERVER_Client *client, | ||
39 | const struct GNUNET_MessageHeader *message); | ||
40 | |||
41 | #endif | ||
diff --git a/src/ats/gnunet-service-ats_plugins.h b/src/ats/gnunet-service-ats_plugins.h index a31024b1b..d100890f8 100644 --- a/src/ats/gnunet-service-ats_plugins.h +++ b/src/ats/gnunet-service-ats_plugins.h | |||
@@ -30,6 +30,7 @@ | |||
30 | #include "gnunet_util_lib.h" | 30 | #include "gnunet_util_lib.h" |
31 | #include "gnunet_ats_service.h" | 31 | #include "gnunet_ats_service.h" |
32 | #include "gnunet-service-ats.h" | 32 | #include "gnunet-service-ats.h" |
33 | #include "gnunet-service-ats_addresses.h" | ||
33 | #include "gnunet_statistics_service.h" | 34 | #include "gnunet_statistics_service.h" |
34 | #include "ats.h" | 35 | #include "ats.h" |
35 | 36 | ||
diff --git a/src/ats/gnunet-service-ats_preferences.c b/src/ats/gnunet-service-ats_preferences.c index cf0082f9d..f0b50b0eb 100644 --- a/src/ats/gnunet-service-ats_preferences.c +++ b/src/ats/gnunet-service-ats_preferences.c | |||
@@ -17,9 +17,8 @@ | |||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18 | Boston, MA 02111-1307, USA. | 18 | Boston, MA 02111-1307, USA. |
19 | */ | 19 | */ |
20 | |||
21 | /** | 20 | /** |
22 | * @file ats/gnunet-service-ats_performance.c | 21 | * @file ats/gnunet-service-ats_preferences.c |
23 | * @brief ats service, interaction with 'performance' API | 22 | * @brief ats service, interaction with 'performance' API |
24 | * @author Matthias Wachs | 23 | * @author Matthias Wachs |
25 | * @author Christian Grothoff | 24 | * @author Christian Grothoff |
@@ -114,7 +113,6 @@ struct PreferenceClient | |||
114 | /** | 113 | /** |
115 | * Next in DLL | 114 | * Next in DLL |
116 | */ | 115 | */ |
117 | |||
118 | struct PreferenceClient *next; | 116 | struct PreferenceClient *next; |
119 | 117 | ||
120 | /** | 118 | /** |
@@ -133,10 +131,6 @@ struct PreferenceClient | |||
133 | double f_rel_sum[GNUNET_ATS_PreferenceCount]; | 131 | double f_rel_sum[GNUNET_ATS_PreferenceCount]; |
134 | 132 | ||
135 | /** | 133 | /** |
136 | * List of peer preferences for this client | ||
137 | */ | ||
138 | |||
139 | /** | ||
140 | * Head of peer list | 134 | * Head of peer list |
141 | */ | 135 | */ |
142 | struct PreferencePeer *p_head; | 136 | struct PreferencePeer *p_head; |
@@ -147,6 +141,7 @@ struct PreferenceClient | |||
147 | struct PreferencePeer *p_tail; | 141 | struct PreferencePeer *p_tail; |
148 | }; | 142 | }; |
149 | 143 | ||
144 | |||
150 | /** | 145 | /** |
151 | * Preference peer | 146 | * Preference peer |
152 | */ | 147 | */ |
@@ -194,7 +189,6 @@ struct PreferencePeer | |||
194 | */ | 189 | */ |
195 | static struct GNUNET_CONTAINER_MultiPeerMap *preference_peers; | 190 | static struct GNUNET_CONTAINER_MultiPeerMap *preference_peers; |
196 | 191 | ||
197 | |||
198 | /** | 192 | /** |
199 | * Clients in DLL: head | 193 | * Clients in DLL: head |
200 | */ | 194 | */ |
@@ -234,7 +228,7 @@ find_preference_client (void *client) | |||
234 | */ | 228 | */ |
235 | static void | 229 | static void |
236 | update_relative_values_for_peer (const struct GNUNET_PeerIdentity *id, | 230 | update_relative_values_for_peer (const struct GNUNET_PeerIdentity *id, |
237 | enum GNUNET_ATS_PreferenceKind kind, | 231 | enum GNUNET_ATS_PreferenceKind kind, |
238 | struct PeerRelative *rp) | 232 | struct PeerRelative *rp) |
239 | { | 233 | { |
240 | struct PreferenceClient *c_cur; | 234 | struct PreferenceClient *c_cur; |
@@ -283,7 +277,7 @@ update_relative_values_for_peer (const struct GNUNET_PeerIdentity *id, | |||
283 | /* No client had any preferences for this type and any peer */ | 277 | /* No client had any preferences for this type and any peer */ |
284 | rp->f_rel[kind] = DEFAULT_REL_PREFERENCE; | 278 | rp->f_rel[kind] = DEFAULT_REL_PREFERENCE; |
285 | } | 279 | } |
286 | if (backup != rp->f_rel[kind]) | 280 | if (backup != rp->f_rel[kind]) |
287 | GAS_normalized_preference_changed (&rp->id, kind, rp->f_rel[kind]); | 281 | GAS_normalized_preference_changed (&rp->id, kind, rp->f_rel[kind]); |
288 | } | 282 | } |
289 | } | 283 | } |
@@ -493,7 +487,7 @@ update_abs_preference (struct PreferenceClient *c, | |||
493 | * @param client the client | 487 | * @param client the client |
494 | */ | 488 | */ |
495 | void | 489 | void |
496 | GAS_addresses_preference_client_disconnect (void *client) | 490 | GAS_preference_client_disconnect (struct GNUNET_SERVER_Client *client) |
497 | { | 491 | { |
498 | struct GAS_Addresses_Preference_Clients *pc; | 492 | struct GAS_Addresses_Preference_Clients *pc; |
499 | 493 | ||
@@ -513,7 +507,6 @@ GAS_addresses_preference_client_disconnect (void *client) | |||
513 | } | 507 | } |
514 | 508 | ||
515 | 509 | ||
516 | |||
517 | /** | 510 | /** |
518 | * Change the preference for a peer | 511 | * Change the preference for a peer |
519 | * | 512 | * |
@@ -522,11 +515,11 @@ GAS_addresses_preference_client_disconnect (void *client) | |||
522 | * @param kind the preference kind to change | 515 | * @param kind the preference kind to change |
523 | * @param score_abs the new preference score | 516 | * @param score_abs the new preference score |
524 | */ | 517 | */ |
525 | void | 518 | static void |
526 | GAS_addresses_preference_change (void *client, | 519 | preference_change (void *client, |
527 | const struct GNUNET_PeerIdentity *peer, | 520 | const struct GNUNET_PeerIdentity *peer, |
528 | enum GNUNET_ATS_PreferenceKind kind, | 521 | enum GNUNET_ATS_PreferenceKind kind, |
529 | float score_abs) | 522 | float score_abs) |
530 | { | 523 | { |
531 | struct GAS_Addresses_Preference_Clients *pc; | 524 | struct GAS_Addresses_Preference_Clients *pc; |
532 | 525 | ||
@@ -604,114 +597,17 @@ GAS_handle_preference_change (void *cls, | |||
604 | 1, GNUNET_NO); | 597 | 1, GNUNET_NO); |
605 | pi = (const struct PreferenceInformation *) &msg[1]; | 598 | pi = (const struct PreferenceInformation *) &msg[1]; |
606 | for (i = 0; i < nump; i++) | 599 | for (i = 0; i < nump; i++) |
607 | GAS_addresses_preference_change (client, | 600 | preference_change (client, |
608 | &msg->peer, | 601 | &msg->peer, |
609 | (enum GNUNET_ATS_PreferenceKind) | 602 | (enum GNUNET_ATS_PreferenceKind) |
610 | ntohl (pi[i].preference_kind), | 603 | ntohl (pi[i].preference_kind), |
611 | pi[i].preference_value); | 604 | pi[i].preference_value); |
612 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | 605 | GNUNET_SERVER_receive_done (client, GNUNET_OK); |
613 | } | 606 | } |
614 | 607 | ||
615 | 608 | ||
616 | |||
617 | |||
618 | /** | 609 | /** |
619 | * Change the preference for a peer | 610 | * Initialize preferences subsystem. |
620 | * | ||
621 | * @param application the client sending this request | ||
622 | * @param peer the peer id | ||
623 | * @param scope the time interval for this feedback: [now - scope .. now] | ||
624 | * @param kind the preference kind to change | ||
625 | * @param score_abs the new preference score | ||
626 | */ | ||
627 | void | ||
628 | GAS_addresses_preference_feedback (void *application, | ||
629 | const struct GNUNET_PeerIdentity *peer, | ||
630 | const struct GNUNET_TIME_Relative scope, | ||
631 | enum GNUNET_ATS_PreferenceKind kind, | ||
632 | float score_abs) | ||
633 | { | ||
634 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | ||
635 | "Received `%s' for peer `%s' for client %p\n", | ||
636 | "PREFERENCE FEEDBACK", | ||
637 | GNUNET_i2s (peer), | ||
638 | application); | ||
639 | |||
640 | if (GNUNET_NO == | ||
641 | GNUNET_CONTAINER_multipeermap_contains (GSA_addresses, | ||
642 | peer)) | ||
643 | { | ||
644 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | ||
645 | "Received `%s' for unknown peer `%s' from client %p\n", | ||
646 | "PREFERENCE FEEDBACK", | ||
647 | GNUNET_i2s (peer), | ||
648 | application); | ||
649 | return; | ||
650 | } | ||
651 | |||
652 | GAS_plugin_preference_feedback (application, | ||
653 | peer, | ||
654 | scope, | ||
655 | kind, | ||
656 | score_abs); | ||
657 | } | ||
658 | |||
659 | |||
660 | /** | ||
661 | * Handle 'preference feedback' messages from clients. | ||
662 | * | ||
663 | * @param cls unused, NULL | ||
664 | * @param client client that sent the request | ||
665 | * @param message the request message | ||
666 | */ | ||
667 | void | ||
668 | GAS_handle_preference_feedback (void *cls, | ||
669 | struct GNUNET_SERVER_Client *client, | ||
670 | const struct GNUNET_MessageHeader *message) | ||
671 | { | ||
672 | const struct FeedbackPreferenceMessage *msg; | ||
673 | const struct PreferenceInformation *pi; | ||
674 | uint16_t msize; | ||
675 | uint32_t nump; | ||
676 | uint32_t i; | ||
677 | |||
678 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
679 | "Received `%s' message\n", | ||
680 | "PREFERENCE_FEEDBACK"); | ||
681 | msize = ntohs (message->size); | ||
682 | if (msize < sizeof (struct FeedbackPreferenceMessage)) | ||
683 | { | ||
684 | GNUNET_break (0); | ||
685 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
686 | return; | ||
687 | } | ||
688 | msg = (const struct FeedbackPreferenceMessage *) message; | ||
689 | nump = ntohl (msg->num_feedback); | ||
690 | if (msize != | ||
691 | sizeof (struct FeedbackPreferenceMessage) + | ||
692 | nump * sizeof (struct PreferenceInformation)) | ||
693 | { | ||
694 | GNUNET_break (0); | ||
695 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
696 | return; | ||
697 | } | ||
698 | GNUNET_STATISTICS_update (GSA_stats, | ||
699 | "# preference feedbacks requests processed", | ||
700 | 1, GNUNET_NO); | ||
701 | pi = (const struct PreferenceInformation *) &msg[1]; | ||
702 | for (i = 0; i < nump; i++) | ||
703 | GAS_addresses_preference_feedback (client, | ||
704 | &msg->peer, | ||
705 | GNUNET_TIME_relative_ntoh(msg->scope), | ||
706 | (enum GNUNET_ATS_PreferenceKind) | ||
707 | ntohl (pi[i].preference_kind), | ||
708 | pi[i].preference_value); | ||
709 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
710 | } | ||
711 | |||
712 | |||
713 | /** | ||
714 | * Shutdown preferences subsystem. | ||
715 | */ | 611 | */ |
716 | void | 612 | void |
717 | GAS_preference_init () | 613 | GAS_preference_init () |
@@ -721,7 +617,6 @@ GAS_preference_init () | |||
721 | preference_peers = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO); | 617 | preference_peers = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO); |
722 | for (i = 0; i < GNUNET_ATS_PreferenceCount; i++) | 618 | for (i = 0; i < GNUNET_ATS_PreferenceCount; i++) |
723 | defvalues.f_rel[i] = DEFAULT_REL_PREFERENCE; | 619 | defvalues.f_rel[i] = DEFAULT_REL_PREFERENCE; |
724 | |||
725 | } | 620 | } |
726 | 621 | ||
727 | 622 | ||
@@ -734,14 +629,19 @@ GAS_preference_init () | |||
734 | * @return #GNUNET_OK to continue | 629 | * @return #GNUNET_OK to continue |
735 | */ | 630 | */ |
736 | static int | 631 | static int |
737 | free_peer (void *cls, const struct GNUNET_PeerIdentity *key, void *value) | 632 | free_peer (void *cls, |
633 | const struct GNUNET_PeerIdentity *key, | ||
634 | void *value) | ||
738 | { | 635 | { |
739 | struct PeerRelative *rp = value; | 636 | struct PeerRelative *rp = value; |
740 | if (GNUNET_YES | 637 | |
741 | == GNUNET_CONTAINER_multipeermap_remove (preference_peers, key, value)) | 638 | if (GNUNET_YES == |
742 | GNUNET_free(rp); | 639 | GNUNET_CONTAINER_multipeermap_remove (preference_peers, |
640 | key, | ||
641 | value)) | ||
642 | GNUNET_free (rp); | ||
743 | else | 643 | else |
744 | GNUNET_break(0); | 644 | GNUNET_break (0); |
745 | return GNUNET_OK; | 645 | return GNUNET_OK; |
746 | } | 646 | } |
747 | 647 | ||
@@ -751,6 +651,7 @@ free_client (struct PreferenceClient *pc) | |||
751 | { | 651 | { |
752 | struct PreferencePeer *next_p; | 652 | struct PreferencePeer *next_p; |
753 | struct PreferencePeer *p; | 653 | struct PreferencePeer *p; |
654 | |||
754 | next_p = pc->p_head; | 655 | next_p = pc->p_head; |
755 | while (NULL != (p = next_p)) | 656 | while (NULL != (p = next_p)) |
756 | { | 657 | { |
@@ -762,9 +663,6 @@ free_client (struct PreferenceClient *pc) | |||
762 | } | 663 | } |
763 | 664 | ||
764 | 665 | ||
765 | |||
766 | |||
767 | |||
768 | /** | 666 | /** |
769 | * Shutdown preferences subsystem. | 667 | * Shutdown preferences subsystem. |
770 | */ | 668 | */ |
@@ -780,7 +678,6 @@ GAS_preference_done () | |||
780 | GNUNET_SCHEDULER_cancel (aging_task); | 678 | GNUNET_SCHEDULER_cancel (aging_task); |
781 | aging_task = NULL; | 679 | aging_task = NULL; |
782 | } | 680 | } |
783 | |||
784 | next_pc = pc_head; | 681 | next_pc = pc_head; |
785 | while (NULL != (pc = next_pc)) | 682 | while (NULL != (pc = next_pc)) |
786 | { | 683 | { |
@@ -788,9 +685,9 @@ GAS_preference_done () | |||
788 | GNUNET_CONTAINER_DLL_remove(pc_head, pc_tail, pc); | 685 | GNUNET_CONTAINER_DLL_remove(pc_head, pc_tail, pc); |
789 | free_client (pc); | 686 | free_client (pc); |
790 | } | 687 | } |
791 | 688 | GNUNET_CONTAINER_multipeermap_iterate (preference_peers, | |
792 | GNUNET_CONTAINER_multipeermap_iterate (preference_peers, | 689 | &free_peer, |
793 | &free_peer, NULL); | 690 | NULL); |
794 | GNUNET_CONTAINER_multipeermap_destroy (preference_peers); | 691 | GNUNET_CONTAINER_multipeermap_destroy (preference_peers); |
795 | 692 | ||
796 | while (NULL != (pcur = preference_clients_head)) | 693 | while (NULL != (pcur = preference_clients_head)) |
@@ -809,8 +706,6 @@ GAS_preference_done () | |||
809 | } | 706 | } |
810 | 707 | ||
811 | 708 | ||
812 | |||
813 | |||
814 | /** | 709 | /** |
815 | * Normalize an updated preference value | 710 | * Normalize an updated preference value |
816 | * | 711 | * |
@@ -911,7 +806,8 @@ GAS_normalization_normalize_preference (void *client, | |||
911 | /* Start aging task */ | 806 | /* Start aging task */ |
912 | if (NULL == aging_task) | 807 | if (NULL == aging_task) |
913 | aging_task = GNUNET_SCHEDULER_add_delayed (PREF_AGING_INTERVAL, | 808 | aging_task = GNUNET_SCHEDULER_add_delayed (PREF_AGING_INTERVAL, |
914 | &preference_aging, NULL ); | 809 | &preference_aging, |
810 | NULL); | ||
915 | 811 | ||
916 | } | 812 | } |
917 | 813 | ||
diff --git a/src/ats/gnunet-service-ats_preferences.h b/src/ats/gnunet-service-ats_preferences.h index a214e81fc..94b3d6907 100644 --- a/src/ats/gnunet-service-ats_preferences.h +++ b/src/ats/gnunet-service-ats_preferences.h | |||
@@ -40,27 +40,12 @@ | |||
40 | 40 | ||
41 | 41 | ||
42 | /** | 42 | /** |
43 | * A preference client disconnected | 43 | * A preference client disconnected. |
44 | * | 44 | * |
45 | * @param client the client; FIXME: type!? | 45 | * @param client the client |
46 | */ | 46 | */ |
47 | void | 47 | void |
48 | GAS_addresses_preference_client_disconnect (void *client); | 48 | GAS_preference_client_disconnect (struct GNUNET_SERVER_Client *client); |
49 | |||
50 | |||
51 | /** | ||
52 | * Change the preference for a peer | ||
53 | * | ||
54 | * @param client the client sending this request; FIXME: type!? | ||
55 | * @param peer the peer id | ||
56 | * @param kind the preference kind to change | ||
57 | * @param score_abs the new preference score | ||
58 | */ | ||
59 | void | ||
60 | GAS_addresses_preference_change (void *client, | ||
61 | const struct GNUNET_PeerIdentity *peer, | ||
62 | enum GNUNET_ATS_PreferenceKind kind, | ||
63 | float score_abs); | ||
64 | 49 | ||
65 | 50 | ||
66 | /** | 51 | /** |
@@ -76,31 +61,6 @@ GAS_handle_preference_change (void *cls, | |||
76 | const struct GNUNET_MessageHeader *message); | 61 | const struct GNUNET_MessageHeader *message); |
77 | 62 | ||
78 | 63 | ||
79 | |||
80 | /** | ||
81 | * Application feedback on how good preference requirements are fulfilled | ||
82 | * for a specific preference in the given time scope [now - scope .. now] | ||
83 | * | ||
84 | * An application notifies ATS if (and only if) it has feedback information | ||
85 | * for a specific property. This value is valid until the feedback score is | ||
86 | * updated by the application. | ||
87 | * | ||
88 | * If the application has no feedback for this preference kind the application | ||
89 | * will not explicitly call. | ||
90 | * | ||
91 | * @param application the application sending this request; FIXME: type? | ||
92 | * @param peer the peer id | ||
93 | * @param scope the time interval this valid for: [now - scope .. now] | ||
94 | * @param kind the preference kind this feedback is intended for | ||
95 | * @param score_abs the new preference score | ||
96 | */ | ||
97 | void | ||
98 | GAS_addresses_preference_feedback (void *application, | ||
99 | const struct GNUNET_PeerIdentity *peer, | ||
100 | const struct GNUNET_TIME_Relative scope, | ||
101 | enum GNUNET_ATS_PreferenceKind kind, | ||
102 | float score_abs); | ||
103 | |||
104 | /** | 64 | /** |
105 | * Handle 'preference feedback' messages from clients. | 65 | * Handle 'preference feedback' messages from clients. |
106 | * | 66 | * |
@@ -116,6 +76,13 @@ GAS_handle_preference_feedback (void *cls, | |||
116 | 76 | ||
117 | 77 | ||
118 | /** | 78 | /** |
79 | * Initialize preferences subsystem. | ||
80 | */ | ||
81 | void | ||
82 | GAS_preference_init (void); | ||
83 | |||
84 | |||
85 | /** | ||
119 | * Shutdown preferences subsystem. | 86 | * Shutdown preferences subsystem. |
120 | */ | 87 | */ |
121 | void | 88 | void |