gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r21057 - in gnunet/src: arm include statistics util


From: gnunet
Subject: [GNUnet-SVN] r21057 - in gnunet/src: arm include statistics util
Date: Sat, 21 Apr 2012 17:16:45 +0200

Author: grothoff
Date: 2012-04-21 17:16:45 +0200 (Sat, 21 Apr 2012)
New Revision: 21057

Modified:
   gnunet/src/arm/gnunet-service-arm.c
   gnunet/src/arm/mockup-service.c
   gnunet/src/include/gnunet_connection_lib.h
   gnunet/src/include/gnunet_server_lib.h
   gnunet/src/statistics/gnunet-service-statistics.c
   gnunet/src/util/client.c
   gnunet/src/util/configuration.c
   gnunet/src/util/connection.c
   gnunet/src/util/crypto_hkdf.c
   gnunet/src/util/disk.c
   gnunet/src/util/load.c
   gnunet/src/util/network.c
   gnunet/src/util/server.c
   gnunet/src/util/server_mst.c
   gnunet/src/util/server_nc.c
   gnunet/src/util/service.c
   gnunet/src/util/winproc.c
Log:
-misc offline hacking / code cleanup in util

Modified: gnunet/src/arm/gnunet-service-arm.c
===================================================================
--- gnunet/src/arm/gnunet-service-arm.c 2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/arm/gnunet-service-arm.c 2012-04-21 15:16:45 UTC (rev 21057)
@@ -1224,7 +1224,6 @@
   cfg = c;
   server = serv;
   GNUNET_assert (serv != NULL);
-  GNUNET_SERVER_ignore_shutdown (serv, GNUNET_YES);
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
                                NULL);
   child_death_task =

Modified: gnunet/src/arm/mockup-service.c
===================================================================
--- gnunet/src/arm/mockup-service.c     2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/arm/mockup-service.c     2012-04-21 15:16:45 UTC (rev 21057)
@@ -87,7 +87,6 @@
     {NULL, NULL, 0, 0}
   };
   /* process client requests */
-  GNUNET_SERVER_ignore_shutdown (server, GNUNET_YES);
   GNUNET_SERVER_add_handlers (server, handlers);
 }
 

Modified: gnunet/src/include/gnunet_connection_lib.h
===================================================================
--- gnunet/src/include/gnunet_connection_lib.h  2012-04-20 21:51:38 UTC (rev 
21056)
+++ gnunet/src/include/gnunet_connection_lib.h  2012-04-21 15:16:45 UTC (rev 
21057)
@@ -342,17 +342,7 @@
                                                 *th);
 
 
-/**
- * Configure this connection to ignore shutdown signals.
- *
- * @param connection connection handle
- * @param do_ignore GNUNET_YES to ignore, GNUNET_NO to restore default
- */
-void
-GNUNET_CONNECTION_ignore_shutdown (struct GNUNET_CONNECTION_Handle *connection,
-                                   int do_ignore);
 
-
 #if 0                           /* keep Emacsens' auto-indent happy */
 {
 #endif

Modified: gnunet/src/include/gnunet_server_lib.h
===================================================================
--- gnunet/src/include/gnunet_server_lib.h      2012-04-20 21:51:38 UTC (rev 
21056)
+++ gnunet/src/include/gnunet_server_lib.h      2012-04-21 15:16:45 UTC (rev 
21057)
@@ -398,22 +398,6 @@
 
 
 /**
- * Configure this server's connections to continue handling client
- * requests as usual even after we get a shutdown signal.  The change
- * only applies to clients that connect to the server from the outside
- * using TCP after this call.  Clients managed previously or those
- * added using GNUNET_SERVER_connect_socket and
- * GNUNET_SERVER_connect_callback are not affected by this option.
- *
- * @param h server handle
- * @param do_ignore GNUNET_YES to ignore, GNUNET_NO to restore default
- */
-void
-GNUNET_SERVER_ignore_shutdown (struct GNUNET_SERVER_Handle *h, int do_ignore);
-
-
-
-/**
  * Disable the "CORK" feature for communication with the given client,
  * forcing the OS to immediately flush the buffer on transmission
  * instead of potentially buffering multiple messages.

Modified: gnunet/src/statistics/gnunet-service-statistics.c
===================================================================
--- gnunet/src/statistics/gnunet-service-statistics.c   2012-04-20 21:51:38 UTC 
(rev 21056)
+++ gnunet/src/statistics/gnunet-service-statistics.c   2012-04-21 15:16:45 UTC 
(rev 21057)
@@ -824,7 +824,6 @@
   cfg = c;
   srv = server;
   GNUNET_SERVER_add_handlers (server, handlers);
-  GNUNET_SERVER_ignore_shutdown (server, GNUNET_YES);
   nc = GNUNET_SERVER_notification_context_create (server, 16);
   GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL);
   load (server);

Modified: gnunet/src/util/client.c
===================================================================
--- gnunet/src/util/client.c    2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/client.c    2012-04-21 15:16:45 UTC (rev 21057)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2006, 2008, 2009 Christian Grothoff (and other 
contributing authors)
+     (C) 2001, 2002, 2006, 2008, 2009, 2012 Christian Grothoff (and other 
contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -26,7 +26,6 @@
  * Generic TCP code for reliable, record-oriented TCP
  * connections between clients and service providers.
  */
-
 #include "platform.h"
 #include "gnunet_common.h"
 #include "gnunet_client_lib.h"
@@ -52,7 +51,7 @@
   /**
    * Connection state.
    */
-  struct GNUNET_CLIENT_Connection *sock;
+  struct GNUNET_CLIENT_Connection *client;
 
   /**
    * Function to call to get the data for transmission.
@@ -112,7 +111,7 @@
   /**
    * Client handle.
    */
-  struct GNUNET_CLIENT_Connection *sock;
+  struct GNUNET_CLIENT_Connection *client;
 
   /**
    * Message to transmit; do not free, allocated
@@ -146,9 +145,9 @@
 {
 
   /**
-   * the socket handle, NULL if not live
+   * The connection handle, NULL if not live
    */
-  struct GNUNET_CONNECTION_Handle *sock;
+  struct GNUNET_CONNECTION_Handle *connection;
 
   /**
    * Our configuration.
@@ -260,26 +259,28 @@
 do_connect (const char *service_name,
             const struct GNUNET_CONFIGURATION_Handle *cfg, unsigned int 
attempt)
 {
-  struct GNUNET_CONNECTION_Handle *sock;
+  struct GNUNET_CONNECTION_Handle *connection;
   char *hostname;
   char *unixpath;
   unsigned long long port;
 
-  sock = NULL;
+  connection = NULL;
 #if AF_UNIX
   if (0 == (attempt % 2))
   {
     /* on even rounds, try UNIX */
     unixpath = NULL;
-    if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, 
service_name, "UNIXPATH", &unixpath)) && (0 < strlen (unixpath)))     /* We 
have a non-NULL unixpath, does that mean it's valid? */
+    if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, 
service_name, "UNIXPATH", &unixpath)) && 
+       (0 < strlen (unixpath)))     
     {
-      sock = GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, unixpath);
-      if (sock != NULL)
+      /* We have a non-NULL unixpath, need to validate it */
+      connection = GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, 
unixpath);
+      if (NULL != connection)
       {
         LOG (GNUNET_ERROR_TYPE_DEBUG, "Connected to unixpath `%s'!\n",
              unixpath);
         GNUNET_free (unixpath);
-        return sock;
+        return connection;
       }
     }
     GNUNET_free_non_null (unixpath);
@@ -316,7 +317,7 @@
     port = 0;
     hostname = NULL;
   }
-  if (port == 0)
+  if (0 == port)
   {
 #if AF_UNIX
     if (0 != (attempt % 2))
@@ -328,13 +329,13 @@
                                                   &unixpath)) &&
           (0 < strlen (unixpath)))
       {
-        sock =
+        connection =
             GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, unixpath);
-        if (sock != NULL)
+        if (NULL != connection)
         {
           GNUNET_free (unixpath);
           GNUNET_free_non_null (hostname);
-          return sock;
+          return connection;
         }
       }
       GNUNET_free_non_null (unixpath);
@@ -346,10 +347,9 @@
     GNUNET_free_non_null (hostname);
     return NULL;
   }
-
-  sock = GNUNET_CONNECTION_create_from_connect (cfg, hostname, port);
+  connection = GNUNET_CONNECTION_create_from_connect (cfg, hostname, port);
   GNUNET_free (hostname);
-  return sock;
+  return connection;
 }
 
 
@@ -364,17 +364,17 @@
 GNUNET_CLIENT_connect (const char *service_name,
                        const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
-  struct GNUNET_CLIENT_Connection *ret;
-  struct GNUNET_CONNECTION_Handle *sock;
+  struct GNUNET_CLIENT_Connection *client;
+  struct GNUNET_CONNECTION_Handle *connection;
 
-  sock = do_connect (service_name, cfg, 0);
-  ret = GNUNET_malloc (sizeof (struct GNUNET_CLIENT_Connection));
-  ret->attempts = 1;
-  ret->sock = sock;
-  ret->service_name = GNUNET_strdup (service_name);
-  ret->cfg = cfg;
-  ret->back_off = GNUNET_TIME_UNIT_MILLISECONDS;
-  return ret;
+  connection = do_connect (service_name, cfg, 0);
+  client = GNUNET_malloc (sizeof (struct GNUNET_CLIENT_Connection));
+  client->attempts = 1;
+  client->connection = connection;
+  client->service_name = GNUNET_strdup (service_name);
+  client->cfg = cfg;
+  client->back_off = GNUNET_TIME_UNIT_MILLISECONDS;
+  return client;
 }
 
 
@@ -389,54 +389,57 @@
  * destroyed (unless, of course, there is an error with the server in
  * which case the message may still be lost).
  *
- * @param sock handle to the service connection
+ * @param client handle to the service connection
  */
 void
-GNUNET_CLIENT_disconnect (struct GNUNET_CLIENT_Connection *sock)
+GNUNET_CLIENT_disconnect (struct GNUNET_CLIENT_Connection *client)
 {
-  if (sock->in_receive == GNUNET_YES)
+  if (GNUNET_YES == client->in_receive)
   {
-    GNUNET_CONNECTION_receive_cancel (sock->sock);
-    sock->in_receive = GNUNET_NO;
+    GNUNET_CONNECTION_receive_cancel (client->connection);
+    client->in_receive = GNUNET_NO;
   }
-  if (sock->th != NULL)
+  if (NULL != client->th)
   {
-    GNUNET_CLIENT_notify_transmit_ready_cancel (sock->th);
-    sock->th = NULL;
+    GNUNET_CLIENT_notify_transmit_ready_cancel (client->th);
+    client->th = NULL;
   }
-  if (NULL != sock->sock)
+  if (NULL != client->connection)
   {
-    GNUNET_CONNECTION_destroy (sock->sock);
-    sock->sock = NULL;
+    GNUNET_CONNECTION_destroy (client->connection);
+    client->connection = NULL;
   }
-  if (sock->receive_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != client->receive_task)
   {
-    GNUNET_SCHEDULER_cancel (sock->receive_task);
-    sock->receive_task = GNUNET_SCHEDULER_NO_TASK;
+    GNUNET_SCHEDULER_cancel (client->receive_task);
+    client->receive_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  if (sock->tag != NULL)
+  if (NULL != client->tag)
   {
-    GNUNET_free (sock->tag);
-    sock->tag = NULL;
+    GNUNET_free (client->tag);
+    client->tag = NULL;
   }
-  sock->receiver_handler = NULL;
-  GNUNET_array_grow (sock->received_buf, sock->received_size, 0);
-  GNUNET_free (sock->service_name);
-  GNUNET_free (sock);
+  client->receiver_handler = NULL;
+  GNUNET_array_grow (client->received_buf, client->received_size, 0);
+  GNUNET_free (client->service_name);
+  GNUNET_free (client);
 }
 
 
 /**
- * Check if message is complete
+ * Check if message is complete.  Sets the "msg_complete" member
+ * in the client struct.
+ *
+ * @param client connection with the buffer to check
  */
 static void
-check_complete (struct GNUNET_CLIENT_Connection *conn)
+check_complete (struct GNUNET_CLIENT_Connection *client)
 {
-  if ((conn->received_pos >= sizeof (struct GNUNET_MessageHeader)) &&
-      (conn->received_pos >=
-       ntohs (((const struct GNUNET_MessageHeader *) conn->received_buf)->
+  if ((client->received_pos >= sizeof (struct GNUNET_MessageHeader)) &&
+      (client->received_pos >=
+       ntohs (((const struct GNUNET_MessageHeader *) client->received_buf)->
               size)))
-    conn->msg_complete = GNUNET_YES;
+    client->msg_complete = GNUNET_YES;
 }
 
 
@@ -456,52 +459,50 @@
 receive_helper (void *cls, const void *buf, size_t available,
                 const struct sockaddr *addr, socklen_t addrlen, int errCode)
 {
-  struct GNUNET_CLIENT_Connection *conn = cls;
+  struct GNUNET_CLIENT_Connection *client = cls;
   struct GNUNET_TIME_Relative remaining;
   GNUNET_CLIENT_MessageHandler receive_handler;
   void *receive_handler_cls;
 
-  GNUNET_assert (conn->msg_complete == GNUNET_NO);
-  conn->in_receive = GNUNET_NO;
-  if ((available == 0) || (conn->sock == NULL) || (errCode != 0))
+  GNUNET_assert (GNUNET_NO == client->msg_complete);
+  client->in_receive = GNUNET_NO;
+  if ((0 == available) || (NULL == client->connection) || (0 != errCode))
   {
     /* signal timeout! */
     LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Timeout in receive_helper, available %u, conn->sock %s, errCode 
`%s'\n",
-         (unsigned int) available, conn->sock == NULL ? "NULL" : "non-NULL",
+         "Timeout in receive_helper, available %u, client->connection %s, 
errCode `%s'\n",
+         (unsigned int) available, NULL == client->connection ? "NULL" : 
"non-NULL",
          STRERROR (errCode));
-    if (NULL != (receive_handler = conn->receiver_handler))
+    if (NULL != (receive_handler = client->receiver_handler))
     {
-      receive_handler_cls = conn->receiver_handler_cls;
-      conn->receiver_handler = NULL;
+      receive_handler_cls = client->receiver_handler_cls;
+      client->receiver_handler = NULL;
       receive_handler (receive_handler_cls, NULL);
     }
     return;
   }
-
   /* FIXME: optimize for common fast case where buf contains the
    * entire message and we need no copying... */
 
-
   /* slow path: append to array */
-  if (conn->received_size < conn->received_pos + available)
-    GNUNET_array_grow (conn->received_buf, conn->received_size,
-                       conn->received_pos + available);
-  memcpy (&conn->received_buf[conn->received_pos], buf, available);
-  conn->received_pos += available;
-  check_complete (conn);
+  if (client->received_size < client->received_pos + available)
+    GNUNET_array_grow (client->received_buf, client->received_size,
+                       client->received_pos + available);
+  memcpy (&client->received_buf[client->received_pos], buf, available);
+  client->received_pos += available;
+  check_complete (client);
   /* check for timeout */
-  remaining = GNUNET_TIME_absolute_get_remaining (conn->receive_timeout);
-  if (remaining.rel_value == 0)
+  remaining = GNUNET_TIME_absolute_get_remaining (client->receive_timeout);
+  if (0 == remaining.rel_value)
   {
     /* signal timeout! */
-    if (NULL != conn->receiver_handler)
-      conn->receiver_handler (conn->receiver_handler_cls, NULL);
+    if (NULL != client->receiver_handler)
+      client->receiver_handler (client->receiver_handler_cls, NULL);
     return;
   }
   /* back to receive -- either for more data or to call callback! */
-  GNUNET_CLIENT_receive (conn, conn->receiver_handler,
-                         conn->receiver_handler_cls, remaining);
+  GNUNET_CLIENT_receive (client, client->receiver_handler,
+                         client->receiver_handler_cls, remaining);
 }
 
 
@@ -514,28 +515,28 @@
 static void
 receive_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  struct GNUNET_CLIENT_Connection *sock = cls;
-  GNUNET_CLIENT_MessageHandler handler = sock->receiver_handler;
+  struct GNUNET_CLIENT_Connection *client = cls;
+  GNUNET_CLIENT_MessageHandler handler = client->receiver_handler;
   const struct GNUNET_MessageHeader *cmsg =
-      (const struct GNUNET_MessageHeader *) sock->received_buf;
-  void *handler_cls = sock->receiver_handler_cls;
+      (const struct GNUNET_MessageHeader *) client->received_buf;
+  void *handler_cls = client->receiver_handler_cls;
   uint16_t msize = ntohs (cmsg->size);
   char mbuf[msize];
   struct GNUNET_MessageHeader *msg = (struct GNUNET_MessageHeader *) mbuf;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Received message of type %u and size %u\n",
        ntohs (cmsg->type), msize);
-  sock->receive_task = GNUNET_SCHEDULER_NO_TASK;
-  GNUNET_assert (GNUNET_YES == sock->msg_complete);
-  GNUNET_assert (sock->received_pos >= msize);
+  client->receive_task = GNUNET_SCHEDULER_NO_TASK;
+  GNUNET_assert (GNUNET_YES == client->msg_complete);
+  GNUNET_assert (client->received_pos >= msize);
   memcpy (msg, cmsg, msize);
-  memmove (sock->received_buf, &sock->received_buf[msize],
-           sock->received_pos - msize);
-  sock->received_pos -= msize;
-  sock->msg_complete = GNUNET_NO;
-  sock->receiver_handler = NULL;
-  check_complete (sock);
-  if (handler != NULL)
+  memmove (client->received_buf, &client->received_buf[msize],
+           client->received_pos - msize);
+  client->received_pos -= msize;
+  client->msg_complete = GNUNET_NO;
+  client->receiver_handler = NULL;
+  check_complete (client);
+  if (NULL != handler)
     handler (handler_cls, msg);
 }
 
@@ -543,17 +544,17 @@
 /**
  * Read from the service.
  *
- * @param sock the service
+ * @param client the service
  * @param handler function to call with the message
  * @param handler_cls closure for handler
  * @param timeout how long to wait until timing out
  */
 void
-GNUNET_CLIENT_receive (struct GNUNET_CLIENT_Connection *sock,
+GNUNET_CLIENT_receive (struct GNUNET_CLIENT_Connection *client,
                        GNUNET_CLIENT_MessageHandler handler, void *handler_cls,
                        struct GNUNET_TIME_Relative timeout)
 {
-  if (sock->sock == NULL)
+  if (NULL == client->connection)
   {
     /* already disconnected, fail instantly! */
     GNUNET_break (0);           /* this should not happen in well-written 
code! */
@@ -561,21 +562,21 @@
       handler (handler_cls, NULL);
     return;
   }
-  sock->receiver_handler = handler;
-  sock->receiver_handler_cls = handler_cls;
-  sock->receive_timeout = GNUNET_TIME_relative_to_absolute (timeout);
-  if (GNUNET_YES == sock->msg_complete)
+  client->receiver_handler = handler;
+  client->receiver_handler_cls = handler_cls;
+  client->receive_timeout = GNUNET_TIME_relative_to_absolute (timeout);
+  if (GNUNET_YES == client->msg_complete)
   {
-    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->receive_task);
-    sock->receive_task = GNUNET_SCHEDULER_add_now (&receive_task, sock);
+    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == client->receive_task);
+    client->receive_task = GNUNET_SCHEDULER_add_now (&receive_task, client);
   }
   else
   {
-    GNUNET_assert (sock->in_receive == GNUNET_NO);
-    sock->in_receive = GNUNET_YES;
+    GNUNET_assert (GNUNET_NO == client->in_receive);
+    client->in_receive = GNUNET_YES;
     LOG (GNUNET_ERROR_TYPE_DEBUG, "calling GNUNET_CONNECTION_receive\n");
-    GNUNET_CONNECTION_receive (sock->sock, GNUNET_SERVER_MAX_MESSAGE_SIZE - 1,
-                               timeout, &receive_helper, sock);
+    GNUNET_CONNECTION_receive (client->connection, 
GNUNET_SERVER_MAX_MESSAGE_SIZE - 1,
+                               timeout, &receive_helper, client);
   }
 }
 
