Link libgnunetblockgroup to libgnunetblock
[oweals/gnunet.git] / src / util / service_new.c
index 8d654c0cbda81591f9edcac1255636520f5df0d7..8371f7703cac7af81ddd0b25a5d78091cc560df4 100644 (file)
 #endif
 
 
-#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
+#define LOG(kind,...) GNUNET_log_from (kind, "util-service", __VA_ARGS__)
 
-#define LOG_STRERROR(kind,syscall) GNUNET_log_from_strerror (kind, "util", syscall)
+#define LOG_STRERROR(kind,syscall) GNUNET_log_from_strerror (kind, "util-service", syscall)
 
-#define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file (kind, "util", syscall, filename)
+#define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file (kind, "util-service", syscall, filename)
 
 
 /**
@@ -519,7 +519,7 @@ add_unixpath (struct sockaddr **saddrs,
   if (GNUNET_YES == abstract)
     un->sun_path[0] = '\0';
 #endif
-#if HAVE_SOCKADDR_IN_SIN_LEN
+#if HAVE_SOCKADDR_UN_SUN_LEN
   un->sun_len = (u_char) sizeof (struct sockaddr_un);
 #endif
   *saddrs = (struct sockaddr *) un;
@@ -1624,20 +1624,10 @@ GNUNET_SERVICE_starT (const char *service_name,
   sh->connect_cb = connect_cb;
   sh->disconnect_cb = disconnect_cb;
   sh->cb_cls = cls;
-  if (NULL != handlers)
-  {
-    unsigned int i;
-
-    for (i=0;NULL != handlers[i].cb; i++) ;
-    sh->handlers = GNUNET_new_array (i + 1,
-                                    struct GNUNET_MQ_MessageHandler);
-    GNUNET_memcpy (sh->handlers,
-                   handlers,
-                   i * sizeof (struct GNUNET_MQ_MessageHandler));
-  }
+  sh->handlers = GNUNET_MQ_copy_handlers (handlers);
   if (GNUNET_OK != setup_service (sh))
   {
-    GNUNET_free (sh->handlers);
+    GNUNET_free_non_null (sh->handlers);
     GNUNET_free (sh);
     return NULL;
   }
@@ -1660,7 +1650,7 @@ GNUNET_SERVICE_stoP (struct GNUNET_SERVICE_Handle *srv)
   while (NULL != (client = srv->clients_head))
     GNUNET_SERVICE_client_drop (client);
   teardown_service (srv);
-  GNUNET_free (srv->handlers);
+  GNUNET_free_non_null (srv->handlers);
   GNUNET_free (srv);
 }
 
@@ -1762,17 +1752,7 @@ GNUNET_SERVICE_ruN_ (int argc,
   sh.connect_cb = connect_cb;
   sh.disconnect_cb = disconnect_cb;
   sh.cb_cls = cls;
-  if (NULL != handlers)
-  {
-    unsigned int i;
-
-    for (i=0;NULL != handlers[i].cb; i++) ;
-    sh.handlers = GNUNET_new_array (i + 1,
-                                    struct GNUNET_MQ_MessageHandler);
-    GNUNET_memcpy (sh.handlers,
-                   handlers,
-                   i * sizeof (struct GNUNET_MQ_MessageHandler));
-  }
+  sh.handlers = GNUNET_MQ_copy_handlers (handlers);
   sh.service_name = service_name;
 
   /* setup subsystems */
@@ -1903,7 +1883,7 @@ shutdown:
   }
 #endif
   teardown_service (&sh);
-  GNUNET_free (sh.handlers);
+  GNUNET_free_non_null (sh.handlers);
   GNUNET_SPEEDUP_stop_ ();
   GNUNET_CONFIGURATION_destroy (cfg);
   GNUNET_free_non_null (logfile);
@@ -1989,6 +1969,7 @@ do_send (void *cls)
   client->msg_pos += ret;
   if (left > ret)
   {
+    GNUNET_assert (NULL == client->drop_task);
     client->send_task
       = GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_UNIT_FOREVER_REL,
                                        client->sock,
@@ -2015,7 +1996,14 @@ service_mq_send (struct GNUNET_MQ_Handle *mq,
 {
   struct GNUNET_SERVICE_Client *client = impl_state;
 
+  if (NULL != client->drop_task)
+    return; /* we're going down right now, do not try to send */
   GNUNET_assert (NULL == client->send_task);
+
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "Sending message of type %u and size %u to client\n",
+       ntohs (msg->type), ntohs (msg->size));
+
   client->msg = msg;
   client->msg_pos = 0;
   client->send_task
@@ -2114,6 +2102,10 @@ service_client_mst_cb (void *cls,
 {
   struct GNUNET_SERVICE_Client *client = cls;
 
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "Received message of type %u and size %u from client\n",
+       ntohs (message->type), ntohs (message->size));
+
   GNUNET_assert (GNUNET_NO == client->needs_continue);
   client->needs_continue = GNUNET_YES;
   client->warn_type = ntohs (message->type);
@@ -2484,6 +2476,10 @@ finish_client_drop (void *cls)
   struct GNUNET_SERVICE_Client *c = cls;
   struct GNUNET_SERVICE_Handle *sh = c->sh;
 
+  c->drop_task = NULL;
+  GNUNET_assert (NULL == c->send_task);
+  GNUNET_assert (NULL == c->recv_task);
+  GNUNET_assert (NULL == c->warn_task);
   GNUNET_MST_destroy (c->mst);
   GNUNET_MQ_destroy (c->mq);
   if (GNUNET_NO == c->persist)
@@ -2520,7 +2516,7 @@ GNUNET_SERVICE_client_drop (struct GNUNET_SERVICE_Client *c)
   if (NULL != c->drop_task)
   {
     /* asked to drop twice! */
-    GNUNET_break (0);
+    GNUNET_assert (0);
     return;
   }
   GNUNET_CONTAINER_DLL_remove (sh->clients_head,