gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r11225 - gnunet/src/transport
Date: Thu, 6 May 2010 15:05:24 +0200

Author: wachs
Date: 2010-05-06 15:05:24 +0200 (Thu, 06 May 2010)
New Revision: 11225

Modified:
   gnunet/src/transport/plugin_transport_http.c
   gnunet/src/transport/test_plugin_transport_http.c
Log:


Modified: gnunet/src/transport/plugin_transport_http.c
===================================================================
--- gnunet/src/transport/plugin_transport_http.c        2010-05-06 13:03:12 UTC 
(rev 11224)
+++ gnunet/src/transport/plugin_transport_http.c        2010-05-06 13:05:24 UTC 
(rev 11225)
@@ -163,9 +163,13 @@
  */
 static GNUNET_SCHEDULER_TaskIdentifier http_task_v6;
 
-static char * hd_src ;
+/**
+ * ID of the task downloading the hostlist
+ */
+static GNUNET_SCHEDULER_TaskIdentifier ti_download;
 
 
+
 /**
  * Curl multi for managing client operations.
  */
@@ -183,6 +187,20 @@
 }
 
 /**
+ * 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)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Download!!!");
+}
+
+/**
  * Function that can be used by the transport service to transmit
  * a message using the plugin.
  *
@@ -224,6 +242,7 @@
 {
   char * peer_url = get_url( target );
   CURL *curl;
+  CURLMcode mret;
   CURLcode ret;
 
   int bytes_sent = 0;
@@ -271,7 +290,91 @@
                     CURLOPT_TIMEOUT,
                     60L);
 
+  curl_multi = curl_multi_init ();
+  if (curl_multi == NULL)
+    {
+      GNUNET_break (0);
+      /* 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;
+    }
+
+
+  fd_set rs;
+  fd_set ws;
+  fd_set es;
+  int max;
+  struct GNUNET_NETWORK_FDSet *grs;
+  struct GNUNET_NETWORK_FDSet *gws;
+  struct GNUNET_TIME_Relative rtime;
+  long timeout_curl;
+  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_ERROR,
+                  _("%s failed at %s:%d: `%s'\n"),
+                  "curl_multi_fdset", __FILE__, __LINE__,
+                  curl_multi_strerror (mret));
+      /* clean_up (); */
+      return 0;
+    }
+  mret = curl_multi_timeout (curl_multi, &timeout_curl);
+  if (mret != CURLM_OK)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _("%s failed at %s:%d: `%s'\n"),
+                  "curl_multi_timeout", __FILE__, __LINE__,
+                  curl_multi_strerror (mret));
+      /* clean_up (); */
+      return 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);
+#if DEBUG_HOSTLIST_CLIENT
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Scheduling task for hostlist download using cURL\n");
+#endif
+
+  ti_download = GNUNET_SCHEDULER_add_select (plugin->env->sched,
+                                   GNUNET_SCHEDULER_PRIORITY_DEFAULT,
+                                   GNUNET_SCHEDULER_NO_TASK,
+                                   GNUNET_TIME_UNIT_FOREVER_REL,
+                                   grs,
+                                   gws,
+                                   &task_download,
+                                   curl_multi);
+  GNUNET_NETWORK_fdset_destroy (gws);
+  GNUNET_NETWORK_fdset_destroy (grs);
+
   GNUNET_free(peer_url);
+  /* FIXME: */
+  bytes_sent = msgbuf_size;
+
   return bytes_sent;
 }
 
@@ -498,6 +601,12 @@
 
   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);
+    http_task_v4 = GNUNET_SCHEDULER_NO_TASK;
+  }
+
   if ( http_task_v4 != GNUNET_SCHEDULER_NO_TASK)
   {
     GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task_v4);

Modified: gnunet/src/transport/test_plugin_transport_http.c
===================================================================
--- gnunet/src/transport/test_plugin_transport_http.c   2010-05-06 13:03:12 UTC 
(rev 11224)
+++ gnunet/src/transport/test_plugin_transport_http.c   2010-05-06 13:05:24 UTC 
(rev 11225)
@@ -46,6 +46,10 @@
  */
 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
 
+/**
+ * How long until we give up on transmitting the message?
+ */
+#define STAT_INTERVALL GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 1)
 
 /**
  * Our public key.
@@ -101,6 +105,13 @@
 pid_t pid;
 
 /**
+ * ID of the task controlling the locking between two hostlist tests
+ */
+static GNUNET_SCHEDULER_TaskIdentifier ti_check_stat;
+
+static unsigned int timeout_count;
+
+/**
  * Initialize Environment for this plugin
  */
 static struct GNUNET_TIME_Relative
@@ -140,6 +151,8 @@
                                        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;
 }
@@ -172,6 +185,31 @@
 
 
 /**
+ * Task that checks if we should try to download a hostlist.
+ * If so, we initiate the download, otherwise we schedule
+ * this task again for a later time.
+ */
+static void
+task_check_stat (void *cls,
+            const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "check...%u \n",  timeout_count);
+  ti_check_stat = GNUNET_SCHEDULER_NO_TASK;
+
+  if ( timeout_count > 3 )
+  {
+    shutdown_clean();
+    return;
+  }
+  timeout_count++;
+
+  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
+    return;
+
+  ti_check_stat = GNUNET_SCHEDULER_add_delayed (sched, STAT_INTERVALL, 
&task_check_stat, NULL);
+}
+
+/**
  * Runs the test.
  *
  * @param cls closure
@@ -265,11 +303,18 @@
   fail = GNUNET_NO;
 
   char * test_message  = "Hello World!";
+  size_t bs = 0;
   size_t size = strlen(test_message) +1;
 
   /* Testing to send */
-  api->send(NULL, &my_identity,test_message,size,0, TIMEOUT, NULL, NULL, 0, 
GNUNET_NO, NULL, NULL);
-  shutdown_clean ();
+  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_STATISTICS_get(stats, "http-transport", )
+
+  //ps shutdown_clean ();
   return;
 }
 





reply via email to

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