@@ -600,23 +601,23 @@
 static void
 confirm_handler (void *cls, const struct GNUNET_MessageHeader *msg)
 {
-  struct GNUNET_CLIENT_Connection *conn = cls;
+  struct GNUNET_CLIENT_Connection *client = cls;
 
   /* We may want to consider looking at the reply in more
    * detail in the future, for example, is this the
    * correct service? FIXME! */
-  if (msg != NULL)
+  if (NULL != msg)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Received confirmation that service is running.\n");
-    GNUNET_SCHEDULER_add_continuation (conn->test_cb, conn->test_cb_cls,
+    GNUNET_SCHEDULER_add_continuation (client->test_cb, client->test_cb_cls,
                                        GNUNET_SCHEDULER_REASON_PREREQ_DONE);
   }
   else
   {
-    service_test_error (conn->test_cb, conn->test_cb_cls);
+    service_test_error (client->test_cb, client->test_cb_cls);
   }
-  GNUNET_CLIENT_disconnect (conn);
+  GNUNET_CLIENT_disconnect (client);
 }
 
 
@@ -632,23 +633,23 @@
 static size_t
 write_test (void *cls, size_t size, void *buf)
 {
-  struct GNUNET_CLIENT_Connection *conn = cls;
+  struct GNUNET_CLIENT_Connection *client = cls;
   struct GNUNET_MessageHeader *msg;
 
   if (size < sizeof (struct GNUNET_MessageHeader))
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG, _("Failure to transmit TEST request.\n"));
-    service_test_error (conn->test_cb, conn->test_cb_cls);
-    GNUNET_CLIENT_disconnect (conn);
+    service_test_error (client->test_cb, client->test_cb_cls);
+    GNUNET_CLIENT_disconnect (client);
     return 0;                   /* client disconnected */
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Transmitting `%s' request.\n", "TEST");
   msg = (struct GNUNET_MessageHeader *) buf;
   msg->type = htons (GNUNET_MESSAGE_TYPE_TEST);
   msg->size = htons (sizeof (struct GNUNET_MessageHeader));
-  GNUNET_CLIENT_receive (conn, &confirm_handler, conn,
+  GNUNET_CLIENT_receive (client, &confirm_handler, client,
                          GNUNET_TIME_absolute_get_remaining
-                         (conn->test_deadline));
+                         (client->test_deadline));
   return sizeof (struct GNUNET_MessageHeader);
 }
 
@@ -675,7 +676,7 @@
   char *hostname;
   unsigned long long port;
   struct GNUNET_NETWORK_Handle *sock;
-  struct GNUNET_CLIENT_Connection *conn;
+  struct GNUNET_CLIENT_Connection *client;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Testing if service `%s' is running.\n",
        service);
@@ -698,7 +699,7 @@
       else
       {
         sock = GNUNET_NETWORK_socket_create (PF_UNIX, SOCK_STREAM, 0);
-        if (sock != NULL)
+        if (NULL != sock)
         {
           memset (&s_un, 0, sizeof (s_un));
           s_un.sun_family = AF_UNIX;
@@ -764,7 +765,7 @@
     s_in.sin_port = htons (port);
 
     sock = GNUNET_NETWORK_socket_create (AF_INET, SOCK_STREAM, 0);
-    if (sock != NULL)
+    if (NULL != sock)
     {
       if (GNUNET_OK !=
           GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) &s_in,
@@ -798,7 +799,7 @@
     s_in6.sin6_port = htons (port);
 
     sock = GNUNET_NETWORK_socket_create (AF_INET6, SOCK_STREAM, 0);
-    if (sock != NULL)
+    if (NULL != sock)
     {
       if (GNUNET_OK !=
           GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) &s_in6,
@@ -830,8 +831,8 @@
   GNUNET_free_non_null (hostname);
 
   /* non-localhost, try 'connect' method */
-  conn = GNUNET_CLIENT_connect (service, cfg);
-  if (conn == NULL)
+  client = GNUNET_CLIENT_connect (service, cfg);
+  if (NULL == client)
   {
     LOG (GNUNET_ERROR_TYPE_INFO,
          _("Could not connect to service `%s', must not be running.\n"),
@@ -839,18 +840,18 @@
     service_test_error (task, task_cls);
     return;
   }
-  conn->test_cb = task;
-  conn->test_cb_cls = task_cls;
-  conn->test_deadline = GNUNET_TIME_relative_to_absolute (timeout);
-  if (NULL == GNUNET_CLIENT_notify_transmit_ready (conn,
+  client->test_cb = task;
+  client->test_cb_cls = task_cls;
+  client->test_deadline = GNUNET_TIME_relative_to_absolute (timeout);
+  if (NULL == GNUNET_CLIENT_notify_transmit_ready (client,
                                                   sizeof (struct 
GNUNET_MessageHeader),
                                                   timeout, GNUNET_YES, 
&write_test,
-                                                  conn))
+                                                  client))
   {
     LOG (GNUNET_ERROR_TYPE_WARNING,
          _("Failure to transmit request to service `%s'\n"), service);
     service_test_error (task, task_cls);
-    GNUNET_CLIENT_disconnect (conn);
+    GNUNET_CLIENT_disconnect (client);
     return;
   }
 }
@@ -884,25 +885,17 @@
   struct GNUNET_TIME_Relative delay;
 
   th->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
+  th->client->connection =
+      do_connect (th->client->service_name, th->client->cfg, 
th->client->attempts++);
+  if (NULL == th->client->connection)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Transmission failed due to shutdown.\n");
-    th->sock->th = NULL;
-    th->notify (th->notify_cls, 0, NULL);
-    GNUNET_free (th);
-    return;
-  }
-  th->sock->sock =
-      do_connect (th->sock->service_name, th->sock->cfg, th->sock->attempts++);
-  if (NULL == th->sock->sock)
-  {
     /* could happen if we're out of sockets */
     delay =
         GNUNET_TIME_relative_min (GNUNET_TIME_absolute_get_remaining
-                                  (th->timeout), th->sock->back_off);
-    th->sock->back_off =
+                                  (th->timeout), th->client->back_off);
+    th->client->back_off =
         GNUNET_TIME_relative_min (GNUNET_TIME_relative_multiply
-                                  (th->sock->back_off, 2),
+                                  (th->client->back_off, 2),
                                   GNUNET_TIME_UNIT_SECONDS);
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Transmission failed %u times, trying again in %llums.\n",
@@ -913,14 +906,14 @@
     return;
   }
   th->th =
-      GNUNET_CONNECTION_notify_transmit_ready (th->sock->sock, th->size,
+      GNUNET_CONNECTION_notify_transmit_ready (th->client->connection, 
th->size,
                                                
GNUNET_TIME_absolute_get_remaining
                                                (th->timeout), &client_notify,
                                                th);
-  if (th->th == NULL)
+  if (NULL == th->th)
   {
     GNUNET_break (0);
-    th->sock->th = NULL;
+    th->client->th = NULL;
     th->notify (th->notify_cls, 0, NULL);
     GNUNET_free (th);
     return;
@@ -941,19 +934,17 @@
 client_notify (void *cls, size_t size, void *buf)
 {
   struct GNUNET_CLIENT_TransmitHandle *th = cls;
-  struct GNUNET_CLIENT_Connection *sock = th->sock;
+  struct GNUNET_CLIENT_Connection *client = th->client;
   size_t ret;
   struct GNUNET_TIME_Relative delay;
 
   th->th = NULL;
-  sock->th = NULL;
-  if (buf == NULL)
+  client->th = NULL;
+  if (NULL == buf)
   {
     delay = GNUNET_TIME_absolute_get_remaining (th->timeout);
     delay.rel_value /= 2;
-    if ((0 !=
-         (GNUNET_SCHEDULER_REASON_SHUTDOWN & GNUNET_SCHEDULER_get_reason ())) 
||
-        (GNUNET_YES != th->auto_retry) || (0 == --th->attempts_left) ||
+    if ((GNUNET_YES != th->auto_retry) || (0 == --th->attempts_left) ||
         (delay.rel_value < 1))
     {
       LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -966,24 +957,24 @@
     /* auto-retry */
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Failed to connect to `%s', automatically trying again.\n",
-         sock->service_name);
-    if (sock->in_receive == GNUNET_YES)
+         client->service_name);
+    if (GNUNET_YES == client->in_receive)
     {
-      GNUNET_CONNECTION_receive_cancel (sock->sock);
-      sock->in_receive = GNUNET_NO;
+      GNUNET_CONNECTION_receive_cancel (client->connection);
+      client->in_receive = GNUNET_NO;
     }    
-    GNUNET_CONNECTION_destroy (sock->sock);
-    sock->sock = NULL;
-    delay = GNUNET_TIME_relative_min (delay, sock->back_off);
-    sock->back_off =
+    GNUNET_CONNECTION_destroy (client->connection);
+    client->connection = NULL;
+    delay = GNUNET_TIME_relative_min (delay, client->back_off);
+    client->back_off =
         GNUNET_TIME_relative_min (GNUNET_TIME_relative_multiply
-                                  (sock->back_off, 2),
+                                  (client->back_off, 2),
                                   GNUNET_TIME_UNIT_SECONDS);
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Transmission failed %u times, trying again in %llums.\n",
          MAX_ATTEMPTS - th->attempts_left,
          (unsigned long long) delay.rel_value);
-    sock->th = th;
+    client->th = th;
     th->reconnect_task =
         GNUNET_SCHEDULER_add_delayed (delay, &client_delayed_retry, th);
     return 0;
@@ -1000,7 +991,7 @@
  * are free in the transmission buffer.  May call the notify
  * method immediately if enough space is available.
  *
- * @param sock connection to the service
+ * @param client connection to the service
  * @param size number of bytes to send
  * @param timeout after how long should we give up (and call
  *        notify with buf NULL and size 0)?
@@ -1015,7 +1006,7 @@
  *         a handle if the notify callback was queued (can be used to cancel)
  */
 struct GNUNET_CLIENT_TransmitHandle *
-GNUNET_CLIENT_notify_transmit_ready (struct GNUNET_CLIENT_Connection *sock,
+GNUNET_CLIENT_notify_transmit_ready (struct GNUNET_CLIENT_Connection *client,
                                      size_t size,
                                      struct GNUNET_TIME_Relative timeout,
                                      int auto_retry,
@@ -1024,7 +1015,7 @@
 {
   struct GNUNET_CLIENT_TransmitHandle *th;
 
-  if (NULL != sock->th)
+  if (NULL != client->th)
   {
     /* If this breaks, you most likley called this function twice without 
waiting
      * for completion or canceling the request */
@@ -1032,31 +1023,31 @@
     return NULL;
   }
   th = GNUNET_malloc (sizeof (struct GNUNET_CLIENT_TransmitHandle));
-  th->sock = sock;
+  th->client = client;
   th->size = size;
   th->timeout = GNUNET_TIME_relative_to_absolute (timeout);
   th->auto_retry = auto_retry;
   th->notify = notify;
   th->notify_cls = notify_cls;
   th->attempts_left = MAX_ATTEMPTS;
-  sock->th = th;
-  if (sock->sock == NULL)
+  client->th = th;
+  if (NULL == client->connection)
   {
     th->reconnect_task =
-        GNUNET_SCHEDULER_add_delayed (sock->back_off, &client_delayed_retry,
+        GNUNET_SCHEDULER_add_delayed (client->back_off, &client_delayed_retry,
                                       th);
 
   }
   else
   {
     th->th =
-        GNUNET_CONNECTION_notify_transmit_ready (sock->sock, size, timeout,
+        GNUNET_CONNECTION_notify_transmit_ready (client->connection, size, 
timeout,
                                                  &client_notify, th);
     if (NULL == th->th)
     {
       GNUNET_break (0);
       GNUNET_free (th);
-      sock->th = NULL;
+      client->th = NULL;
       return NULL;
     }
   }
@@ -1073,7 +1064,7 @@
 GNUNET_CLIENT_notify_transmit_ready_cancel (struct GNUNET_CLIENT_TransmitHandle
                                             *th)
 {
-  if (th->reconnect_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != th->reconnect_task)
   {
     GNUNET_assert (NULL == th->th);
     GNUNET_SCHEDULER_cancel (th->reconnect_task);
@@ -1084,7 +1075,7 @@
     GNUNET_assert (NULL != th->th);
     GNUNET_CONNECTION_notify_transmit_ready_cancel (th->th);
   }
-  th->sock->th = NULL;
+  th->client->th = NULL;
   GNUNET_free (th);
 }
 
@@ -1106,7 +1097,7 @@
   struct TransmitGetResponseContext *tc = cls;
   uint16_t msize;
 
-  tc->sock->tag = NULL;
+  tc->client->tag = NULL;
   msize = ntohs (tc->hdr->size);
   if (NULL == buf)
   {
@@ -1119,7 +1110,7 @@
   }
   GNUNET_assert (size >= msize);
   memcpy (buf, tc->hdr, msize);
-  GNUNET_CLIENT_receive (tc->sock, tc->rn, tc->rn_cls,
+  GNUNET_CLIENT_receive (tc->client, tc->rn, tc->rn_cls,
                          GNUNET_TIME_absolute_get_remaining (tc->timeout));
   GNUNET_free (tc);
   return msize;
@@ -1133,7 +1124,7 @@
  * will be called with a "NULL" response (in which
  * case the connection should probably be destroyed).
  *
- * @param sock connection to use
+ * @param client connection to use
  * @param hdr message to transmit
  * @param timeout when to give up (for both transmission
  *         and for waiting for a response)
@@ -1148,7 +1139,7 @@
  *         is already pending
  */
 int
-GNUNET_CLIENT_transmit_and_get_response (struct GNUNET_CLIENT_Connection *sock,
+GNUNET_CLIENT_transmit_and_get_response (struct GNUNET_CLIENT_Connection 
*client,
                                          const struct GNUNET_MessageHeader 
*hdr,
                                          struct GNUNET_TIME_Relative timeout,
                                          int auto_retry,
@@ -1158,26 +1149,26 @@
   struct TransmitGetResponseContext *tc;
   uint16_t msize;
 
-  if (NULL != sock->th)
+  if (NULL != client->th)
     return GNUNET_SYSERR;
-  GNUNET_assert (sock->tag == NULL);
+  GNUNET_assert (NULL == client->tag);
   msize = ntohs (hdr->size);
   tc = GNUNET_malloc (sizeof (struct TransmitGetResponseContext) + msize);
-  tc->sock = sock;
+  tc->client = client;
   tc->hdr = (const struct GNUNET_MessageHeader *) &tc[1];
   memcpy (&tc[1], hdr, msize);
   tc->timeout = GNUNET_TIME_relative_to_absolute (timeout);
   tc->rn = rn;
   tc->rn_cls = rn_cls;
   if (NULL ==
-      GNUNET_CLIENT_notify_transmit_ready (sock, msize, timeout, auto_retry,
+      GNUNET_CLIENT_notify_transmit_ready (client, msize, timeout, auto_retry,
                                            &transmit_for_response, tc))
   {
     GNUNET_break (0);
     GNUNET_free (tc);
     return GNUNET_SYSERR;
   }
-  sock->tag = tc;
+  client->tag = tc;
   return GNUNET_OK;
 }
 

Modified: gnunet/src/util/configuration.c
===================================================================
--- gnunet/src/util/configuration.c     2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/configuration.c     2012-04-21 15:16:45 UTC (rev 21057)
@@ -21,7 +21,6 @@
 /**
  * @file src/util/configuration.c
  * @brief configuration management
- *
  * @author Christian Grothoff
  */
 

Modified: gnunet/src/util/connection.c
===================================================================
--- gnunet/src/util/connection.c        2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/connection.c        2012-04-21 15:16:45 UTC (rev 21057)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2009 Christian Grothoff (and other contributing authors)
+     (C) 2009, 2012 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -44,29 +44,7 @@
 
 #define LOG_STRERROR(kind,syscall) GNUNET_log_from_strerror (kind, "util", 
syscall)
 
-/**
- * Possible functions to call after connect failed or succeeded.
- */
-enum ConnectContinuations
-{
-    /**
-     * Call nothing.
-     */
-  COCO_NONE = 0,
 
-    /**
-     * Call "receive_again".
-     */
-  COCO_RECEIVE_AGAIN = 1,
-
-    /**
-     * Call "transmit_ready".
-     */
-  COCO_TRANSMIT_READY = 2
-
-};
-
-
 /**
  * Transmission handle.  There can only be one for each connection.
  */
@@ -254,21 +232,11 @@
   struct GNUNET_TIME_Absolute receive_timeout;
 
   /**
-   * Functions to call after connect failed or succeeded.
-   */
-  enum ConnectContinuations ccs;
-
-  /**
    * Maximum number of bytes to read (for receiving).
    */
   size_t max;
 
   /**
-   * Ignore GNUNET_SCHEDULER_REASON_SHUTDOWN for this connection.
-   */
-  int ignore_shutdown;
-
-  /**
    * Port to connect to.
    */
   uint16_t port;
@@ -283,6 +251,7 @@
 
 };
 
+
 /**
  * Set the persist option on this connection handle.  Indicates
  * that the underlying socket or fd should never really be closed.
@@ -361,7 +330,6 @@
   void *uaddr;
   struct GNUNET_CONNECTION_Credentials *gcp;
   struct GNUNET_CONNECTION_Credentials gc;
-
 #ifdef SO_PEERCRED
   struct ucred uc;
   socklen_t olen;
@@ -384,7 +352,7 @@
 
   sa = (struct sockaddr *) addr;
   v6 = (struct sockaddr_in6 *) addr;
-  if ((sa->sa_family == AF_INET6) && (IN6_IS_ADDR_V4MAPPED (&v6->sin6_addr)))
+  if ((AF_INET6 == sa->sa_family) && (IN6_IS_ADDR_V4MAPPED (&v6->sin6_addr)))
   {
     /* convert to V4 address */
     v4 = GNUNET_malloc (sizeof (struct sockaddr_in));
@@ -409,7 +377,7 @@
   gcp = NULL;
   gc.uid = 0;
   gc.gid = 0;
-  if (sa->sa_family == AF_UNIX)
+  if (AF_UNIX == sa->sa_family)
   {
 #if HAVE_GETPEEREID
     /* most BSDs */
@@ -445,10 +413,10 @@
 #endif
   }
 
-  if ((access != NULL) &&
+  if ((NULL != access) &&
       (GNUNET_YES != (aret = access (access_cls, gcp, uaddr, addrlen))))
   {
-    if (aret == GNUNET_NO)
+    if (GNUNET_NO == aret)
       LOG (GNUNET_ERROR_TYPE_INFO, _("Access denied to `%s'\n"),
            GNUNET_a2s (uaddr, addrlen));
     GNUNET_break (GNUNET_OK ==
@@ -482,7 +450,7 @@
 GNUNET_CONNECTION_get_address (struct GNUNET_CONNECTION_Handle *connection,
                                void **addr, size_t * addrlen)
 {
-  if ((connection->addr == NULL) || (connection->addrlen == 0))
+  if ((NULL == connection->addr) || (0 == connection->addrlen))
     return GNUNET_NO;
   *addr = GNUNET_malloc (connection->addrlen);
   memcpy (*addr, connection->addr, connection->addrlen);
@@ -492,73 +460,136 @@
 
 
 /**
- * This function is called after establishing a connection either has
- * succeeded or timed out.  Note that it is possible that the attempt
- * timed out and that we're immediately retrying.  If we are retrying,
- * we need to wait again (or timeout); if we succeeded, we need to
- * wait for data (or timeout).
+ * Tell the receiver callback that we had an IO error.
  *
- * @param cls our connection handle
- * @param tc task context describing why we are here
+ * @param connection connection to signal error
+ * @param errcode error code to send
  */
 static void
-receive_again (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
+signal_receive_error (struct GNUNET_CONNECTION_Handle *connection, int errcode)
+{
+  GNUNET_CONNECTION_Receiver receiver;
 
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Receive encounters error (%s), connection closed (%p)\n", 
+       STRERROR (errcode),
+       connection);
+  GNUNET_assert (NULL != (receiver = connection->receiver));
+  connection->receiver = NULL;
+  receiver (connection->receiver_cls, NULL, 0, connection->addr, 
connection->addrlen, errcode);
+}
 
+
 /**
- * See if we are now connected.  If not, wait longer for
- * connect to succeed.  If connected, we should be able
- * to write now as well, unless we timed out.
+ * Tell the receiver callback that a timeout was reached.
  *
- * @param cls our connection handle
- * @param tc task context describing why we are here
+ * @param connection connection to signal for
  */
 static void
-transmit_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
+signal_receive_timeout (struct GNUNET_CONNECTION_Handle *connection)
+{
+  GNUNET_CONNECTION_Receiver receiver;
 
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Connection signals timeout to receiver 
(%p)!\n",
+       connection);
+  GNUNET_assert (NULL != (receiver = connection->receiver));
+  connection->receiver = NULL;
+  receiver (connection->receiver_cls, NULL, 0, NULL, 0, 0);
+}
 
+
 /**
- * We've failed for good to establish a connection.
+ * We failed to transmit data to the service, signal the error.
  *
- * @param h the connection we tried to establish
+ * @param connection handle that had trouble
+ * @param ecode error code (errno)
  */
 static void
-connect_fail_continuation (struct GNUNET_CONNECTION_Handle *h)
+signal_transmit_error (struct GNUNET_CONNECTION_Handle *connection,
+                      int ecode)
 {
-  LOG (GNUNET_ERROR_TYPE_INFO,
-       _("Failed to establish TCP connection to `%s:%u', no further addresses 
to try.\n"),
-       h->hostname, h->port);
-  /* connect failed / timed out */
-  GNUNET_break (h->ap_head == NULL);
-  GNUNET_break (h->ap_tail == NULL);
-  GNUNET_break (h->dns_active == GNUNET_NO);
-  GNUNET_break (h->sock == NULL);
+  GNUNET_CONNECTION_TransmitReadyNotify notify;
 
-  /* trigger jobs that used to wait on "connect_task" */
-  if (0 != (h->ccs & COCO_RECEIVE_AGAIN))
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Transmission encounterd error (%s), connection closed (%p)\n",
+       STRERROR (ecode),
+       connection);
+  if (NULL != connection->sock)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "connect_fail_continuation triggers receive_again (%p)\n", h);
-    h->ccs -= COCO_RECEIVE_AGAIN;
-    h->read_task = GNUNET_SCHEDULER_add_now (&receive_again, h);
+    GNUNET_NETWORK_socket_shutdown (connection->sock, SHUT_RDWR);
+    GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (connection->sock));
+    connection->sock = NULL;
+    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task);
   }
-  if (0 != (h->ccs & COCO_TRANSMIT_READY))
+  if (GNUNET_SCHEDULER_NO_TASK != connection->read_task)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "connect_fail_continuation cancels timeout_task, triggers 
transmit_ready (%p)\n",
-         h);
-    GNUNET_assert (h->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK);
-    GNUNET_SCHEDULER_cancel (h->nth.timeout_task);
-    h->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK;
-    h->ccs -= COCO_TRANSMIT_READY;
-    GNUNET_assert (h->nth.notify_ready != NULL);
-    GNUNET_assert (h->write_task == GNUNET_SCHEDULER_NO_TASK);
-    h->write_task = GNUNET_SCHEDULER_add_now (&transmit_ready, h);
+    /* send errors trigger read errors... */
+    GNUNET_SCHEDULER_cancel (connection->read_task);
+    connection->read_task = GNUNET_SCHEDULER_NO_TASK;
+    signal_receive_timeout (connection);
+    return;
   }
+  if (NULL == connection->nth.notify_ready)
+    return;                     /* nobody to tell about it */
+  notify = connection->nth.notify_ready;
+  connection->nth.notify_ready = NULL;
+  notify (connection->nth.notify_ready_cls, 0, NULL);
 }
 
 
 /**
+ * We've failed for good to establish a connection (timeout or
+ * no more addresses to try).
+ *
+ * @param connection the connection we tried to establish
+ */
+static void
+connect_fail_continuation (struct GNUNET_CONNECTION_Handle *connection)
+{
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       _("Failed to establish TCP connection to `%s:%u', no further addresses 
to try.\n"),
+       connection->hostname, connection->port);
+  GNUNET_break (NULL == connection->ap_head);
+  GNUNET_break (NULL == connection->ap_tail);
+  GNUNET_break (GNUNET_NO == connection->dns_active);
+  GNUNET_break (NULL == connection->sock);
+  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task);
+
+  /* signal errors for jobs that used to wait on the connection */
+  if (NULL != connection->receiver)
+    signal_receive_error (connection, ECONNREFUSED);
+  if (NULL != connection->nth.notify_ready)
+  {
+    GNUNET_assert (connection->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK);
+    GNUNET_SCHEDULER_cancel (connection->nth.timeout_task);
+    connection->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK;
+    signal_transmit_error (connection, ECONNREFUSED);
+  }
+}
+
+
+/**
+ * We are ready to transmit (or got a timeout).
+ *
+ * @param cls our connection handle
+ * @param tc task context describing why we are here
+ */
+static void
+transmit_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
+
+
+/**
+ * This function is called once we either timeout or have data ready
+ * to read.
+ *
+ * @param cls connection to read from
+ * @param tc scheduler context
+ */
+static void
+receive_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
+
+
+/**
  * We've succeeded in establishing a connection.
  *
  * @param connection the connection we tried to establish
@@ -566,27 +597,29 @@
 static void
 connect_success_continuation (struct GNUNET_CONNECTION_Handle *connection)
 {
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Connection to `%s' succeeded! (%p)\n",
+  LOG (GNUNET_ERROR_TYPE_DEBUG, 
+       "Connection to `%s' succeeded! (%p)\n",
        GNUNET_a2s (connection->addr, connection->addrlen), connection);
   /* trigger jobs that waited for the connection */
-  if (0 != (connection->ccs & COCO_RECEIVE_AGAIN))
+  if (NULL != connection->receiver)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "connect_success_continuation runs receive_again (%p)\n", connection);
-    connection->ccs -= COCO_RECEIVE_AGAIN;
-    connection->read_task = GNUNET_SCHEDULER_add_now (&receive_again, 
connection);
+         "Connection succeeded, starting with receiving data (%p)\n", 
+        connection);
+    connection->read_task =
+      GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining
+                                     (connection->receive_timeout), 
connection->sock,
+                                     &receive_ready, connection);
   }
