void **addr, size_t * addrlen);
+/**
+ * Retrieve the unique id from the opaque defined GNUNET_SERVER_Client
+ *
+ * @param client the client
+ * @return the unique id
+ */
+uint64_t
+GNUNET_SERVER_client_get_id (struct GNUNET_SERVER_Client *client);
+
+
/**
* Functions with this signature are called whenever a client
* is disconnected on the network level.
* Type of last message processed (for warn_no_receive_done).
*/
uint16_t warn_type;
+
+ /**
+ * unique identifier to distinguish between clients
+ */
+ uint64_t id;
};
}
+/**
+ * Get a unique identifier for each GNUNET_SERVER_Client
+ */
+static uint64_t
+get_client_id (void)
+{
+ static uint64_t id;
+
+ GNUNET_assert (id < ULONG_LONG_MAX);
+ return (id++);
+}
+
/**
* Add a TCP socket-based connection to the set of handles managed by
* this server. Use this function for outgoing (P2P) connections that
client->receive_pending = GNUNET_YES;
client->callback = NULL;
client->callback_cls = NULL;
+ client->id = get_client_id ();
GNUNET_CONNECTION_receive (client->connection,
GNUNET_SERVER_MAX_MESSAGE_SIZE - 1,
client->idle_timeout, &process_incoming, client);
}
+/**
+ * Retrieve the unique id from the opaque defined GNUNET_SERVER_Client
+ *
+ * @param client the client
+ * @return the unique id
+ */
+uint64_t
+GNUNET_SERVER_client_get_id (struct GNUNET_SERVER_Client *client)
+{
+ return client->id;
+}
+
/**
* Resume receiving from this client, we are done processing the
* current request. This function must be called from within each