aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-02-05 16:26:23 +0000
committerChristian Grothoff <christian@grothoff.org>2015-02-05 16:26:23 +0000
commit3d7aad54ba7e7d2e51f5090eabffb29715854ad8 (patch)
tree6d565f2b60e7e56d2e06be3e592b71fba7d8d5f8 /src
parentb2a4dcbce4f56046fbdcd4b114ec7a3feb4793fd (diff)
downloadgnunet-3d7aad54ba7e7d2e51f5090eabffb29715854ad8.tar.gz
gnunet-3d7aad54ba7e7d2e51f5090eabffb29715854ad8.zip
separating out feedback from preferences
Diffstat (limited to 'src')
-rw-r--r--src/ats/Makefile.am4
-rw-r--r--src/ats/gnunet-service-ats.c4
-rw-r--r--src/ats/gnunet-service-ats_feedback.c124
-rw-r--r--src/ats/gnunet-service-ats_feedback.h41
-rw-r--r--src/ats/gnunet-service-ats_plugins.h1
-rw-r--r--src/ats/gnunet-service-ats_preferences.c168
-rw-r--r--src/ats/gnunet-service-ats_preferences.h53
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 = \
107gnunet_service_ats_SOURCES = \ 108gnunet_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 */
42static void
43preference_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 */
67void
68GAS_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 */
36void
37GAS_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 */
195static struct GNUNET_CONTAINER_MultiPeerMap *preference_peers; 190static 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 */
235static void 229static void
236update_relative_values_for_peer (const struct GNUNET_PeerIdentity *id, 230update_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 */
495void 489void
496GAS_addresses_preference_client_disconnect (void *client) 490GAS_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 */
525void 518static void
526GAS_addresses_preference_change (void *client, 519preference_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 */
627void
628GAS_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 */
667void
668GAS_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 */
716void 612void
717GAS_preference_init () 613GAS_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 */
736static int 631static int
737free_peer (void *cls, const struct GNUNET_PeerIdentity *key, void *value) 632free_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 */
47void 47void
48GAS_addresses_preference_client_disconnect (void *client); 48GAS_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 */
59void
60GAS_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 */
97void
98GAS_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 */
81void
82GAS_preference_init (void);
83
84
85/**
119 * Shutdown preferences subsystem. 86 * Shutdown preferences subsystem.
120 */ 87 */
121void 88void