diff options
-rw-r--r-- | src/include/gnunet_server_lib.h | 10 | ||||
-rw-r--r-- | src/util/server.c | 30 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/include/gnunet_server_lib.h b/src/include/gnunet_server_lib.h index 3d8130c605..45da3efa28 100644 --- a/src/include/gnunet_server_lib.h +++ b/src/include/gnunet_server_lib.h @@ -326,6 +326,16 @@ GNUNET_SERVER_client_get_address (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); + + +/** * 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 31d298e3a2..ddbae44109 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; }; @@ -933,6 +938,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 * we initiated (and where this server should process incoming @@ -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); @@ -1275,6 +1293,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 * GNUNET_SERVER_MessageCallback (or its respective continuations). |