From: Matthias Wachs Date: Fri, 7 May 2010 12:03:55 +0000 (+0000) Subject: rewrite from scratch X-Git-Tag: initial-import-from-subversion-38251~21822 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a7f34525fa63e800e59dfcfd129da0b3c670c947;p=oweals%2Fgnunet.git rewrite from scratch --- diff --git a/src/transport/plugin_transport_http.c b/src/transport/plugin_transport_http.c index c0de034ac..669990223 100644 --- a/src/transport/plugin_transport_http.c +++ b/src/transport/plugin_transport_http.c @@ -19,9 +19,9 @@ */ /** - * @file transport/plugin_transport_http.c - * @brief Implementation of the HTTP transport service - * @author Matthias Wachs + * @file transport/plugin_transport_template.c + * @brief template for a new transport service + * @author Christian Grothoff */ #include "platform.h" @@ -32,11 +32,8 @@ #include "gnunet_statistics_service.h" #include "gnunet_transport_service.h" #include "plugin_transport.h" -#include "microhttpd.h" -#include -#define VERBOSE GNUNET_YES -#define DEBUG GNUNET_YES +#define DEBUG_TEMPLATE GNUNET_NO /** * After how long do we expire an address that we @@ -45,16 +42,6 @@ */ #define LEARNED_ADDRESS_EXPIRATION GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_HOURS, 6) -#define HTTP_TIMEOUT 600 - -#define CURL_EASY_SETOPT(c, a, b) do { ret = curl_easy_setopt(c, a, b); if (ret != CURLE_OK) GNUNET_log(GNUNET_ERROR_TYPE_WARNING, _("%s failed at %s:%d: `%s'\n"), "curl_easy_setopt", __FILE__, __LINE__, curl_easy_strerror(ret)); } while (0); - -/** - * Text of the response sent back after the last bytes of a PUT - * request have been received (just to formally obey the HTTP - * protocol). - */ -#define HTTP_PUT_RESPONSE "Thank you!" /** * Encapsulation of all of the state of the plugin. @@ -130,150 +117,12 @@ struct Plugin */ struct GNUNET_TRANSPORT_PluginEnvironment *env; - /** - * Handle to the network service. - */ - struct GNUNET_SERVICE_Context *service; - /** * List of open sessions. */ struct Session *sessions; -}; - -static struct Plugin *plugin; - -/** - * Daemon for listening for new IPv4 connections. - */ -static struct MHD_Daemon *http_daemon_v4; - -/** - * Daemon for listening for new IPv6connections. - */ -static struct MHD_Daemon *http_daemon_v6; -/** - * Our primary task for http daemon handling IPv4 connections - */ -static GNUNET_SCHEDULER_TaskIdentifier http_task_v4; - -/** - * Our primary task for http daemon handling IPv6 connections - */ -static GNUNET_SCHEDULER_TaskIdentifier http_task_v6; - -/** - * ID of the task downloading the hostlist - */ -static GNUNET_SCHEDULER_TaskIdentifier ti_download; - -/* static int running; */ - -/** - * Curl multi for managing client operations. - */ -static CURLM *curl_multi; -static CURL *curl; - -static char * get_url( const struct GNUNET_PeerIdentity * target) -{ - return strdup("http://localhost:12389"); -} - -#if 0 -static size_t curl_read_function( void *ptr, size_t size, size_t nmemb, void *stream) -{ - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"curl read function\n"); - // strcpy ("Testmessa") - return 0; -} -#endif - -/** - * Task that is run when we are ready to receive more data from the hostlist - * server. - * - * @param cls closure, unused - * @param tc task context, unused - */ -static void -task_download (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - ti_download = GNUNET_SCHEDULER_NO_TASK; - if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) - return; - - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Download!!!\n"); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Logging shutdown\n"); - GNUNET_STATISTICS_set(plugin->env->stats,"shutdown",2, GNUNET_NO); -} -/** - * Ask CURL for the select set and then schedule the - * receiving task with the scheduler. - */ -static void -download_prepare () -{ - CURLMcode mret; - fd_set rs; - fd_set ws; - fd_set es; - int max; - struct GNUNET_NETWORK_FDSet *grs; - struct GNUNET_NETWORK_FDSet *gws; - long timeout; - struct GNUNET_TIME_Relative rtime; - - max = -1; - FD_ZERO (&rs); - FD_ZERO (&ws); - FD_ZERO (&es); - mret = curl_multi_fdset (curl_multi, &rs, &ws, &es, &max); - if (mret != CURLM_OK) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - _("%s failed at %s:%d: `%s'\n"), - "curl_multi_fdset", __FILE__, __LINE__, - curl_multi_strerror (mret)); - /*clean_up ();*/ - return; - } - mret = curl_multi_timeout (curl_multi, &timeout); - if (mret != CURLM_OK) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - _("%s failed at %s:%d: `%s'\n"), - "curl_multi_timeout", __FILE__, __LINE__, - curl_multi_strerror (mret)); - /* clean_up ();*/ - return; - } - - rtime = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 0 ); - /*rtime = GNUNET_TIME_relative_min (GNUNET_TIME_absolute_get_remaining (end_time), - GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, - timeout));*/ - grs = GNUNET_NETWORK_fdset_create (); - gws = GNUNET_NETWORK_fdset_create (); - GNUNET_NETWORK_fdset_copy_native (grs, &rs, max + 1); - GNUNET_NETWORK_fdset_copy_native (gws, &ws, max + 1); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Scheduling http plugin send operation using cURL\n"); - ti_download = GNUNET_SCHEDULER_add_select (plugin->env->sched, - GNUNET_SCHEDULER_PRIORITY_HIGH, - GNUNET_SCHEDULER_NO_TASK, - rtime, - grs, - gws, - &task_download, - curl_multi); - GNUNET_NETWORK_fdset_destroy (gws); - GNUNET_NETWORK_fdset_destroy (grs); -} +}; /** * Function that can be used by the transport service to transmit @@ -302,99 +151,22 @@ download_prepare () * and does NOT mean that the message was not transmitted (DV) */ static ssize_t -http_plugin_send (void *cls, - const struct GNUNET_PeerIdentity * target, - const char *msgbuf, - size_t msgbuf_size, - unsigned int priority, - struct GNUNET_TIME_Relative timeout, - struct Session *session, - const void *addr, - size_t addrlen, - int force_address, - GNUNET_TRANSPORT_TransmitContinuation cont, - void *cont_cls) +template_plugin_send (void *cls, + const struct GNUNET_PeerIdentity * + target, + const char *msgbuf, + size_t msgbuf_size, + unsigned int priority, + struct GNUNET_TIME_Relative timeout, + struct Session *session, + const void *addr, + size_t addrlen, + int force_address, + GNUNET_TRANSPORT_TransmitContinuation + cont, void *cont_cls) { - char * peer_url = get_url( target ); - - CURLMcode mret; - CURLcode ret; - int bytes_sent = 0; /* struct Plugin *plugin = cls; */ - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Sending %u bytes (`%s')'\n",msgbuf_size, msgbuf); - /* Insert code to send using cURL */ - curl = curl_easy_init (); - /* - CURL_EASY_SETOPT (curl, CURLOPT_FOLLOWLOCATION, 1); - CURL_EASY_SETOPT (curl, CURLOPT_MAXREDIRS, 4); - - - CURL_EASY_SETOPT (curl, CURLOPT_UPLOAD, 1L); - CURL_EASY_SETOPT (curl, CURLOPT_PUT, 1L); - CURL_EASY_SETOPT (curl, CURLOPT_READDATA, msgbuf); - - CURL_EASY_SETOPT (curl, CURLOPT_URL, peer_url); - if (ret != CURLE_OK) - {*/ - /* clean_up (); */ - /* GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Peer URL is not correct\n"); - return 0; - } - CURL_EASY_SETOPT (curl, - CURLOPT_FAILONERROR, - 1); - CURL_EASY_SETOPT (curl, - CURLOPT_VERBOSE, - 1); - CURL_EASY_SETOPT (curl, - CURLOPT_BUFFERSIZE, - GNUNET_SERVER_MAX_MESSAGE_SIZE); - if (0 == strncmp (peer_url, "http", 4)) - CURL_EASY_SETOPT (curl, CURLOPT_USERAGENT, "GNUnet"); - CURL_EASY_SETOPT (curl, - CURLOPT_CONNECTTIMEOUT, - 60L); - CURL_EASY_SETOPT (curl, - CURLOPT_TIMEOUT, - 60L);*/ - - CURL_EASY_SETOPT (curl, CURLOPT_URL, "http://www.tum.de/"); - curl_multi = curl_multi_init (); - if (curl_multi == NULL) - { - GNUNET_break (0); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "curl multi is not correct\n"); - /* clean_up (); */ - return 0; - } - mret = curl_multi_add_handle (curl_multi, curl); - if (mret != CURLM_OK) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("%s failed at %s:%d: `%s'\n"), - "curl_multi_add_handle", __FILE__, __LINE__, - curl_multi_strerror (mret)); - mret = curl_multi_cleanup (curl_multi); - if (mret != CURLM_OK) - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("%s failed at %s:%d: `%s'\n"), - "curl_multi_cleanup", __FILE__, __LINE__, - curl_multi_strerror (mret)); - curl_multi = NULL; - /* clean_up (); */ - return 0; - } - - download_prepare(); - - GNUNET_free(peer_url); - /* FIXME: */ - bytes_sent = msgbuf_size; - return bytes_sent; } @@ -408,13 +180,12 @@ http_plugin_send (void *cls, * @param cls closure * @param target peer from which to disconnect */ -void -http_plugin_disconnect (void *cls, +static void +template_plugin_disconnect (void *cls, const struct GNUNET_PeerIdentity *target) { // struct Plugin *plugin = cls; // FIXME - return; } @@ -433,14 +204,14 @@ http_plugin_disconnect (void *cls, * @param asc_cls closure for asc */ static void -http_plugin_address_pretty_printer (void *cls, - const char *type, - const void *addr, - size_t addrlen, - int numeric, - struct GNUNET_TIME_Relative timeout, - GNUNET_TRANSPORT_AddressStringCallback - asc, void *asc_cls) +template_plugin_address_pretty_printer (void *cls, + const char *type, + const void *addr, + size_t addrlen, + int numeric, + struct GNUNET_TIME_Relative timeout, + GNUNET_TRANSPORT_AddressStringCallback + asc, void *asc_cls) { asc (asc_cls, NULL); } @@ -460,7 +231,7 @@ http_plugin_address_pretty_printer (void *cls, * and transport */ static int -http_plugin_address_suggested (void *cls, +template_plugin_address_suggested (void *cls, void *addr, size_t addrlen) { /* struct Plugin *plugin = cls; */ @@ -470,147 +241,55 @@ http_plugin_address_suggested (void *cls, return GNUNET_OK; } -/** - * Check if we are allowed to connect to the given IP. - */ -static int -acceptPolicyCallback (void *cls, - const struct sockaddr *addr, socklen_t addr_len) -{ - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Incoming connection \n"); - /* Currently all incoming connections are accepted, so nothing to do here */ - return MHD_YES; -} /** - * Process GET or PUT request received via MHD. For - * GET, queue response that will send back our pending - * messages. For PUT, process incoming data and send - * to GNUnet core. In either case, check if a session - * already exists and create a new one if not. + * Function called for a quick conversion of the binary address to + * a numeric address. Note that the caller must not free the + * address and that the next call to this function is allowed + * to override the address again. + * + * @param cls closure + * @param addr binary address + * @param addrlen length of the address + * @return string representing the same address */ -static int -accessHandlerCallback (void *cls, - struct MHD_Connection *session, - const char *url, - const char *method, - const char *version, - const char *upload_data, - size_t * upload_data_size, void **httpSessionCache) +static const char* +template_plugin_address_to_string (void *cls, + const void *addr, + size_t addrlen) { - struct MHD_Response *response; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Daemon has an incoming `%s' request from \n",method); - - /* Find out if session exists, otherwise create one */ - - /* Is it a PUT or a GET request */ - if ( 0 == strcmp (MHD_HTTP_METHOD_PUT, method) ) - { - /* PUT method here */ - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Got PUT Request with size %u \n",upload_data_size); - GNUNET_STATISTICS_update( plugin->env->stats , gettext_noop("# PUT requests"), 1, GNUNET_NO); - } - if ( 0 == strcmp (MHD_HTTP_METHOD_GET, method) ) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Got GET Request with size\n"); - GNUNET_STATISTICS_update( plugin->env->stats , gettext_noop("# GET requests"), 1, GNUNET_NO); - } - - response = MHD_create_response_from_data (strlen (HTTP_PUT_RESPONSE), - HTTP_PUT_RESPONSE, MHD_NO, MHD_NO); - MHD_queue_response (session, MHD_HTTP_OK, response); - MHD_destroy_response (response); - - return MHD_YES; + GNUNET_break (0); + return NULL; } -/** - * Function that queries MHD's select sets and - * starts the task waiting for them. - */ -static GNUNET_SCHEDULER_TaskIdentifier prepare_daemon (struct MHD_Daemon *daemon_handle); -/** - * Call MHD to process pending requests and then go back - * and schedule the next run. - */ -static void -run_daemon (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - struct MHD_Daemon *daemon_handle = cls; - - if (daemon_handle == http_daemon_v4) - http_task_v4 = GNUNET_SCHEDULER_NO_TASK; - if (daemon_handle == http_daemon_v6) - http_task_v6 = GNUNET_SCHEDULER_NO_TASK; - if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) - return; - - GNUNET_assert (MHD_YES == MHD_run (daemon_handle)); - if (daemon_handle == http_daemon_v4) - http_task_v4 = prepare_daemon (daemon_handle); - if (daemon_handle == http_daemon_v6) - http_task_v6 = prepare_daemon (daemon_handle); - return; -} /** - * Function that queries MHD's select sets and - * starts the task waiting for them. + * Entry point for the plugin. */ -static GNUNET_SCHEDULER_TaskIdentifier -prepare_daemon (struct MHD_Daemon *daemon_handle) +void * +libgnunet_plugin_transport_http_init (void *cls) { - GNUNET_SCHEDULER_TaskIdentifier ret; - fd_set rs; - fd_set ws; - fd_set es; - struct GNUNET_NETWORK_FDSet *wrs; - struct GNUNET_NETWORK_FDSet *wws; - struct GNUNET_NETWORK_FDSet *wes; - int max; - unsigned long long timeout; - int haveto; - struct GNUNET_TIME_Relative tv; - - FD_ZERO(&rs); - FD_ZERO(&ws); - FD_ZERO(&es); - wrs = GNUNET_NETWORK_fdset_create (); - wes = GNUNET_NETWORK_fdset_create (); - wws = GNUNET_NETWORK_fdset_create (); - max = -1; - GNUNET_assert (MHD_YES == - MHD_get_fdset (daemon_handle, - &rs, - &ws, - &es, - &max)); - haveto = MHD_get_timeout (daemon_handle, &timeout); - if (haveto == MHD_YES) - tv.value = (uint64_t) timeout; - else - tv = GNUNET_TIME_UNIT_FOREVER_REL; - GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max); - GNUNET_NETWORK_fdset_copy_native (wws, &ws, max); - GNUNET_NETWORK_fdset_copy_native (wes, &es, max); - ret = GNUNET_SCHEDULER_add_select (plugin->env->sched, - GNUNET_SCHEDULER_PRIORITY_HIGH, - GNUNET_SCHEDULER_NO_TASK, - tv, - wrs, - wws, - &run_daemon, - daemon_handle); - GNUNET_NETWORK_fdset_destroy (wrs); - GNUNET_NETWORK_fdset_destroy (wws); - GNUNET_NETWORK_fdset_destroy (wes); - return ret; + struct GNUNET_TRANSPORT_PluginEnvironment *env = cls; + struct GNUNET_TRANSPORT_PluginFunctions *api; + struct Plugin *plugin; + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Init HTTP transport plugin\n")); + + plugin = GNUNET_malloc (sizeof (struct Plugin)); + plugin->env = env; + api = GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_PluginFunctions)); + api->cls = plugin; + api->send = &template_plugin_send; + api->disconnect = &template_plugin_disconnect; + api->address_pretty_printer = &template_plugin_address_pretty_printer; + api->check_address = &template_plugin_address_suggested; + api->address_to_string = &template_plugin_address_to_string; + return api; } + /** * Exit point from the plugin. */ @@ -620,138 +299,11 @@ libgnunet_plugin_transport_http_done (void *cls) struct GNUNET_TRANSPORT_PluginFunctions *api = cls; struct Plugin *plugin = api->cls; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Shutting down http plugin...\n"); - - if ( ti_download != GNUNET_SCHEDULER_NO_TASK) - { - GNUNET_SCHEDULER_cancel(plugin->env->sched, ti_download); - ti_download = GNUNET_SCHEDULER_NO_TASK; - } - - if ( http_task_v4 != GNUNET_SCHEDULER_NO_TASK) - { - GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task_v4); - http_task_v4 = GNUNET_SCHEDULER_NO_TASK; - } - - if ( http_task_v6 != GNUNET_SCHEDULER_NO_TASK) - { - GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task_v6); - http_task_v6 = GNUNET_SCHEDULER_NO_TASK; - } - - if (http_daemon_v4 != NULL) - { - MHD_stop_daemon (http_daemon_v4); - http_daemon_v4 = NULL; - } - if (http_daemon_v6 != NULL) - { - MHD_stop_daemon (http_daemon_v6); - http_daemon_v6 = NULL; - } - - - if ( NULL != curl_multi) - { - curl_multi_cleanup (curl_multi); - curl_multi = NULL; - } + GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Shutting down HTTP transport plugin\n")); + GNUNET_free (plugin); GNUNET_free (api); return NULL; } -/** - * Entry point for the plugin. - */ -void * -libgnunet_plugin_transport_http_init (void *cls) -{ - struct GNUNET_TRANSPORT_PluginEnvironment *env = cls; - struct GNUNET_TRANSPORT_PluginFunctions *api; - long long unsigned int port; - - plugin = GNUNET_malloc (sizeof (struct Plugin)); - plugin->env = env; - - api = GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_PluginFunctions)); - api->cls = plugin; - api->send = &http_plugin_send; - api->disconnect = &http_plugin_disconnect; - api->address_pretty_printer = &http_plugin_address_pretty_printer; - api->check_address = &http_plugin_address_suggested; - - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting http plugin...\n"); - /* Reading port number from config file */ - if ((GNUNET_OK != - GNUNET_CONFIGURATION_get_value_number (env->cfg, - "transport-http", - "PORT", - &port)) || - (port > 65535) ) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, - "http", - _ - ("Require valid port number for service `%s' in configuration!\n"), - "transport-http"); - libgnunet_plugin_transport_http_done (api); - return NULL; - } - if ((http_daemon_v4 == NULL) && (http_daemon_v6 == NULL) && (port != 0)) - { - http_daemon_v6 = MHD_start_daemon (MHD_USE_IPv6, - port, - &acceptPolicyCallback, - NULL, &accessHandlerCallback, NULL, - MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16, - MHD_OPTION_PER_IP_CONNECTION_LIMIT, (unsigned int) 1, - MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16, - MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (16 * 1024), - MHD_OPTION_END); - http_daemon_v4 = MHD_start_daemon (MHD_NO_FLAG, - port, - &acceptPolicyCallback, - NULL, &accessHandlerCallback, NULL, - MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16, - MHD_OPTION_PER_IP_CONNECTION_LIMIT, (unsigned int) 1, - MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16, - MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (16 * 1024), - MHD_OPTION_END); - } - - curl_multi = curl_multi_init (); - - if (http_daemon_v4 != NULL) - http_task_v4 = prepare_daemon (http_daemon_v4); - if (http_daemon_v6 != NULL) - http_task_v6 = prepare_daemon (http_daemon_v6); - - if ((http_daemon_v4 == NULL) || (http_daemon_v6 != NULL)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting MHD on port %u\n",port); - - - if (NULL == plugin->env->stats) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Failed to retrieve statistics handle\n")); - libgnunet_plugin_transport_http_done (api); - return NULL; - } - - GNUNET_STATISTICS_set ( env->stats, "# PUT requests", 0, GNUNET_NO); - GNUNET_STATISTICS_set ( env->stats, "# GET requests", 0, GNUNET_NO); - - if ( ((NULL == http_daemon_v4) && (NULL == http_daemon_v6)) || (NULL == curl_multi)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Initializing http plugin failed\n"); - libgnunet_plugin_transport_http_done (api); - return NULL; - } - else - return api; -} - -/* end of plugin_transport_http.c */ +/* end of plugin_transport_template.c */ diff --git a/src/transport/test_plugin_transport_http.c b/src/transport/test_plugin_transport_http.c index 84de2ca25..0ce1766c9 100644 --- a/src/transport/test_plugin_transport_http.c +++ b/src/transport/test_plugin_transport_http.c @@ -98,13 +98,6 @@ static struct GNUNET_TRANSPORT_PluginEnvironment env; */ static struct GNUNET_TRANSPORT_PluginFunctions *api; -/** - * Did the test pass or fail? - */ -static int fail; - -pid_t pid; - /** * ID of the task controlling the locking between two hostlist tests */ @@ -112,17 +105,22 @@ static GNUNET_SCHEDULER_TaskIdentifier ti_check_stat; static unsigned int timeout_count; +/** + * Did the test pass or fail? + */ +static int fail; + /** * Initialize Environment for this plugin */ static struct GNUNET_TIME_Relative receive (void *cls, - const struct GNUNET_PeerIdentity * peer, - const struct GNUNET_MessageHeader * message, - uint32_t distance, - struct Session *session, - const char *sender_address, - uint16_t sender_address_len) + const struct GNUNET_PeerIdentity * peer, + const struct GNUNET_MessageHeader * message, + uint32_t distance, + struct Session *session, + const char *sender_address, + uint16_t sender_address_len) { /* do nothing */ return GNUNET_TIME_UNIT_ZERO; @@ -132,33 +130,13 @@ void notify_address (void *cls, const char *name, const void *addr, - uint16_t addrlen, - struct GNUNET_TIME_Relative expires) -{ -} - -/** - * Simple example test that invokes - * the check_address function of the plugin. - */ -/* FIXME: won't work on IPv6 enabled systems where IPv4 mapping - * isn't enabled (eg. FreeBSD > 4) - */ -static void -shutdown_clean () + uint16_t addrlen, + struct GNUNET_TIME_Relative expires) { - GNUNET_assert (NULL == - GNUNET_PLUGIN_unload ("libgnunet_plugin_transport_http", - api)); - if (my_private_key != NULL) - GNUNET_CRYPTO_rsa_key_free (my_private_key); - if (ti_check_stat != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel(sched, ti_check_stat); - GNUNET_SCHEDULER_shutdown(sched); - return; } + static void setup_plugin_environment () { @@ -172,30 +150,23 @@ setup_plugin_environment () env.max_connections = max_connect_per_transport; } -static int -process_stat (void *cls, - const char *subsystem, - const char *name, - uint64_t value, - int is_persistent) +/** + * Simple example test that invokes + * the check_address function of the plugin. + */ +/* FIXME: won't work on IPv6 enabled systems where IPv4 mapping + * isn't enabled (eg. FreeBSD > 4) + */ +static void +shutdown_clean () { - if (value==1) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown, plugin failed \n"); - fail = GNUNET_YES; - shutdown_clean(); - return GNUNET_YES; - } - if (value==2) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown, plugin not failed \n"); - shutdown_clean(); - return GNUNET_YES; - } - return GNUNET_YES; + GNUNET_assert (NULL == + GNUNET_PLUGIN_unload ("libgnunet_plugin_transport_http", + api)); + GNUNET_SCHEDULER_shutdown(sched); + return; } - /** * Task that checks if we should try to download a hostlist. * If so, we initiate the download, otherwise we schedule @@ -205,12 +176,11 @@ static void task_check_stat (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { - ti_check_stat = GNUNET_SCHEDULER_NO_TASK; if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) return; - if ( timeout_count > 10 ) + if ( timeout_count > 5 ) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Testcase timeout\n", timeout_count); fail = GNUNET_YES; @@ -219,14 +189,6 @@ task_check_stat (void *cls, } timeout_count++; - GNUNET_STATISTICS_get (stats, - "http-transport", - gettext_noop("shutdown"), - GNUNET_TIME_UNIT_MINUTES, - NULL, - &process_stat, - NULL); - ti_check_stat = GNUNET_SCHEDULER_add_delayed (sched, STAT_INTERVALL, &task_check_stat, NULL); return; } @@ -244,98 +206,26 @@ run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { - unsigned long long tneigh; - char *keyfile; - char *libname; + char * libname; sched = s; cfg = c; - /* parse configuration */ - if ((GNUNET_OK != - GNUNET_CONFIGURATION_get_value_number (c, - "TRANSPORT", - "NEIGHBOUR_LIMIT", - &tneigh)) || - (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_filename (c, - "GNUNETD", - "HOSTKEY", &keyfile))) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Transport service is lacking key configuration settings. Exiting.\n")); - GNUNET_SCHEDULER_shutdown (s); - return; - } - - pid = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-statistics", - "gnunet-service-statistics", - "-L", "DEBUG", - "-c", "test_plugin_transport_data_http.conf", NULL); - - - if ( pid == -1) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - _("Failed to start service for `%s' http transport plugin test.\n"), - "statistics"); - GNUNET_SCHEDULER_shutdown (s); - return; - } - - stats = GNUNET_STATISTICS_create (sched, "http-transport", cfg); - env.stats = stats; - /* - max_connect_per_transport = (uint32_t) tneigh; - my_private_key = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile); - GNUNET_free (keyfile); - - if (my_private_key == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _ - ("Transport service could not access hostkey. Exiting.\n")); - GNUNET_SCHEDULER_shutdown (s); - return; - } - GNUNET_CRYPTO_rsa_key_get_public (my_private_key, &my_public_key); - GNUNET_CRYPTO_hash (&my_public_key, - sizeof (my_public_key), &my_identity.hashPubKey); - */ /* load plugins... */ setup_plugin_environment (); - + GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Loading HTTP transport plugin\n")); GNUNET_asprintf (&libname, "libgnunet_plugin_transport_http"); api = GNUNET_PLUGIN_load (libname, &env); - if (api != NULL ) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Loading http transport plugin `%s' was successful\n",libname); - GNUNET_free (libname); if (api == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Failed to load http transport plugin\n")); - fail = GNUNET_YES; - shutdown_clean (); - return; - - } - fail = GNUNET_NO; - - char * test_message = "Hello World!"; - size_t bs = 0; - size_t size = strlen(test_message) +1; - - /* Testing to send */ - bs = api->send(NULL, &my_identity,test_message,size,0, TIMEOUT, NULL, NULL, 0, GNUNET_NO, NULL, NULL); - GNUNET_assert ( bs == size); - - /* check statistics */ - ti_check_stat = GNUNET_SCHEDULER_add_now(sched, &task_check_stat, NULL); + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Failed to load transport plugin for udp\n")); + return; + } - return; + ti_check_stat = GNUNET_SCHEDULER_add_now (sched, &task_check_stat, NULL); } @@ -349,7 +239,6 @@ run (void *cls, int main (int argc, char *const *argv) { - return GNUNET_NO; static struct GNUNET_GETOPT_CommandLineOption options[] = { GNUNET_GETOPT_OPTION_END }; @@ -373,20 +262,14 @@ main (int argc, char *const *argv) "WARNING", #endif NULL); - fail = GNUNET_YES; ret = (GNUNET_OK == GNUNET_PROGRAM_run (5, argv_prog, "test_plugin_transport_http", - "testcase", options, &run, NULL)) ? fail : 1; + "testcase", options, &run, NULL)) ? GNUNET_YES : 1; GNUNET_DISK_directory_remove ("/tmp/test_plugin_transport_http"); - if (0 != PLIBC_KILL (pid, SIGTERM)) - { - GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); - fail = 1; - } - return fail; + return GNUNET_NO; } /* end of test_plugin_transport_http.c */