diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-02-05 12:52:20 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-02-05 12:52:20 +0000 |
commit | c55971f17dc99f9833af48e078c8f681be771cb7 (patch) | |
tree | 544fd671b67903506419c98d463d086a696e25a1 /src/ats/gnunet-service-ats_connectivity.c | |
parent | 15dd8e6cc1199d611d804853e134882bf13b234a (diff) | |
download | gnunet-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.c | 148 |
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 | */ | ||
44 | struct 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 | */ | ||
68 | static struct GAS_Addresses_Suggestion_Requests *pending_requests_head; | ||
69 | |||
70 | /** | ||
71 | * Address suggestion requests DLL tail | ||
72 | */ | ||
73 | static 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 | */ | ||
83 | void | ||
84 | GAS_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 | */ | ||
123 | void | ||
124 | GAS_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 | */ | ||
209 | void | ||
210 | GAS_connectivity_remove_client (struct GNUNET_SERVER_Client *client) | ||
211 | { | ||
212 | // FIXME | ||
213 | } | ||
214 | |||
215 | |||
216 | /** | ||
217 | * Shutdown connectivity subsystem. | ||
218 | */ | ||
219 | void | ||
220 | GAS_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 */ |