-  if (0 != (connection->ccs & COCO_TRANSMIT_READY))
+  if (NULL != connection->nth.notify_ready)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "connect_success_continuation runs transmit_ready, cancels 
timeout_task (%p)\n",
+         "Connection succeeded, starting with sending data (%p)\n",
          connection);
     GNUNET_assert (connection->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK);
     GNUNET_SCHEDULER_cancel (connection->nth.timeout_task);
     connection->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK;
-    connection->ccs -= COCO_TRANSMIT_READY;
     GNUNET_assert (connection->write_task == GNUNET_SCHEDULER_NO_TASK);
-    GNUNET_assert (connection->nth.notify_ready != NULL);
     connection->write_task =
         GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_absolute_get_remaining
                                         (connection->nth.transmit_timeout), 
connection->sock,
@@ -612,7 +645,7 @@
   int error;
   socklen_t len;
 
-  GNUNET_assert (ap->sock != NULL);
+  GNUNET_assert (NULL != ap->sock);
   GNUNET_CONTAINER_DLL_remove (connection->ap_head, connection->ap_tail, ap);
   len = sizeof (error);
   errno = 0;
@@ -620,17 +653,17 @@
   if ((0 == (tc->reason & GNUNET_SCHEDULER_REASON_WRITE_READY)) ||
       (GNUNET_OK !=
        GNUNET_NETWORK_socket_getsockopt (ap->sock, SOL_SOCKET, SO_ERROR, 
&error,
-                                         &len)) || (error != 0))
+                                         &len)) || (0 != error))
   {
     GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (ap->sock));
     GNUNET_free (ap);
-    if ((NULL == connection->ap_head) && (connection->dns_active == GNUNET_NO))
+    if ((NULL == connection->ap_head) && (GNUNET_NO == connection->dns_active))
       connect_fail_continuation (connection);
     return;
   }
-  GNUNET_assert (connection->sock == NULL);
+  GNUNET_assert (NULL == connection->sock);
   connection->sock = ap->sock;
-  GNUNET_assert (connection->addr == NULL);
+  GNUNET_assert (NULL == connection->addr);
   connection->addr = GNUNET_malloc (ap->addrlen);
   memcpy (connection->addr, ap->addr, ap->addrlen);
   connection->addrlen = ap->addrlen;
@@ -663,16 +696,16 @@
   struct AddressProbe *ap;
   struct GNUNET_TIME_Relative delay;
 
-  if (addr == NULL)
+  if (NULL == addr)
   {
     connection->dns_active = NULL;
     if ((NULL == connection->ap_head) && (NULL == connection->sock))
       connect_fail_continuation (connection);
     return;
   }
-  if (connection->sock != NULL)
+  if (NULL != connection->sock)
     return;                     /* already connected */
