gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r23533 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r23533 - gnunet/src/testbed
Date: Fri, 31 Aug 2012 12:57:19 +0200

Author: harsha
Date: 2012-08-31 12:57:19 +0200 (Fri, 31 Aug 2012)
New Revision: 23533

Added:
   gnunet/src/testbed/gnunet-helper-testbed.c
   gnunet/src/testbed/test_gnunet_helper_testbed.c
Removed:
   gnunet/src/testbed/gnunet-testbed-helper.c
   gnunet/src/testbed/test_gnunet_testbed_helper.c
Modified:
   gnunet/src/testbed/
   gnunet/src/testbed/Makefile.am
   gnunet/src/testbed/testbed_api.c
   gnunet/src/testbed/testbed_helper.h
Log:
renamed gnunet-testbed-helper to gnunet-helper-testbed


Property changes on: gnunet/src/testbed
___________________________________________________________________
Modified: svn:ignore
   - Makefile.in
Makefile
.deps
gnunet-service-testbed
gnunet-testbed-helper
testbed.conf
test_testbed_api_hosts
test_testbed_api
test_testbed_api_2peers
test_testbed_api_operations
test_testbed_api_controllerlink
test_testbed_api_testbed_run
test_gnunet_testbed_helper

   + Makefile.in
Makefile
.deps
gnunet-service-testbed
gnunet-helper-testbed
testbed.conf
test_testbed_api_hosts
test_testbed_api
test_testbed_api_2peers
test_testbed_api_operations
test_testbed_api_controllerlink
test_testbed_api_testbed_run
test_gnunet_helper_testbed


Modified: gnunet/src/testbed/Makefile.am
===================================================================
--- gnunet/src/testbed/Makefile.am      2012-08-31 10:56:48 UTC (rev 23532)
+++ gnunet/src/testbed/Makefile.am      2012-08-31 10:57:19 UTC (rev 23533)
@@ -16,7 +16,7 @@
 
 bin_PROGRAMS = \
   gnunet-service-testbed \
-  gnunet-testbed-helper
+  gnunet-helper-testbed
 
 gnunet_service_testbed_SOURCES = \
   gnunet-service-testbed.c
@@ -31,14 +31,14 @@
 gnunet_service_testbed_DEPENDENCIES = \
   libgnunettestbed.la
 
-gnunet_testbed_helper_SOURCES = \
-  gnunet-testbed-helper.c
-gnunet_testbed_helper_LDADD = $(XLIB) \
+gnunet_helper_testbed_SOURCES = \
+  gnunet-helper-testbed.c
+gnunet_helper_testbed_LDADD = $(XLIB) \
  $(top_builddir)/src/util/libgnunetutil.la \
  $(top_builddir)/src/testing/libgnunettesting.la \
  libgnunettestbed.la \
  $(LTLIBINTL) -lz
-gnunet_testbed_helper_DEPENDENCIES = \
+gnunet_helper_testbed_DEPENDENCIES = \
   gnunet-service-testbed.$(OBJEXT) \
   libgnunettestbed.la
 
@@ -74,7 +74,7 @@
  test_testbed_api \
  test_testbed_api_operations \
  test_testbed_api_testbed_run \
- test_gnunet_testbed_helper
+ test_gnunet_helper_testbed
 
 if ENABLE_TEST_RUN
  TESTS = \
@@ -82,7 +82,7 @@
   test_testbed_api_hosts \
   test_testbed_api_2peers \
   test_testbed_api_operations \
-  test_gnunet_testbed_helper \
+  test_gnunet_helper_testbed \
   test_testbed_api_controllerlink \
   test_testbed_api_testbed_run
 endif
@@ -126,9 +126,9 @@
  $(top_builddir)/src/util/libgnunetutil.la \
  libgnunettestbed.la
 
-test_gnunet_testbed_helper_SOURCES = \
- test_gnunet_testbed_helper.c
-test_gnunet_testbed_helper_LDADD = \
+test_gnunet_helper_testbed_SOURCES = \
+ test_gnunet_helper_testbed.c
+test_gnunet_helper_testbed_LDADD = \
  $(top_builddir)/src/util/libgnunetutil.la \
  libgnunettestbed.la \
  -lz
\ No newline at end of file

