/** * Main test function */ static void test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { struct GNUNET_CONFIGURATION_Handle *cfg = cls; static const GNUNET_MESH_ApplicationType app2[] = { 0 }; test_task = GNUNET_SCHEDULER_NO_TASK; mesh_peer_2 = GNUNET_MESH_connect (cfg, /* configuration */ 10, /* queue size */ (void *) &two, /* cls */ &inbound_tunnel, /* inbound new hndlr */ &inbound_end, /* inbound end hndlr */ handlers2, /* traffic handlers */ app2); /* apps offered */ if (NULL == mesh_peer_2) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "test: Couldn't connect to mesh :(\n"); return; } else { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: YAY! CONNECTED TO MESH :D\n"); } t = GNUNET_MESH_tunnel_create (mesh_peer_2, NULL, &peer_conected, &peer_disconnected, (void *) &two); GNUNET_MESH_peer_request_connect_by_type (t, 1); test_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), &do_connect_peer_1, cfg); }
/** * Main function that will be run by the scheduler. * * @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) { static const struct GNUNET_MESH_MessageHandler handlers[] = { {NULL, 0, 0} /* FIXME add option to monitor msg types */ }; GNUNET_MESH_ApplicationType apps = 0; /* FIXME add option to monitor apps */ if (args[0] != NULL) { FPRINTF (stderr, _("Invalid command line argument `%s'\n"), args[0]); return; } mh = GNUNET_MESH_connect (cfg, NULL, /* cls */ NULL, /* nt */ NULL, /* cleaner */ handlers, &apps); if (NULL == mh) GNUNET_SCHEDULER_add_now (shutdown_task, NULL); else sd = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, shutdown_task, NULL); if (NULL != tunnel_id) GNUNET_SCHEDULER_add_now (&show_tunnel, NULL); else GNUNET_SCHEDULER_add_now (&get_tunnels, NULL); }
/** * Start looking for a peer by type */ static void do_connect_peer_1 (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { struct GNUNET_CONFIGURATION_Handle *cfg = cls; static const GNUNET_MESH_ApplicationType app1[] = { 1, 0 }; test_task = GNUNET_SCHEDULER_NO_TASK; mesh_peer_1 = GNUNET_MESH_connect (cfg, /* configuration */ 10, /* queue size */ (void *) &one, /* cls */ &inbound_tunnel, /* inbound new hndlr */ &inbound_end, /* inbound end hndlr */ handlers1, /* traffic handlers */ app1); /* apps offered */ }
/** * Adapter function called to establish a connection to * the MESH service. * * @param cls closure * @param cfg configuration of the peer to connect to; will be available until * GNUNET_TESTBED_operation_done() is called on the operation returned * from GNUNET_TESTBED_service_connect() * @return service handle to return in 'op_result', NULL on error */ static void * mesh_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) { struct GNUNET_MESH_TEST_AdapterContext *actx = cls; struct GNUNET_MESH_TEST_Context *ctx = actx->ctx; struct GNUNET_MESH_Handle *h; h = GNUNET_MESH_connect (cfg, (void *) (long) actx->peer, ctx->new_tunnel, ctx->cleaner, ctx->handlers, ctx->stypes); return h; }
/** * Main function that will be run by the scheduler. * * @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) { GNUNET_MESH_InboundChannelNotificationHandler *newch = NULL; GNUNET_MESH_ChannelEndHandler *endch = NULL; static const struct GNUNET_MESH_MessageHandler handlers[] = { {&data_callback, GNUNET_MESSAGE_TYPE_MESH_CLI, 0}, {NULL, 0, 0} /* FIXME add option to monitor msg types */ }; static uint32_t *ports = NULL; /* FIXME add option to monitor apps */ target_id = args[0]; target_port = args[0] && args[1] ? atoi(args[1]) : 0; if ( (0 != (request_peers | request_tunnels) || 0 != monitor_connections || NULL != tunnel_id || NULL != conn_id || NULL != channel_id) && target_id != NULL) { FPRINTF (stderr, _("You must NOT give a TARGET" "when using 'request all' options\n")); return; } if (NULL != target_id) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating channel to %s\n", target_id); GNUNET_SCHEDULER_add_now (&create_channel, NULL); endch = &channel_ended; } else if (0 != listen_port) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Listen\n"); newch = &channel_incoming; endch = &channel_ended; ports = GNUNET_malloc (sizeof (uint32_t) * 2); ports[0] = listen_port; } else if (NULL != tunnel_id) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show tunnel\n"); GNUNET_SCHEDULER_add_now (&show_tunnel, NULL); } else if (NULL != channel_id) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show channel\n"); GNUNET_SCHEDULER_add_now (&show_channel, NULL); } else if (NULL != conn_id) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show connection\n"); GNUNET_SCHEDULER_add_now (&show_connection, NULL); } else if (GNUNET_YES == request_peers) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show all peers\n"); GNUNET_SCHEDULER_add_now (&get_peers, NULL); } else if (GNUNET_YES == request_tunnels) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Show all tunnels\n"); GNUNET_SCHEDULER_add_now (&get_tunnels, NULL); } else { FPRINTF (stderr, "No action requested\n"); return; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connecting to mesh\n"); mh = GNUNET_MESH_connect (cfg, NULL, /* cls */ newch, /* new channel */ endch, /* cleaner */ handlers, ports); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Done\n"); if (NULL == mh) GNUNET_SCHEDULER_add_now (shutdown_task, NULL); else sd = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, shutdown_task, NULL); }