From: Christian Grothoff Date: Mon, 10 Oct 2011 11:50:42 +0000 (+0000) Subject: doku X-Git-Tag: initial-import-from-subversion-38251~16674 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=648a6cd5055798507a011b1e9c0d612371ce7a8d;p=oweals%2Fgnunet.git doku --- diff --git a/src/core/gnunet-service-core.h b/src/core/gnunet-service-core.h index 2d5156efe..10d2cd534 100644 --- a/src/core/gnunet-service-core.h +++ b/src/core/gnunet-service-core.h @@ -82,6 +82,11 @@ struct GSC_ClientActiveRequest */ int was_solicited; + /** + * Is corking allowed (set only once we have the real message). + */ + int cork; + /** * How many bytes does the client intend to send? */ diff --git a/src/core/gnunet-service-core_clients.c b/src/core/gnunet-service-core_clients.c index 597eddbd9..00d22c13f 100644 --- a/src/core/gnunet-service-core_clients.c +++ b/src/core/gnunet-service-core_clients.c @@ -397,6 +397,7 @@ handle_client_send (void *cls, struct GNUNET_SERVER_Client *client, GNUNET_CONTAINER_multihashmap_remove (c->requests, &sm->peer.hashPubKey, car)); + car->cork = ntohs (sm->cork); GNUNET_SERVER_mst_receive (client_mst, car, (const char*) &sm[1], msize, @@ -441,7 +442,7 @@ client_tokenizer_callback (void *cls, void *client, GNUNET_CORE_OPTION_SEND_HDR_INBOUND | GNUNET_CORE_OPTION_SEND_HDR_OUTBOUND); } else - GSC_SESSIONS_transmit (car, message, GNUNET_NO /* FIXME: get cork flag form 'struct SendMessage'! */); + GSC_SESSIONS_transmit (car, message, car->cork); } diff --git a/src/include/gnunet_core_service.h b/src/include/gnunet_core_service.h index 24083f1a1..a7c5ba45c 100644 --- a/src/include/gnunet_core_service.h +++ b/src/include/gnunet_core_service.h @@ -210,40 +210,6 @@ void GNUNET_CORE_disconnect (struct GNUNET_CORE_Handle *handle); -/** - * Iterate over all connected peers. Calls peer_cb with each - * connected peer, and then once with NULL to indicate that all peers - * have been handled. - * - * @param cfg configuration handle - * @param peer_cb function to call with the peer information - * @param cb_cls closure for peer_cb - * @return GNUNET_OK on success, GNUNET_SYSERR on errors - */ -int -GNUNET_CORE_iterate_peers (const struct GNUNET_CONFIGURATION_Handle *cfg, - GNUNET_CORE_ConnectEventHandler peer_cb, - void *cb_cls); - - -/** - * Check if the given peer is currently connected and return information - * about the session if so. - * - * @param cfg configuration to use - * @param peer the specific peer to check for - * @param peer_cb function to call with the peer information - * @param cb_cls closure for peer_cb - * - * @return GNUNET_OK if iterating, GNUNET_SYSERR on error - */ -int -GNUNET_CORE_is_peer_connected (const struct GNUNET_CONFIGURATION_Handle *cfg, - struct GNUNET_PeerIdentity *peer, - GNUNET_CORE_ConnectEventHandler peer_cb, - void *cb_cls); - - /** * Handle for a transmission request. */ @@ -298,6 +264,56 @@ GNUNET_CORE_notify_transmit_ready_cancel (struct GNUNET_CORE_TransmitHandle *th); + + + +/** + * Iterate over all connected peers. Calls peer_cb with each + * connected peer, and then once with NULL to indicate that all peers + * have been handled. Normal users of the CORE API are not expected + * to use this function. It is different in that it truly lists + * all connections, not just those relevant to the application. This + * function is used by special applications for diagnostics. This + * function is NOT part of the 'versioned', 'official' API. + * + * FIXME: we should probably make it possible to 'cancel' the + * operation... + * + * @param cfg configuration handle + * @param peer_cb function to call with the peer information + * @param cb_cls closure for peer_cb + * @return GNUNET_OK on success, GNUNET_SYSERR on errors + */ +int +GNUNET_CORE_iterate_peers (const struct GNUNET_CONFIGURATION_Handle *cfg, + GNUNET_CORE_ConnectEventHandler peer_cb, + void *cb_cls); + + +/** + * Check if the given peer is currently connected and return information + * about the session if so. This function is for special cirumstances + * (GNUNET_TESTING uses it), normal users of the CORE API are + * expected to track which peers are connected based on the + * connect/disconnect callbacks from GNUNET_CORE_connect. This + * function is NOT part of the 'versioned', 'official' API. + * + * FIXME: we should probably make it possible to 'cancel' the + * operation... + * + * @param cfg configuration to use + * @param peer the specific peer to check for + * @param peer_cb function to call with the peer information + * @param cb_cls closure for peer_cb + * @return GNUNET_OK if iterating, GNUNET_SYSERR on error + */ +int +GNUNET_CORE_is_peer_connected (const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_PeerIdentity *peer, + GNUNET_CORE_ConnectEventHandler peer_cb, + void *cb_cls); + + #if 0 /* keep Emacsens' auto-indent happy */ { #endif