-  GNUNET_assert (connection->addr == NULL);
+  GNUNET_assert (NULL == connection->addr);
   /* try to connect */
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Trying to connect using address `%s:%u/%s:%u'\n", 
connection->hostname, connection->port,
@@ -697,7 +730,7 @@
     return;                     /* not supported by us */
   }
   ap->sock = GNUNET_NETWORK_socket_create (ap->addr->sa_family, SOCK_STREAM, 
0);
-  if (ap->sock == NULL)
+  if (NULL == ap->sock)
   {
     GNUNET_free (ap);
     return;                     /* not supported by OS */
@@ -706,7 +739,7 @@
        GNUNET_a2s (ap->addr, ap->addrlen), connection);
   if ((GNUNET_OK !=
        GNUNET_NETWORK_socket_connect (ap->sock, ap->addr, ap->addrlen)) &&
-      (errno != EINPROGRESS))
+      (EINPROGRESS != errno))
   {
     /* maybe refused / unsupported address, try next */
     LOG_STRERROR (GNUNET_ERROR_TYPE_INFO, "connect");
@@ -720,12 +753,12 @@
   }
   GNUNET_CONTAINER_DLL_insert (connection->ap_head, connection->ap_tail, ap);
   delay = GNUNET_CONNECTION_CONNECT_RETRY_TIMEOUT;
-  if (connection->nth.notify_ready != NULL)
+  if (NULL != connection->nth.notify_ready)
     delay =
         GNUNET_TIME_relative_min (delay,
                                   GNUNET_TIME_absolute_get_remaining 
(connection->
                                                                       
nth.transmit_timeout));
-  if (connection->receiver != NULL)
+  if (NULL != connection->receiver)
     delay =
         GNUNET_TIME_relative_min (delay,
                                   GNUNET_TIME_absolute_get_remaining
@@ -852,15 +885,14 @@
   struct GNUNET_NETWORK_Handle *s;
   struct GNUNET_CONNECTION_Handle *connection;
 
-
   s = GNUNET_NETWORK_socket_create (af_family, SOCK_STREAM, 0);
-  if (s == NULL)
+  if (NULL == s)
   {
     LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, 
"socket");
     return NULL;
   }
   if ((GNUNET_OK != GNUNET_NETWORK_socket_connect (s, serv_addr, addrlen)) &&
-      (errno != EINPROGRESS))
+      (EINPROGRESS != errno))
   {
     /* maybe refused / unsupported address, try next */
     LOG_STRERROR (GNUNET_ERROR_TYPE_INFO, "connect");
@@ -890,9 +922,9 @@
 int
 GNUNET_CONNECTION_check (struct GNUNET_CONNECTION_Handle *connection)
 {
-  if ((connection->ap_head != NULL) || (connection->dns_active != NULL))
+  if ((NULL != connection->ap_head) || (NULL != connection->dns_active))
     return GNUNET_YES;          /* still trying to connect */
-  return (connection->sock == NULL) ? GNUNET_NO : GNUNET_YES;
+  return (NULL == connection->sock) ? GNUNET_NO : GNUNET_YES;
 }
 
 
@@ -911,19 +943,18 @@
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Shutting down connection (%p)\n", connection);
   GNUNET_assert (NULL == connection->nth.notify_ready);
   GNUNET_assert (NULL == connection->receiver);
-  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->read_task);
-  if (connection->write_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != connection->write_task)
   {
     GNUNET_SCHEDULER_cancel (connection->write_task);
     connection->write_task = GNUNET_SCHEDULER_NO_TASK;
     connection->write_buffer_off = 0;
   }
-  if (connection->read_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != connection->read_task)
   {
     GNUNET_SCHEDULER_cancel (connection->read_task);
     connection->read_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  if (connection->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != connection->nth.timeout_task)
   {
     GNUNET_SCHEDULER_cancel (connection->nth.timeout_task);
     connection->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK;
@@ -942,16 +973,16 @@
     GNUNET_free (pos);
   }
   if ( (NULL != connection->sock) &&
-       (connection->persist != GNUNET_YES) )
+       (GNUNET_YES != connection->persist) )
   {
     if ((GNUNET_YES != GNUNET_NETWORK_socket_shutdown (connection->sock, 
SHUT_RDWR)) && 
-       (errno != ENOTCONN) && 
-       (errno != ECONNRESET) )
+       (ENOTCONN != errno) && 
+       (ECONNRESET != errno) )
       LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "shutdown");    
   }
-  if (connection->sock != NULL)
+  if (NULL != connection->sock)
   {
-    if (connection->persist != GNUNET_YES)
+    if (GNUNET_YES != connection->persist)
       GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close 
(connection->sock));
     else
       GNUNET_free (connection->sock); /* at least no memory leak (we 
deliberately
@@ -965,92 +996,54 @@
 
 
 /**
- * Tell the receiver callback that a timeout was reached.
- */
-static void
-signal_timeout (struct GNUNET_CONNECTION_Handle *connection)
-{
-  GNUNET_CONNECTION_Receiver receiver;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Network signals time out to receiver (%p)!\n",
-       connection);
-  GNUNET_assert (NULL != (receiver = connection->receiver));
-  connection->receiver = NULL;
-  receiver (connection->receiver_cls, NULL, 0, NULL, 0, 0);
-}
-
-
-/**
- * Tell the receiver callback that we had an IO error.
- */
-static void
-signal_error (struct GNUNET_CONNECTION_Handle *connection, int errcode)
-{
-  GNUNET_CONNECTION_Receiver receiver;
-
-  GNUNET_assert (NULL != (receiver = connection->receiver));
-  connection->receiver = NULL;
-  receiver (connection->receiver_cls, NULL, 0, connection->addr, 
connection->addrlen, errcode);
-}
-
-
-/**
  * This function is called once we either timeout
  * or have data ready to read.
+ *
+ * @param cls connection to read from
+ * @param tc scheduler context
  */
 static void
 receive_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct GNUNET_CONNECTION_Handle *connection = cls;
-  struct GNUNET_TIME_Absolute now;
   char buffer[connection->max];
   ssize_t ret;
   GNUNET_CONNECTION_Receiver receiver;
 
   connection->read_task = GNUNET_SCHEDULER_NO_TASK;
-  if ((GNUNET_YES == connection->ignore_shutdown) &&
-      (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)))
+  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
   {
     /* ignore shutdown request, go again immediately */
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Ignoring shutdown signal per configuration\n");
     connection->read_task =
         GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining
                                        (connection->receive_timeout), 
connection->sock,
                                        &receive_ready, connection);
     return;
   }
-  now = GNUNET_TIME_absolute_get ();
-  if ((now.abs_value > connection->receive_timeout.abs_value) ||
-      (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT)) ||
-      (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)))
+  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT))
   {
-    if (0 == (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-      LOG (GNUNET_ERROR_TYPE_DEBUG,
-           "Receive from `%s' encounters error: time out by %llums... (%p)\n",
-           GNUNET_a2s (connection->addr, connection->addrlen),
-           GNUNET_TIME_absolute_get_duration 
(connection->receive_timeout).rel_value,
-           connection);
-    signal_timeout (connection);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+        "Receive from `%s' encounters error: timeout (%p)\n",
+        GNUNET_a2s (connection->addr, connection->addrlen),
+        GNUNET_TIME_absolute_get_duration 
(connection->receive_timeout).rel_value,
+        connection);
+    signal_receive_timeout (connection);
     return;
   }
-  if (connection->sock == NULL)
+  if (NULL == connection->sock)
   {
     /* connect failed for good */
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Receive encounters error, connection closed... (%p)\n", connection);
-    signal_error (connection, ECONNREFUSED);
+    signal_receive_error (connection, ECONNREFUSED);
     return;
   }
   GNUNET_assert (GNUNET_NETWORK_fdset_isset (tc->read_ready, 
connection->sock));
 RETRY:
   ret = GNUNET_NETWORK_socket_recv (connection->sock, buffer, connection->max);
-  if (ret == -1)
+  if (-1 == ret)
   {
-    if (errno == EINTR)
+    if (EINTR == errno)
       goto RETRY;
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Error receiving: %s\n", STRERROR (errno));
-    signal_error (connection, errno);
+    signal_receive_error (connection, errno);
     return;
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1063,49 +1056,6 @@
 
 
 /**
- * This function is called after establishing a connection either has
- * succeeded or timed out.  Note that it is possible that the attempt
- * timed out and that we're immediately retrying.  If we are retrying,
- * we need to wait again (or timeout); if we succeeded, we need to
- * wait for data (or timeout).
- *
- * @param cls our connection handle
- * @param tc task context describing why we are here
- */
-static void
-receive_again (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
-  struct GNUNET_CONNECTION_Handle *connection = cls;
-  struct GNUNET_TIME_Absolute now;
-
-  connection->read_task = GNUNET_SCHEDULER_NO_TASK;
-  if (connection->sock == NULL)
-  {
-    /* not connected and no longer trying */
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Receive encounters error, connection closed (%p)...\n", connection);
-    signal_error (connection, ECONNREFUSED);
-    return;
-  }
-  now = GNUNET_TIME_absolute_get ();
-  if ((now.abs_value > connection->receive_timeout.abs_value) ||
-      (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)))
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Receive encounters error: time out (%p)...\n", connection);
-    signal_timeout (connection);
-    return;
-  }
-  GNUNET_assert (connection->sock != NULL);
-  /* connect succeeded, wait for data! */
-  connection->read_task =
-      GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining
-                                     (connection->receive_timeout), 
connection->sock,
-                                     &receive_ready, connection);
-}
-
-
-/**
  * Receive data from the given connection.  Note that this function will
  * call "receiver" asynchronously using the scheduler.  It will
  * "immediately" return.  Note that there MUST only be one active
@@ -1124,46 +1074,29 @@
                            GNUNET_CONNECTION_Receiver receiver,
                            void *receiver_cls)
 {
-  struct GNUNET_SCHEDULER_TaskContext tc;
-
-  GNUNET_assert ((connection->read_task == GNUNET_SCHEDULER_NO_TASK) &&
-                 (0 == (connection->ccs & COCO_RECEIVE_AGAIN)) &&
-                 (connection->receiver == NULL));
+  GNUNET_assert ((GNUNET_SCHEDULER_NO_TASK == connection->read_task) &&
+                 (NULL == connection->receiver));
   connection->receiver = receiver;
   connection->receiver_cls = receiver_cls;
   connection->receive_timeout = GNUNET_TIME_relative_to_absolute (timeout);
   connection->max = max;
-  if (connection->sock != NULL)
+  if (NULL != connection->sock)
   {
-    memset (&tc, 0, sizeof (tc));
-    tc.reason = GNUNET_SCHEDULER_REASON_PREREQ_DONE;
-    receive_again (connection, &tc);
+    connection->read_task =
+      GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining
+                                     (connection->receive_timeout), 
connection->sock,
+                                     &receive_ready, connection);
     return;
   }
-  if ((connection->dns_active == NULL) && (connection->ap_head == NULL))
+  if ((NULL == connection->dns_active) && (NULL == connection->ap_head))
   {
     receiver (receiver_cls, NULL, 0, NULL, 0, ETIMEDOUT);
     return;
   }
-  connection->ccs += COCO_RECEIVE_AGAIN;
 }
 
 
 /**
- * Configure this connection to ignore shutdown signals.
- *
- * @param connection connection handle
- * @param do_ignore GNUNET_YES to ignore, GNUNET_NO to restore default
- */
-void
-GNUNET_CONNECTION_ignore_shutdown (struct GNUNET_CONNECTION_Handle *connection,
-                                   int do_ignore)
-{
-  connection->ignore_shutdown = do_ignore;
-}
-
-
-/**
  * Cancel receive job on the given connection.  Note that the
  * receiver callback must not have been called yet in order
  * for the cancellation to be valid.
@@ -1174,16 +1107,11 @@
 void *
 GNUNET_CONNECTION_receive_cancel (struct GNUNET_CONNECTION_Handle *connection)
 {
-  if (connection->read_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK == connection->read_task)
   {
     GNUNET_assert (connection == GNUNET_SCHEDULER_cancel 
(connection->read_task));
     connection->read_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  else
-  {
-    GNUNET_assert (0 != (connection->ccs & COCO_RECEIVE_AGAIN));
-    connection->ccs -= COCO_RECEIVE_AGAIN;
-  }
   connection->receiver = NULL;
   return connection->receiver_cls;
 }
@@ -1204,7 +1132,7 @@
   size_t size;
   GNUNET_CONNECTION_TransmitReadyNotify notify;
 
-  GNUNET_assert (connection->write_task == GNUNET_SCHEDULER_NO_TASK);
+  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task);
   if (NULL == (notify = connection->nth.notify_ready))
     return GNUNET_NO;
   used = connection->write_buffer_off - connection->write_buffer_pos;
@@ -1255,9 +1183,8 @@
        "Transmit to `%s:%u/%s' fails, time out reached (%p).\n",
        connection->hostname,
        connection->port, GNUNET_a2s (connection->addr, connection->addrlen), 
connection);
-  GNUNET_assert (0 != (connection->ccs & COCO_TRANSMIT_READY));
-  connection->ccs -= COCO_TRANSMIT_READY;     /* remove request */
   notify = connection->nth.notify_ready;
+  GNUNET_assert (NULL != notify);
   connection->nth.notify_ready = NULL;
   notify (connection->nth.notify_ready_cls, 0, NULL);
 }
@@ -1289,42 +1216,8 @@
 
 
 /**
- * FIXME
+ * We are ready to transmit (or got a timeout).
  *
- * @param connection FIXME
- */
-static void
-transmit_error (struct GNUNET_CONNECTION_Handle *connection)
-{
-  GNUNET_CONNECTION_TransmitReadyNotify notify;
-
-  if (NULL != connection->sock)
-  {
-    GNUNET_NETWORK_socket_shutdown (connection->sock, SHUT_RDWR);
-    GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (connection->sock));
-    connection->sock = NULL;
-    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task);
-  }
-  if (connection->read_task != GNUNET_SCHEDULER_NO_TASK)
-  {
-    GNUNET_SCHEDULER_cancel (connection->read_task);
-    connection->read_task = GNUNET_SCHEDULER_NO_TASK;
-    signal_timeout (connection);
-    return;
-  }
-  if (connection->nth.notify_ready == NULL)
-    return;                     /* nobody to tell about it */
-  notify = connection->nth.notify_ready;
-  connection->nth.notify_ready = NULL;
-  notify (connection->nth.notify_ready_cls, 0, NULL);
-}
-
-
-/**
- * See if we are now connected.  If not, wait longer for
- * connect to succeed.  If connected, we should be able
- * to write now as well, unless we timed out.
- *
  * @param cls our connection handle
  * @param tc task context describing why we are here
  */
@@ -1337,12 +1230,12 @@
   size_t have;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "transmit_ready running (%p).\n", connection);
-  GNUNET_assert (connection->write_task != GNUNET_SCHEDULER_NO_TASK);
+  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK != connection->write_task);
   connection->write_task = GNUNET_SCHEDULER_NO_TASK;
-  GNUNET_assert (connection->nth.timeout_task == GNUNET_SCHEDULER_NO_TASK);
+  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->nth.timeout_task);
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
   {
-    if ((connection->ignore_shutdown == GNUNET_YES) && (NULL != 
connection->sock))
+    if (NULL != connection->sock)
       goto SCHEDULE_WRITE;      /* ignore shutdown, go again immediately */
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Transmit to `%s' fails, shutdown happened (%p).\n",
@@ -1367,25 +1260,22 @@
     return;
   }
   GNUNET_assert (NULL != connection->sock);
-  if (tc->write_ready == NULL)
+  if (NULL == tc->write_ready) 
   {
-    /* special circumstances (in particular,
-     * PREREQ_DONE after connect): not yet ready to write,
-     * but no "fatal" error either.  Hence retry.  */
+    /* special circumstances (in particular, PREREQ_DONE after
+     * connect): not yet ready to write, but no "fatal" error either.
+     * Hence retry.  */
     goto SCHEDULE_WRITE;
   }
   if (!GNUNET_NETWORK_fdset_isset (tc->write_ready, connection->sock))
   {
-    LOG (GNUNET_ERROR_TYPE_INFO,
-         _
-         ("Could not satisfy pending transmission request, socket closed or 
connect failed (%p).\n"),
-         connection);
     GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task);
-    transmit_error (connection);
-    return;                     /* connect failed for good, we're finished */
+    /* special circumstances (in particular, shutdown): not yet ready
+     * to write, but no "fatal" error either.  Hence retry.  */
+    goto SCHEDULE_WRITE;
   }
   GNUNET_assert (connection->write_buffer_off >= connection->write_buffer_pos);
-  if ((connection->nth.notify_ready != NULL) &&
+  if ((NULL != connection->nth.notify_ready) &&
       (connection->write_buffer_size < connection->nth.notify_size))
   {
     connection->write_buffer =
@@ -1394,7 +1284,7 @@
   }
   process_notify (connection);
   have = connection->write_buffer_off - connection->write_buffer_pos;
-  if (have == 0)
+  if (0 == have)
   {
     /* no data ready for writing, terminate write loop */
     return;
@@ -1407,21 +1297,20 @@
       GNUNET_NETWORK_socket_send (connection->sock,
                                  
&connection->write_buffer[connection->write_buffer_pos],
                                  have);
-  if (ret == -1)
+  if (-1 == ret)
   {
-    if (errno == EINTR)
+    if (EINTR == errno)
       goto RETRY;
-    LOG_STRERROR (GNUNET_ERROR_TYPE_DEBUG, "send");
     if (GNUNET_SCHEDULER_NO_TASK != connection->write_task)
     {
       GNUNET_SCHEDULER_cancel (connection->write_task);
       connection->write_task = GNUNET_SCHEDULER_NO_TASK;
     }
-    transmit_error (connection);
+    signal_transmit_error (connection, errno);
     return;
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "transmit_ready transmitted %u/%u bytes to `%s' (%p)\n",
+       "Connection transmitted %u/%u bytes to `%s' (%p)\n",
        (unsigned int) ret, have, GNUNET_a2s (connection->addr, 
connection->addrlen), connection);
   connection->write_buffer_pos += ret;
   if (connection->write_buffer_pos == connection->write_buffer_off)
@@ -1430,15 +1319,15 @@
     connection->write_buffer_pos = 0;
     connection->write_buffer_off = 0;
   }
-  if ((connection->write_buffer_off == 0) && (NULL == 
connection->nth.notify_ready))
+  if ((0 == connection->write_buffer_off) && (NULL == 
connection->nth.notify_ready))
     return;                     /* all data sent! */
   /* not done writing, schedule more */
 SCHEDULE_WRITE:
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Re-scheduling transmit_ready (more to do) (%p).\n", connection);
   have = connection->write_buffer_off - connection->write_buffer_pos;
-  GNUNET_assert ((connection->nth.notify_ready != NULL) || (have > 0));
-  if (connection->write_task == GNUNET_SCHEDULER_NO_TASK)
+  GNUNET_assert ((NULL != connection->nth.notify_ready) || (have > 0));
+  if (GNUNET_SCHEDULER_NO_TASK == connection->write_task)
     connection->write_task =
         GNUNET_SCHEDULER_add_write_net ((connection->nth.notify_ready ==
                                          NULL) ? GNUNET_TIME_UNIT_FOREVER_REL :
@@ -1469,12 +1358,12 @@
                                          GNUNET_CONNECTION_TransmitReadyNotify
                                          notify, void *notify_cls)
 {
-  if (connection->nth.notify_ready != NULL)
+  if (NULL != connection->nth.notify_ready)
   {
     GNUNET_assert (0);
     return NULL;
   }
-  GNUNET_assert (notify != NULL);
+  GNUNET_assert (NULL != notify);
   GNUNET_assert (size < GNUNET_SERVER_MAX_MESSAGE_SIZE);
   GNUNET_assert (connection->write_buffer_off <= 
connection->write_buffer_size);
   GNUNET_assert (connection->write_buffer_pos <= 
connection->write_buffer_size);
@@ -1485,32 +1374,32 @@
   connection->nth.notify_size = size;
   connection->nth.transmit_timeout = GNUNET_TIME_relative_to_absolute 
(timeout);
   GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->nth.timeout_task);
