From 07a8a7388c5e4bf6aa92f2e70d8c808ceb28174c Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Fri, 26 Aug 2011 11:42:39 +0000 Subject: [PATCH] changes to server lib Added a unique ID to struct GNUNET_SERVER_Client to be able to distinguish between different clients --- src/include/gnunet_server_lib.h | 10 ++++++++++ src/util/server.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/include/gnunet_server_lib.h b/src/include/gnunet_server_lib.h index 3d8130c60..45da3efa2 100644 --- a/src/include/gnunet_server_lib.h +++ b/src/include/gnunet_server_lib.h @@ -325,6 +325,16 @@ GNUNET_SERVER_client_get_address (struct GNUNET_SERVER_Client *client, 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. diff --git a/src/util/server.c b/src/util/server.c index 31d298e3a..ddbae4410 100644 --- a/src/util/server.c +++ b/src/util/server.c @@ -247,6 +247,11 @@ struct GNUNET_SERVER_Client * Type of last message processed (for warn_no_receive_done). */ uint16_t warn_type; + + /** + * unique identifier to distinguish between clients + */ + uint64_t id; }; @@ -932,6 +937,18 @@ client_message_tokenizer_callback (void *cls, void *client, } +/** + * 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 @@ -963,6 +980,7 @@ GNUNET_SERVER_connect_socket (struct GNUNET_SERVER_Handle *server, 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); @@ -1274,6 +1292,18 @@ GNUNET_SERVER_client_persist_ (struct GNUNET_SERVER_Client *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 -- 2.25.1