aboutsummaryrefslogtreecommitdiff
path: root/src/core/gnunet-service-core_clients.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-10-10 11:54:09 +0000
committerChristian Grothoff <christian@grothoff.org>2011-10-10 11:54:09 +0000
commit78659ecd60209b7bd0e4ed6060bc0e8c33247b37 (patch)
treee3d8abb3e7c7959506c0696e8acc90b82123c7f4 /src/core/gnunet-service-core_clients.c
parentac3f6e86f01a69657d36a343a8d6a1508deda2a4 (diff)
downloadgnunet-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.c42
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 */
356struct 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
425client_tokenizer_callback (void *cls, void *client, 444client_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