handling add host
authorSree Harsha Totakura <totakura@in.tum.de>
Thu, 14 Jun 2012 08:09:25 +0000 (08:09 +0000)
committerSree Harsha Totakura <totakura@in.tum.de>
Thu, 14 Jun 2012 08:09:25 +0000 (08:09 +0000)
src/testbed/Makefile.am
src/testbed/gnunet-service-testbed.c

index 3f613b0d6c3b5f1132bbb7bd6ed078f741d53ff4..cfd182c34d46414c8a5557603ae0c7bd7ba8212c 100644 (file)
@@ -21,6 +21,7 @@ gnunet_service_testbed_SOURCES = \
   gnunet-service-testbed.c
 gnunet_service_testbed_LDADD = $(XLIB) \
   $(top_builddir)/src/util/libgnunetutil.la \
+ $(top_builddir)/src/testbed/libgnunettestbed.la \
   $(LTLIBINTL)
 
 dist_pkgcfg_DATA = \
index 24f5b9b1586c0758d19621447c0681f8df6faafc..db8c7cff1dce42567e4ff5a1ef7ed32c1345ab2d 100644 (file)
@@ -29,7 +29,7 @@
 #include "gnunet_server_lib.h"
 
 #include "testbed.h"
-
+#include "gnunet_testbed_service.h"
 
 #define LOG(kind,...)                           \
   GNUNET_log (kind, __VA_ARGS__)
@@ -97,6 +97,50 @@ handle_init (void *cls,
 }
 
 
+/**
+ * Message handler for GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST messages
+ *
+ * @param cls NULL
+ * @param client identification of the client
+ * @param message the actual message
+ */
+static void 
+handle_addhost (void *cls,
+                struct GNUNET_SERVER_Client *client,
+                const struct GNUNET_MessageHeader *message)
+{
+  struct GNUNET_TESTBED_Host *host;
+  const struct GNUNET_TESTBED_AddHostMessage *msg;
+  char *username;
+  char *hostname;
+  uint16_t username_length;
+  uint16_t hostname_length;
+  
+  msg = (const struct GNUNET_TESTBED_AddHostMessage *) message;
+  username_length = ntohs (msg->user_name_length);
+  username_length = (0 == username_length) ? 0 : username_length + 1;
+  username = (char *) &(msg[1]);
+  hostname = username + username_length;
+  if (ntohs (message->size) <=
+      (sizeof (struct GNUNET_TESTBED_AddHostMessage) + username_length))
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  hostname_length = ntohs (message->size)
+    - (sizeof (struct GNUNET_TESTBED_AddHostMessage) + username_length);
+  if (strlen (hostname) != hostname_length)
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  host = GNUNET_TESTBED_host_create (hostname, username, ntohs
+                                     (msg->ssh_port));
+  /* Store host in a hashmap? But the host_id will be different */
+}
+
 /**
  * Task to clean up and shutdown nicely
  *
@@ -150,6 +194,7 @@ testbed_run (void *cls,
     {
       {&handle_init, NULL, GNUNET_MESSAGE_TYPE_TESTBED_INIT,
        sizeof (struct GNUNET_TESTBED_Message)},
+      {&handle_addhost, NULL, GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST, 0},
       {NULL}
     };