From ec4c9e91d2174b068ac96018280407506429bc5e Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Thu, 14 Jun 2012 08:09:25 +0000 Subject: [PATCH] handling add host --- src/testbed/Makefile.am | 1 + src/testbed/gnunet-service-testbed.c | 47 +++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/testbed/Makefile.am b/src/testbed/Makefile.am index 3f613b0d6..cfd182c34 100644 --- a/src/testbed/Makefile.am +++ b/src/testbed/Makefile.am @@ -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 = \ diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c index 24f5b9b15..db8c7cff1 100644 --- a/src/testbed/gnunet-service-testbed.c +++ b/src/testbed/gnunet-service-testbed.c @@ -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} }; -- 2.25.1