aboutsummaryrefslogtreecommitdiff
path: root/src/testbed
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-09-14 20:07:31 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-09-14 20:07:31 +0000
commit52120245ff42d584ef05df14a911742f8aad2ac4 (patch)
tree154123c451cf54a908c209332ff3f295ed5be687 /src/testbed
parentacc8df2ae6177e9a29034696a7fc35b06d3a942f (diff)
downloadgnunet-52120245ff42d584ef05df14a911742f8aad2ac4.tar.gz
gnunet-52120245ff42d584ef05df14a911742f8aad2ac4.zip
handler for overlay request connect
Diffstat (limited to 'src/testbed')
-rw-r--r--src/testbed/gnunet-service-testbed.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c
index f008405d9..c4ba665e3 100644
--- a/src/testbed/gnunet-service-testbed.c
+++ b/src/testbed/gnunet-service-testbed.c
@@ -2352,6 +2352,64 @@ handle_overlay_connect (void *cls, struct GNUNET_SERVER_Client *client,
2352 2352
2353 2353
2354/** 2354/**
2355 * Handler for GNUNET_MESSAGE_TYPE_TESTBED_REQUESTCONNECT messages
2356 *
2357 * @param cls NULL
2358 * @param client identification of the client
2359 * @param message the actual message
2360 */
2361static void
2362handle_overlay_request_connect (void *cls, struct GNUNET_SERVER_Client *client,
2363 const struct GNUNET_MessageHeader *message)
2364{
2365 const struct GNUNET_TESTBED_RequestConnectMessage *msg;
2366 struct GNUNET_TRANSPORT_Handle *th;
2367 struct Peer *peer;
2368 uint32_t peer_id;
2369
2370 if (sizeof (struct GNUNET_TESTBED_RequestConnectMessage) >= ntohs
2371 (message->size))
2372 {
2373 GNUNET_break (0);
2374 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
2375 return;
2376 }
2377 msg = (const struct GNUNET_TESTBED_RequestConnectMessage *) message;
2378 if ((NULL == msg->hello) ||
2379 (GNUNET_MESSAGE_TYPE_HELLO != ntohs (msg->hello->type)))
2380 {
2381 GNUNET_break (0);
2382 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
2383 return;
2384 }
2385 peer_id = ntohl (msg->peer);
2386 if ((peer_id >= peer_list_size) || (NULL == (peer = peer_list[peer_id])))
2387 {
2388 GNUNET_break (0);
2389 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
2390 return;
2391 }
2392 if (GNUNET_NO != peer->is_remote)
2393 {
2394 GNUNET_break (0);
2395 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
2396 return;
2397 }
2398 th = GNUNET_TRANSPORT_connect (peer->details.local.cfg, NULL, NULL, NULL,
2399 NULL, NULL);
2400 if (NULL == th)
2401 {
2402 GNUNET_break (0);
2403 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
2404 return;
2405 }
2406 GNUNET_TRANSPORT_offer_hello (th, msg->hello, NULL, NULL);
2407 GNUNET_TRANSPORT_try_connect (th, &msg->peer_identity);
2408 GNUNET_SERVER_receive_done (client, GNUNET_OK);
2409}
2410
2411
2412/**
2355 * Iterator over hash map entries. 2413 * Iterator over hash map entries.
2356 * 2414 *
2357 * @param cls closure 2415 * @param cls closure
@@ -2507,6 +2565,8 @@ testbed_run (void *cls, struct GNUNET_SERVER_Handle *server,
2507 sizeof (struct GNUNET_TESTBED_PeerGetConfigurationMessage)}, 2565 sizeof (struct GNUNET_TESTBED_PeerGetConfigurationMessage)},
2508 {&handle_overlay_connect, NULL, GNUNET_MESSAGE_TYPE_TESTBED_OLCONNECT, 2566 {&handle_overlay_connect, NULL, GNUNET_MESSAGE_TYPE_TESTBED_OLCONNECT,
2509 sizeof (struct GNUNET_TESTBED_OverlayConnectMessage)}, 2567 sizeof (struct GNUNET_TESTBED_OverlayConnectMessage)},
2568 {&handle_overlay_request_connect, NULL, GNUNET_MESSAGE_TYPE_TESTBED_REQUESTCONNECT,
2569 sizeof (struct GNUNET_TESTBED_OverlayConnectMessage)},
2510 {NULL} 2570 {NULL}
2511 }; 2571 };
2512 2572