diff options
author | Nathan S. Evans <evans@in.tum.de> | 2010-03-17 17:19:30 +0000 |
---|---|---|
committer | Nathan S. Evans <evans@in.tum.de> | 2010-03-17 17:19:30 +0000 |
commit | a48e8f508403c9d8641a0c9eb47d88f98cb47f28 (patch) | |
tree | 4f4f5f09a6aa89c60ba1798d507e1cb0cab0a6b9 /src/dht/gnunet-service-dht.c | |
parent | b571e5a4ed7fb2ef6f203c540e82675cf38bfcf8 (diff) | |
download | gnunet-a48e8f508403c9d8641a0c9eb47d88f98cb47f28.tar.gz gnunet-a48e8f508403c9d8641a0c9eb47d88f98cb47f28.zip |
beginning of changes
Diffstat (limited to 'src/dht/gnunet-service-dht.c')
-rw-r--r-- | src/dht/gnunet-service-dht.c | 100 |
1 files changed, 78 insertions, 22 deletions
diff --git a/src/dht/gnunet-service-dht.c b/src/dht/gnunet-service-dht.c index 3dcb75353..5bbb2e739 100644 --- a/src/dht/gnunet-service-dht.c +++ b/src/dht/gnunet-service-dht.c | |||
@@ -167,13 +167,23 @@ static struct GNUNET_CORE_MessageHandler core_handlers[] = { | |||
167 | * Server handler for initiating local dht get requests | 167 | * Server handler for initiating local dht get requests |
168 | */ | 168 | */ |
169 | static void handle_dht_get (void *cls, struct GNUNET_SERVER_Client * client, | 169 | static void handle_dht_get (void *cls, struct GNUNET_SERVER_Client * client, |
170 | const struct GNUNET_MessageHeader *message) | 170 | const struct GNUNET_MessageHeader *message) |
171 | { | 171 | { |
172 | struct GNUNET_DHT_GetMessage *get_msg = (struct GNUNET_DHT_GetMessage *)message; | ||
173 | GNUNET_HashCode get_key; | ||
174 | size_t get_type; | ||
175 | |||
176 | GNUNET_assert(ntohs(get_msg->header.size) >= sizeof(struct GNUNET_DHT_GetMessage)); | ||
177 | memcpy(&get_key, &get_msg->key, sizeof(GNUNET_HashCode)); | ||
178 | get_type = ntohs(get_msg->type); | ||
179 | |||
172 | #if DEBUG_DHT | 180 | #if DEBUG_DHT |
173 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 181 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
174 | "`%s': Received `%s' request from client\n", "DHT", "GET"); | 182 | "`%s': Received `%s' request from client, message type %d, key %s\n", "DHT", "GET", get_type, GNUNET_h2s(&get_key)); |
175 | #endif | 183 | #endif |
176 | 184 | ||
185 | /* FIXME: Implement get stop functionality here */ | ||
186 | |||
177 | } | 187 | } |
178 | 188 | ||
179 | /** | 189 | /** |
@@ -182,25 +192,43 @@ static void handle_dht_get (void *cls, struct GNUNET_SERVER_Client * client, | |||
182 | static void handle_dht_get_stop (void *cls, struct GNUNET_SERVER_Client * client, | 192 | static void handle_dht_get_stop (void *cls, struct GNUNET_SERVER_Client * client, |
183 | const struct GNUNET_MessageHeader *message) | 193 | const struct GNUNET_MessageHeader *message) |
184 | { | 194 | { |
195 | struct GNUNET_DHT_GetMessage *get_msg = (struct GNUNET_DHT_GetMessage *)message; /* Get message and get stop message are the same except for type */ | ||
196 | GNUNET_HashCode get_key; | ||
197 | size_t get_type; | ||
198 | |||
199 | GNUNET_assert(ntohs(get_msg->header.size) >= sizeof(struct GNUNET_DHT_GetMessage)); | ||
200 | |||
201 | memcpy(&get_key, &get_msg->key, sizeof(GNUNET_HashCode)); | ||
202 | get_type = ntohs(get_msg->type); | ||
203 | |||
185 | #if DEBUG_DHT | 204 | #if DEBUG_DHT |
186 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 205 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
187 | "`%s': Received `%s' request from client\n", "DHT", "GET STOP"); | 206 | "`%s': Received `%s' request from client, message type %d, key %s\n", "DHT", "GET STOP", get_type, GNUNET_h2s(&get_key)); |
188 | #endif | 207 | #endif |
189 | 208 | ||
209 | /* FIXME: Implement get stop functionality here */ | ||
210 | |||
190 | } | 211 | } |
191 | 212 | ||
192 | /** | 213 | /** |
193 | * Server handler for initiating local dht find peer requests | 214 | * Server handler for initiating local dht find peer requests |
194 | */ | 215 | */ |
195 | static void handle_dht_find_peer (void *cls, struct GNUNET_SERVER_Client * | 216 | static void handle_dht_find_peer (void *cls, struct GNUNET_SERVER_Client * |
196 | client, const struct GNUNET_MessageHeader * | 217 | client, const struct GNUNET_MessageHeader * |
197 | message) | 218 | message) |
198 | { | 219 | { |
220 | struct GNUNET_DHT_FindPeerMessage *find_msg = (struct GNUNET_DHT_FindPeerMessage *)message; | ||
221 | struct GNUNET_PeerIdentity peer; | ||
222 | |||
223 | GNUNET_assert(ntohs(find_msg->header.size) == sizeof(struct GNUNET_DHT_FindPeerMessage)); | ||
224 | memcpy(&peer, &find_msg->peer, sizeof(struct GNUNET_PeerIdentity)); | ||
225 | |||
199 | #if DEBUG_DHT | 226 | #if DEBUG_DHT |
200 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 227 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
201 | "`%s': Received `%s' request from client\n", "DHT", "FIND PEER"); | 228 | "`%s': Received `%s' request from client, peer id %s\n", "DHT", "FIND PEER", GNUNET_i2s(&peer)); |
202 | #endif | 229 | #endif |
203 | 230 | ||
231 | /* FIXME: Implement find peer functionality here */ | ||
204 | } | 232 | } |
205 | 233 | ||
206 | /** | 234 | /** |
@@ -210,11 +238,19 @@ static void handle_dht_find_peer_stop (void *cls, struct GNUNET_SERVER_Client * | |||
210 | client, const struct GNUNET_MessageHeader * | 238 | client, const struct GNUNET_MessageHeader * |
211 | message) | 239 | message) |
212 | { | 240 | { |
241 | struct GNUNET_DHT_FindPeerMessage *find_msg = (struct GNUNET_DHT_FindPeerMessage *)message; /* Find peer stop message is identical to find peer message */ | ||
242 | struct GNUNET_PeerIdentity peer; | ||
243 | |||
244 | GNUNET_assert(ntohs(find_msg->header.size) == sizeof(struct GNUNET_DHT_FindPeerMessage)); | ||
245 | memcpy(&peer, &find_msg->peer, sizeof(struct GNUNET_PeerIdentity)); | ||
246 | |||
213 | #if DEBUG_DHT | 247 | #if DEBUG_DHT |
214 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 248 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
215 | "`%s': Received `%s' request from client\n", "DHT", "FIND PEER STOP"); | 249 | "`%s': Received `%s' request from client, for peer id %s\n", "DHT", "FIND PEER STOP", GNUNET_i2s(&peer)); |
216 | #endif | 250 | #endif |
217 | 251 | ||
252 | /* FIXME: Implement find peer stop functionality here */ | ||
253 | |||
218 | } | 254 | } |
219 | 255 | ||
220 | /** | 256 | /** |
@@ -223,21 +259,42 @@ static void handle_dht_find_peer_stop (void *cls, struct GNUNET_SERVER_Client * | |||
223 | static void handle_dht_put (void *cls, struct GNUNET_SERVER_Client * client, | 259 | static void handle_dht_put (void *cls, struct GNUNET_SERVER_Client * client, |
224 | const struct GNUNET_MessageHeader *message) | 260 | const struct GNUNET_MessageHeader *message) |
225 | { | 261 | { |
262 | struct GNUNET_DHT_PutMessage *put_msg = (struct GNUNET_DHT_PutMessage *)message; | ||
263 | GNUNET_HashCode put_key; | ||
264 | size_t put_type; | ||
265 | size_t data_size; | ||
266 | char *data; | ||
267 | |||
268 | GNUNET_assert(ntohs(put_msg->header.size) >= sizeof(struct GNUNET_DHT_PutMessage)); | ||
269 | |||
270 | memcpy(&put_key, &put_msg->key, sizeof(GNUNET_HashCode)); | ||
271 | put_type = ntohs(put_msg->type); | ||
272 | data_size = ntohs(put_msg->data_size); | ||
273 | GNUNET_assert(ntohs(put_msg->header.size) == sizeof(struct GNUNET_DHT_PutMessage) + data_size); | ||
274 | data = GNUNET_malloc(data_size); | ||
275 | memcpy(data, &put_msg[1], data_size); | ||
276 | |||
226 | #if DEBUG_DHT | 277 | #if DEBUG_DHT |
227 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 278 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
228 | "`%s': Received `%s' request from client\n", "DHT", "PUT"); | 279 | "`%s': Received `%s' request from client, message type %d, key %s\n", "DHT", "PUT", put_type, GNUNET_h2s(&put_key)); |
229 | #endif | 280 | #endif |
230 | 281 | ||
282 | /** | ||
283 | * FIXME: Implement dht put request functionality here! | ||
284 | */ | ||
285 | |||
286 | GNUNET_free(data); | ||
287 | |||
231 | } | 288 | } |
232 | 289 | ||
233 | /** | 290 | /** |
234 | * Core handler for p2p dht get requests. | 291 | * Core handler for p2p dht get requests. |
235 | */ | 292 | */ |
236 | static int handle_dht_p2p_get (void *cls, | 293 | static int handle_dht_p2p_get (void *cls, |
237 | const struct GNUNET_PeerIdentity * peer, | 294 | const struct GNUNET_PeerIdentity * peer, |
238 | const struct GNUNET_MessageHeader * message, | 295 | const struct GNUNET_MessageHeader * message, |
239 | struct GNUNET_TIME_Relative latency, | 296 | struct GNUNET_TIME_Relative latency, |
240 | uint32_t distance) | 297 | uint32_t distance) |
241 | { | 298 | { |
242 | #if DEBUG_DHT | 299 | #if DEBUG_DHT |
243 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 300 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -340,23 +397,22 @@ run (void *cls, | |||
340 | GNUNET_SERVER_add_handlers (server, plugin_handlers); | 397 | GNUNET_SERVER_add_handlers (server, plugin_handlers); |
341 | 398 | ||
342 | coreAPI = | 399 | coreAPI = |
343 | GNUNET_CORE_connect (sched, | 400 | GNUNET_CORE_connect (sched, /* Main scheduler */ |
344 | cfg, | 401 | cfg, /* Main configuration */ |
345 | client_transmit_timeout, | 402 | client_transmit_timeout, /* Delay for connecting */ |
346 | NULL, /* FIXME: anything we want to pass around? */ | 403 | NULL, /* FIXME: anything we want to pass around? */ |
347 | &core_init, | 404 | &core_init, /* Call core_init once connected */ |
348 | NULL, /* Don't care about pre-connects */ | 405 | NULL, /* Don't care about pre-connects */ |
349 | NULL, /* Don't care about connects */ | 406 | NULL, /* Don't care about connects */ |
350 | NULL, /* Don't care about disconnects */ | 407 | NULL, /* Don't care about disconnects */ |
351 | NULL, | 408 | NULL, /* Don't want notified about all incoming messages */ |
352 | GNUNET_NO, | 409 | GNUNET_NO, /* For header only inbound notification */ |
353 | NULL, | 410 | NULL, /* Don't want notified about all outbound messages */ |
354 | GNUNET_NO, | 411 | GNUNET_NO, /* For header only outbound notification */ |
355 | core_handlers); | 412 | core_handlers); /* Register these handlers */ |
356 | 413 | ||
357 | if (coreAPI == NULL) | 414 | if (coreAPI == NULL) |
358 | return; | 415 | return; |
359 | /* load (server); Huh? */ | ||
360 | 416 | ||
361 | /* Scheduled the task to clean up when shutdown is called */ | 417 | /* Scheduled the task to clean up when shutdown is called */ |
362 | cleanup_task = GNUNET_SCHEDULER_add_delayed (sched, | 418 | cleanup_task = GNUNET_SCHEDULER_add_delayed (sched, |