aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-05-16 21:35:37 +0200
committerChristian Grothoff <christian@grothoff.org>2018-05-16 21:36:38 +0200
commit215e607f63847c77bd26d4c97eae8c7d6ca7f4a0 (patch)
treec8747261f2e4777a7a20cc735661bd3ba25404f3
parent96f4f72bcd0b0314a29783b64a31a76e9c62bf86 (diff)
downloadgnunet-215e607f63847c77bd26d4c97eae8c7d6ca7f4a0.tar.gz
gnunet-215e607f63847c77bd26d4c97eae8c7d6ca7f4a0.zip
optimize setting upload length if available
-rw-r--r--src/gns/gnunet-gns-benchmark.c2
-rw-r--r--src/gns/gnunet-gns-proxy.c34
-rw-r--r--src/gns/gnunet-service-gns.c19
3 files changed, 45 insertions, 10 deletions
diff --git a/src/gns/gnunet-gns-benchmark.c b/src/gns/gnunet-gns-benchmark.c
index afa540c85..d5afae9f6 100644
--- a/src/gns/gnunet-gns-benchmark.c
+++ b/src/gns/gnunet-gns-benchmark.c
@@ -492,7 +492,7 @@ process_stdin (void *cls)
492 delta = GNUNET_TIME_absolute_get_duration (last); 492 delta = GNUNET_TIME_absolute_get_duration (last);
493 last = GNUNET_TIME_absolute_get (); 493 last = GNUNET_TIME_absolute_get ();
494 fprintf (stderr, 494 fprintf (stderr,
495 "Read 10000 domain names in %s\n", 495 "Read 100000 domain names in %s\n",
496 GNUNET_STRINGS_relative_time_to_string (delta, 496 GNUNET_STRINGS_relative_time_to_string (delta,
497 GNUNET_YES)); 497 GNUNET_YES));
498 } 498 }
diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c
index 08663a57e..02ebcf0f1 100644
--- a/src/gns/gnunet-gns-proxy.c
+++ b/src/gns/gnunet-gns-proxy.c
@@ -1801,6 +1801,23 @@ create_response (void *cls,
1801 curl_easy_setopt (s5r->curl, CURLOPT_WRITEDATA, s5r); 1801 curl_easy_setopt (s5r->curl, CURLOPT_WRITEDATA, s5r);
1802 curl_easy_setopt (s5r->curl, CURLOPT_READFUNCTION, &curl_upload_cb); 1802 curl_easy_setopt (s5r->curl, CURLOPT_READFUNCTION, &curl_upload_cb);
1803 curl_easy_setopt (s5r->curl, CURLOPT_READDATA, s5r); 1803 curl_easy_setopt (s5r->curl, CURLOPT_READDATA, s5r);
1804 {
1805 const char *us;
1806 long upload_size;
1807
1808 us = MHD_lookup_connection_value (con,
1809 MHD_HEADER_KIND,
1810 MHD_HTTP_HEADER_CONTENT_LENGTH);
1811 if ( (1 == sscanf (us,
1812 "%ld",
1813 &upload_size)) &&
1814 (upload_size >= 0) )
1815 {
1816 curl_easy_setopt (s5r->curl,
1817 CURLOPT_INFILESIZE,
1818 upload_size);
1819 }
1820 }
1804 } 1821 }
1805 else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_POST)) 1822 else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_POST))
1806 { 1823 {
@@ -1810,6 +1827,23 @@ create_response (void *cls,
1810 curl_easy_setopt (s5r->curl, CURLOPT_WRITEDATA, s5r); 1827 curl_easy_setopt (s5r->curl, CURLOPT_WRITEDATA, s5r);
1811 curl_easy_setopt (s5r->curl, CURLOPT_READFUNCTION, &curl_upload_cb); 1828 curl_easy_setopt (s5r->curl, CURLOPT_READFUNCTION, &curl_upload_cb);
1812 curl_easy_setopt (s5r->curl, CURLOPT_READDATA, s5r); 1829 curl_easy_setopt (s5r->curl, CURLOPT_READDATA, s5r);
1830 {
1831 const char *us;
1832 long upload_size;
1833
1834 us = MHD_lookup_connection_value (con,
1835 MHD_HEADER_KIND,
1836 MHD_HTTP_HEADER_CONTENT_LENGTH);
1837 if ( (1 == sscanf (us,
1838 "%ld",
1839 &upload_size)) &&
1840 (upload_size >= 0) )
1841 {
1842 curl_easy_setopt (s5r->curl,
1843 CURLOPT_INFILESIZE,
1844 upload_size);
1845 }
1846 }
1813 } 1847 }
1814 else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_HEAD)) 1848 else if (0 == strcasecmp (meth, MHD_HTTP_METHOD_HEAD))
1815 { 1849 {
diff --git a/src/gns/gnunet-service-gns.c b/src/gns/gnunet-service-gns.c
index c376ddfcc..cffae824d 100644
--- a/src/gns/gnunet-service-gns.c
+++ b/src/gns/gnunet-service-gns.c
@@ -296,7 +296,6 @@ client_disconnect_cb (void *cls,
296 clh); 296 clh);
297 GNUNET_free (clh); 297 GNUNET_free (clh);
298 } 298 }
299
300 GNUNET_free (gc); 299 GNUNET_free (gc);
301} 300}
302 301
@@ -340,26 +339,29 @@ send_lookup_response (void* cls,
340 const struct GNUNET_GNSRECORD_Data *rd) 339 const struct GNUNET_GNSRECORD_Data *rd)
341{ 340{
342 struct ClientLookupHandle *clh = cls; 341 struct ClientLookupHandle *clh = cls;
343 struct GNUNET_MQ_Envelope *env; 342 struct GnsClient *gc = clh->gc;
343 struct GNUNET_MQ_Envelope *env;
344 struct LookupResultMessage *rmsg; 344 struct LookupResultMessage *rmsg;
345 size_t len; 345 size_t len;
346 346
347 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 347 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
348 "Sending LOOKUP_RESULT message with %u results\n", 348 "Sending LOOKUP_RESULT message with %u results\n",
349 (unsigned int) rd_count); 349 (unsigned int) rd_count);
350 350 len = GNUNET_GNSRECORD_records_get_size (rd_count,
351 len = GNUNET_GNSRECORD_records_get_size (rd_count, rd); 351 rd);
352 env = GNUNET_MQ_msg_extra (rmsg, 352 env = GNUNET_MQ_msg_extra (rmsg,
353 len, 353 len,
354 GNUNET_MESSAGE_TYPE_GNS_LOOKUP_RESULT); 354 GNUNET_MESSAGE_TYPE_GNS_LOOKUP_RESULT);
355 rmsg->id = clh->request_id; 355 rmsg->id = clh->request_id;
356 rmsg->rd_count = htonl (rd_count); 356 rmsg->rd_count = htonl (rd_count);
357 GNUNET_GNSRECORD_records_serialize (rd_count, rd, len, 357 GNUNET_GNSRECORD_records_serialize (rd_count,
358 rd,
359 len,
358 (char*) &rmsg[1]); 360 (char*) &rmsg[1]);
359 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq(clh->gc->client), 361 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (gc->client),
360 env); 362 env);
361 GNUNET_CONTAINER_DLL_remove (clh->gc->clh_head, 363 GNUNET_CONTAINER_DLL_remove (gc->clh_head,
362 clh->gc->clh_tail, 364 gc->clh_tail,
363 clh); 365 clh);
364 GNUNET_free (clh); 366 GNUNET_free (clh);
365 GNUNET_STATISTICS_update (statistics, 367 GNUNET_STATISTICS_update (statistics,
@@ -428,7 +430,6 @@ handle_lookup (void *cls,
428 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 430 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
429 "Received LOOKUP `%s' message\n", 431 "Received LOOKUP `%s' message\n",
430 name); 432 name);
431
432 clh = GNUNET_new (struct ClientLookupHandle); 433 clh = GNUNET_new (struct ClientLookupHandle);
433 GNUNET_CONTAINER_DLL_insert (gc->clh_head, 434 GNUNET_CONTAINER_DLL_insert (gc->clh_head,
434 gc->clh_tail, 435 gc->clh_tail,