-  if ((connection->sock == NULL) && (connection->ap_head == NULL) &&
-      (connection->dns_active == NULL))
+  if ((NULL == connection->sock) && 
+      (NULL == connection->ap_head) &&
+      (NULL == connection->dns_active))
   {
-    if (connection->write_task != GNUNET_SCHEDULER_NO_TASK)
+    if (GNUNET_SCHEDULER_NO_TASK != connection->write_task)
       GNUNET_SCHEDULER_cancel (connection->write_task);
     connection->write_task = GNUNET_SCHEDULER_add_now (&connect_error, 
connection);
     return &connection->nth;
   }
   if (GNUNET_SCHEDULER_NO_TASK != connection->write_task)
-    return &connection->nth;
-  if (connection->sock != NULL)
+    return &connection->nth; /* previous transmission still in progress */
+  if (NULL != connection->sock)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Scheduling transmit_ready (%p).\n", 
connection);
+    /* connected, try to transmit now */
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "Scheduling transmission (%p).\n", 
connection);
     connection->write_task =
         GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_absolute_get_remaining
                                         (connection->nth.transmit_timeout),
                                         connection->sock, &transmit_ready, 
connection);
+    return &connection->nth;
   }
-  else
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "CCS-Scheduling transmit_ready, adding timeout task (%p).\n", 
connection);
-    connection->ccs |= COCO_TRANSMIT_READY;
-    connection->nth.timeout_task =
-        GNUNET_SCHEDULER_add_delayed (timeout, &transmit_timeout, connection);
-  }
+  /* not yet connected, wait for connection */
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Need to wait to schedule transmission for connection, adding timeout 
task (%p).\n", connection);
+  connection->nth.timeout_task =
+    GNUNET_SCHEDULER_add_delayed (timeout, &transmit_timeout, connection);
   return &connection->nth;
 }
 
@@ -1525,24 +1414,18 @@
                                                 
GNUNET_CONNECTION_TransmitHandle
                                                 *th)
 {
-  GNUNET_assert (th->notify_ready != NULL);
-  if (0 != (th->connection->ccs & COCO_TRANSMIT_READY))
+  GNUNET_assert (NULL != th->notify_ready);
+  th->notify_ready = NULL;
+  if (GNUNET_SCHEDULER_NO_TASK != th->timeout_task)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "notify_transmit_ready_cancel cancels timeout_task (%p)\n", th);
     GNUNET_SCHEDULER_cancel (th->timeout_task);
     th->timeout_task = GNUNET_SCHEDULER_NO_TASK;
-    th->connection->ccs -= COCO_TRANSMIT_READY;
   }
-  else
+  if (GNUNET_SCHEDULER_NO_TASK != th->connection->write_task)
   {
-    if (th->connection->write_task != GNUNET_SCHEDULER_NO_TASK)
-    {
-      GNUNET_SCHEDULER_cancel (th->connection->write_task);
-      th->connection->write_task = GNUNET_SCHEDULER_NO_TASK;
-    }
+    GNUNET_SCHEDULER_cancel (th->connection->write_task);
+    th->connection->write_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  th->notify_ready = NULL;
 }
 
 /* end of connection.c */

Modified: gnunet/src/util/crypto_hkdf.c
===================================================================
--- gnunet/src/util/crypto_hkdf.c       2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/crypto_hkdf.c       2012-04-21 15:16:45 UTC (rev 21057)
@@ -49,6 +49,7 @@
 #define DEBUG_HKDF 0
 
 
+
 #if GNUNET_BUILD
 #include "platform.h"
 #include "gnunet_crypto_lib.h"

Modified: gnunet/src/util/disk.c
===================================================================
--- gnunet/src/util/disk.c      2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/disk.c      2012-04-21 15:16:45 UTC (rev 21057)
@@ -40,10 +40,6 @@
 
 #define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file 
(kind, "util", syscall, filename)
 
-#define DEBUG_NPIPE GNUNET_EXTRA_LOGGING
-
-#define DEBUG_PIPE GNUNET_EXTRA_LOGGING
-
 /**
  * Block size for IO for copying files.
  */
@@ -732,27 +728,18 @@
   }
   else
   {
-#if DEBUG_PIPE
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "It is a pipe trying to read\n");
-#endif
     if (!ReadFile (h->h, result, len, &bytesRead, h->oOverlapRead))
     {
       if (GetLastError () != ERROR_IO_PENDING)
       {
-#if DEBUG_PIPE
         LOG (GNUNET_ERROR_TYPE_DEBUG, "Error reading from pipe: %u\n", 
GetLastError ());
-#endif
         SetErrnoFromWinError (GetLastError ());
         return GNUNET_SYSERR;
       }
-#if DEBUG_PIPE
       LOG (GNUNET_ERROR_TYPE_DEBUG, "Will get overlapped result\n");
-#endif
       GetOverlappedResult (h->h, h->oOverlapRead, &bytesRead, TRUE);
     }
-#if DEBUG_PIPE
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Read %u bytes\n", bytesRead);
-#endif
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "Read %u bytes from pipe\n", bytesRead);
   }
   return bytesRead;
 #else
@@ -794,33 +781,24 @@
   }
   else
   {
-#if DEBUG_PIPE
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "It is a pipe, trying to read\n");
-#endif
     if (!ReadFile (h->h, result, len, &bytesRead, h->oOverlapRead))
     {
       if (GetLastError () != ERROR_IO_PENDING)
       {
-#if DEBUG_PIPE
         LOG (GNUNET_ERROR_TYPE_DEBUG, "Error reading from pipe: %u\n", 
GetLastError ());
-#endif
         SetErrnoFromWinError (GetLastError ());
         return GNUNET_SYSERR;
       }
       else
       {
-#if DEBUG_PIPE
         LOG (GNUNET_ERROR_TYPE_DEBUG,
             "ReadFile() queued a read, cancelling\n");
-#endif
         CancelIo (h->h);
         errno = EAGAIN;
         return GNUNET_SYSERR;
       }
     }
-#if DEBUG_PIPE
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Read %u bytes\n", bytesRead);
-#endif
   }
   return bytesRead;
 #else
@@ -893,31 +871,23 @@
   }
   else
   {
-#if DEBUG_PIPE
     LOG (GNUNET_ERROR_TYPE_DEBUG, "It is a pipe trying to write %u bytes\n", 
n);
-#endif
     if (!WriteFile (h->h, buffer, n, &bytesWritten, h->oOverlapWrite))
     {
       if (GetLastError () != ERROR_IO_PENDING)
       {
         SetErrnoFromWinError (GetLastError ());
-#if DEBUG_PIPE
         LOG (GNUNET_ERROR_TYPE_DEBUG, "Error writing to pipe: %u\n",
             GetLastError ());
-#endif
         return GNUNET_SYSERR;
       }
-#if DEBUG_PIPE
       LOG (GNUNET_ERROR_TYPE_DEBUG, "Will get overlapped result\n");
-#endif
       if (!GetOverlappedResult (h->h, h->oOverlapWrite, &bytesWritten, TRUE))
       {
         SetErrnoFromWinError (GetLastError ());
-#if DEBUG_PIPE
         LOG (GNUNET_ERROR_TYPE_DEBUG,
             "Error getting overlapped result while writing to pipe: %u\n",
             GetLastError ());
-#endif
         return GNUNET_SYSERR;
       }
     }
@@ -926,35 +896,27 @@
       DWORD ovr;
       if (!GetOverlappedResult (h->h, h->oOverlapWrite, &ovr, TRUE))
       {
-#if DEBUG_PIPE
         LOG (GNUNET_ERROR_TYPE_DEBUG,
             "Error getting control overlapped result while writing to pipe: 
%u\n",
             GetLastError ());
-#endif
       }
       else
       {
-#if DEBUG_PIPE
         LOG (GNUNET_ERROR_TYPE_DEBUG,
             "Wrote %u bytes (ovr says %u), picking the greatest\n",
             bytesWritten, ovr);
-#endif
       }
     }
     if (bytesWritten == 0)
     {
       if (n > 0)
       {
-#if DEBUG_PIPE
         LOG (GNUNET_ERROR_TYPE_DEBUG, "Wrote %u bytes, returning -1 with 
EAGAIN\n", bytesWritten);
-#endif
         errno = EAGAIN;
         return GNUNET_SYSERR;
       }
     }
-#if DEBUG_PIPE
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Wrote %u bytes\n", bytesWritten);
-#endif
   }
   return bytesWritten;
 #else
@@ -983,37 +945,27 @@
 #ifdef MINGW
   DWORD bytesWritten;
   /* We do a non-overlapped write, which is as blocking as it gets */
-#if DEBUG_PIPE
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Writing %u bytes\n", n);
-#endif
   if (!WriteFile (h->h, buffer, n, &bytesWritten, NULL))
   {
     SetErrnoFromWinError (GetLastError ());
-#if DEBUG_PIPE
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Error writing to pipe: %u\n",
         GetLastError ());
-#endif
     return GNUNET_SYSERR;
   }
   if (bytesWritten == 0 && n > 0)
   {
-#if DEBUG_PIPE
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Waiting for pipe to clean\n");
-#endif
     WaitForSingleObject (h->h, INFINITE);
     if (!WriteFile (h->h, buffer, n, &bytesWritten, NULL))
     {
       SetErrnoFromWinError (GetLastError ());
-#if DEBUG_PIPE
       LOG (GNUNET_ERROR_TYPE_DEBUG, "Error writing to pipe: %u\n",
           GetLastError ());
-#endif
       return GNUNET_SYSERR;
     }
   }
-#if DEBUG_PIPE
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Wrote %u bytes\n", bytesWritten);
-#endif
   return bytesWritten;
 #else
   int flags;
@@ -2021,10 +1973,8 @@
 
     snprintf (pipename, sizeof pipename, "\\\\.\\pipe\\gnunet-%d-%ld",
               getpid (), InterlockedIncrement ((LONG *) & pipe_unique_id));
-#if DEBUG_PIPE
     LOG (GNUNET_ERROR_TYPE_DEBUG, "CreateNamedPipe: name = %s, size = %lu\n",
          pipename, psize);
-#endif
     /* Use CreateNamedPipe instead of CreatePipe, because the latter
      * returns a write handle that does not permit FILE_READ_ATTRIBUTES
      * access, on versions of win32 earlier than WinXP SP2.
@@ -2041,9 +1991,7 @@
 
     if (read_pipe != INVALID_HANDLE_VALUE)
     {
-#if DEBUG_PIPE
       LOG (GNUNET_ERROR_TYPE_DEBUG, "pipe read handle = %p\n", read_pipe);
-#endif
       break;
     }
 
@@ -2054,33 +2002,24 @@
     case ERROR_PIPE_BUSY:
       /* The pipe is already open with compatible parameters.
        * Pick a new name and retry.  */
-#if DEBUG_PIPE
       LOG (GNUNET_ERROR_TYPE_DEBUG, "pipe busy, retrying\n");
-#endif
       continue;
     case ERROR_ACCESS_DENIED:
       /* The pipe is already open with incompatible parameters.
        * Pick a new name and retry.  */
-#if DEBUG_PIPE
       LOG (GNUNET_ERROR_TYPE_DEBUG, "pipe access denied, retrying\n");
-#endif
       continue;
     case ERROR_CALL_NOT_IMPLEMENTED:
       /* We are on an older Win9x platform without named pipes.
        * Return an anonymous pipe as the best approximation.  */
-#if DEBUG_PIPE
       LOG (GNUNET_ERROR_TYPE_DEBUG,
            "CreateNamedPipe not implemented, resorting to "
            "CreatePipe: size = %lu\n", psize);
-#endif
       if (CreatePipe (read_pipe_ptr, write_pipe_ptr, sa_ptr, psize))
       {
-#if DEBUG_PIPE
-        LOG (GNUNET_ERROR_TYPE_DEBUG, "pipe read handle = %p\n",
-             *read_pipe_ptr);
-        LOG (GNUNET_ERROR_TYPE_DEBUG, "pipe write handle = %p\n",
+        LOG (GNUNET_ERROR_TYPE_DEBUG, "pipe read handle = %p, write handle = 
%p\n",
+             *read_pipe_ptr,
              *write_pipe_ptr);
-#endif
         return GNUNET_OK;
       }
       err = GetLastError ();
@@ -2092,9 +2031,7 @@
     }
     /* NOTREACHED */
   }
-#if DEBUG_PIPE
   LOG (GNUNET_ERROR_TYPE_DEBUG, "CreateFile: name = %s\n", pipename);
-#endif
 
   /* Open the named pipe for writing.
    * Be sure to permit FILE_READ_ATTRIBUTES access.  */
@@ -2107,15 +2044,11 @@
     /* Failure. */
     DWORD err = GetLastError ();
 
-#if DEBUG_PIPE
     LOG (GNUNET_ERROR_TYPE_DEBUG, "CreateFile failed: %d\n", err);
-#endif
     CloseHandle (read_pipe);
     return err;
   }
-#if DEBUG_PIPE
   LOG (GNUNET_ERROR_TYPE_DEBUG, "pipe write handle = %p\n", write_pipe);
-#endif
   /* Success. */
   *read_pipe_ptr = read_pipe;
   *write_pipe_ptr = write_pipe;

Modified: gnunet/src/util/load.c
===================================================================
--- gnunet/src/util/load.c      2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/load.c      2012-04-21 15:16:45 UTC (rev 21057)
@@ -26,7 +26,6 @@
 #include "platform.h"
 #include "gnunet_load_lib.h"
 
-#define DEBUG_LOAD GNUNET_EXTRA_LOGGING
 
 #define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
 

Modified: gnunet/src/util/network.c
===================================================================
--- gnunet/src/util/network.c   2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/network.c   2012-04-21 15:16:45 UTC (rev 21057)
@@ -1024,9 +1024,6 @@
     if (GNUNET_CONTAINER_slist_contains
         (fds2->handles, h, sizeof (struct GNUNET_DISK_FileHandle)))
     {
-#if DEBUG_NETWORK
-      LOG (GNUNET_ERROR_TYPE_DEBUG, "Match!\n");
-#endif
       return GNUNET_YES;
     }
     GNUNET_CONTAINER_slist_next (&it);

Modified: gnunet/src/util/server.c
===================================================================
--- gnunet/src/util/server.c    2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/server.c    2012-04-21 15:16:45 UTC (rev 21057)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2009 Christian Grothoff (and other contributing authors)
+     (C) 2009, 2012 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -26,11 +26,7 @@
 
 #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_disk_lib.h"
+#include "gnunet_util_lib.h"
 #include "gnunet_protocols.h"
 
 #define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
@@ -63,11 +59,16 @@
 struct NotifyList
 {
   /**
-   * This is a linked list.
+   * This is a doubly linked list.
    */
   struct NotifyList *next;
 
   /**
+   * This is a doubly linked list.
+   */
+  struct NotifyList *prev;
+
+  /**
    * Function to call.
    */
   GNUNET_SERVER_DisconnectCallback callback;
@@ -95,11 +96,16 @@
   struct GNUNET_SERVER_Client *clients;
 
   /**
-   * Linked list of functions to call on disconnects by clients.
+   * Head of linked list of functions to call on disconnects by clients.
    */
-  struct NotifyList *disconnect_notify_list;
+  struct NotifyList *disconnect_notify_list_head;
 
   /**
+   * Tail of linked list of functions to call on disconnects by clients.
+   */
+  struct NotifyList *disconnect_notify_list_tail;
+
+  /**
    * Function to call for access control.
    */
   GNUNET_CONNECTION_AccessCheck access;
@@ -133,13 +139,6 @@
   int require_found;
 
   /**
-   * Should all of the clients of this server continue to process
-   * connections as usual even if we get a shutdown request? (the
-   * listen socket always ignores shutdown).
-   */
-  int clients_ignore_shutdown;
-
-  /**
    * Alternative function to create a MST instance.
    */
   GNUNET_SERVER_MstCreateCallback mst_create;
@@ -338,12 +337,10 @@
           GNUNET_CONNECTION_create_from_accept (server->access,
                                                 server->access_cls,
                                                 server->listen_sockets[i]);
-      if (sock != NULL)
+      if (NULL != sock)
       {
         LOG (GNUNET_ERROR_TYPE_DEBUG, "Server accepted incoming 
connection.\n");
         client = GNUNET_SERVER_connect_socket (server, sock);
-        GNUNET_CONNECTION_ignore_shutdown (sock,
-                                           server->clients_ignore_shutdown);
         /* decrement reference count, we don't keep "client" alive */
         GNUNET_SERVER_client_drop (client);
       }
@@ -397,14 +394,14 @@
     errno = 0;
     return NULL;
   }
-  if (port != 0)
+  if (0 != port)
   {
     if (GNUNET_NETWORK_socket_setsockopt
         (sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) != GNUNET_OK)
       LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
                     "setsockopt");
 #ifdef IPV6_V6ONLY
-    if ((serverAddr->sa_family == AF_INET6) &&
+    if ((AF_INET6 == serverAddr->sa_family) &&
         (GNUNET_NETWORK_socket_setsockopt
          (sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof (on)) != GNUNET_OK))
       LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
@@ -412,30 +409,30 @@
 #endif
   }
   /* bind the socket */
-  if (GNUNET_NETWORK_socket_bind (sock, serverAddr, socklen) != GNUNET_OK)
+  if (GNUNET_OK != GNUNET_NETWORK_socket_bind (sock, serverAddr, socklen))
   {
     eno = errno;
-    if (errno != EADDRINUSE)
+    if (EADDRINUSE != errno)
     {
       /* we don't log 'EADDRINUSE' here since an IPv4 bind may
        * fail if we already took the port on IPv6; if both IPv4 and
        * IPv6 binds fail, then our caller will log using the
        * errno preserved in 'eno' */
       LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "bind");
-      if (port != 0)
+      if (0 != port)
         LOG (GNUNET_ERROR_TYPE_ERROR, _("`%s' failed for port %d (%s).\n"),
              "bind", port,
-             (serverAddr->sa_family == AF_INET) ? "IPv4" : "IPv6");
+             (AF_INET == serverAddr->sa_family) ? "IPv4" : "IPv6");
       eno = 0;
     }
     else
     {
-      if (port != 0)
+      if (0 != port)
         LOG (GNUNET_ERROR_TYPE_WARNING,
              _("`%s' failed for port %d (%s): address already in use\n"),
              "bind", port,
-             (serverAddr->sa_family == AF_INET) ? "IPv4" : "IPv6");
-      else if (serverAddr->sa_family == AF_UNIX)
+             (AF_INET == serverAddr->sa_family) ? "IPv4" : "IPv6");
+      else if (AF_UNIX == serverAddr->sa_family)
         LOG (GNUNET_ERROR_TYPE_WARNING,
              _("`%s' failed for `%s': address already in use\n"), "bind",
              ((const struct sockaddr_un *) serverAddr)->sun_path);
