gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r11307 - gnunet/src/arm


From: gnunet
Subject: [GNUnet-SVN] r11307 - gnunet/src/arm
Date: Tue, 11 May 2010 15:02:29 +0200

Author: grothoff
Date: 2010-05-11 15:02:29 +0200 (Tue, 11 May 2010)
New Revision: 11307

Modified:
   gnunet/src/arm/mockup-service.c
Log:
fix mockup

Modified: gnunet/src/arm/mockup-service.c
===================================================================
--- gnunet/src/arm/mockup-service.c     2010-05-11 12:56:52 UTC (rev 11306)
+++ gnunet/src/arm/mockup-service.c     2010-05-11 13:02:29 UTC (rev 11307)
@@ -28,14 +28,82 @@
 #include "gnunet_strings_lib.h"
 #include "gnunet_time_lib.h"
 
+static struct GNUNET_SCHEDULER_Handle *sched;
 
+
+static size_t
+transmit_shutdown_ack (void *cls, size_t size, void *buf)
+{
+  struct GNUNET_SERVER_Client *client = cls;
+  struct GNUNET_MessageHeader *msg;
+
+  if (size < sizeof (struct GNUNET_MessageHeader))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                  _("Failed to transmit shutdown ACK.\n"));
+      GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+      return 0;                 /* client disconnected */
+    }
+
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              _("Transmitting shutdown ACK.\n"));
+
+  msg = (struct GNUNET_MessageHeader *) buf;
+  msg->type = htons (GNUNET_MESSAGE_TYPE_SHUTDOWN_ACK);
+  msg->size = htons (sizeof (struct GNUNET_MessageHeader));
+  GNUNET_SERVER_receive_done (client, GNUNET_OK);
+  GNUNET_SERVER_client_drop(client);
+  return sizeof (struct GNUNET_MessageHeader);
+}
+
+/**
+ * Handler for SHUTDOWN message.
+ *
+ * @param cls closure (refers to service)
+ * @param client identification of the client
+ * @param message the actual message
+ */
 static void
+handle_shutdown (void *cls,
+                 struct GNUNET_SERVER_Client *client,
+                 const struct GNUNET_MessageHeader *message)
+{
+  GNUNET_SERVER_client_keep(client);
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              _("Initiating shutdown as requested by client.\n"));
+
+  GNUNET_SERVER_notify_transmit_ready (client,
+                                       sizeof(struct GNUNET_MessageHeader),
+                                       GNUNET_TIME_UNIT_FOREVER_REL,
+                                       &transmit_shutdown_ack, client);
+  GNUNET_SERVER_client_persist_ (client);
+  GNUNET_SCHEDULER_shutdown (sched);
+}
+
+
+/**
+ * Default handlers for all services.  Will be copied and the
+ * "callback_cls" fields will be replaced with the specific service
+ * struct.
+ */
+static const struct GNUNET_SERVER_MessageHandler handlers[] = {
+  {&handle_shutdown, NULL, GNUNET_MESSAGE_TYPE_SHUTDOWN,
+   sizeof (struct GNUNET_MessageHeader)},
+  {NULL, NULL, 0, 0}
+};
+
+
+
+static void
 run (void *cls,
-     struct GNUNET_SCHEDULER_Handle *sched,
+     struct GNUNET_SCHEDULER_Handle *s,
      struct GNUNET_SERVER_Handle *server,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
-       /* Does nothing */
+  sched = s;
+  /* process client requests */
+  GNUNET_SERVER_ignore_shutdown (server, GNUNET_YES);
+  GNUNET_SERVER_add_handlers (server, handlers);
 }
 
 




reply via email to

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