diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2016-08-29 17:10:07 +0000 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2016-08-29 17:10:07 +0000 |
commit | 9cea85e419df69a9994c80d70344c162e3ff9a31 (patch) | |
tree | 3fb446c53df04b0b283713eb3481751a3a4872f9 /src/gns | |
parent | 3705a5c56748387c96724014e3f0e61641c2f662 (diff) | |
download | gnunet-9cea85e419df69a9994c80d70344c162e3ff9a31.tar.gz gnunet-9cea85e419df69a9994c80d70344c162e3ff9a31.zip |
-fix various bugs
Diffstat (limited to 'src/gns')
-rw-r--r-- | src/gns/gnunet-gns-proxy.c | 42 |
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 | } |