Copied: gnunet/src/testbed/gnunet-helper-testbed.c (from rev 23531, 
gnunet/src/testbed/gnunet-testbed-helper.c)
===================================================================
--- gnunet/src/testbed/gnunet-helper-testbed.c                          (rev 0)
+++ gnunet/src/testbed/gnunet-helper-testbed.c  2012-08-31 10:57:19 UTC (rev 
23533)
@@ -0,0 +1,448 @@
+/*
+      This file is part of GNUnet
+      (C) 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
+      by the Free Software Foundation; either version 3, or (at your
+      option) any later version.
+
+      GNUnet is distributed in the hope that it will be useful, but
+      WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      General Public License for more details.
+
+      You should have received a copy of the GNU General Public License
+      along with GNUnet; see the file COPYING.  If not, write to the
+      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+      Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * @file testbed/gnunet-helper-testbed.c
+ * @brief Helper binary that is started from a remote controller to start
+ *          gnunet-service-testbed. This binary also receives configuration
+ *          from the remove controller which is put in a temporary location
+ *          with ports and paths fixed so that gnunet-service-testbed runs
+ *          without any hurdles. This binary also kills the testbed service
+ *          should the connection from the remote controller is dropped
+ * @author Sree Harsha Totakura <address@hidden>
+ */
+
+
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_testing_lib-new.h"
+#include "gnunet_testbed_service.h"
+#include "testbed_helper.h"
+#include "testbed_api.h"
+#include <zlib.h>
+
+/**
+ * Generic logging shortcut
+ */
+#define LOG(kind, ...)                                   \
+  GNUNET_log (kind, __VA_ARGS__)
+
+/**
+ * Debug logging shorthand
+ */
+#define LOG_DEBUG(...)                          \
+  LOG (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__)
+
+
+/**
+ * Context for a single write on a chunk of memory
+ */
+struct WriteContext
+{
+  /**
+   * The data to write
+   */
+  void *data;
+
+  /**
+   * The length of the data
+   */
+  size_t length;
+
+  /**
+   * The current position from where the write operation should begin
+   */
+  size_t pos;
+};
+
+
+/**
+ * Handle to the testing system
+ */
+static struct GNUNET_TESTING_System *test_system;
+
+/**
+ * Our message stream tokenizer
+ */
+struct GNUNET_SERVER_MessageStreamTokenizer *tokenizer;
+
+/**
+ * Disk handle from stdin
+ */
+static struct GNUNET_DISK_FileHandle *stdin_fd;
+
+/**
+ * Disk handle for stdout
+ */
+static struct GNUNET_DISK_FileHandle *stdout_fd;
+
+/**
+ * The process handle to the testbed service
+ */
+static struct GNUNET_OS_Process *testbed;
+
+/**
+ * Task identifier for the read task
+ */
+static GNUNET_SCHEDULER_TaskIdentifier read_task_id;
+
+/**
+ * Task identifier for the write task
+ */
+static GNUNET_SCHEDULER_TaskIdentifier write_task_id;
+
+/**
+ * Are we done reading messages from stdin?
+ */
+static int done_reading;
+
+/**
+ * Result to return in case we fail
+ */
+static int status;
+
+
+/**
+ * Are we shutting down
+ */
+static int in_shutdown;
+
+
+/**
+ * Task to shutting down nicely
+ *
+ * @param cls NULL
+ * @param tc the task context
+ */
+static void
+shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  LOG_DEBUG ("Shutting down\n");
+  in_shutdown = GNUNET_YES;
+  if (GNUNET_SCHEDULER_NO_TASK != read_task_id)
+  {
+    GNUNET_SCHEDULER_cancel (read_task_id);
+    read_task_id = GNUNET_SCHEDULER_NO_TASK;
+  }
+  if (GNUNET_SCHEDULER_NO_TASK != write_task_id)
+  {
+    GNUNET_SCHEDULER_cancel (write_task_id);
+    write_task_id = GNUNET_SCHEDULER_NO_TASK;
+  }
+  if (NULL != stdin_fd)
+    (void) GNUNET_DISK_file_close (stdin_fd);
+  if (NULL != stdout_fd)
+    (void) GNUNET_DISK_file_close (stdout_fd);
+  GNUNET_SERVER_mst_destroy (tokenizer);
+  tokenizer = NULL;
+  if (NULL != testbed)
+  {
+    LOG_DEBUG ("Killing testbed\n");
+    GNUNET_break (0 == GNUNET_OS_process_kill (testbed, SIGTERM));
+    GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (testbed));
+    GNUNET_OS_process_destroy (testbed);
+    testbed = NULL;
+  }
+  if (NULL != test_system)
+  {
+    GNUNET_TESTING_system_destroy (test_system, GNUNET_YES);
+    test_system = NULL;
+  }
+}
+
+
+/**
+ * Task to write to the standard out
+ *
+ * @param cls the WriteContext
+ * @param tc the TaskContext
+ */
+static void
+write_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  struct WriteContext *wc = cls;
+  ssize_t bytes_wrote;
+
+  GNUNET_assert (NULL != wc);
+  write_task_id = GNUNET_SCHEDULER_NO_TASK;
+  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
+  {
+    GNUNET_free (wc->data);
+    GNUNET_free (wc);
+    return;
+  }
+  bytes_wrote =
+      GNUNET_DISK_file_write (stdout_fd, wc->data + wc->pos,
+                              wc->length - wc->pos);
+  GNUNET_assert (GNUNET_SYSERR != bytes_wrote);
+  wc->pos += bytes_wrote;
+  if (wc->pos == wc->length)
+  {
+    GNUNET_free (wc->data);
+    GNUNET_free (wc);
+    return;
+  }
+  write_task_id =
+      GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, stdout_fd,
+                                       &write_task, wc);
+}
+
+
+/**
+ * Functions with this signature are called whenever a
+ * complete message is received by the tokenizer.
+ *
+ * Do not call GNUNET_SERVER_mst_destroy in callback
+ *
+ * @param cls closure
+ * @param client identification of the client
+ * @param message the actual message
+ *
+ * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing
+ */
+static int
+tokenizer_cb (void *cls, void *client,
+              const struct GNUNET_MessageHeader *message)
+{
+  const struct GNUNET_TESTBED_HelperInit *msg;
+  struct GNUNET_TESTBED_HelperReply *reply;
+  struct GNUNET_CONFIGURATION_Handle *cfg;
+  struct WriteContext *wc;
+  char *controller;
+  char *config;
+  char *xconfig;
+  size_t config_size;
+  uLongf ul_config_size;
+  size_t xconfig_size;
+  uint16_t cname_size;
+
+  if ((sizeof (struct GNUNET_TESTBED_HelperInit) >= ntohs (message->size)) ||
+      (GNUNET_MESSAGE_TYPE_TESTBED_HELPER_INIT != ntohs (message->type)))
+  {
+    LOG (GNUNET_ERROR_TYPE_WARNING, "Received unexpected message -- 
exiting\n");
+    goto error;
+  }
+  msg = (const struct GNUNET_TESTBED_HelperInit *) message;
+  cname_size = ntohs (msg->cname_size);
+  controller = (char *) &msg[1];
+  if ('\0' != controller[cname_size])
+  {
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Controller name cannot be empty -- exiting\n");
+    goto error;
+  }
+  ul_config_size = (uLongf) ntohs (msg->config_size);
+  config = GNUNET_malloc (ul_config_size);
+  xconfig_size =
+      ntohs (message->size) - (cname_size + 1 +
+                               sizeof (struct GNUNET_TESTBED_HelperInit));
+  if (Z_OK !=
+      uncompress ((Bytef *) config, &ul_config_size,
+                  (const Bytef *) (controller + cname_size + 1),
+                  (uLongf) xconfig_size))
+  {
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Error while uncompressing config -- exiting\n");
+    GNUNET_free (config);
+    goto error;
+  }
+  cfg = GNUNET_CONFIGURATION_create ();
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_deserialize (cfg, config, ul_config_size, 
GNUNET_NO))
+  {
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Unable to deserialize config -- exiting\n");
+    GNUNET_free (config);
+    goto error;
+  }
+  GNUNET_free (config);
+  test_system = GNUNET_TESTING_system_create ("testbed-helper", controller);
+  GNUNET_assert (NULL != test_system);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_TESTING_configuration_create (test_system, cfg));
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_CONFIGURATION_get_value_string (cfg, "PATHS",
+                                                        "DEFAULTCONFIG",
+                                                        &config));
+  if (GNUNET_OK != GNUNET_CONFIGURATION_write (cfg, config))
+  {
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Unable to write config file: %s -- exiting\n", config);
+    GNUNET_CONFIGURATION_destroy (cfg);
+    GNUNET_free (config);
+    goto error;
+  }
+  LOG_DEBUG ("Staring testbed with config: %s\n", config);
+  testbed =
+      GNUNET_OS_start_process (GNUNET_YES,
+                               GNUNET_OS_INHERIT_STD_ERR /*verbose? */ , NULL,
+                               NULL, "gnunet-service-testbed",
+                               "gnunet-service-testbed", "-c", config, NULL);
+  GNUNET_free (config);
+  if (NULL == testbed)
+  {
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Error staring gnunet-service-testbed -- exiting\n");
+    GNUNET_CONFIGURATION_destroy (cfg);
+    goto error;
+  }
+  done_reading = GNUNET_YES;
+  config = GNUNET_CONFIGURATION_serialize (cfg, &config_size);
+  GNUNET_CONFIGURATION_destroy (cfg);
+  cfg = NULL;
+  xconfig_size =
+      GNUNET_TESTBED_compress_config_ (config, config_size, &xconfig);
+  GNUNET_free (config);
+  wc = GNUNET_malloc (sizeof (struct WriteContext));
+  wc->length = xconfig_size + sizeof (struct GNUNET_TESTBED_HelperReply);
+  reply = GNUNET_realloc (xconfig, wc->length);
+  memmove (&reply[1], reply, xconfig_size);
+  reply->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_HELPER_REPLY);
+  reply->header.size = htons ((uint16_t) wc->length);
+  reply->config_size = htons ((uint16_t) config_size);
+  wc->data = reply;
+  write_task_id =
+      GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, stdout_fd,
+                                       &write_task, wc);
+  return GNUNET_OK;
+
+error:
+  status = GNUNET_SYSERR;
+  GNUNET_SCHEDULER_shutdown ();
+  return GNUNET_SYSERR;
+}
+
+
+/**
+ * Task to read from stdin
+ *
+ * @param cls NULL
+ * @param tc the task context
+ */
+static void
+read_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  char buf[GNUNET_SERVER_MAX_MESSAGE_SIZE];
+  ssize_t sread;
+
+  read_task_id = GNUNET_SCHEDULER_NO_TASK;
+  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
+    return;
+  sread = GNUNET_DISK_file_read (stdin_fd, buf, sizeof (buf));
+  if ((GNUNET_SYSERR == sread) || (0 == sread))
+  {
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  if (GNUNET_YES == done_reading)
+  {
+    /* didn't expect any more data! */
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  LOG_DEBUG ("Read %u bytes\n", sread);
+  if (GNUNET_OK !=
+      GNUNET_SERVER_mst_receive (tokenizer, NULL, buf, sread, GNUNET_NO,
+                                 GNUNET_NO))
+  {
+    GNUNET_break (0);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  read_task_id =                /* No timeout while reading */
+      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, stdin_fd,
+                                      &read_task, NULL);
+}
+
+
+/**
+ * Main function that will be run.
+ *
+ * @param cls closure
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be 
NULL!)
+ * @param cfg configuration
+ */
+static void
+run (void *cls, char *const *args, const char *cfgfile,
+     const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+  LOG_DEBUG ("Starting testbed helper...\n");
+  tokenizer = GNUNET_SERVER_mst_create (&tokenizer_cb, NULL);
+  stdin_fd = GNUNET_DISK_get_handle_from_native (stdin);
+  stdout_fd = GNUNET_DISK_get_handle_from_native (stdout);
+  read_task_id =
+      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, stdin_fd,
+                                      &read_task, NULL);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
+                                NULL);
+}
+
+
+/**
+ * Signal handler called for SIGCHLD.
+ */
+static void
+sighandler_child_death ()
+{
+  if ((NULL != testbed) && (GNUNET_NO == in_shutdown))
+  {
+    LOG_DEBUG ("Child died\n");
+    GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (testbed));
+    GNUNET_OS_process_destroy (testbed);
+    testbed = NULL;
+    GNUNET_SCHEDULER_shutdown ();       /* We are done too! */
+  }
+}
+
+
+/**
+ * Main function
+ *
+ * @param argc the number of command line arguments
+ * @param argv command line arg array
+ * @return return code
+ */
+int
+main (int argc, char **argv)
+{
+  struct GNUNET_SIGNAL_Context *shc_chld;
+
+  struct GNUNET_GETOPT_CommandLineOption options[] = {
+    GNUNET_GETOPT_OPTION_END
+  };
+  int ret;
+
+  status = GNUNET_OK;
+  in_shutdown = GNUNET_NO;
+  shc_chld =
+      GNUNET_SIGNAL_handler_install (GNUNET_SIGCHLD, &sighandler_child_death);
+  ret =
+      GNUNET_PROGRAM_run (argc, argv, "gnunet-helper-testbed",
+                          "Helper for starting gnunet-service-testbed", 
options,
+                          &run, NULL);
+  GNUNET_SIGNAL_handler_uninstall (shc_chld);
+  shc_chld = NULL;
+  if (GNUNET_OK != ret)
+    return 1;
+  return (GNUNET_OK == status) ? 0 : 1;
+}
+
+/* end of gnunet-helper-testbed.c */