@@ -452,7 +449,7 @@
     errno = 0;
     return NULL;
   }
-  if (port != 0)
+  if (0 != port)
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Server starts to listen on port %u.\n",
          port);
   return sock;
@@ -478,29 +475,29 @@
                                    struct GNUNET_TIME_Relative idle_timeout,
                                    int require_found)
 {
-  struct GNUNET_SERVER_Handle *ret;
+  struct GNUNET_SERVER_Handle *server;
   struct GNUNET_NETWORK_FDSet *r;
   int i;
 
-  ret = GNUNET_malloc (sizeof (struct GNUNET_SERVER_Handle));
-  ret->idle_timeout = idle_timeout;
-  ret->listen_sockets = lsocks;
-  ret->access = access;
-  ret->access_cls = access_cls;
-  ret->require_found = require_found;
-  if (lsocks != NULL)
+  server = GNUNET_malloc (sizeof (struct GNUNET_SERVER_Handle));
+  server->idle_timeout = idle_timeout;
+  server->listen_sockets = lsocks;
+  server->access = access;
+  server->access_cls = access_cls;
+  server->require_found = require_found;
+  if (NULL != lsocks)
   {
     r = GNUNET_NETWORK_fdset_create ();
     i = 0;
-    while (NULL != ret->listen_sockets[i])
-      GNUNET_NETWORK_fdset_set (r, ret->listen_sockets[i++]);
-    ret->listen_task =
+    while (NULL != server->listen_sockets[i])
+      GNUNET_NETWORK_fdset_set (r, server->listen_sockets[i++]);
+    server->listen_task =
         GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
                                      GNUNET_TIME_UNIT_FOREVER_REL, r, NULL,
-                                     &process_listen_socket, ret);
+                                     &process_listen_socket, server);
     GNUNET_NETWORK_fdset_destroy (r);
   }
-  return ret;
+  return server;
 }
 
 
@@ -529,23 +526,23 @@
   unsigned int j;
 
   i = 0;
-  while (serverAddr[i] != NULL)
+  while (NULL != serverAddr[i])
     i++;
   if (i > 0)
   {
     lsocks = GNUNET_malloc (sizeof (struct GNUNET_NETWORK_Handle *) * (i + 1));
     i = 0;
     j = 0;
-    while (serverAddr[i] != NULL)
+    while (NULL != serverAddr[i])
     {
       lsocks[j] = open_listen_socket (serverAddr[i], socklen[i]);
-      if (lsocks[j] != NULL)
+      if (NULL != lsocks[j])
         j++;
       i++;
     }
-    if (j == 0)
+    if (0 == j)
     {
-      if (errno != 0)
+      if (0 != errno)
         LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "bind");
       GNUNET_free (lsocks);
       lsocks = NULL;
@@ -563,44 +560,46 @@
 /**
  * Free resources held by this server.
  *
- * @param s server to destroy
+ * @param server server to destroy
  */
 void
-GNUNET_SERVER_destroy (struct GNUNET_SERVER_Handle *s)
+GNUNET_SERVER_destroy (struct GNUNET_SERVER_Handle *server)
 {
   struct HandlerList *hpos;
   struct NotifyList *npos;
   unsigned int i;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Server shutting down.\n");
-  if (GNUNET_SCHEDULER_NO_TASK != s->listen_task)
+  if (GNUNET_SCHEDULER_NO_TASK != server->listen_task)
   {
-    GNUNET_SCHEDULER_cancel (s->listen_task);
-    s->listen_task = GNUNET_SCHEDULER_NO_TASK;
+    GNUNET_SCHEDULER_cancel (server->listen_task);
+    server->listen_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  if (s->listen_sockets != NULL)
+  if (NULL != server->listen_sockets)
   {
     i = 0;
-    while (s->listen_sockets[i] != NULL)
+    while (NULL != server->listen_sockets[i])
       GNUNET_break (GNUNET_OK ==
-                    GNUNET_NETWORK_socket_close (s->listen_sockets[i++]));
-    GNUNET_free (s->listen_sockets);
-    s->listen_sockets = NULL;
+                    GNUNET_NETWORK_socket_close (server->listen_sockets[i++]));
+    GNUNET_free (server->listen_sockets);
+    server->listen_sockets = NULL;
   }
-  while (s->clients != NULL)
-    GNUNET_SERVER_client_disconnect (s->clients);
-  while (NULL != (hpos = s->handlers))
+  while (NULL != server->clients)
+    GNUNET_SERVER_client_disconnect (server->clients);
+  while (NULL != (hpos = server->handlers))
   {
-    s->handlers = hpos->next;
+    server->handlers = hpos->next;
     GNUNET_free (hpos);
   }
-  while (NULL != (npos = s->disconnect_notify_list))
+  while (NULL != (npos = server->disconnect_notify_list_head))
   {
     npos->callback (npos->callback_cls, NULL);
-    s->disconnect_notify_list = npos->next;
+    GNUNET_CONTAINER_DLL_remove (server->disconnect_notify_list_head,
+                                server->disconnect_notify_list_tail,
+                                npos);
     GNUNET_free (npos);
   }
-  GNUNET_free (s);
+  GNUNET_free (server);
 }
 
 
@@ -630,6 +629,16 @@
 }
 
 
+/**
+ * Change functions used by the server to tokenize the message stream.
+ * (very rarely used).
+ *
+ * @param server server to modify
+ * @param create new tokenizer initialization function
+ * @param destroy new tokenizer destruction function
+ * @param receive new tokenizer receive function
+ * @param cls closure for 'create', 'receive', 'destroy' 
+ */
 void
 GNUNET_SERVER_set_callbacks (struct GNUNET_SERVER_Handle *server,
                              GNUNET_SERVER_MstCreateCallback create,
@@ -718,9 +727,8 @@
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Server schedules transmission of %u-byte message of type %u to 
client.\n",
        size, type);
-  pos = server->handlers;
   found = GNUNET_NO;
-  while (pos != NULL)
+  for (pos = server->handlers; NULL != pos; pos = pos->next)
   {
     i = 0;
     while (pos->handlers[i].callback != NULL)
@@ -728,7 +736,7 @@
       mh = &pos->handlers[i];
       if ((mh->type == type) || (mh->type == GNUNET_MESSAGE_TYPE_ALL))
       {
-        if ((mh->expected_size != 0) && (mh->expected_size != size))
+        if ((0 != mh->expected_size) && (mh->expected_size != size))
         {
 #if GNUNET8_NETWORK_IS_DEAD
           LOG (GNUNET_ERROR_TYPE_WARNING,
@@ -738,7 +746,7 @@
 #endif
           return GNUNET_SYSERR;
         }
-        if (sender != NULL)
+        if (NULL != sender)
         {
           if (0 == sender->suspended)
           {
@@ -755,13 +763,12 @@
       }
       i++;
     }
-    pos = pos->next;
   }
-  if (found == GNUNET_NO)
+  if (GNUNET_NO == found)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK,
          "Received message of unknown type %d\n", type);
-    if (server->require_found == GNUNET_YES)
+    if (GNUNET_YES == server->require_found)
       return GNUNET_SYSERR;
   }
   return GNUNET_OK;
@@ -799,10 +806,10 @@
 static void
 process_mst (struct GNUNET_SERVER_Client *client, int ret)
 {
-  while ((ret != GNUNET_SYSERR) && (client->server != NULL) &&
+  while ((GNUNET_SYSERR != ret) && (NULL != client->server) &&
          (GNUNET_YES != client->shutdown_now) && (0 == client->suspended))
   {
-    if (ret == GNUNET_OK)
+    if (GNUNET_OK == ret)
     {
       LOG (GNUNET_ERROR_TYPE_DEBUG,
            "Server re-enters receive loop, timeout: %llu.\n",
@@ -816,7 +823,7 @@
     }
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Server processes additional messages instantly.\n");
-    if (client->server->mst_receive != NULL)
+    if (NULL != client->server->mst_receive)
       ret =
           client->server->mst_receive (client->server->mst_cls, client->mst,
                                        client, NULL, 0, GNUNET_NO, GNUNET_YES);
@@ -828,13 +835,13 @@
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Server leaves instant processing loop: ret = %d, server = %p, shutdown 
= %d, suspended = %u\n",
        ret, client->server, client->shutdown_now, client->suspended);
-  if (ret == GNUNET_NO)
+  if (GNUNET_NO == ret)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Server has more data pending but is suspended.\n");
     client->receive_pending = GNUNET_SYSERR;    /* data pending */
   }
-  if ((ret == GNUNET_SYSERR) || (GNUNET_YES == client->shutdown_now))
+  if ((GNUNET_SYSERR == ret) || (GNUNET_YES == client->shutdown_now))
     GNUNET_SERVER_client_disconnect (client);
   GNUNET_SERVER_client_drop (client);
 }
@@ -860,13 +867,13 @@
   struct GNUNET_TIME_Absolute now;
   int ret;
 
-  GNUNET_assert (client->receive_pending == GNUNET_YES);
+  GNUNET_assert (GNUNET_YES == client->receive_pending);
   client->receive_pending = GNUNET_NO;
   now = GNUNET_TIME_absolute_get ();
   end = GNUNET_TIME_absolute_add (client->last_activity, client->idle_timeout);
 
-  if ((buf == NULL) && (available == 0) && (addr == NULL) && (errCode == 0) &&
-      (client->shutdown_now != GNUNET_YES) && (server != NULL) &&
+  if ((NULL == buf) && (0 == available) && (NULL == addr) && (0 == errCode) &&
+      (GNUNET_YES != client->shutdown_now) && (NULL != server) &&
       (GNUNET_YES == GNUNET_CONNECTION_check (client->connection)) &&
       (end.abs_value > now.abs_value))
   {
@@ -881,8 +888,8 @@
                                &process_incoming, client);
     return;
   }
-  if ((buf == NULL) || (available == 0) || (errCode != 0) || (server == NULL) 
||
-      (client->shutdown_now == GNUNET_YES) ||
+  if ((NULL == buf) || (0 == available) || (0 != errCode) || (NULL == server) 
||
+      (GNUNET_YES == client->shutdown_now) ||
       (GNUNET_YES != GNUNET_CONNECTION_check (client->connection)))
   {
     /* other side closed connection, error connecting, etc. */
@@ -894,7 +901,7 @@
   GNUNET_SERVER_client_keep (client);
   client->last_activity = now;
 
-  if (server->mst_receive != NULL)
+  if (NULL != server->mst_receive)
     ret =
         client->server->mst_receive (client->server->mst_cls, client->mst,
                                      client, buf, available, GNUNET_NO, 
GNUNET_YES);
@@ -902,7 +909,6 @@
     ret =
         GNUNET_SERVER_mst_receive (client->mst, client, buf, available, 
GNUNET_NO,
                                    GNUNET_YES);
-
   process_mst (client, ret);
 }
 
@@ -918,17 +924,10 @@
 restart_processing (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct GNUNET_SERVER_Client *client = cls;
-  struct GNUNET_SERVER_Handle *server = client->server;
 
   client->restart_task = GNUNET_SCHEDULER_NO_TASK;
-  if ((0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) &&
-      (GNUNET_NO == server->clients_ignore_shutdown))
+  if (GNUNET_NO == client->receive_pending)
   {
-    GNUNET_SERVER_client_disconnect (client);
-    return;
-  }
-  if (client->receive_pending == GNUNET_NO)
-  {
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Server begins to read again from 
client.\n");
     client->receive_pending = GNUNET_YES;
     GNUNET_CONNECTION_receive (client->connection,
@@ -1054,7 +1053,7 @@
 {
   GNUNET_assert (client->reference_count > 0);
   client->reference_count--;
-  if ((client->shutdown_now == GNUNET_YES) && (client->reference_count == 0))
+  if ((GNUNET_YES == client->shutdown_now) && (0 == client->reference_count))
     GNUNET_SERVER_client_disconnect (client);
 }
 
@@ -1095,8 +1094,9 @@
   n = GNUNET_malloc (sizeof (struct NotifyList));
   n->callback = callback;
   n->callback_cls = callback_cls;
-  n->next = server->disconnect_notify_list;
-  server->disconnect_notify_list = n;
+  GNUNET_CONTAINER_DLL_insert (server->disconnect_notify_list_head,
+                              server->disconnect_notify_list_tail,
+                              n);
 }
 
 
@@ -1113,26 +1113,18 @@
                                         callback, void *callback_cls)
 {
   struct NotifyList *pos;
-  struct NotifyList *prev;
 
-  prev = NULL;
-  pos = server->disconnect_notify_list;
-  while (pos != NULL)
-  {
+  for (pos = server->disconnect_notify_list_head; NULL != pos; pos = pos->next)
     if ((pos->callback == callback) && (pos->callback_cls == callback_cls))
       break;
-    prev = pos;
-    pos = pos->next;
-  }
-  if (pos == NULL)
+  if (NULL == pos)
   {
     GNUNET_break (0);
     return;
   }
-  if (prev == NULL)
-    server->disconnect_notify_list = pos->next;
-  else
-    prev->next = pos->next;
+  GNUNET_CONTAINER_DLL_remove (server->disconnect_notify_list_head,
+                              server->disconnect_notify_list_tail,
+                              pos);
   GNUNET_free (pos);
 }
 
@@ -1156,12 +1148,12 @@
 
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Client is being disconnected from the server.\n");
-  if (client->restart_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != client->restart_task)
   {
     GNUNET_SCHEDULER_cancel (client->restart_task);
     client->restart_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  if (client->warn_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != client->warn_task)
   {
     GNUNET_SCHEDULER_cancel (client->warn_task);
     client->warn_task = GNUNET_SCHEDULER_NO_TASK;
@@ -1171,40 +1163,35 @@
     GNUNET_CONNECTION_receive_cancel (client->connection);
     client->receive_pending = GNUNET_NO;
   }
-
   rc = client->reference_count;
-  if (client->shutdown_now != GNUNET_YES)
+  if (GNUNET_YES != client->shutdown_now)
   {
     server = client->server;
     client->shutdown_now = GNUNET_YES;
     prev = NULL;
     pos = server->clients;
-    while ((pos != NULL) && (pos != client))
+    while ((NULL != pos) && (pos != client))
     {
       prev = pos;
       pos = pos->next;
     }
-    GNUNET_assert (pos != NULL);
-    if (prev == NULL)
+    GNUNET_assert (NULL != pos);
+    if (NULL == prev)
       server->clients = pos->next;
     else
       prev->next = pos->next;
-    if (client->restart_task != GNUNET_SCHEDULER_NO_TASK)
+    if (GNUNET_SCHEDULER_NO_TASK != client->restart_task)
     {
       GNUNET_SCHEDULER_cancel (client->restart_task);
       client->restart_task = GNUNET_SCHEDULER_NO_TASK;
     }
-    if (client->warn_task != GNUNET_SCHEDULER_NO_TASK)
+    if (GNUNET_SCHEDULER_NO_TASK != client->warn_task)
     {
       GNUNET_SCHEDULER_cancel (client->warn_task);
       client->warn_task = GNUNET_SCHEDULER_NO_TASK;
     }
-    n = server->disconnect_notify_list;
-    while (n != NULL)
-    {
+    for (n = server->disconnect_notify_list_head; NULL != n; n = n->next)
       n->callback (n->callback_cls, client);
-      n = n->next;
-    }
   }
   if (rc > 0)
   {
@@ -1212,24 +1199,23 @@
          "RC still positive, not destroying everything.\n");
     return;
   }
-  if (client->in_process_client_buffer == GNUNET_YES)
+  if (GNUNET_YES == client->in_process_client_buffer)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Still processing inputs, not destroying everything.\n");
     return;
   }
 
-  if (client->persist == GNUNET_YES)
+  if (GNUNET_YES == client->persist)
     GNUNET_CONNECTION_persist_ (client->connection);
   if (NULL != client->th.cth)
     GNUNET_SERVER_notify_transmit_ready_cancel (&client->th);
   GNUNET_CONNECTION_destroy (client->connection);
 
-  if (client->server->mst_destroy != NULL)
+  if (NULL != client->server->mst_destroy)
     client->server->mst_destroy (client->server->mst_cls, client->mst);
   else
     GNUNET_SERVER_mst_destroy (client->mst);
-
   GNUNET_free (client);
 }
 
@@ -1351,11 +1337,11 @@
 void
 GNUNET_SERVER_receive_done (struct GNUNET_SERVER_Client *client, int success)
 {
-  if (client == NULL)
+  if (NULL == client)
     return;
   GNUNET_assert (client->suspended > 0);
   client->suspended--;
-  if (success != GNUNET_OK)
+  if (GNUNET_OK != success)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "GNUNET_SERVER_receive_done called with failure indication\n");
@@ -1373,13 +1359,13 @@
     GNUNET_SCHEDULER_cancel (client->warn_task);
     client->warn_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  if (client->in_process_client_buffer == GNUNET_YES)
+  if (GNUNET_YES == client->in_process_client_buffer)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "GNUNET_SERVER_receive_done called while still in processing loop\n");
     return;
   }
