X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fserver_tc.c;h=f803af48cba988c64f624224577c7c312f63ed88;hb=72c8645af31896829b674b575c5375706f362a30;hp=12713103231218b55071be9d27bb4c5487417994;hpb=5746309cb4be2073d550ad7a6885e918631dbc38;p=oweals%2Fgnunet.git diff --git a/src/util/server_tc.c b/src/util/server_tc.c index 127131032..f803af48c 100644 --- a/src/util/server_tc.c +++ b/src/util/server_tc.c @@ -33,6 +33,8 @@ #include "gnunet_time_lib.h" +#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__) + /** * How much buffer space do we want to have at least @@ -80,12 +82,9 @@ transmit_response (void *cls, size_t size, void *buf) struct GNUNET_SERVER_TransmitContext *tc = cls; size_t msize; - if (buf == NULL) + if (NULL == buf) { - GNUNET_SERVER_receive_done (tc->client, GNUNET_SYSERR); - GNUNET_SERVER_client_drop (tc->client); - GNUNET_free_non_null (tc->buf); - GNUNET_free (tc); + GNUNET_SERVER_transmit_context_destroy (tc, GNUNET_SYSERR); return 0; } if (tc->total - tc->off > size) @@ -112,10 +111,7 @@ transmit_response (void *cls, size_t size, void *buf) tc)) { GNUNET_break (0); - GNUNET_SERVER_receive_done (tc->client, GNUNET_SYSERR); - GNUNET_SERVER_client_drop (tc->client); - GNUNET_free_non_null (tc->buf); - GNUNET_free (tc); + GNUNET_SERVER_transmit_context_destroy (tc, GNUNET_SYSERR); } } return msize; @@ -134,7 +130,7 @@ GNUNET_SERVER_transmit_context_create (struct GNUNET_SERVER_Client *client) { struct GNUNET_SERVER_TransmitContext *tc; - GNUNET_assert (client != NULL); + GNUNET_assert (NULL != client); tc = GNUNET_malloc (sizeof (struct GNUNET_SERVER_TransmitContext)); GNUNET_SERVER_client_keep (client); tc->client = client; @@ -219,11 +215,32 @@ GNUNET_SERVER_transmit_context_run (struct GNUNET_SERVER_TransmitContext *tc, &transmit_response, tc)) { GNUNET_break (0); - GNUNET_SERVER_receive_done (tc->client, GNUNET_SYSERR); - GNUNET_SERVER_client_drop (tc->client); - GNUNET_free_non_null (tc->buf); - GNUNET_free (tc); + GNUNET_SERVER_transmit_context_destroy (tc, GNUNET_SYSERR); } } + +/** + * Destroy a transmission context. This function must not be called + * after 'GNUNET_SERVER_transmit_context_run'. + * + * @param tc transmission context to destroy + * @param success code to give to 'GNUNET_SERVER_receive_done' for + * the client: GNUNET_OK to keep the connection open and + * continue to receive + * GNUNET_NO to close the connection (normal behavior) + * GNUNET_SYSERR to close the connection (signal + * serious error) + */ +void +GNUNET_SERVER_transmit_context_destroy (struct GNUNET_SERVER_TransmitContext + *tc, int success) +{ + GNUNET_SERVER_receive_done (tc->client, success); + GNUNET_SERVER_client_drop (tc->client); + GNUNET_free_non_null (tc->buf); + GNUNET_free (tc); +} + + /* end of server_tc.c */