X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fserver.c;h=1a4b73126397f1c9d8c6076824fc014b1dce857c;hb=34f34474b6137233d6700d4599f42257e8208af2;hp=279b65792b8ad5049db7a059d8ce297abb24055d;hpb=9e308ff38737cc6b1d840eb72d016a7d1e109ea4;p=oweals%2Fgnunet.git diff --git a/src/util/server.c b/src/util/server.c index 279b65792..1a4b73126 100644 --- a/src/util/server.c +++ b/src/util/server.c @@ -397,7 +397,6 @@ process_listen_socket (void *cls, { struct GNUNET_SERVER_Handle *server = cls; struct GNUNET_CONNECTION_Handle *sock; - struct GNUNET_SERVER_Client *client; unsigned int i; server->listen_task = NULL; @@ -407,10 +406,10 @@ process_listen_socket (void *cls, GNUNET_SERVER_resume (server); return; } - i = 0; - while (NULL != server->listen_sockets[i]) + for (i = 0; NULL != server->listen_sockets[i]; i++) { - if (GNUNET_NETWORK_fdset_isset (tc->read_ready, server->listen_sockets[i])) + if (GNUNET_NETWORK_fdset_isset (tc->read_ready, + server->listen_sockets[i])) { sock = GNUNET_CONNECTION_create_from_accept (server->access_cb, @@ -420,12 +419,10 @@ process_listen_socket (void *cls, { LOG (GNUNET_ERROR_TYPE_DEBUG, "Server accepted incoming connection.\n"); - client = GNUNET_SERVER_connect_socket (server, sock); - /* decrement reference count, we don't keep "client" alive */ - GNUNET_SERVER_client_drop (client); + (void) GNUNET_SERVER_connect_socket (server, + sock); } } - i++; } /* listen for more! */ GNUNET_SERVER_resume (server); @@ -816,7 +813,8 @@ GNUNET_SERVER_destroy (struct GNUNET_SERVER_Handle *server) } while (NULL != (npos = server->disconnect_notify_list_head)) { - npos->callback (npos->callback_cls, NULL); + npos->callback (npos->callback_cls, + NULL); GNUNET_CONTAINER_DLL_remove (server->disconnect_notify_list_head, server->disconnect_notify_list_tail, npos); @@ -824,7 +822,8 @@ GNUNET_SERVER_destroy (struct GNUNET_SERVER_Handle *server) } while (NULL != (npos = server->connect_notify_list_head)) { - npos->callback (npos->callback_cls, NULL); + npos->callback (npos->callback_cls, + NULL); GNUNET_CONTAINER_DLL_remove (server->connect_notify_list_head, server->connect_notify_list_tail, npos); @@ -1139,7 +1138,8 @@ process_incoming (void *cls, GNUNET_CONNECTION_receive (client->connection, GNUNET_SERVER_MAX_MESSAGE_SIZE - 1, GNUNET_TIME_absolute_get_remaining (end), - &process_incoming, client); + &process_incoming, + client); return; } if ( (NULL == buf) || @@ -1235,13 +1235,14 @@ restart_processing (void *cls, * received a complete message. * * @param cls closure (struct GNUNET_SERVER_Handle) - * @param client identification of the client (struct GNUNET_SERVER_Client*) + * @param client identification of the client (`struct GNUNET_SERVER_Client *`) * @param message the actual message * * @return #GNUNET_OK on success, #GNUNET_SYSERR to stop further processing */ static int -client_message_tokenizer_callback (void *cls, void *client, +client_message_tokenizer_callback (void *cls, + void *client, const struct GNUNET_MessageHeader *message) { struct GNUNET_SERVER_Handle *server = cls; @@ -1272,8 +1273,7 @@ client_message_tokenizer_callback (void *cls, void *client, * @param server the server to use * @param connection the connection to manage (client must * stop using this connection from now on) - * @return the client handle (client should call - * "client_drop" on the return value eventually) + * @return the client handle */ struct GNUNET_SERVER_Client * GNUNET_SERVER_connect_socket (struct GNUNET_SERVER_Handle *server, @@ -1284,7 +1284,6 @@ GNUNET_SERVER_connect_socket (struct GNUNET_SERVER_Handle *server, client = GNUNET_new (struct GNUNET_SERVER_Client); client->connection = connection; - client->reference_count = 1; client->server = server; client->last_activity = GNUNET_TIME_absolute_get (); client->idle_timeout = server->idle_timeout; @@ -1420,6 +1419,7 @@ GNUNET_SERVER_connect_notify (struct GNUNET_SERVER_Handle *server, void *callback_cls) { struct NotifyList *n; + struct GNUNET_SERVER_Client *client; n = GNUNET_new (struct NotifyList); n->callback = callback; @@ -1427,6 +1427,8 @@ GNUNET_SERVER_connect_notify (struct GNUNET_SERVER_Handle *server, GNUNET_CONTAINER_DLL_insert (server->connect_notify_list_head, server->connect_notify_list_tail, n); + for (client = server->clients_head; NULL != client; client = client->next) + callback (callback_cls, client); } @@ -1439,8 +1441,8 @@ GNUNET_SERVER_connect_notify (struct GNUNET_SERVER_Handle *server, */ void GNUNET_SERVER_disconnect_notify_cancel (struct GNUNET_SERVER_Handle *server, - GNUNET_SERVER_DisconnectCallback - callback, void *callback_cls) + GNUNET_SERVER_DisconnectCallback callback, + void *callback_cls) { struct NotifyList *pos; @@ -1491,7 +1493,7 @@ GNUNET_SERVER_connect_notify_cancel (struct GNUNET_SERVER_Handle *server, /** * Destroy the connection that is passed in via @a cls. Used * as calling #GNUNET_CONNECTION_destroy from within a function - * that was itself called from within 'process_notify' of + * that was itself called from within process_notify() of * 'connection.c' is not allowed (see #2329). * * @param cls connection to destroy @@ -1547,27 +1549,34 @@ GNUNET_SERVER_client_disconnect (struct GNUNET_SERVER_Client *client) server->clients_tail, client); if (NULL != server->mst_destroy) - server->mst_destroy (server->mst_cls, client->mst); + server->mst_destroy (server->mst_cls, + client->mst); else GNUNET_SERVER_mst_destroy (client->mst); client->mst = NULL; for (n = server->disconnect_notify_list_head; NULL != n; n = n->next) - n->callback (n->callback_cls, client); + n->callback (n->callback_cls, + client); } client->reference_count--; if (client->reference_count > 0) { LOG (GNUNET_ERROR_TYPE_DEBUG, - "RC still positive, not destroying everything.\n"); + "RC of %p still positive, not destroying everything.\n", + client); client->server = NULL; return; } if (GNUNET_YES == client->in_process_client_buffer) { LOG (GNUNET_ERROR_TYPE_DEBUG, - "Still processing inputs, not destroying everything.\n"); + "Still processing inputs of %p, not destroying everything.\n", + client); return; } + LOG (GNUNET_ERROR_TYPE_DEBUG, + "RC of %p now zero, destroying everything.\n", + client); if (GNUNET_YES == client->persist) GNUNET_CONNECTION_persist_ (client->connection); if (NULL != client->th.cth) @@ -1650,8 +1659,8 @@ struct GNUNET_SERVER_TransmitHandle * GNUNET_SERVER_notify_transmit_ready (struct GNUNET_SERVER_Client *client, size_t size, struct GNUNET_TIME_Relative timeout, - GNUNET_CONNECTION_TransmitReadyNotify - callback, void *callback_cls) + GNUNET_CONNECTION_TransmitReadyNotify callback, + void *callback_cls) { if (NULL != client->th.callback) return NULL; @@ -1747,7 +1756,8 @@ GNUNET_SERVER_receive_done (struct GNUNET_SERVER_Client *client, LOG (GNUNET_ERROR_TYPE_DEBUG, "GNUNET_SERVER_receive_done causes restart in reading from the socket\n"); GNUNET_assert (NULL == client->restart_task); - client->restart_task = GNUNET_SCHEDULER_add_now (&restart_processing, client); + client->restart_task = GNUNET_SCHEDULER_add_now (&restart_processing, + client); }