-  if ((client->server == NULL) || (GNUNET_YES == client->shutdown_now))
+  if ((NULL == client->server) || (GNUNET_YES == client->shutdown_now))
   {
     GNUNET_SERVER_client_disconnect (client);
     return;
@@ -1391,21 +1377,4 @@
 }
 
 
-/**
- * Configure this server's connections to continue handling client
- * requests as usual even after we get a shutdown signal.  The change
- * only applies to clients that connect to the server from the outside
- * using TCP after this call.  Clients managed previously or those
- * added using GNUNET_SERVER_connect_socket and
- * GNUNET_SERVER_connect_callback are not affected by this option.
- *
- * @param h server handle
- * @param do_ignore GNUNET_YES to ignore, GNUNET_NO to restore default
- */
-void
-GNUNET_SERVER_ignore_shutdown (struct GNUNET_SERVER_Handle *h, int do_ignore)
-{
-  h->clients_ignore_shutdown = do_ignore;
-}
-
 /* end of server.c */

Modified: gnunet/src/util/server_mst.c
===================================================================
--- gnunet/src/util/server_mst.c        2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/server_mst.c        2012-04-21 15:16:45 UTC (rev 21057)
@@ -31,7 +31,6 @@
 #include "gnunet_server_lib.h"
 #include "gnunet_time_lib.h"
 
-#define DEBUG_SERVER_MST GNUNET_EXTRA_LOGGING 
 
 #if HAVE_UNALIGNED_64_ACCESS
 #define ALIGN_FACTOR 4
@@ -134,11 +133,9 @@
 
   GNUNET_assert (mst->off <= mst->pos);
   GNUNET_assert (mst->pos <= mst->curr_buf);
-#if DEBUG_SERVER_MST
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Server-mst receives %u bytes with %u bytes already in private 
buffer\n",
        (unsigned int) size, (unsigned int) (mst->pos - mst->off));
-#endif
   ret = GNUNET_OK;
   ibuf = (char *) mst->hdr;
   while (mst->pos > 0)
@@ -235,11 +232,9 @@
   GNUNET_assert (0 == mst->pos);
   while (size > 0)
   {
-#if DEBUG_SERVER_MST
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Server-mst has %u bytes left in inbound buffer\n",
          (unsigned int) size);
-#endif
     if (size < sizeof (struct GNUNET_MessageHeader))
       break;
     offset = (unsigned long) buf;
@@ -295,11 +290,9 @@
     mst->off = 0;
     mst->pos = 0;
   }
-#if DEBUG_SERVER_MST
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Server-mst leaves %u bytes in private buffer\n",
        (unsigned int) (mst->pos - mst->off));
-#endif
   return ret;
 }
 

Modified: gnunet/src/util/server_nc.c
===================================================================
--- gnunet/src/util/server_nc.c 2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/server_nc.c 2012-04-21 15:16:45 UTC (rev 21057)
@@ -36,8 +36,6 @@
 #define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
 
 
-#define DEBUG_SERVER_NC GNUNET_EXTRA_LOGGING
-
 /**
  * Entry in list of messages pending to be transmitted.
  */
@@ -171,11 +169,9 @@
   }
   if (pos == NULL)
     return;
-#if DEBUG_SERVER_NC
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Client disconnected, cleaning up %u messages in NC queue\n",
        pos->num_pending);
-#endif
   if (prev == NULL)
     nc->clients = pos->next;
   else
@@ -297,10 +293,8 @@
   if (buf == NULL)
   {
     /* 'cl' should be freed via disconnect notification shortly */
-#if DEBUG_SERVER_NC
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Failed to transmit message from NC queue to client\n");
-#endif
     return 0;
   }
   ret = 0;
@@ -310,11 +304,9 @@
     if (size < msize)
       break;
     GNUNET_CONTAINER_DLL_remove (cl->pending_head, cl->pending_tail, pml);
-#if DEBUG_SERVER_NC
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Copying message of type %u and size %u from pending queue to 
transmission buffer\n",
          ntohs (pml->msg->type), msize);
-#endif
     memcpy (&cbuf[ret], pml->msg, msize);
     ret += msize;
     size -= msize;
@@ -323,11 +315,9 @@
   }
   if (pml != NULL)
   {
-#if DEBUG_SERVER_NC
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Have %u messages left in NC queue, will try transmission again\n",
          cl->num_pending);
-#endif
     cl->th =
         GNUNET_SERVER_notify_transmit_ready (cl->client, ntohs 
(pml->msg->size),
                                              GNUNET_TIME_UNIT_FOREVER_REL,
@@ -372,11 +362,9 @@
   pml = GNUNET_malloc (sizeof (struct PendingMessageList) + size);
   pml->msg = (const struct GNUNET_MessageHeader *) &pml[1];
   pml->can_drop = can_drop;
-#if DEBUG_SERVER_NC
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Adding message of type %u and size %u to pending queue (which has %u 
entries)\n",
        ntohs (msg->type), ntohs (msg->size), (unsigned int) nc->queue_length);
-#endif
   memcpy (&pml[1], msg, size);
   /* append */
   GNUNET_CONTAINER_DLL_insert_tail (client->pending_head, client->pending_tail,

Modified: gnunet/src/util/service.c
===================================================================
--- gnunet/src/util/service.c   2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/service.c   2012-04-21 15:16:45 UTC (rev 21057)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2009 Christian Grothoff (and other contributing authors)
+     (C) 2009, 2012 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -42,7 +42,6 @@
 
 #define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file 
(kind, "util", syscall, filename)
 
-#define DEBUG_SERVICE GNUNET_EXTRA_LOGGING
 
 /* ******************* access control ******************** */
 
@@ -51,7 +50,14 @@
  */
 struct IPv4NetworkSet
 {
+  /**
+   * IPv4 address.
+   */
   struct in_addr network;
+
+  /**
+   * IPv4 netmask.
+   */
   struct in_addr netmask;
 };
 
@@ -60,7 +66,14 @@
  */
 struct IPv6NetworkSet
 {
+  /**
+   * IPv6 address.
+   */
   struct in6_addr network;
+
+  /**
+   * IPv6 netmask.
+   */
   struct in6_addr netmask;
 };
 
@@ -72,7 +85,7 @@
  * with a semicolon). The network must be given in dotted-decimal
  * notation. The netmask can be given in CIDR notation (/16) or
  * in dotted-decimal (/255.255.0.0).
- * <p>
+ * 
  * @param routeList a string specifying the forbidden networks
  * @return the converted list, NULL if the synatx is flawed
  */
@@ -89,18 +102,16 @@
   int slash;
   struct IPv4NetworkSet *result;
 
-  if (routeList == NULL)
+  if (NULL == routeList)
     return NULL;
   len = strlen (routeList);
-  if (len == 0)
+  if (0 == len)
     return NULL;
   count = 0;
   for (i = 0; i < len; i++)
     if (routeList[i] == ';')
       count++;
   result = GNUNET_malloc (sizeof (struct IPv4NetworkSet) * (count + 1));
-  /* add termination */
-  memset (result, 0, sizeof (struct IPv4NetworkSet) * (count + 1));
   i = 0;
   pos = 0;
   while (i < count)
@@ -109,7 +120,7 @@
         SSCANF (&routeList[pos], "%u.%u.%u.%u/%u.%u.%u.%u;", &temps[0],
                 &temps[1], &temps[2], &temps[3], &temps[4], &temps[5],
                 &temps[6], &temps[7]);
