gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r11899 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r11899 - gnunet/src/transport
Date: Wed, 23 Jun 2010 13:41:46 +0200

Author: wachs
Date: 2010-06-23 13:41:46 +0200 (Wed, 23 Jun 2010)
New Revision: 11899

Modified:
   gnunet/src/transport/plugin_transport_http.c
Log:
This line, and those below, will be ignored--

M    transport/plugin_transport_http.c


Modified: gnunet/src/transport/plugin_transport_http.c
===================================================================
--- gnunet/src/transport/plugin_transport_http.c        2010-06-23 11:09:21 UTC 
(rev 11898)
+++ gnunet/src/transport/plugin_transport_http.c        2010-06-23 11:41:46 UTC 
(rev 11899)
@@ -279,55 +279,50 @@
    * Hashmap for all existing sessions.
    */
   struct GNUNET_CONTAINER_MultiHashMap *sessions;
-};
 
-/**
- * Daemon for listening for new IPv4 connections.
- */
-static struct MHD_Daemon *http_daemon_v4;
+  /**
+   * Daemon for listening for new IPv4 connections.
+   */
+  struct MHD_Daemon *http_daemon_v4;
 
-/**
- * Daemon for listening for new IPv6connections.
- */
-static struct MHD_Daemon *http_daemon_v6;
+  /**
+   * Daemon for listening for new IPv6connections.
+   */
+  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 IPv4 connections
+   */
+  GNUNET_SCHEDULER_TaskIdentifier http_task_v4;
 
-/**
- * Our primary task for http daemon handling IPv6 connections
- */
-static GNUNET_SCHEDULER_TaskIdentifier http_task_v6;
+  /**
+   * Our primary task for http daemon handling IPv6 connections
+   */
+  GNUNET_SCHEDULER_TaskIdentifier http_task_v6;
 
-/**
- * The task sending data
- */
-static GNUNET_SCHEDULER_TaskIdentifier http_task_send;
+  /**
+   * The task sending data
+   */
+  GNUNET_SCHEDULER_TaskIdentifier http_task_send;
 
+  /**
+   * cURL Multihandle
+   */
+  CURLM * multi_handle;
 
+  /**
+   * Our ASCII encoded, hashed peer identity
+   * This string is used to distinguish between connections and is added to 
the urls
+   */
+  struct GNUNET_CRYPTO_HashAsciiEncoded my_ascii_hash_ident;
+};
+
 /**
  * Information about this plugin
  */
 static struct Plugin *plugin;
 
 /**
- * cURL Multihandle
- */
-static CURLM *multi_handle;
-
-/**
- * Our ASCII encoded, hashed peer identity
- * This string is used to distinguish between connections and is added to the 
urls
- */
-static struct GNUNET_CRYPTO_HashAsciiEncoded my_ascii_hash_ident;
-
-// MW: please document (which timeout is this!?)
-static struct GNUNET_TIME_Relative timeout;
-
-
-/**
  * Create a new session
  *
  * @param addr_in address the peer is using inbound
@@ -552,9 +547,9 @@
       if ((*upload_data_size + cs->pending_inbound_msg->pos < 
cs->pending_inbound_msg->len) && (*upload_data_size + 
cs->pending_inbound_msg->pos <= GNUNET_SERVER_MAX_MESSAGE_SIZE))
       {
         /* copy uploaded data to buffer */
-        
memcpy(&cs->pending_inbound_msg->buf[cs->pending_inbound_msg->pos],upload_data,*upload_data_size);
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"%u bytes forwarded to MST 
\n",*upload_data_size);
+
         res = GNUNET_SERVER_mst_receive(cs->msgtok, cs, 
upload_data,*upload_data_size, GNUNET_YES, GNUNET_NO);
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"%u bytes forwarded to MST: 
result: %u\n",*upload_data_size, res);
         cs->pending_inbound_msg->pos += *upload_data_size;
         *upload_data_size = 0;
         return MHD_YES;
@@ -584,6 +579,7 @@
       return MHD_YES;
     }
 
