aboutsummaryrefslogtreecommitdiff
path: root/src/gns
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2016-08-29 17:10:07 +0000
committerMartin Schanzenbach <mschanzenbach@posteo.de>2016-08-29 17:10:07 +0000
commit9cea85e419df69a9994c80d70344c162e3ff9a31 (patch)
tree3fb446c53df04b0b283713eb3481751a3a4872f9 /src/gns
parent3705a5c56748387c96724014e3f0e61641c2f662 (diff)
downloadgnunet-9cea85e419df69a9994c80d70344c162e3ff9a31.tar.gz
gnunet-9cea85e419df69a9994c80d70344c162e3ff9a31.zip
-fix various bugs
Diffstat (limited to 'src/gns')
-rw-r--r--src/gns/gnunet-gns-proxy.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c
index 36790994a..44182a30f 100644
--- a/src/gns/gnunet-gns-proxy.c
+++ b/src/gns/gnunet-gns-proxy.c
@@ -802,7 +802,6 @@ mhd_content_cb (void *cls,
802 { 802 {
803 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 803 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
804 "Completed MHD download\n"); 804 "Completed MHD download\n");
805 s5r->state = SOCKS5_SOCKET_WITH_MHD;
806 return MHD_CONTENT_READER_END_OF_STREAM; 805 return MHD_CONTENT_READER_END_OF_STREAM;
807 } 806 }
808 GNUNET_memcpy (buf, s5r->io_buf, bytes_to_copy); 807 GNUNET_memcpy (buf, s5r->io_buf, bytes_to_copy);
@@ -1139,9 +1138,8 @@ curl_check_hdr (void *buffer, size_t size, size_t nmemb, void *cls)
1139 *tok = '\0'; 1138 *tok = '\0';
1140 if (NULL != (tok = strchr (hdr_val, '\t'))) 1139 if (NULL != (tok = strchr (hdr_val, '\t')))
1141 *tok = '\0'; 1140 *tok = '\0';
1142 if ( (0 != strlen (hdr_val) ) && 1141 if ((0 != strlen (hdr_val) ) &&
1143 /* We do chunked transfer encoding */ 1142 (0 != strcasecmp (MHD_HTTP_HEADER_CONTENT_LENGTH, hdr_type)))
1144 (0 != strcasecmp (MHD_HTTP_HEADER_CONTENT_LENGTH, hdr_type)))
1145 { 1143 {
1146 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1144 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1147 "Adding header %s: %s to MHD response\n", 1145 "Adding header %s: %s to MHD response\n",
@@ -1381,11 +1379,6 @@ curl_task_download (void *cls)
1381 run_mhd_now (s5r->hd); 1379 run_mhd_now (s5r->hd);
1382 break; 1380 break;
1383 } 1381 }
1384 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1385 "Cleaning up cURL handle\n");
1386 curl_multi_remove_handle (curl_multi, s5r->curl);
1387 curl_easy_cleanup (s5r->curl);
1388 s5r->curl = NULL;
1389 if (NULL == s5r->response) 1382 if (NULL == s5r->response)
1390 s5r->response = curl_failure_response; 1383 s5r->response = curl_failure_response;
1391 break; 1384 break;
@@ -1443,8 +1436,8 @@ con_val_iter (void *cls,
1443 if ( (0 == strcasecmp (MHD_HTTP_HEADER_HOST, key)) && 1436 if ( (0 == strcasecmp (MHD_HTTP_HEADER_HOST, key)) &&
1444 (NULL != s5r->leho) ) 1437 (NULL != s5r->leho) )
1445 value = s5r->leho; 1438 value = s5r->leho;
1446 /*if (0 == strcasecmp (MHD_HTTP_HEADER_CONNECTION, key)) 1439 if (0 == strcasecmp (MHD_HTTP_HEADER_CONTENT_LENGTH, key))
1447 value = "Close";*/ 1440 return MHD_YES;
1448 GNUNET_asprintf (&hdr, 1441 GNUNET_asprintf (&hdr,
1449 "%s: %s", 1442 "%s: %s",
1450 key, 1443 key,
@@ -1508,7 +1501,7 @@ create_response (void *cls,
1508 GNUNET_break (0); 1501 GNUNET_break (0);
1509 return MHD_NO; 1502 return MHD_NO;
1510 } 1503 }
1511 //Fresh connection. Maybe move to notify callback?? 1504 //Fresh connection.
1512 if (SOCKS5_SOCKET_WITH_MHD == s5r->state) 1505 if (SOCKS5_SOCKET_WITH_MHD == s5r->state)
1513 { 1506 {
1514 /* first time here, initialize curl handle */ 1507 /* first time here, initialize curl handle */
@@ -1679,7 +1672,8 @@ create_response (void *cls,
1679 MHD_get_connection_values (con, 1672 MHD_get_connection_values (con,
1680 MHD_HEADER_KIND, 1673 MHD_HEADER_KIND,
1681 &con_val_iter, s5r); 1674 &con_val_iter, s5r);
1682 //TODO is this sane? 1675 //TODO is this sane? Basically we disable cURLs built-in expect:
1676 //100-continue
1683 s5r->headers = curl_slist_append (s5r->headers, 1677 s5r->headers = curl_slist_append (s5r->headers,
1684 "Expect:"); 1678 "Expect:");
1685 curl_easy_setopt (s5r->curl, CURLOPT_HTTPHEADER, s5r->headers); 1679 curl_easy_setopt (s5r->curl, CURLOPT_HTTPHEADER, s5r->headers);
@@ -1750,16 +1744,23 @@ mhd_completed_cb (void *cls,
1750 if (NULL != s5r->curl) 1744 if (NULL != s5r->curl)
1751 { 1745 {
1752 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1746 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1753 "Cleaning up cURL handle\n"); 1747 "Resetting cURL handle\n");
1754 curl_multi_remove_handle (curl_multi, s5r->curl); 1748 curl_multi_remove_handle (curl_multi, s5r->curl);
1755 curl_easy_cleanup (s5r->curl); 1749 curl_slist_free_all (s5r->headers);
1756 s5r->curl = NULL; 1750 s5r->headers = NULL;
1751 curl_easy_reset (s5r->curl);
1752 s5r->rbuf_len = 0;
1753 s5r->wbuf_len = 0;
1754 s5r->io_len = 0;
1757 } 1755 }
1758 if ( (NULL != s5r->response) && 1756 if ( (NULL != s5r->response) &&
1759 (curl_failure_response != s5r->response) ) 1757 (curl_failure_response != s5r->response) )
1760 MHD_destroy_response (s5r->response); 1758 MHD_destroy_response (s5r->response);
1759 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Finished request for %s\n", s5r->url);
1760 GNUNET_free (s5r->url);
1761 s5r->state = SOCKS5_SOCKET_WITH_MHD;
1762 s5r->url = NULL;
1761 s5r->response = NULL; 1763 s5r->response = NULL;
1762 curl_download_prepare();
1763 *con_cls = NULL; 1764 *con_cls = NULL;
1764} 1765}
1765 1766
@@ -1805,7 +1806,7 @@ mhd_connection_cb (void *cls,
1805 1806
1806 if (NULL == s5r) 1807 if (NULL == s5r)
1807 { 1808 {
1808 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connection stale!\n"); 1809 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Connection stale!\n");
1809 return; 1810 return;
1810 } 1811 }
1811 cleanup_s5r (s5r); 1812 cleanup_s5r (s5r);
@@ -1836,6 +1837,7 @@ mhd_log_callback (void *cls,
1836 1837
1837 ci = MHD_get_connection_info (connection, 1838 ci = MHD_get_connection_info (connection,
1838 MHD_CONNECTION_INFO_CONNECTION_FD); 1839 MHD_CONNECTION_INFO_CONNECTION_FD);
1840 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Processing %s\n", url);
1839 if (NULL == ci) 1841 if (NULL == ci)
1840 { 1842 {
1841 GNUNET_break (0); 1843 GNUNET_break (0);
@@ -1852,8 +1854,10 @@ mhd_log_callback (void *cls,
1852 return NULL; 1854 return NULL;
1853 } 1855 }
1854 s5r->url = GNUNET_strdup (url); 1856 s5r->url = GNUNET_strdup (url);
1855 GNUNET_SCHEDULER_cancel (s5r->timeout_task); 1857 if (NULL != s5r->timeout_task)
1858 GNUNET_SCHEDULER_cancel (s5r->timeout_task);
1856 s5r->timeout_task = NULL; 1859 s5r->timeout_task = NULL;
1860 GNUNET_assert (s5r->state == SOCKS5_SOCKET_WITH_MHD);
1857 return s5r; 1861 return s5r;
1858 } 1862 }
1859 } 1863 }