-    if (cnt == 8)
+    if (8 == cnt)
     {
       for (j = 0; j < 8; j++)
         if (temps[j] > 0xFF)
@@ -135,7 +146,7 @@
     cnt =
         SSCANF (&routeList[pos], "%u.%u.%u.%u/%u;", &temps[0], &temps[1],
                 &temps[2], &temps[3], &slash);
-    if (cnt == 5)
+    if (5 == cnt)
     {
       for (j = 0; j < 4; j++)
         if (temps[j] > 0xFF)
@@ -158,7 +169,7 @@
           slash--;
         }
         result[i].netmask.s_addr = htonl (result[i].netmask.s_addr);
-        while (routeList[pos] != ';')
+        while (';' != routeList[pos])
           pos++;
         pos++;
         i++;
@@ -178,7 +189,7 @@
     cnt =
         SSCANF (&routeList[pos], "%u.%u.%u.%u;", &temps[0], &temps[1],
                 &temps[2], &temps[3]);
-    if (cnt == 4)
+    if (4 == cnt)
     {
       for (j = 0; j < 4; j++)
         if (temps[j] > 0xFF)
@@ -227,7 +238,7 @@
  * with a semicolon). The network must be given in colon-hex
  * notation.  The netmask must be given in CIDR notation (/16) or
  * can be omitted to specify a single host.
- * <p>
+ * 
  * @param routeListX a string specifying the forbidden networks
  * @return the converted list, NULL if the synatx is flawed
  */
@@ -247,17 +258,17 @@
   unsigned int off;
   int save;
 
-  if (routeListX == NULL)
+  if (NULL == routeListX)
     return NULL;
   len = strlen (routeListX);
-  if (len == 0)
+  if (0 == len)
     return NULL;
   routeList = GNUNET_strdup (routeListX);
   count = 0;
   for (i = 0; i < len; i++)
-    if (routeList[i] == ';')
+    if (';' == routeList[i])
       count++;
-  if (routeList[len - 1] != ';')
+  if (';' != routeList[len - 1])
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Invalid network notation (does not end with ';': `%s')\n"),
@@ -267,13 +278,12 @@
   }
 
   result = GNUNET_malloc (sizeof (struct IPv6NetworkSet) * (count + 1));
-  memset (result, 0, sizeof (struct IPv6NetworkSet) * (count + 1));
   i = 0;
   pos = 0;
   while (i < count)
   {
     start = pos;
-    while (routeList[pos] != ';')
+    while (';' != routeList[pos])
       pos++;
     slash = pos;
     while ((slash >= start) && (routeList[slash] != '/'))
@@ -292,7 +302,7 @@
         save = errno;
         if ((1 != SSCANF (&routeList[slash + 1], "%u", &bits)) || (bits >= 
128))
         {
-          if (ret == 0)
+          if (0 == ret)
             LOG (GNUNET_ERROR_TYPE_ERROR, _("Wrong format `%s' for netmask\n"),
                  &routeList[slash + 1]);
           else
@@ -322,7 +332,7 @@
     ret = inet_pton (AF_INET6, &routeList[start], &result[i].network);
     if (ret <= 0)
     {
-      if (ret == 0)
+      if (0 == ret)
         LOG (GNUNET_ERROR_TYPE_ERROR, _("Wrong format `%s' for network\n"),
              &routeList[slash + 1]);
       else
@@ -349,12 +359,11 @@
 static int
 check_ipv4_listed (const struct IPv4NetworkSet *list, const struct in_addr 
*add)
 {
-  int i;
+  unsigned int i;
 
+  if (NULL == list)
+    return GNUNET_NO;
   i = 0;
-  if (list == NULL)
-    return GNUNET_NO;
-
   while ((list[i].network.s_addr != 0) || (list[i].netmask.s_addr != 0))
   {
     if ((add->s_addr & list[i].netmask.s_addr) ==
@@ -365,6 +374,7 @@
   return GNUNET_NO;
 }
 
+
 /**
  * Check if the given IP address is in the list of IP addresses.
  *
@@ -379,13 +389,12 @@
   unsigned int j;
   struct in6_addr zero;
 
-  if (list == NULL)
+  if (NULL == list)
     return GNUNET_NO;
-
   memset (&zero, 0, sizeof (struct in6_addr));
   i = 0;
 NEXT:
-  while (memcmp (&zero, &list[i].network, sizeof (struct in6_addr)) != 0)
+  while (0 != memcmp (&zero, &list[i].network, sizeof (struct in6_addr)))
   {
     for (j = 0; j < sizeof (struct in6_addr) / sizeof (int); j++)
       if (((((int *) ip)[j] & ((int *) &list[i].netmask)[j])) !=
@@ -526,6 +535,13 @@
 
 /* ****************** message handlers ****************** */
 
+/**
+ *
+ * @param cls
+ * @param size
+ * @param buf
+ * @return 
+ */
 static size_t
 write_test (void *cls, size_t size, void *buf)
 {
@@ -544,6 +560,7 @@
   return sizeof (struct GNUNET_MessageHeader);
 }
 
+
 /**
  * Handler for TEST message.
  *
@@ -577,7 +594,6 @@
 };
 
 
-
 /* ****************** service core routines ************** */
 
 
@@ -605,32 +621,32 @@
   case AF_INET:
     GNUNET_assert (addrlen == sizeof (struct sockaddr_in));
     i4 = (const struct sockaddr_in *) addr;
-    ret = ((sctx->v4_allowed == NULL) ||
+    ret = ((NULL == sctx->v4_allowed) ||
            (check_ipv4_listed (sctx->v4_allowed, &i4->sin_addr))) &&
-        ((sctx->v4_denied == NULL) ||
+        ((NULL == sctx->v4_denied) ||
          (!check_ipv4_listed (sctx->v4_denied, &i4->sin_addr)));
     break;
   case AF_INET6:
     GNUNET_assert (addrlen == sizeof (struct sockaddr_in6));
     i6 = (const struct sockaddr_in6 *) addr;
-    ret = ((sctx->v6_allowed == NULL) ||
+    ret = ((NULL == sctx->v6_allowed) ||
            (check_ipv6_listed (sctx->v6_allowed, &i6->sin6_addr))) &&
-        ((sctx->v6_denied == NULL) ||
+        ((NULL == sctx->v6_denied) ||
          (!check_ipv6_listed (sctx->v6_denied, &i6->sin6_addr)));
     break;
 #ifndef WINDOWS
   case AF_UNIX:
     ret = GNUNET_OK;            /* always OK for now */
-    if (sctx->match_uid == GNUNET_YES) 
+    if (GNUNET_YES == sctx->match_uid) 
     {
       /* UID match required */
-      ret = (uc != NULL) && (uc->uid == geteuid ());
+      ret = (NULL != uc) && (uc->uid == geteuid ());
     }
-    else if ( (sctx->match_gid == GNUNET_YES) &&
-             ( (uc == NULL) || (uc->uid != geteuid ()) ) )
+    else if ( (GNUNET_YES == sctx->match_gid) &&
+             ( (NULL == uc) || (uc->uid != geteuid ()) ) )
     {
       /* group match required and UID does not match */
-      if (uc == NULL) 
+      if (NULL == uc) 
       {
        /* no credentials, group match not possible */
        ret = GNUNET_NO;
@@ -667,7 +683,7 @@
     }
     if (GNUNET_NO == ret)
       LOG (GNUNET_ERROR_TYPE_WARNING, _("Access denied to UID %d / GID %d\n"),
-           (uc == NULL) ? -1 : uc->uid, (uc == NULL) ? -1 : uc->gid);
+           (NULL == uc) ? -1 : uc->uid, (NULL == uc) ? -1 : uc->gid);
     break;
 #endif
   default:
@@ -675,11 +691,11 @@
          addr->sa_family);
     return GNUNET_SYSERR;
   }
-  if (ret != GNUNET_OK)
+  if (GNUNET_OK != ret)
   {
     LOG (GNUNET_ERROR_TYPE_WARNING,
-         _("Access from `%s' denied to service `%s'\n"), GNUNET_a2s (addr,
-                                                                     addrlen),
+         _("Access from `%s' denied to service `%s'\n"), 
+        GNUNET_a2s (addr, addrlen),
          sctx->serviceName);
   }
   return ret;
@@ -689,11 +705,13 @@
 /**
  * Get the name of the file where we will
  * write the PID of the service.
+ *
+ * @param sctx service context
+ * @return name of the file for the process ID
  */
 static char *
 get_pid_file_name (struct GNUNET_SERVICE_Context *sctx)
 {
-
   char *pif;
 
   if (GNUNET_OK !=
@@ -706,6 +724,11 @@
 
 /**
  * Parse an IPv4 access control list.
+ *
+ * @param ret
+ * @param sctx
+ * @param option
+ * @return 
  */
 static int
 process_acl4 (struct IPv4NetworkSet **ret, struct GNUNET_SERVICE_Context *sctx,
@@ -733,7 +756,12 @@
 
 
 /**
- * Parse an IPv4 access control list.
+ * Parse an IPv6 access control list.
+ *
+ * @param ret
+ * @param sctx
+ * @param option
+ * @return
  */
 static int
 process_acl6 (struct IPv6NetworkSet **ret, struct GNUNET_SERVICE_Context *sctx,
@@ -759,6 +787,7 @@
   return GNUNET_OK;
 }
 
+
 /**
  * Add the given UNIX domain path as an address to the
  * list (as the first entry).
@@ -859,8 +888,8 @@
     desc = GNUNET_NETWORK_socket_create (PF_INET6, SOCK_STREAM, 0);
     if (NULL == desc)
     {
-      if ((errno == ENOBUFS) || (errno == ENOMEM) || (errno == ENFILE) ||
-          (errno == EACCES))
+      if ((ENOBUFS == errno) || (ENOMEM == errno) || (ENFILE == errno) ||
+          (EACCES == errno))
       {
         LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "socket");
         return GNUNET_SYSERR;
@@ -927,8 +956,8 @@
     desc = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_STREAM, 0);
     if (NULL == desc)
     {
-      if ((errno == ENOBUFS) || (errno == ENOMEM) || (errno == ENFILE) ||
-          (errno == EACCES))
+      if ((ENOBUFS == errno) || (ENOMEM == errno) || (ENFILE == errno) ||
+          (EACCES == errno))
       {
         LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "socket");
         GNUNET_free_non_null (hostname);
@@ -950,7 +979,7 @@
   }
 #endif
 
-  if ((port == 0) && (unixpath == NULL))
+  if ((0 == port) && (NULL == unixpath))
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _
@@ -959,7 +988,7 @@
     GNUNET_free_non_null (hostname);
     return GNUNET_SYSERR;
   }
-  if (port == 0)
+  if (0 == port)
   {
     saddrs = GNUNET_malloc (2 * sizeof (struct sockaddr *));
     saddrlens = GNUNET_malloc (2 * sizeof (socklen_t));
@@ -971,13 +1000,11 @@
     return 1;
   }
 
-  if (hostname != NULL)
+  if (NULL != hostname)
   {
-#if DEBUG_SERVICE
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Resolving `%s' since that is where `%s' will bind to.\n", hostname,
          serviceName);
-#endif
     memset (&hints, 0, sizeof (struct addrinfo));
     if (disablev6)
       hints.ai_family = AF_INET;
@@ -1023,19 +1050,17 @@
     while (NULL != (pos = next))
     {
       next = pos->ai_next;
-      if ((disablev6) && (pos->ai_family == AF_INET6))
+      if ((disablev6) && (AF_INET6 == pos->ai_family))
         continue;
-      if ((pos->ai_protocol != IPPROTO_TCP) && (pos->ai_protocol != 0))
+      if ((IPPROTO_TCP != pos->ai_protocol) && (0 != pos->ai_protocol))
         continue;               /* not TCP */
-      if ((pos->ai_socktype != SOCK_STREAM) && (pos->ai_socktype != 0))
+      if ((SOCK_STREAM != pos->ai_socktype) && (0 != pos->ai_socktype))
         continue;               /* huh? */
-#if DEBUG_SERVICE
       LOG (GNUNET_ERROR_TYPE_DEBUG, "Service `%s' will bind to `%s'\n",
            serviceName, GNUNET_a2s (pos->ai_addr, pos->ai_addrlen));
-#endif
-      if (pos->ai_family == AF_INET)
+      if (AF_INET == pos->ai_family)
       {
-        GNUNET_assert (pos->ai_addrlen == sizeof (struct sockaddr_in));
+        GNUNET_assert (sizeof (struct sockaddr_in) == pos->ai_addrlen);
         saddrlens[i] = pos->ai_addrlen;
         saddrs[i] = GNUNET_malloc (saddrlens[i]);
         memcpy (saddrs[i], pos->ai_addr, saddrlens[i]);
@@ -1043,8 +1068,8 @@
       }
       else
       {
-        GNUNET_assert (pos->ai_family == AF_INET6);
-        GNUNET_assert (pos->ai_addrlen == sizeof (struct sockaddr_in6));
+        GNUNET_assert (AF_INET6 == pos->ai_family);
+        GNUNET_assert (sizeof (struct sockaddr_in6) == pos->ai_addrlen);
         saddrlens[i] = pos->ai_addrlen;
         saddrs[i] = GNUNET_malloc (saddrlens[i]);
         memcpy (saddrs[i], pos->ai_addr, saddrlens[i]);
@@ -1121,6 +1146,9 @@
 
 #ifdef MINGW
 /**
+ *
+ *
+ * @param sctx 
  * @return GNUNET_YES if ok, GNUNET_NO if not ok (must bind yourself),
  * and GNUNET_SYSERR on error.
  */
@@ -1129,22 +1157,20 @@
 {
   const char *env_buf;
   int fail;
-  uint64_t count, i;
+  uint64_t count;
+  uint64_t i;
   HANDLE lsocks_pipe;
 
   env_buf = getenv ("GNUNET_OS_READ_LSOCKS");
-  if ((env_buf == NULL) || (strlen (env_buf) <= 0))
-  {
+  if ((NULL == env_buf) || (strlen (env_buf) <= 0))
     return GNUNET_NO;
-  }
   /* Using W32 API directly here, because this pipe will
    * never be used outside of this function, and it's just too much of a bother
    * to create a GNUnet API that boxes a HANDLE (the way it is done with socks)
    */
   lsocks_pipe = (HANDLE) strtoul (env_buf, NULL, 10);
-  if (lsocks_pipe == 0 || lsocks_pipe == INVALID_HANDLE_VALUE)
-    return GNUNET_NO;
-
+  if ( (0 == lsocks_pipe) || (INVALID_HANDLE_VALUE == lsocks_pipe))
+    return GNUNET_NO
   fail = 1;
   do
   {
@@ -1153,7 +1179,7 @@
     DWORD rd;
 
     ret = ReadFile (lsocks_pipe, &count, sizeof (count), &rd, NULL);
-    if (ret == 0 || rd != sizeof (count) || count == 0)
+    if ((0 == ret) || (sizeof (count) != rd) || (0 == count))
       break;
     sctx->lsocks =
         GNUNET_malloc (sizeof (struct GNUNET_NETWORK_Handle *) * (count + 1));
@@ -1164,15 +1190,16 @@
       WSAPROTOCOL_INFOA pi;
       uint64_t size;
       SOCKET s;
+
       ret = ReadFile (lsocks_pipe, &size, sizeof (size), &rd, NULL);
-      if (ret == 0 || rd != sizeof (size) || size != sizeof (pi))
+      if ( (0 == ret) || (sizeof (size) != rd) || (sizeof (pi) != size) )
         break;
       ret = ReadFile (lsocks_pipe, &pi, sizeof (pi), &rd, NULL);
-      if (ret == 0 || rd != sizeof (pi))
+      if ( (0 == ret) || (sizeof (pi) != rd))
         break;
       s = WSASocketA (pi.iAddressFamily, pi.iSocketType, pi.iProtocol, &pi, 0, 
WSA_FLAG_OVERLAPPED);
       sctx->lsocks[i] = GNUNET_NETWORK_socket_box_native (s);
-      if (sctx->lsocks[i] == NULL)
+      if (NULL == sctx->lsocks[i])
         break;
       else if (i == count - 1)
         fail2 = 0;
@@ -1190,13 +1217,12 @@
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Could not access a pre-bound socket, will try to bind myself\n"));
-    for (i = 0; i < count && sctx->lsocks[i] != NULL; i++)
+    for (i = 0; (i < count) && (NULL != sctx->lsocks[i]); i++)
       GNUNET_break (0 == GNUNET_NETWORK_socket_close (sctx->lsocks[i]));
     GNUNET_free_non_null (sctx->lsocks);
     sctx->lsocks = NULL;
     return GNUNET_NO;
   }
-
   return GNUNET_YES;
 }
 #endif
@@ -1217,6 +1243,7 @@
  * - REJECT_FROM  (disallow allow connections from specified IPv4 subnets)
  * - REJECT_FROM6 (disallow allow connections from specified IPv6 subnets)
  *
+ * @param sctx
  * @return GNUNET_OK if configuration succeeded
  */
 static int
@@ -1306,7 +1333,7 @@
   }
 #endif
 
-  if ((sctx->lsocks == NULL) &&
+  if ((NULL == sctx->lsocks) &&
       (GNUNET_SYSERR ==
        GNUNET_SERVICE_get_server_addresses (sctx->serviceName, sctx->cfg,
                                             &sctx->addrs, &sctx->addrlens)))
@@ -1330,11 +1357,13 @@
 /**
  * Get the name of the user that'll be used
  * to provide the service.
+ *
+ * @param sctx
+ * @return 
  */
 static char *
 get_user_name (struct GNUNET_SERVICE_Context *sctx)
 {
-
   char *un;
 
   if (GNUNET_OK !=
@@ -1346,6 +1375,10 @@
 
 /**
  * Write PID file.
+ *
+ * @param sctx
+ * @param pid
+ * @return 
  */
 static int
 write_pid_file (struct GNUNET_SERVICE_Context *sctx, pid_t pid)
@@ -1369,7 +1402,7 @@
     /* we get to create a directory -- and claim it
      * as ours! */
     GNUNET_DISK_directory_create (rdir);
-    if ((user != NULL) && (0 < strlen (user)))
+    if ((NULL != user) && (0 < strlen (user)))
       GNUNET_DISK_file_change_owner (rdir, user);
   }
   if (0 != ACCESS (rdir, W_OK | X_OK))
@@ -1382,7 +1415,7 @@
   }
   GNUNET_free (rdir);
   pidfd = FOPEN (pif, "w");
-  if (pidfd == NULL)
+  if (NULL == pidfd)
   {
     LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "fopen", pif);
     GNUNET_free (pif);
@@ -1392,7 +1425,7 @@
   if (0 > FPRINTF (pidfd, "%u", pid))
     LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fprintf", pif);
   GNUNET_break (0 == FCLOSE (pidfd));
-  if ((user != NULL) && (0 < strlen (user)))
+  if ((NULL != user) && (0 < strlen (user)))
     GNUNET_DISK_file_change_owner (pif, user);
   GNUNET_free_non_null (user);
   GNUNET_free (pif);
@@ -1411,12 +1444,17 @@
 {
   struct GNUNET_SERVER_Handle *server = cls;
 
+  // FIXME: we should not unconditionally destroy the server
+  // here (often only stopping 'listening' would be better)
   GNUNET_SERVER_destroy (server);
 }
 
 
 /**
  * Initial task for the service.
+ *
+ * @param cls service context
+ * @param tc unused
  */
 static void
 service_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
@@ -1425,7 +1463,7 @@
   unsigned int i;
 
   GNUNET_RESOLVER_connect (sctx->cfg);
-  if (sctx->lsocks != NULL)
+  if (NULL != sctx->lsocks)
     sctx->server =
         GNUNET_SERVER_create_with_sockets (&check_access, sctx, sctx->lsocks,
                                            sctx->timeout, sctx->require_found);
@@ -1433,12 +1471,12 @@
     sctx->server =
         GNUNET_SERVER_create (&check_access, sctx, sctx->addrs, sctx->addrlens,
                               sctx->timeout, sctx->require_found);
-  if (sctx->server == NULL)
+  if (NULL == sctx->server)
   {
-    if (sctx->addrs != NULL)
+    if (NULL != sctx->addrs)
     {
       i = 0;
-      while (sctx->addrs[i] != NULL)
+      while (NULL != sctx->addrs[i])
       {
         LOG (GNUNET_ERROR_TYPE_INFO, _("Failed to start `%s' at `%s'\n"),
              sctx->serviceName, GNUNET_a2s (sctx->addrs[i], 
sctx->addrlens[i]));
@@ -1458,20 +1496,20 @@
   sctx->my_handlers = GNUNET_malloc (sizeof (defhandlers));
   memcpy (sctx->my_handlers, defhandlers, sizeof (defhandlers));
   i = 0;
-  while ((sctx->my_handlers[i].callback != NULL))
+  while (NULL != sctx->my_handlers[i].callback)
     sctx->my_handlers[i++].callback_cls = sctx;
   GNUNET_SERVER_add_handlers (sctx->server, sctx->my_handlers);
-  if (sctx->ready_confirm_fd != -1)
+  if (-1 != sctx->ready_confirm_fd)
   {
     GNUNET_break (1 == WRITE (sctx->ready_confirm_fd, ".", 1));
     GNUNET_break (0 == CLOSE (sctx->ready_confirm_fd));
     sctx->ready_confirm_fd = -1;
     write_pid_file (sctx, getpid ());
   }
-  if (sctx->addrs != NULL)
+  if (NULL != sctx->addrs)
   {
     i = 0;
-    while (sctx->addrs[i] != NULL)
+    while (NULL != sctx->addrs[i])
     {
       LOG (GNUNET_ERROR_TYPE_INFO, _("Service `%s' runs at %s\n"),
            sctx->serviceName, GNUNET_a2s (sctx->addrs[i], sctx->addrlens[i]));
@@ -1484,6 +1522,9 @@
 
 /**
  * Detach from terminal.
+ *
+ * @param sctx service context
+ * @return
  */
 static int
 detach_terminal (struct GNUNET_SERVICE_Context *sctx)
@@ -1504,7 +1545,7 @@
     LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "fork");
     return GNUNET_SYSERR;
   }
-  if (pid != 0)
+  if (0 != pid)
   {
     /* Parent */
     char c;
@@ -1548,7 +1589,7 @@
   (void) CLOSE (nullfd);
   /* Detach from controlling terminal */
   pid = setsid ();
-  if (pid == -1)
+  if (-1 == pid)
     LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "setsid");
   sctx->ready_confirm_fd = filedes[1];
 #else
@@ -1562,6 +1603,9 @@
 
 /**
  * Set user ID.
+ *
+ * @param sctx service context
+ * @return
  */
 static int
 set_user_id (struct GNUNET_SERVICE_Context *sctx)
@@ -1575,7 +1619,7 @@
 
   errno = 0;
   pws = getpwnam (user);
-  if (pws == NULL)
+  if (NULL == pws)
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Cannot obtain information about user `%s': %s\n"), user,
@@ -1606,13 +1650,15 @@
 
 /**
  * Delete the PID file that was created by our parent.
+ *
+ * @param sctx service context
  */
 static void
 pid_file_delete (struct GNUNET_SERVICE_Context *sctx)
 {
   char *pif = get_pid_file_name (sctx);
 
-  if (pif == NULL)
+  if (NULL == pif)
     return;                     /* no PID file */
   if (0 != UNLINK (pif))
     LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "unlink", pif);
@@ -1687,14 +1733,12 @@
     goto shutdown;
   if (GNUNET_OK != setup_service (&sctx))
     goto shutdown;
-  if ((do_daemonize == 1) && (GNUNET_OK != detach_terminal (&sctx)))
+  if ((1 == do_daemonize) && (GNUNET_OK != detach_terminal (&sctx)))
     HANDLE_ERROR;
   if (GNUNET_OK != set_user_id (&sctx))
     goto shutdown;
-#if DEBUG_SERVICE
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Service `%s' runs with configuration from `%s'\n", serviceName, 
cfg_fn);
-#endif
   if ((GNUNET_OK ==
        GNUNET_CONFIGURATION_get_value_number (sctx.cfg, "TESTING",
                                               "SKEW_OFFSET", &skew_offset)) &&
@@ -1704,21 +1748,19 @@
   {
     clock_offset = skew_offset - skew_variance;
     GNUNET_TIME_set_offset (clock_offset);
-#if DEBUG_SERVICE
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Skewing clock by %dll ms\n", clock_offset);
-#endif
   }
   /* actually run service */
   err = 0;
   GNUNET_SCHEDULER_run (&service_task, &sctx);
 
   /* shutdown */
-  if ((do_daemonize == 1) && (sctx.server != NULL))
+  if ((1 == do_daemonize) && (NULL != sctx.server))
     pid_file_delete (&sctx);
   GNUNET_free_non_null (sctx.my_handlers);
 
 shutdown:
-  if (sctx.ready_confirm_fd != -1)
+  if (-1 != sctx.ready_confirm_fd)
   {
     if (1 != WRITE (sctx.ready_confirm_fd, err ? "I" : "S", 1))
       LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "write");
@@ -1727,8 +1769,8 @@
 
   GNUNET_CONFIGURATION_destroy (cfg);
   i = 0;
-  if (sctx.addrs != NULL)
-    while (sctx.addrs[i] != NULL)
+  if (NULL != sctx.addrs)
+    while (NULL != sctx.addrs[i])
       GNUNET_free (sctx.addrs[i++]);
   GNUNET_free_non_null (sctx.addrs);
   GNUNET_free_non_null (sctx.addrlens);
@@ -1772,7 +1814,7 @@
     GNUNET_SERVICE_stop (sctx);
     return NULL;
   }
-  if (sctx->lsocks != NULL)
+  if (NULL != sctx->lsocks)
     sctx->server =
         GNUNET_SERVER_create_with_sockets (&check_access, sctx, sctx->lsocks,
                                            sctx->timeout, sctx->require_found);
@@ -1795,6 +1837,7 @@
   return sctx;
 }
 
+
 /**
  * Obtain the server used by a service.  Note that the server must NOT
  * be destroyed by the caller.
@@ -1822,10 +1865,10 @@
   if (NULL != sctx->server)
     GNUNET_SERVER_destroy (sctx->server);
   GNUNET_free_non_null (sctx->my_handlers);
-  if (sctx->addrs != NULL)
+  if (NULL != sctx->addrs)
   {
     i = 0;
-    while (sctx->addrs[i] != NULL)
+    while (NULL != sctx->addrs[i])
       GNUNET_free (sctx->addrs[i++]);
     GNUNET_free (sctx->addrs);
   }

Modified: gnunet/src/util/winproc.c
===================================================================
--- gnunet/src/util/winproc.c   2012-04-20 21:51:38 UTC (rev 21056)
+++ gnunet/src/util/winproc.c   2012-04-21 15:16:45 UTC (rev 21057)
@@ -27,7 +27,6 @@
 #include "platform.h"
 #include "gnunet_common.h"
 
-#define DEBUG_WINPROC 0
 
 #ifdef MINGW
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]