-remove async ecc key generation, not needed
[oweals/gnunet.git] / src / util / server_tc.c
index 12713103231218b55071be9d27bb4c5487417994..f803af48cba988c64f624224577c7c312f63ed88 100644 (file)
@@ -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 */