doku
authorChristian Grothoff <christian@grothoff.org>
Mon, 10 Oct 2011 11:50:42 +0000 (11:50 +0000)
committerChristian Grothoff <christian@grothoff.org>
Mon, 10 Oct 2011 11:50:42 +0000 (11:50 +0000)
src/core/gnunet-service-core.h
src/core/gnunet-service-core_clients.c
src/include/gnunet_core_service.h

index 2d5156efec14a24916a7635f54997ef4675f794f..10d2cd534e48bac139dda15ce52933f341c8b15d 100644 (file)
@@ -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?
    */
index 597eddbd93f19d47f6f77235152697117651d22d..00d22c13fa48429b147cefa9ad459e6d2fbbbb79 100644 (file)
@@ -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);
 }
 
 
index 24083f1a15996c4f661480da981773143aeb742d..a7c5ba45c6ed3200742a0193c4ce8850ae84889e 100644 (file)
@@ -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