Deleted: gnunet/src/testbed/gnunet-testbed-helper.c
===================================================================
--- gnunet/src/testbed/gnunet-testbed-helper.c  2012-08-31 10:56:48 UTC (rev 
23532)
+++ gnunet/src/testbed/gnunet-testbed-helper.c  2012-08-31 10:57:19 UTC (rev 
23533)
@@ -1,448 +0,0 @@
-/*
-      This file is part of GNUnet
-      (C) 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
-      by the Free Software Foundation; either version 3, or (at your
-      option) any later version.
-
-      GNUnet is distributed in the hope that it will be useful, but
-      WITHOUT ANY WARRANTY; without even the implied warranty of
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-      General Public License for more details.
-
-      You should have received a copy of the GNU General Public License
-      along with GNUnet; see the file COPYING.  If not, write to the
-      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-      Boston, MA 02111-1307, USA.
- */
-
-/**
- * @file testbed/gnunet-testbed-helper.c
- * @brief Helper binary that is started from a remote controller to start
- *          gnunet-service-testbed. This binary also receives configuration
- *          from the remove controller which is put in a temporary location
- *          with ports and paths fixed so that gnunet-service-testbed runs
- *          without any hurdles. This binary also kills the testbed service
- *          should the connection from the remote controller is dropped
- * @author Sree Harsha Totakura <address@hidden>
- */
-
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testing_lib-new.h"
-#include "gnunet_testbed_service.h"
-#include "testbed_helper.h"
-#include "testbed_api.h"
-#include <zlib.h>
-
-/**
- * Generic logging shortcut
- */
-#define LOG(kind, ...)                                   \
-  GNUNET_log (kind, __VA_ARGS__)
-
-/**
- * Debug logging shorthand
- */
-#define LOG_DEBUG(...)                          \
-  LOG (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__)
-
-
-/**
- * Context for a single write on a chunk of memory
- */
-struct WriteContext
-{
-  /**
-   * The data to write
-   */
-  void *data;
-
-  /**
-   * The length of the data
-   */
-  size_t length;
-
-  /**
-   * The current position from where the write operation should begin
-   */
-  size_t pos;
-};
-
-
-/**
- * Handle to the testing system
- */
-static struct GNUNET_TESTING_System *test_system;
-
-/**
- * Our message stream tokenizer
- */
-struct GNUNET_SERVER_MessageStreamTokenizer *tokenizer;
-
-/**
- * Disk handle from stdin
- */
-static struct GNUNET_DISK_FileHandle *stdin_fd;
-
-/**
- * Disk handle for stdout
- */
-static struct GNUNET_DISK_FileHandle *stdout_fd;
-
-/**
- * The process handle to the testbed service
- */
-static struct GNUNET_OS_Process *testbed;
-
-/**
- * Task identifier for the read task
- */
-static GNUNET_SCHEDULER_TaskIdentifier read_task_id;
-
-/**
- * Task identifier for the write task
- */
-static GNUNET_SCHEDULER_TaskIdentifier write_task_id;
-
-/**
- * Are we done reading messages from stdin?
- */
-static int done_reading;
-
-/**
- * Result to return in case we fail
- */
-static int status;
-
-
-/**
- * Are we shutting down
- */
-static int in_shutdown;
-
-
-/**
- * Task to shutting down nicely
- *
- * @param cls NULL
- * @param tc the task context
- */
-static void
-shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
-  LOG_DEBUG ("Shutting down\n");
-  in_shutdown = GNUNET_YES;
-  if (GNUNET_SCHEDULER_NO_TASK != read_task_id)
-  {
-    GNUNET_SCHEDULER_cancel (read_task_id);
-    read_task_id = GNUNET_SCHEDULER_NO_TASK;
-  }
-  if (GNUNET_SCHEDULER_NO_TASK != write_task_id)
-  {
-    GNUNET_SCHEDULER_cancel (write_task_id);
-    write_task_id = GNUNET_SCHEDULER_NO_TASK;
-  }
-  if (NULL != stdin_fd)
-    (void) GNUNET_DISK_file_close (stdin_fd);
-  if (NULL != stdout_fd)
-    (void) GNUNET_DISK_file_close (stdout_fd);
-  GNUNET_SERVER_mst_destroy (tokenizer);
-  tokenizer = NULL;
-  if (NULL != testbed)
-  {
-    LOG_DEBUG ("Killing testbed\n");
-    GNUNET_break (0 == GNUNET_OS_process_kill (testbed, SIGTERM));
-    GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (testbed));
-    GNUNET_OS_process_destroy (testbed);
-    testbed = NULL;
-  }
-  if (NULL != test_system)
-  {
-    GNUNET_TESTING_system_destroy (test_system, GNUNET_YES);
-    test_system = NULL;
-  }
-}
-
-
-/**
- * Task to write to the standard out
- *
- * @param cls the WriteContext
- * @param tc the TaskContext
- */
-static void
-write_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
-  struct WriteContext *wc = cls;
-  ssize_t bytes_wrote;
-
-  GNUNET_assert (NULL != wc);
-  write_task_id = GNUNET_SCHEDULER_NO_TASK;
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-  {
-    GNUNET_free (wc->data);
-    GNUNET_free (wc);
-    return;
-  }
-  bytes_wrote =
-      GNUNET_DISK_file_write (stdout_fd, wc->data + wc->pos,
-                              wc->length - wc->pos);
-  GNUNET_assert (GNUNET_SYSERR != bytes_wrote);
-  wc->pos += bytes_wrote;
-  if (wc->pos == wc->length)
-  {
-    GNUNET_free (wc->data);
-    GNUNET_free (wc);
-    return;
-  }
-  write_task_id =
-      GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, stdout_fd,
-                                       &write_task, wc);
-}
-
-
-/**
- * Functions with this signature are called whenever a
- * complete message is received by the tokenizer.
- *
- * Do not call GNUNET_SERVER_mst_destroy in callback
- *
- * @param cls closure
- * @param client identification of the client
- * @param message the actual message
- *
- * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing
- */
-static int
-tokenizer_cb (void *cls, void *client,
-              const struct GNUNET_MessageHeader *message)
-{
-  const struct GNUNET_TESTBED_HelperInit *msg;
-  struct GNUNET_TESTBED_HelperReply *reply;
-  struct GNUNET_CONFIGURATION_Handle *cfg;
-  struct WriteContext *wc;
-  char *controller;
-  char *config;
-  char *xconfig;
-  size_t config_size;
-  uLongf ul_config_size;
-  size_t xconfig_size;
-  uint16_t cname_size;
-
-  if ((sizeof (struct GNUNET_TESTBED_HelperInit) >= ntohs (message->size)) ||
-      (GNUNET_MESSAGE_TYPE_TESTBED_HELPER_INIT != ntohs (message->type)))
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING, "Received unexpected message -- 
exiting\n");
-    goto error;
-  }
-  msg = (const struct GNUNET_TESTBED_HelperInit *) message;
-  cname_size = ntohs (msg->cname_size);
-  controller = (char *) &msg[1];
-  if ('\0' != controller[cname_size])
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Controller name cannot be empty -- exiting\n");
-    goto error;
-  }
-  ul_config_size = (uLongf) ntohs (msg->config_size);
-  config = GNUNET_malloc (ul_config_size);
-  xconfig_size =
-      ntohs (message->size) - (cname_size + 1 +
-                               sizeof (struct GNUNET_TESTBED_HelperInit));
-  if (Z_OK !=
-      uncompress ((Bytef *) config, &ul_config_size,
-                  (const Bytef *) (controller + cname_size + 1),
-                  (uLongf) xconfig_size))
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Error while uncompressing config -- exiting\n");
-    GNUNET_free (config);
-    goto error;
-  }
-  cfg = GNUNET_CONFIGURATION_create ();
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_deserialize (cfg, config, ul_config_size, 
GNUNET_NO))
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Unable to deserialize config -- exiting\n");
-    GNUNET_free (config);
-    goto error;
-  }
-  GNUNET_free (config);
-  test_system = GNUNET_TESTING_system_create ("testbed-helper", controller);
-  GNUNET_assert (NULL != test_system);
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_TESTING_configuration_create (test_system, cfg));
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_CONFIGURATION_get_value_string (cfg, "PATHS",
-                                                        "DEFAULTCONFIG",
-                                                        &config));
-  if (GNUNET_OK != GNUNET_CONFIGURATION_write (cfg, config))
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Unable to write config file: %s -- exiting\n", config);
-    GNUNET_CONFIGURATION_destroy (cfg);
-    GNUNET_free (config);
-    goto error;
-  }
-  LOG_DEBUG ("Staring testbed with config: %s\n", config);
-  testbed =
-      GNUNET_OS_start_process (GNUNET_YES,
-                               GNUNET_OS_INHERIT_STD_ERR /*verbose? */ , NULL,
-                               NULL, "gnunet-service-testbed",
-                               "gnunet-service-testbed", "-c", config, NULL);
-  GNUNET_free (config);
-  if (NULL == testbed)
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Error staring gnunet-service-testbed -- exiting\n");
-    GNUNET_CONFIGURATION_destroy (cfg);
-    goto error;
-  }
-  done_reading = GNUNET_YES;
-  config = GNUNET_CONFIGURATION_serialize (cfg, &config_size);
-  GNUNET_CONFIGURATION_destroy (cfg);
-  cfg = NULL;
-  xconfig_size =
-      GNUNET_TESTBED_compress_config_ (config, config_size, &xconfig);
-  GNUNET_free (config);
-  wc = GNUNET_malloc (sizeof (struct WriteContext));
-  wc->length = xconfig_size + sizeof (struct GNUNET_TESTBED_HelperReply);
-  reply = GNUNET_realloc (xconfig, wc->length);
-  memmove (&reply[1], reply, xconfig_size);
-  reply->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_HELPER_REPLY);
-  reply->header.size = htons ((uint16_t) wc->length);
-  reply->config_size = htons ((uint16_t) config_size);
-  wc->data = reply;
-  write_task_id =
-      GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, stdout_fd,
-                                       &write_task, wc);
-  return GNUNET_OK;
-
-error:
-  status = GNUNET_SYSERR;
-  GNUNET_SCHEDULER_shutdown ();
-  return GNUNET_SYSERR;
-}
-
-
-/**
- * Task to read from stdin
- *
- * @param cls NULL
- * @param tc the task context
- */
-static void
-read_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
-  char buf[GNUNET_SERVER_MAX_MESSAGE_SIZE];
-  ssize_t sread;
-
-  read_task_id = GNUNET_SCHEDULER_NO_TASK;
-  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
-    return;
-  sread = GNUNET_DISK_file_read (stdin_fd, buf, sizeof (buf));
-  if ((GNUNET_SYSERR == sread) || (0 == sread))
-  {
-    GNUNET_SCHEDULER_shutdown ();
-    return;
-  }
-  if (GNUNET_YES == done_reading)
-  {
-    /* didn't expect any more data! */
-    GNUNET_SCHEDULER_shutdown ();
-    return;
-  }
-  LOG_DEBUG ("Read %u bytes\n", sread);
-  if (GNUNET_OK !=
-      GNUNET_SERVER_mst_receive (tokenizer, NULL, buf, sread, GNUNET_NO,
-                                 GNUNET_NO))
-  {
-    GNUNET_break (0);
-    GNUNET_SCHEDULER_shutdown ();
-    return;
-  }
-  read_task_id =                /* No timeout while reading */
-      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, stdin_fd,
-                                      &read_task, NULL);
-}
-
-
-/**
- * Main function that will be run.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be 
NULL!)
- * @param cfg configuration
- */
-static void
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  LOG_DEBUG ("Starting testbed helper...\n");
-  tokenizer = GNUNET_SERVER_mst_create (&tokenizer_cb, NULL);
-  stdin_fd = GNUNET_DISK_get_handle_from_native (stdin);
-  stdout_fd = GNUNET_DISK_get_handle_from_native (stdout);
-  read_task_id =
-      GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, stdin_fd,
-                                      &read_task, NULL);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                NULL);
-}
-
-
-/**
- * Signal handler called for SIGCHLD.
- */
-static void
-sighandler_child_death ()
-{
-  if ((NULL != testbed) && (GNUNET_NO == in_shutdown))
-  {
-    LOG_DEBUG ("Child died\n");
-    GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (testbed));
-    GNUNET_OS_process_destroy (testbed);
-    testbed = NULL;
-    GNUNET_SCHEDULER_shutdown ();       /* We are done too! */
-  }
-}
-
-
-/**
- * Main function
- *
- * @param argc the number of command line arguments
- * @param argv command line arg array
- * @return return code
- */
-int
-main (int argc, char **argv)
-{
-  struct GNUNET_SIGNAL_Context *shc_chld;
-
-  struct GNUNET_GETOPT_CommandLineOption options[] = {
-    GNUNET_GETOPT_OPTION_END
-  };
-  int ret;
-
-  status = GNUNET_OK;
-  in_shutdown = GNUNET_NO;
-  shc_chld =
-      GNUNET_SIGNAL_handler_install (GNUNET_SIGCHLD, &sighandler_child_death);
-  ret =
-      GNUNET_PROGRAM_run (argc, argv, "gnunet-testbed-helper",
-                          "Helper for starting gnunet-service-testbed", 
options,
-                          &run, NULL);
-  GNUNET_SIGNAL_handler_uninstall (shc_chld);
-  shc_chld = NULL;
-  if (GNUNET_OK != ret)
-    return 1;
-  return (GNUNET_OK == status) ? 0 : 1;
-}
-
-/* end of gnunet-testbed-helper.c */

