towards fixing #3363: replacing old iteration API with new monitoring API for core...
[oweals/gnunet.git] / src / core / gnunet-service-core_clients.c
index f153ac397088a68d86a72fca3187ce64f5802a3f..6349596742bbed13d4b42c9b84be62a80a684851 100644 (file)
@@ -43,7 +43,7 @@
 
 
 /**
- * Data structure for each client connected to the core service.
+ * Data structure for each client connected to the CORE service.
  */
 struct GSC_Client
 {
@@ -64,14 +64,14 @@ struct GSC_Client
 
   /**
    * Array of the types of messages this peer cares
-   * about (with "tcnt" entries).  Allocated as part
+   * about (with @e tcnt entries).  Allocated as part
    * of this client struct, do not free!
    */
   const uint16_t *types;
 
   /**
    * Map of peer identities to active transmission requests of this
-   * client to the peer (of type 'struct GSC_ClientActiveRequest').
+   * client to the peer (of type `struct GSC_ClientActiveRequest`).
    */
   struct GNUNET_CONTAINER_MultiPeerMap *requests;
 
@@ -88,7 +88,7 @@ struct GSC_Client
 
   /**
    * Number of types of incoming messages this client
-   * specifically cares about.  Size of the "types" array.
+   * specifically cares about.  Size of the @e types array.
    */
   unsigned int tcnt;
 
@@ -190,7 +190,7 @@ GSC_CLIENTS_send_to_client (struct GNUNET_SERVER_Client *client,
  *
  * @param type message type
  * @param c client to test
- * @return GNUNET_YES if 'c' is interested, GNUNET_NO if not.
+ * @return #GNUNET_YES if @a c is interested, #GNUNET_NO if not.
  */
 static int
 type_match (uint16_t type, struct GSC_Client *c)
@@ -225,7 +225,7 @@ send_to_all_clients (const struct GNUNET_PeerIdentity *partner,
   struct GSC_Client *c;
   int tm;
 
-  for (c = client_head; c != NULL; c = c->next)
+  for (c = client_head; NULL != c; c = c->next)
   {
     tm = type_match (type, c);
     if (!  ( (0 != (c->options & options)) ||
@@ -408,7 +408,7 @@ handle_client_send_request (void *cls, struct GNUNET_SERVER_Client *client,
 
 
 /**
- * Closure for the 'client_tokenizer_callback'.
+ * Closure for the #client_tokenizer_callback().
  */
 struct TokenizerContext
 {
@@ -418,6 +418,11 @@ struct TokenizerContext
    */
   struct GSC_ClientActiveRequest *car;
 
+  /**
+   * How important is this message.
+   */
+  enum GNUNET_CORE_Priority priority;
+
   /**
    * Is corking allowed (set only once we have the real message).
    */
@@ -431,7 +436,7 @@ struct TokenizerContext
  *
  * @param cls unused
  * @param client the client issuing the request
- * @param message the "struct SendMessage"
+ * @param message the `struct SendMessage`
  */
 static void
 handle_client_send (void *cls, struct GNUNET_SERVER_Client *client,
@@ -454,7 +459,7 @@ handle_client_send (void *cls, struct GNUNET_SERVER_Client *client,
   msize -= sizeof (struct SendMessage);
   GNUNET_break (0 == ntohl (sm->reserved));
   c = find_client (client);
-  if (c == NULL)
+  if (NULL == c)
   {
     /* client did not send INIT first! */
     GNUNET_break (0);
@@ -482,10 +487,13 @@ handle_client_send (void *cls, struct GNUNET_SERVER_Client *client,
                                                        &sm->peer,
                                                        tc.car));
   tc.cork = ntohl (sm->cork);
+  tc.priority = (enum GNUNET_CORE_Priority) ntohl (sm->priority);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Client asked for transmission of %u bytes to `%s' %s\n", msize,
+              "Client asked for transmission of %u bytes to `%s' %s\n",
+              msize,
               GNUNET_i2s (&sm->peer), tc.cork ? "now" : "");
-  GNUNET_SERVER_mst_receive (client_mst, &tc, (const char *) &sm[1], msize,
+  GNUNET_SERVER_mst_receive (client_mst, &tc,
+                             (const char *) &sm[1], msize,
                              GNUNET_YES, GNUNET_NO);
   if (0 !=
       memcmp (&tc.car->target, &GSC_my_identity,
@@ -541,7 +549,8 @@ client_tokenizer_callback (void *cls, void *client,
   else
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Delivering message of type %u to %s\n", ntohs (message->type),
+                "Delivering message of type %u to %s\n",
+                ntohs (message->type),
                 GNUNET_i2s (&car->target));
     GSC_CLIENTS_deliver_message (&car->target, message,
                                 ntohs (message->size),
@@ -549,7 +558,10 @@ client_tokenizer_callback (void *cls, void *client,
     GSC_CLIENTS_deliver_message (&car->target, message,
                                 sizeof (struct GNUNET_MessageHeader),
                                 GNUNET_CORE_OPTION_SEND_HDR_OUTBOUND);
-    GSC_SESSIONS_transmit (car, message, tc->cork);
+    GSC_SESSIONS_transmit (car,
+                           message,
+                           tc->cork,
+                           tc->priority);
   }
   return GNUNET_OK;
 }
@@ -588,11 +600,12 @@ destroy_active_client_request (void *cls,
  * @param client identification of the client
  */
 static void
-handle_client_disconnect (void *cls, struct GNUNET_SERVER_Client *client)
+handle_client_disconnect (void *cls,
+                          struct GNUNET_SERVER_Client *client)
 {
   struct GSC_Client *c;
 
-  if (client == NULL)
+  if (NULL == client)
     return;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Client %p has disconnected from core service.\n", client);
@@ -828,8 +841,8 @@ GSC_CLIENTS_init (struct GNUNET_SERVER_Handle *server)
   static const struct GNUNET_SERVER_MessageHandler handlers[] = {
     {&handle_client_init, NULL,
      GNUNET_MESSAGE_TYPE_CORE_INIT, 0},
-    {&GSC_SESSIONS_handle_client_iterate_peers, NULL,
-     GNUNET_MESSAGE_TYPE_CORE_ITERATE_PEERS,
+    {&GSC_KX_handle_client_monitor_peers, NULL,
+     GNUNET_MESSAGE_TYPE_CORE_MONITOR_PEERS,
      sizeof (struct GNUNET_MessageHeader)},
     {&handle_client_send_request, NULL,
      GNUNET_MESSAGE_TYPE_CORE_SEND_REQUEST,
@@ -843,7 +856,8 @@ GSC_CLIENTS_init (struct GNUNET_SERVER_Handle *server)
   client_mst = GNUNET_SERVER_mst_create (&client_tokenizer_callback, NULL);
   notifier =
       GNUNET_SERVER_notification_context_create (server, MAX_NOTIFY_QUEUE);
-  GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL);
+  GNUNET_SERVER_disconnect_notify (server,
+                                   &handle_client_disconnect, NULL);
   GNUNET_SERVER_add_handlers (server, handlers);
 }