+    /* Transmission of all data complete */
     if ((*upload_data_size == 0) && (cs->is_put_in_progress == GNUNET_YES) && 
(cs->is_bad_request == GNUNET_NO))
     {
       send_error_to_client = GNUNET_YES;
@@ -698,20 +694,20 @@
 {
   struct MHD_Daemon *daemon_handle = cls;
 
-  if (daemon_handle == http_daemon_v4)
-    http_task_v4 = GNUNET_SCHEDULER_NO_TASK;
+  if (daemon_handle == plugin->http_daemon_v4)
+    plugin->http_task_v4 = GNUNET_SCHEDULER_NO_TASK;
 
-  if (daemon_handle == http_daemon_v6)
-    http_task_v6 = GNUNET_SCHEDULER_NO_TASK;
+  if (daemon_handle == plugin->http_daemon_v6)
+    plugin->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 = http_daemon_prepare (daemon_handle);
-  if (daemon_handle == http_daemon_v6)
-    http_task_v6 = http_daemon_prepare (daemon_handle);
+  if (daemon_handle == plugin->http_daemon_v4)
+    plugin->http_task_v4 = http_daemon_prepare (daemon_handle);
+  if (daemon_handle == plugin->http_daemon_v6)
+    plugin->http_task_v6 = http_daemon_prepare (daemon_handle);
   return;
 }
 
@@ -867,12 +863,12 @@
   curl_easy_setopt(ses->curl_handle, CURLOPT_WRITEFUNCTION, 
send_write_callback);
   curl_easy_setopt(ses->curl_handle, CURLOPT_READDATA, ses);
   curl_easy_setopt(ses->curl_handle, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 
msg->len);
-  curl_easy_setopt(ses->curl_handle, CURLOPT_TIMEOUT, (long) (timeout.value / 
1000 ));
+  curl_easy_setopt(ses->curl_handle, CURLOPT_TIMEOUT, 
GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
   GNUNET_assert (CURLE_OK == curl_easy_setopt(ses->curl_handle, 
CURLOPT_PRIVATE, ses));
   curl_easy_setopt(ses->curl_handle, CURLOPT_CONNECTTIMEOUT, 
HTTP_CONNECT_TIMEOUT);
   curl_easy_setopt(ses->curl_handle, CURLOPT_BUFFERSIZE, 
GNUNET_SERVER_MAX_MESSAGE_SIZE);
 
-  mret = curl_multi_add_handle(multi_handle, ses->curl_handle);
+  mret = curl_multi_add_handle(plugin->multi_handle, ses->curl_handle);
   if (mret != CURLM_OK)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -895,20 +891,20 @@
   struct Session * cs = NULL;
   long http_result;
 
-  http_task_send = GNUNET_SCHEDULER_NO_TASK;
+  plugin->http_task_send = GNUNET_SCHEDULER_NO_TASK;
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     return;
 
   do
     {
       running = 0;
-      mret = curl_multi_perform (multi_handle, &running);
+      mret = curl_multi_perform (plugin->multi_handle, &running);
       if (running < handles_last_run)
         {
           do
             {
 
-              msg = curl_multi_info_read (multi_handle, &running);
+              msg = curl_multi_info_read (plugin->multi_handle, &running);
               GNUNET_break (msg != NULL);
               if (msg == NULL)
                 break;
@@ -1001,7 +997,7 @@
   FD_ZERO (&rs);
   FD_ZERO (&ws);
   FD_ZERO (&es);
-  mret = curl_multi_fdset (multi_handle, &rs, &ws, &es, &max);
+  mret = curl_multi_fdset (plugin->multi_handle, &rs, &ws, &es, &max);
   if (mret != CURLM_OK)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -1010,7 +1006,7 @@
                   curl_multi_strerror (mret));
       return -1;
     }
-  mret = curl_multi_timeout (multi_handle, &to);
+  mret = curl_multi_timeout (plugin->multi_handle, &to);
   if (mret != CURLM_OK)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -1024,7 +1020,7 @@
   gws = GNUNET_NETWORK_fdset_create ();
   GNUNET_NETWORK_fdset_copy_native (grs, &rs, max + 1);
   GNUNET_NETWORK_fdset_copy_native (gws, &ws, max + 1);
-  http_task_send = GNUNET_SCHEDULER_add_select (plugin->env->sched,
+  plugin->http_task_send = GNUNET_SCHEDULER_add_select (plugin->env->sched,
                                    GNUNET_SCHEDULER_PRIORITY_DEFAULT,
                                    GNUNET_SCHEDULER_NO_TASK,
                                    GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 0),
@@ -1114,7 +1110,7 @@
                      "http://%s:%u/%s";,
                      address,
                      ntohs(((struct IPv4HttpAddress *) addr)->u_port),
-                     (char *) (&my_ascii_hash_ident));
+                     (char *) (&plugin->my_ascii_hash_ident));
     GNUNET_free(address);
   }
   else if (addrlen == (sizeof (struct IPv6HttpAddress)))
@@ -1125,10 +1121,10 @@
                     "http://%s:%u/%s";,
                     address,
                     ntohs(((struct IPv6HttpAddress *) addr)->u6_port),
-                    (char *) (&my_ascii_hash_ident));
+                    (char *) (&plugin->my_ascii_hash_ident));
     GNUNET_free(address);
   }