Copied: gnunet/src/testbed/test_gnunet_helper_testbed.c (from rev 23531, 
gnunet/src/testbed/test_gnunet_testbed_helper.c)
===================================================================
--- gnunet/src/testbed/test_gnunet_helper_testbed.c                             
(rev 0)
+++ gnunet/src/testbed/test_gnunet_helper_testbed.c     2012-08-31 10:57:19 UTC 
(rev 23533)
@@ -0,0 +1,249 @@
+/*
+      This file is part of GNUnet
+      (C) 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
+      by the Free Software Foundation; either version 3, or (at your
+      option) any later version.
+
+      GNUnet is distributed in the hope that it will be useful, but
+      WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      General Public License for more details.
+
+      You should have received a copy of the GNU General Public License
+      along with GNUnet; see the file COPYING.  If not, write to the
+      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+      Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * @file testbed/test_gnunet_helper_testbed.c
+ * @brief Testcase for testing gnunet-helper-testbed.c
+ * @author Sree Harsha Totakura <address@hidden>
+ */
+
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_testbed_service.h"
+#include <zlib.h>
+
+#include "testbed_api.h"
+#include "testbed_helper.h"
+#include "testbed_api_hosts.h"
+
+/**
+ * Generic logging shortcut
+ */
+#define LOG(kind,...)                          \
+  GNUNET_log (kind, __VA_ARGS__)
+
+
+/**
+ * Handle to the helper process
+ */
+static struct GNUNET_HELPER_Handle *helper;
+
+/**
+ * Message to helper
+ */
+static struct GNUNET_TESTBED_HelperInit *msg;
+
+/**
+ * Message send handle
+ */
+static struct GNUNET_HELPER_SendHandle *shandle;
+
+/**
+ * Abort task identifier
+ */
+static GNUNET_SCHEDULER_TaskIdentifier abort_task;
+
+/**
+ * Shutdown task identifier
+ */
+static GNUNET_SCHEDULER_TaskIdentifier shutdown_task;
+
+/**
+ * Configuratin handler
+ */
+static struct GNUNET_CONFIGURATION_Handle *cfg;
+
+/**
+ * Global testing status
+ */
+static int result;
+
+
+/**
+ * Shutdown nicely
+ *
+ * @param cls NULL
+ * @param tc the task context
+ */
+static void
+do_shutdown (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  if (GNUNET_SCHEDULER_NO_TASK != abort_task)
+    GNUNET_SCHEDULER_cancel (abort_task);
+  GNUNET_HELPER_stop (helper);
+  GNUNET_free_non_null (msg);
+  if (NULL != cfg)
+    GNUNET_CONFIGURATION_destroy (cfg);
+}
+
+
+/**
+ * abort task to run on test timed out
+ *
+ * @param cls NULL
+ * @param tc the task context
+ */
+static void
+do_abort (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  abort_task = GNUNET_SCHEDULER_NO_TASK;
+  LOG (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n");
+  result = GNUNET_SYSERR;
+  if (NULL != shandle)
+    GNUNET_HELPER_send_cancel (shandle);
+  if (GNUNET_SCHEDULER_NO_TASK == shutdown_task)
+    shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+}
+
+
+/**
+ * Continuation function.
+ *
+ * @param cls closure
+ * @param result GNUNET_OK on success,
+ *               GNUNET_NO if helper process died
+ *               GNUNET_SYSERR during GNUNET_HELPER_stop
+ */
+static void
+cont_cb (void *cls, int result)
+{
+  shandle = NULL;
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Message sent\n");
+  GNUNET_assert (GNUNET_OK == result);
+}
+
+
+/**
+ * Functions with this signature are called whenever a
+ * complete message is received by the tokenizer.
+ *
+ * Do not call GNUNET_SERVER_mst_destroy in callback
+ *
+ * @param cls closure
+ * @param client identification of the client
+ * @param message the actual message
+ *
+ * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing
+ */
+static int
+mst_cb (void *cls, void *client, const struct GNUNET_MessageHeader *message)
+{
+  const struct GNUNET_TESTBED_HelperReply *msg;
+  char *config;
+  uLongf config_size;
+  uLongf xconfig_size;
+
+  msg = (const struct GNUNET_TESTBED_HelperReply *) message;
+  config_size = 0;
+  xconfig_size = 0;
+  GNUNET_assert (sizeof (struct GNUNET_TESTBED_HelperReply) <
+                 ntohs (msg->header.size));
+  GNUNET_assert (GNUNET_MESSAGE_TYPE_TESTBED_HELPER_REPLY ==
+                 ntohs (msg->header.type));
+  config_size = (uLongf) ntohs (msg->config_size);
+  xconfig_size =
+      (uLongf) (ntohs (msg->header.size) -
+                sizeof (struct GNUNET_TESTBED_HelperReply));
+  config = GNUNET_malloc (config_size);
+  GNUNET_assert (Z_OK ==
+                 uncompress ((Bytef *) config, &config_size,
+                             (const Bytef *) &msg[1], xconfig_size));
+  GNUNET_free (config);
+  if (GNUNET_SCHEDULER_NO_TASK == shutdown_task)
+    shutdown_task =
+        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
+                                      (GNUNET_TIME_UNIT_SECONDS, 1),
+                                      &do_shutdown, NULL);
+  return GNUNET_OK;
+}
+
+
+/**
+ * Callback that will be called when the helper process dies. This is not 
called
+ * when the helper process is stoped using GNUNET_HELPER_stop()
+ *
+ * @param cls the closure from GNUNET_HELPER_start()
+ */
+static void
+exp_cb (void *cls)
+{
+  helper = NULL;
+  result = GNUNET_SYSERR;
+}
+
+
+/**
+ * Main function that will be run.
+ *
+ * @param cls closure
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be 
NULL!)
+ * @param cfg configuration
+ */
+static void
+run (void *cls, char *const *args, const char *cfgfile,
+     const struct GNUNET_CONFIGURATION_Handle *cfg2)
+{
+  static char *const binary_argv[] = {
+    "gnunet-helper-testbed",
+    NULL
+  };
+  const char *controller_name = "127.0.0.1";
+
+  helper =
+      GNUNET_HELPER_start (GNUNET_YES, "gnunet-helper-testbed", binary_argv,
+                           &mst_cb, &exp_cb, NULL);
+  GNUNET_assert (NULL != helper);
+  cfg = GNUNET_CONFIGURATION_dup (cfg2);
+  msg = GNUNET_TESTBED_create_helper_init_msg_ (controller_name, cfg);
+  shandle =
+      GNUNET_HELPER_send (helper, &msg->header, GNUNET_NO, &cont_cb, NULL);
+  GNUNET_assert (NULL != shandle);
+  abort_task =
+      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
+                                    (GNUNET_TIME_UNIT_MINUTES, 1), &do_abort,
+                                    NULL);
+}
+
+
+/**
+ * Main function
+ *
+ * @param argc the number of command line arguments
+ * @param argv command line arg array
+ * @return return code
+ */
+int
+main (int argc, char **argv)
+{
+  struct GNUNET_GETOPT_CommandLineOption options[] = {
+    GNUNET_GETOPT_OPTION_END
+  };
+
+  result = GNUNET_OK;
+  if (GNUNET_OK !=
+      GNUNET_PROGRAM_run (argc, argv, "test_gnunet_helper_testbed",
+                          "Testcase for testing gnunet-helper-testbed.c",
+                          options, &run, NULL))
+    return 1;
+  return (GNUNET_OK == result) ? 0 : 1;
+}
+
+/* end of test_gnunet_helper_testbed.c */

