gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r23827 - gnunet/src/testbed
Date: Fri, 14 Sep 2012 22:07:31 +0200

Author: harsha
Date: 2012-09-14 22:07:31 +0200 (Fri, 14 Sep 2012)
New Revision: 23827

Modified:
   gnunet/src/testbed/gnunet-service-testbed.c
Log:
handler for overlay request connect

Modified: gnunet/src/testbed/gnunet-service-testbed.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed.c 2012-09-14 17:06:35 UTC (rev 
23826)
+++ gnunet/src/testbed/gnunet-service-testbed.c 2012-09-14 20:07:31 UTC (rev 
23827)
@@ -2352,6 +2352,64 @@
 
 
 /**
+ * Handler for GNUNET_MESSAGE_TYPE_TESTBED_REQUESTCONNECT messages
+ *
+ * @param cls NULL
+ * @param client identification of the client
+ * @param message the actual message
+ */
+static void
+handle_overlay_request_connect (void *cls, struct GNUNET_SERVER_Client *client,
+                               const struct GNUNET_MessageHeader *message)
+{
+  const struct GNUNET_TESTBED_RequestConnectMessage *msg;
+  struct GNUNET_TRANSPORT_Handle *th;
+  struct Peer *peer;
+  uint32_t peer_id;
+  
+  if (sizeof (struct GNUNET_TESTBED_RequestConnectMessage) >= ntohs
+      (message->size))
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  msg = (const struct GNUNET_TESTBED_RequestConnectMessage *) message;
+  if ((NULL == msg->hello) || 
+      (GNUNET_MESSAGE_TYPE_HELLO != ntohs (msg->hello->type)))
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  peer_id = ntohl (msg->peer);
+  if ((peer_id >= peer_list_size) || (NULL == (peer = peer_list[peer_id])))
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  if (GNUNET_NO != peer->is_remote)
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  th = GNUNET_TRANSPORT_connect (peer->details.local.cfg, NULL, NULL, NULL,
+                                NULL, NULL);
+  if (NULL == th)
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  GNUNET_TRANSPORT_offer_hello (th, msg->hello, NULL, NULL);
+  GNUNET_TRANSPORT_try_connect (th, &msg->peer_identity);
+  GNUNET_SERVER_receive_done (client, GNUNET_OK);
+}
+
+
+/**
  * Iterator over hash map entries.
  *
  * @param cls closure
@@ -2507,6 +2565,8 @@
      sizeof (struct GNUNET_TESTBED_PeerGetConfigurationMessage)},
     {&handle_overlay_connect, NULL, GNUNET_MESSAGE_TYPE_TESTBED_OLCONNECT,
      sizeof (struct GNUNET_TESTBED_OverlayConnectMessage)},
+    {&handle_overlay_request_connect, NULL, 
GNUNET_MESSAGE_TYPE_TESTBED_REQUESTCONNECT,
+     sizeof (struct GNUNET_TESTBED_OverlayConnectMessage)},
     {NULL}
   };
 




reply via email to

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