-  timeout = to;
+
   /* setting up message */
   msg = GNUNET_malloc (sizeof (struct HTTP_Message));
   msg->next = NULL;
@@ -1142,7 +1138,7 @@
   /* insert created message in double linked list of pending messages */
   GNUNET_CONTAINER_DLL_insert (cs->pending_outbound_msg_head, 
cs->pending_outbound_msg_tail, msg);
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Plugin: sending %u bytes of data 
from peer `%4.4s' to peer `%s'\n",msgbuf_size,(char *) 
&my_ascii_hash_ident,GNUNET_i2s(target));
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Plugin: sending %u bytes of data 
from peer `%4.4s' to peer `%s'\n",msgbuf_size,(char *) 
&plugin->my_ascii_hash_ident,GNUNET_i2s(target));
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Plugin: url `%s'\n",url);
   if (msg == cs->pending_outbound_msg_tail)
   {
@@ -1450,33 +1446,33 @@
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Unloading http plugin...\n");
 
-  if ( http_task_v4 != GNUNET_SCHEDULER_NO_TASK)
+  if ( plugin->http_task_v4 != GNUNET_SCHEDULER_NO_TASK)
   {
-    GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task_v4);
-    http_task_v4 = GNUNET_SCHEDULER_NO_TASK;
+    GNUNET_SCHEDULER_cancel(plugin->env->sched, plugin->http_task_v4);
+    plugin->http_task_v4 = GNUNET_SCHEDULER_NO_TASK;
   }
 
-  if ( http_task_v6 != GNUNET_SCHEDULER_NO_TASK)
+  if ( plugin->http_task_v6 != GNUNET_SCHEDULER_NO_TASK)
   {
-    GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task_v6);
-    http_task_v6 = GNUNET_SCHEDULER_NO_TASK;
+    GNUNET_SCHEDULER_cancel(plugin->env->sched, plugin->http_task_v6);
+    plugin->http_task_v6 = GNUNET_SCHEDULER_NO_TASK;
   }
 
-  if ( http_task_send != GNUNET_SCHEDULER_NO_TASK)
+  if ( plugin->http_task_send != GNUNET_SCHEDULER_NO_TASK)
   {
-    GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task_send);
-    http_task_send = GNUNET_SCHEDULER_NO_TASK;
+    GNUNET_SCHEDULER_cancel(plugin->env->sched, plugin->http_task_send);
+    plugin->http_task_send = GNUNET_SCHEDULER_NO_TASK;
   }
 
-  if (http_daemon_v4 != NULL)
+  if (plugin->http_daemon_v4 != NULL)
   {
-    MHD_stop_daemon (http_daemon_v4);
-    http_daemon_v4 = NULL;
+    MHD_stop_daemon (plugin->http_daemon_v4);
+    plugin->http_daemon_v4 = NULL;
   }
-  if (http_daemon_v6 != NULL)
+  if (plugin->http_daemon_v6 != NULL)
   {
-    MHD_stop_daemon (http_daemon_v6);
-    http_daemon_v6 = NULL;
+    MHD_stop_daemon (plugin->http_daemon_v6);
+    plugin->http_daemon_v6 = NULL;
   }
 
   /* free all sessions */
@@ -1486,7 +1482,7 @@
 
   GNUNET_CONTAINER_multihashmap_destroy (plugin->sessions);
 
-  mret = curl_multi_cleanup(multi_handle);
+  mret = curl_multi_cleanup(plugin->multi_handle);
   if ( CURLM_OK != mret)
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"curl multihandle clean up failed");
 
@@ -1504,7 +1500,6 @@
 {
   struct GNUNET_TRANSPORT_PluginEnvironment *env = cls;
   struct GNUNET_TRANSPORT_PluginFunctions *api;
-  unsigned int timeout;
   struct GNUNET_TIME_Relative gn_timeout;
   long long unsigned int port;
 
@@ -1522,7 +1517,7 @@
   api->address_to_string = &http_plugin_address_to_string;
 
   /* Hashing our identity to use it in URLs */
-  GNUNET_CRYPTO_hash_to_enc ( &(plugin->env->my_identity->hashPubKey), 
&my_ascii_hash_ident);
+  GNUNET_CRYPTO_hash_to_enc ( &(plugin->env->my_identity->hashPubKey), 
&plugin->my_ascii_hash_ident);
 
   /* Reading port number from config file */
   if ((GNUNET_OK !=
@@ -1543,40 +1538,37 @@
   GNUNET_assert ((port > 0) && (port <= 65535));
   plugin->port_inbound = port;
   gn_timeout = GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT;
-  timeout = ( gn_timeout.value / 1000);
-  if ((http_daemon_v4 == NULL) && (http_daemon_v6 == NULL) && (port != 0))
+  if ((plugin->http_daemon_v4 == NULL) && (plugin->http_daemon_v6 == NULL) && 
(port != 0))
     {
-    http_daemon_v6 = MHD_start_daemon (MHD_USE_IPv6,
+    plugin->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, timeout,
-                                       /* FIXME: set correct limit */
+                                       MHD_OPTION_CONNECTION_TIMEOUT, 
(gn_timeout.value / 1000),
                                        MHD_OPTION_CONNECTION_MEMORY_LIMIT, 
(size_t) (16 * 1024),
                                        MHD_OPTION_NOTIFY_COMPLETED, 
&requestCompletedCallback, NULL,
                                        MHD_OPTION_END);
-    http_daemon_v4 = MHD_start_daemon (MHD_NO_FLAG,
+    plugin->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, timeout,
-                                       /* FIXME: set correct limit */
+                                       MHD_OPTION_CONNECTION_TIMEOUT, 
(gn_timeout.value / 1000),
                                        MHD_OPTION_CONNECTION_MEMORY_LIMIT, 
(size_t) (16 * 1024),
                                        MHD_OPTION_NOTIFY_COMPLETED, 
&requestCompletedCallback, NULL,
                                        MHD_OPTION_END);
     }
-  if (http_daemon_v4 != NULL)
-    http_task_v4 = http_daemon_prepare (http_daemon_v4);
-  if (http_daemon_v6 != NULL)
-    http_task_v6 = http_daemon_prepare (http_daemon_v6);
+  if (plugin->http_daemon_v4 != NULL)
+    plugin->http_task_v4 = http_daemon_prepare (plugin->http_daemon_v4);
+  if (plugin->http_daemon_v6 != NULL)
+    plugin->http_task_v6 = http_daemon_prepare (plugin->http_daemon_v6);
 
-  if (http_task_v4 != GNUNET_SCHEDULER_NO_TASK)
+  if (plugin->http_task_v4 != GNUNET_SCHEDULER_NO_TASK)
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting MHD with IPv4 on port 
%u\n",port);
-  else if (http_task_v6 != GNUNET_SCHEDULER_NO_TASK)
+  else if (plugin->http_task_v6 != GNUNET_SCHEDULER_NO_TASK)
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting MHD with IPv4 and IPv6 on 
port %u\n",port);
   else
   {
@@ -1586,8 +1578,8 @@
   }
 
   /* Initializing cURL */
-  multi_handle = curl_multi_init();
-  if ( NULL == multi_handle )
+  plugin->multi_handle = curl_multi_init();
+  if ( NULL == plugin->multi_handle )
   {
     GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
                      "http",




reply via email to

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