Deleted: gnunet/src/testbed/test_gnunet_testbed_helper.c
===================================================================
--- gnunet/src/testbed/test_gnunet_testbed_helper.c     2012-08-31 10:56:48 UTC 
(rev 23532)
+++ gnunet/src/testbed/test_gnunet_testbed_helper.c     2012-08-31 10:57:19 UTC 
(rev 23533)
@@ -1,249 +0,0 @@
-/*
-      This file is part of GNUnet
-      (C) 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
-      by the Free Software Foundation; either version 3, or (at your
-      option) any later version.
-
-      GNUnet is distributed in the hope that it will be useful, but
-      WITHOUT ANY WARRANTY; without even the implied warranty of
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-      General Public License for more details.
-
-      You should have received a copy of the GNU General Public License
-      along with GNUnet; see the file COPYING.  If not, write to the
-      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-      Boston, MA 02111-1307, USA.
- */
-
-/**
- * @file testbed/test_gnunet_testbed_helper.c
- * @brief Testcase for testing gnunet-testbed-helper.c
- * @author Sree Harsha Totakura <address@hidden>
- */
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testbed_service.h"
-#include <zlib.h>
-
-#include "testbed_api.h"
-#include "testbed_helper.h"
-#include "testbed_api_hosts.h"
-
-/**
- * Generic logging shortcut
- */
-#define LOG(kind,...)                          \
-  GNUNET_log (kind, __VA_ARGS__)
-
-
-/**
- * Handle to the helper process
- */
-static struct GNUNET_HELPER_Handle *helper;
-
-/**
- * Message to helper
- */
-static struct GNUNET_TESTBED_HelperInit *msg;
-
-/**
- * Message send handle
- */
-static struct GNUNET_HELPER_SendHandle *shandle;
-
-/**
- * Abort task identifier
- */
-static GNUNET_SCHEDULER_TaskIdentifier abort_task;
-
-/**
- * Shutdown task identifier
- */
-static GNUNET_SCHEDULER_TaskIdentifier shutdown_task;
-
-/**
- * Configuratin handler
- */
-static struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * Global testing status
- */
-static int result;
-
-
-/**
- * Shutdown nicely
- *
- * @param cls NULL
- * @param tc the task context
- */
-static void
-do_shutdown (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
-  if (GNUNET_SCHEDULER_NO_TASK != abort_task)
-    GNUNET_SCHEDULER_cancel (abort_task);
-  GNUNET_HELPER_stop (helper);
-  GNUNET_free_non_null (msg);
-  if (NULL != cfg)
-    GNUNET_CONFIGURATION_destroy (cfg);
-}
-
-
-/**
- * abort task to run on test timed out
- *
- * @param cls NULL
- * @param tc the task context
- */
-static void
-do_abort (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
-  abort_task = GNUNET_SCHEDULER_NO_TASK;
-  LOG (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n");
-  result = GNUNET_SYSERR;
-  if (NULL != shandle)
-    GNUNET_HELPER_send_cancel (shandle);
-  if (GNUNET_SCHEDULER_NO_TASK == shutdown_task)
-    shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
-}
-
-
-/**
- * Continuation function.
- *
- * @param cls closure
- * @param result GNUNET_OK on success,
- *               GNUNET_NO if helper process died
- *               GNUNET_SYSERR during GNUNET_HELPER_stop
- */
-static void
-cont_cb (void *cls, int result)
-{
-  shandle = NULL;
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Message sent\n");
-  GNUNET_assert (GNUNET_OK == result);
-}
-
-
-/**
- * Functions with this signature are called whenever a
- * complete message is received by the tokenizer.
- *
- * Do not call GNUNET_SERVER_mst_destroy in callback
- *
- * @param cls closure
- * @param client identification of the client
- * @param message the actual message
- *
- * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing
- */
-static int
-mst_cb (void *cls, void *client, const struct GNUNET_MessageHeader *message)
-{
-  const struct GNUNET_TESTBED_HelperReply *msg;
-  char *config;
-  uLongf config_size;
-  uLongf xconfig_size;
-
-  msg = (const struct GNUNET_TESTBED_HelperReply *) message;
-  config_size = 0;
-  xconfig_size = 0;
-  GNUNET_assert (sizeof (struct GNUNET_TESTBED_HelperReply) <
-                 ntohs (msg->header.size));
-  GNUNET_assert (GNUNET_MESSAGE_TYPE_TESTBED_HELPER_REPLY ==
-                 ntohs (msg->header.type));
-  config_size = (uLongf) ntohs (msg->config_size);
-  xconfig_size =
-      (uLongf) (ntohs (msg->header.size) -
-                sizeof (struct GNUNET_TESTBED_HelperReply));
-  config = GNUNET_malloc (config_size);
-  GNUNET_assert (Z_OK ==
-                 uncompress ((Bytef *) config, &config_size,
-                             (const Bytef *) &msg[1], xconfig_size));
-  GNUNET_free (config);
-  if (GNUNET_SCHEDULER_NO_TASK == shutdown_task)
-    shutdown_task =
-        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                      (GNUNET_TIME_UNIT_SECONDS, 1),
-                                      &do_shutdown, NULL);
-  return GNUNET_OK;
-}
-
-
-/**
- * Callback that will be called when the helper process dies. This is not 
called
- * when the helper process is stoped using GNUNET_HELPER_stop()
- *
- * @param cls the closure from GNUNET_HELPER_start()
- */
-static void
-exp_cb (void *cls)
-{
-  helper = NULL;
-  result = GNUNET_SYSERR;
-}
-
-
-/**
- * Main function that will be run.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be 
NULL!)
- * @param cfg configuration
- */
-static void
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg2)
-{
-  static char *const binary_argv[] = {
-    "gnunet-testbed-helper",
-    NULL
-  };
-  const char *controller_name = "127.0.0.1";
-
-  helper =
-      GNUNET_HELPER_start (GNUNET_YES, "gnunet-testbed-helper", binary_argv,
-                           &mst_cb, &exp_cb, NULL);
-  GNUNET_assert (NULL != helper);
-  cfg = GNUNET_CONFIGURATION_dup (cfg2);
-  msg = GNUNET_TESTBED_create_helper_init_msg_ (controller_name, cfg);
-  shandle =
-      GNUNET_HELPER_send (helper, &msg->header, GNUNET_NO, &cont_cb, NULL);
-  GNUNET_assert (NULL != shandle);
-  abort_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                    (GNUNET_TIME_UNIT_MINUTES, 1), &do_abort,
-                                    NULL);
-}
-
-
-/**
- * Main function
- *
- * @param argc the number of command line arguments
- * @param argv command line arg array
- * @return return code
- */
-int
-main (int argc, char **argv)
-{
-  struct GNUNET_GETOPT_CommandLineOption options[] = {
-    GNUNET_GETOPT_OPTION_END
-  };
-
-  result = GNUNET_OK;
-  if (GNUNET_OK !=
-      GNUNET_PROGRAM_run (argc, argv, "test_gnunet_testbed_helper",
-                          "Testcase for testing gnunet-testbed-helper.c",
-                          options, &run, NULL))
-    return 1;
-  return (GNUNET_OK == result) ? 0 : 1;
-}
-
-/* end of test_gnunet_testbed_helper.c */

