aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_connectivity.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-02-05 12:52:20 +0000
committerChristian Grothoff <christian@grothoff.org>2015-02-05 12:52:20 +0000
commitc55971f17dc99f9833af48e078c8f681be771cb7 (patch)
tree544fd671b67903506419c98d463d086a696e25a1 /src/ats/gnunet-service-ats_connectivity.c
parent15dd8e6cc1199d611d804853e134882bf13b234a (diff)
downloadgnunet-c55971f17dc99f9833af48e078c8f681be771cb7.tar.gz
gnunet-c55971f17dc99f9833af48e078c8f681be771cb7.zip
big ATS refactoring, no serious semantic changes should stem from this
Diffstat (limited to 'src/ats/gnunet-service-ats_connectivity.c')
-rw-r--r--src/ats/gnunet-service-ats_connectivity.c148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/ats/gnunet-service-ats_connectivity.c b/src/ats/gnunet-service-ats_connectivity.c
index da943f984..4aee2ddb8 100644
--- a/src/ats/gnunet-service-ats_connectivity.c
+++ b/src/ats/gnunet-service-ats_connectivity.c
@@ -34,8 +34,124 @@
34#include "gnunet-service-ats.h" 34#include "gnunet-service-ats.h"
35#include "gnunet-service-ats_addresses.h" 35#include "gnunet-service-ats_addresses.h"
36#include "gnunet-service-ats_connectivity.h" 36#include "gnunet-service-ats_connectivity.h"
37#include "gnunet-service-ats_plugins.h"
37#include "ats.h" 38#include "ats.h"
38 39
40
41/**
42 * Pending Address suggestion requests
43 */
44struct GAS_Addresses_Suggestion_Requests
45{
46 /**
47 * Next in DLL
48 */
49 struct GAS_Addresses_Suggestion_Requests *next;
50
51 /**
52 * Previous in DLL
53 */
54 struct GAS_Addresses_Suggestion_Requests *prev;
55
56 /**
57 * Peer ID
58 */
59 struct GNUNET_PeerIdentity id;
60};
61
62
63/**
64 * Address suggestion requests DLL head.
65 * FIXME: This must become a Multipeermap! O(n) operations
66 * galore instead of O(1)!!!
67 */
68static struct GAS_Addresses_Suggestion_Requests *pending_requests_head;
69
70/**
71 * Address suggestion requests DLL tail
72 */
73static struct GAS_Addresses_Suggestion_Requests *pending_requests_tail;
74
75
76
77
78/**
79 * Cancel address suggestions for a peer
80 *
81 * @param peer the peer id
82 */
83void
84GAS_addresses_request_address_cancel (const struct GNUNET_PeerIdentity *peer)
85{
86 struct GAS_Addresses_Suggestion_Requests *cur = pending_requests_head;
87
88 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
89 "Received request: `%s' for peer %s\n",
90 "request_address_cancel",
91 GNUNET_i2s (peer));
92
93 while (NULL != cur)
94 {
95 if (0 == memcmp (peer, &cur->id, sizeof(cur->id)))
96 break; /* found */
97 cur = cur->next;
98 }
99
100 if (NULL == cur)
101 {
102 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
103 "No address requests pending for peer `%s', cannot remove!\n",
104 GNUNET_i2s (peer));
105 return;
106 }
107 GAS_plugin_request_connect_stop (peer);
108 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
109 "Removed request pending for peer `%s\n",
110 GNUNET_i2s (peer));
111 GNUNET_CONTAINER_DLL_remove (pending_requests_head,
112 pending_requests_tail,
113 cur);
114 GNUNET_free (cur);
115}
116
117
118/**
119 * Request address suggestions for a peer
120 *
121 * @param peer the peer id
122 */
123void
124GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer)
125{
126 struct GAS_Addresses_Suggestion_Requests *cur = pending_requests_head;
127
128 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
129 "Received `%s' for peer `%s'\n",
130 "REQUEST ADDRESS",
131 GNUNET_i2s (peer));
132
133 while (NULL != cur)
134 {
135 if (0 == memcmp (peer, &cur->id, sizeof(cur->id)))
136 break; /* already suggesting */
137 cur = cur->next;
138 }
139 if (NULL == cur)
140 {
141 cur = GNUNET_new (struct GAS_Addresses_Suggestion_Requests);
142 cur->id = *peer;
143 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
144 "Adding new address suggestion request for `%s'\n",
145 GNUNET_i2s (peer));
146 GNUNET_CONTAINER_DLL_insert (pending_requests_head,
147 pending_requests_tail,
148 cur);
149 }
150 GAS_plugin_request_connect_start (peer);
151}
152
153
154
39/** 155/**
40 * Handle 'request address' messages from clients. 156 * Handle 'request address' messages from clients.
41 * 157 *
@@ -83,4 +199,36 @@ GAS_handle_request_address_cancel (void *cls,
83 GNUNET_SERVER_receive_done (client, GNUNET_OK); 199 GNUNET_SERVER_receive_done (client, GNUNET_OK);
84} 200}
85 201
202
203/**
204 * Unregister a client (which may have been a connectivity client,
205 * but this is not assured).
206 *
207 * @param client handle of the (now dead) client
208 */
209void
210GAS_connectivity_remove_client (struct GNUNET_SERVER_Client *client)
211{
212 // FIXME
213}
214
215
216/**
217 * Shutdown connectivity subsystem.
218 */
219void
220GAS_connectivity_done ()
221{
222 struct GAS_Addresses_Suggestion_Requests *cur;
223
224 while (NULL != (cur = pending_requests_head))
225 {
226 GNUNET_CONTAINER_DLL_remove (pending_requests_head,
227 pending_requests_tail,
228 cur);
229 GNUNET_free(cur);
230 }
231}
232
233
86/* end of gnunet-service-ats_connectivity.c */ 234/* end of gnunet-service-ats_connectivity.c */