Fix perf_crypto_rsa.c after various changes
[oweals/gnunet.git] / src / util / server_tc.c
index eda82e50fdefdd7a952288e5359ca24216f0a358..986bc9b434a53c5ca0126ea4d2de6ac4c49f24ff 100644 (file)
@@ -1,10 +1,10 @@
 /*
      This file is part of GNUnet.
-     (C) 2009 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2009 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -14,8 +14,8 @@
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 
 /**
  */
 
 #include "platform.h"
-#include "gnunet_common.h"
-#include "gnunet_connection_lib.h"
-#include "gnunet_scheduler_lib.h"
-#include "gnunet_server_lib.h"
-#include "gnunet_time_lib.h"
+#include "gnunet_util_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 +78,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)
@@ -103,19 +98,16 @@ transmit_response (void *cls, size_t size, void *buf)
   }
   else
   {
-    if (NULL == GNUNET_SERVER_notify_transmit_ready (tc->client,
-                                                     GNUNET_MIN
-                                                     (MIN_BLOCK_SIZE,
-                                                      tc->total - tc->off),
-                                                     GNUNET_TIME_absolute_get_remaining
-                                                     (tc->timeout),
-                                                     &transmit_response, tc))
+    if (NULL ==
+        GNUNET_SERVER_notify_transmit_ready (tc->client,
+                                             GNUNET_MIN (MIN_BLOCK_SIZE,
+                                                         tc->total - tc->off),
+                                             GNUNET_TIME_absolute_get_remaining
+                                             (tc->timeout), &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);
     }
   }
   return msize;
@@ -134,8 +126,8 @@ GNUNET_SERVER_transmit_context_create (struct GNUNET_SERVER_Client *client)
 {
   struct GNUNET_SERVER_TransmitContext *tc;
 
-  GNUNET_assert (client != NULL);
-  tc = GNUNET_malloc (sizeof (struct GNUNET_SERVER_TransmitContext));
+  GNUNET_assert (NULL != client);
+  tc = GNUNET_new (struct GNUNET_SERVER_TransmitContext);
   GNUNET_SERVER_client_keep (client);
   tc->client = client;
   return tc;
@@ -200,9 +192,9 @@ GNUNET_SERVER_transmit_context_append_message (struct
 
 /**
  * Execute a transmission context.  If there is
- * an error in the transmission, the receive_done
- * method will be called with an error code (GNUNET_SYSERR),
- * otherwise with GNUNET_OK.
+ * an error in the transmission, the #GNUNET_SERVER_receive_done()
+ * method will be called with an error code (#GNUNET_SYSERR),
+ * otherwise with #GNUNET_OK.
  *
  * @param tc transmission context to use
  * @param timeout when to time out and abort the transmission
@@ -219,11 +211,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 */