Modified: gnunet/src/testbed/testbed_api.c
===================================================================
--- gnunet/src/testbed/testbed_api.c    2012-08-31 10:56:48 UTC (rev 23532)
+++ gnunet/src/testbed/testbed_api.c    2012-08-31 10:57:19 UTC (rev 23533)
@@ -68,6 +68,12 @@
 
 
 /**
+ * Testbed Helper binary name
+ */
+#define HELPER_TESTBED_BINARY "gnunet-helper-testbed"
+
+
+/**
  * The message queue for sending messages to the controller service
  */
 struct MessageQueue
@@ -1143,11 +1149,11 @@
   if ((NULL == host) || (0 == GNUNET_TESTBED_host_get_id_ (host)))
   {
     char *const binary_argv[] = {
-      "gnunet-testbed-helper", NULL
+      HELPER_TESTBED_BINARY, NULL
     };
 
     cp->helper =
-        GNUNET_HELPER_start (GNUNET_YES, "gnunet-testbed-helper", binary_argv,
+        GNUNET_HELPER_start (GNUNET_YES, HELPER_TESTBED_BINARY, binary_argv,
                              &helper_mst, &helper_exp_cb, cp);
   }
   else
@@ -1172,7 +1178,7 @@
     remote_args[argp++] = "-o";
     remote_args[argp++] = "BatchMode=yes";
     remote_args[argp++] = cp->dst;
-    remote_args[argp++] = "gnunet-testbed-helper";
+    remote_args[argp++] = HELPER_TESTBED_BINARY;
     remote_args[argp++] = NULL;
     GNUNET_assert (argp == 8);
     cp->helper =

Modified: gnunet/src/testbed/testbed_helper.h
===================================================================
--- gnunet/src/testbed/testbed_helper.h 2012-08-31 10:56:48 UTC (rev 23532)
+++ gnunet/src/testbed/testbed_helper.h 2012-08-31 10:57:19 UTC (rev 23533)
@@ -21,7 +21,7 @@
 /**
  * @file testbed/testbed_helper.h
  * @brief Message formats for communication between testbed api and
- *          gnunet-testbed-helper process
+ *          gnunet-helper-testbed process
  * @author Sree Harsha Totakura <address@hidden>
  */
 
@@ -29,7 +29,7 @@
 #define TESTBED_HELPER_H
 
 /**
- * Initialization message for gnunet-testbed-helper to start testbed service
+ * Initialization message for gnunet-helper-testbed to start testbed service
  */
 struct GNUNET_TESTBED_HelperInit
 {




reply via email to

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