diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-10-10 11:54:09 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-10-10 11:54:09 +0000 |
commit | 78659ecd60209b7bd0e4ed6060bc0e8c33247b37 (patch) | |
tree | e3d8abb3e7c7959506c0696e8acc90b82123c7f4 /src/core/gnunet-service-core_clients.c | |
parent | ac3f6e86f01a69657d36a343a8d6a1508deda2a4 (diff) | |
download | gnunet-78659ecd60209b7bd0e4ed6060bc0e8c33247b37.tar.gz gnunet-78659ecd60209b7bd0e4ed6060bc0e8c33247b37.zip |
cleaner
Diffstat (limited to 'src/core/gnunet-service-core_clients.c')
-rw-r--r-- | src/core/gnunet-service-core_clients.c | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/src/core/gnunet-service-core_clients.c b/src/core/gnunet-service-core_clients.c index f30a3ba4b..c9eb587b5 100644 --- a/src/core/gnunet-service-core_clients.c +++ b/src/core/gnunet-service-core_clients.c | |||
@@ -351,6 +351,25 @@ handle_client_send_request (void *cls, struct GNUNET_SERVER_Client *client, | |||
351 | 351 | ||
352 | 352 | ||
353 | /** | 353 | /** |
354 | * Closure for the 'client_tokenizer_callback'. | ||
355 | */ | ||
356 | struct TokenizerContext | ||
357 | { | ||
358 | |||
359 | /** | ||
360 | * Active request handle for the message. | ||
361 | */ | ||
362 | struct GSC_ClientActiveRequest *car; | ||
363 | |||
364 | /** | ||
365 | * Is corking allowed (set only once we have the real message). | ||
366 | */ | ||
367 | int cork; | ||
368 | |||
369 | }; | ||
370 | |||
371 | |||
372 | /** | ||
354 | * Handle CORE_SEND request. | 373 | * Handle CORE_SEND request. |
355 | * | 374 | * |
356 | * @param cls unused | 375 | * @param cls unused |
@@ -363,7 +382,7 @@ handle_client_send (void *cls, struct GNUNET_SERVER_Client *client, | |||
363 | { | 382 | { |
364 | const struct SendMessage *sm; | 383 | const struct SendMessage *sm; |
365 | struct GSC_Client *c; | 384 | struct GSC_Client *c; |
366 | struct GSC_ClientActiveRequest *car; | 385 | struct TokenizerContext tc; |
367 | uint16_t msize; | 386 | uint16_t msize; |
368 | 387 | ||
369 | msize = ntohs (message->size); | 388 | msize = ntohs (message->size); |
@@ -385,8 +404,8 @@ handle_client_send (void *cls, struct GNUNET_SERVER_Client *client, | |||
385 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | 404 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); |
386 | return; | 405 | return; |
387 | } | 406 | } |
388 | car = GNUNET_CONTAINER_multihashmap_get (c->requests, &sm->peer.hashPubKey); | 407 | tc.car = GNUNET_CONTAINER_multihashmap_get (c->requests, &sm->peer.hashPubKey); |
389 | if (NULL == car) | 408 | if (NULL == tc.car) |
390 | { | 409 | { |
391 | /* client did not request transmission first! */ | 410 | /* client did not request transmission first! */ |
392 | GNUNET_break (0); | 411 | GNUNET_break (0); |
@@ -396,17 +415,17 @@ handle_client_send (void *cls, struct GNUNET_SERVER_Client *client, | |||
396 | GNUNET_assert (GNUNET_YES == | 415 | GNUNET_assert (GNUNET_YES == |
397 | GNUNET_CONTAINER_multihashmap_remove (c->requests, | 416 | GNUNET_CONTAINER_multihashmap_remove (c->requests, |
398 | &sm->peer.hashPubKey, | 417 | &sm->peer.hashPubKey, |
399 | car)); | 418 | tc.car)); |
400 | car->cork = ntohl (sm->cork); | 419 | tc.cork = ntohl (sm->cork); |
401 | GNUNET_SERVER_mst_receive (client_mst, | 420 | GNUNET_SERVER_mst_receive (client_mst, |
402 | car, | 421 | &tc, |
403 | (const char*) &sm[1], msize, | 422 | (const char*) &sm[1], msize, |
404 | GNUNET_YES, | 423 | GNUNET_YES, |
405 | GNUNET_NO); | 424 | GNUNET_NO); |
406 | if (0 != | 425 | if (0 != |
407 | memcmp (&car->target, &GSC_my_identity, sizeof (struct GNUNET_PeerIdentity))) | 426 | memcmp (&tc.car->target, &GSC_my_identity, sizeof (struct GNUNET_PeerIdentity))) |
408 | GSC_SESSIONS_dequeue_request (car); | 427 | GSC_SESSIONS_dequeue_request (tc.car); |
409 | GNUNET_free (car); | 428 | GNUNET_free (tc.car); |
410 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | 429 | GNUNET_SERVER_receive_done (client, GNUNET_OK); |
411 | } | 430 | } |
412 | 431 | ||
@@ -425,7 +444,8 @@ static void | |||
425 | client_tokenizer_callback (void *cls, void *client, | 444 | client_tokenizer_callback (void *cls, void *client, |
426 | const struct GNUNET_MessageHeader *message) | 445 | const struct GNUNET_MessageHeader *message) |
427 | { | 446 | { |
428 | struct GSC_ClientActiveRequest *car = client; | 447 | struct TokenizerContext *tc = cls; |
448 | struct GSC_ClientActiveRequest *car = tc->car; | ||
429 | 449 | ||
430 | if (0 == | 450 | if (0 == |
431 | memcmp (&car->target, &GSC_my_identity, sizeof (struct GNUNET_PeerIdentity))) | 451 | memcmp (&car->target, &GSC_my_identity, sizeof (struct GNUNET_PeerIdentity))) |
@@ -442,7 +462,7 @@ client_tokenizer_callback (void *cls, void *client, | |||
442 | GNUNET_CORE_OPTION_SEND_HDR_INBOUND | GNUNET_CORE_OPTION_SEND_HDR_OUTBOUND); | 462 | GNUNET_CORE_OPTION_SEND_HDR_INBOUND | GNUNET_CORE_OPTION_SEND_HDR_OUTBOUND); |
443 | } | 463 | } |
444 | else | 464 | else |
445 | GSC_SESSIONS_transmit (car, message, car->cork); | 465 | GSC_SESSIONS_transmit (car, message, tc->cork); |
446 | } | 466 | } |
447 | 467 | ||
448 | 468 | ||