diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2010-09-08 16:30:28 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2010-09-08 16:30:28 +0000 |
commit | 042b6ba7300b7d34555b630cca28cbb1fd743f12 (patch) | |
tree | daa42ce9a53e9b12a6df94df9406965775e296fc /src/transport/plugin_transport_http.c | |
parent | d48acad134d12c3b43ebf6dad76e678f76477927 (diff) | |
download | gnunet-042b6ba7300b7d34555b630cca28cbb1fd743f12.tar.gz gnunet-042b6ba7300b7d34555b630cca28cbb1fd743f12.zip |
Diffstat (limited to 'src/transport/plugin_transport_http.c')
-rw-r--r-- | src/transport/plugin_transport_http.c | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/src/transport/plugin_transport_http.c b/src/transport/plugin_transport_http.c index 1fa2af464..84177af54 100644 --- a/src/transport/plugin_transport_http.c +++ b/src/transport/plugin_transport_http.c | |||
@@ -1193,8 +1193,7 @@ static void http_server_daemon_v4_run (void *cls, | |||
1193 | 1193 | ||
1194 | GNUNET_assert (MHD_YES == MHD_run (plugin->http_server_daemon_v4)); | 1194 | GNUNET_assert (MHD_YES == MHD_run (plugin->http_server_daemon_v4)); |
1195 | plugin->http_server_task_v4 = http_server_daemon_prepare (plugin, plugin->http_server_daemon_v4); | 1195 | plugin->http_server_task_v4 = http_server_daemon_prepare (plugin, plugin->http_server_daemon_v4); |
1196 | return; | 1196 | } |
1197 | } | ||
1198 | 1197 | ||
1199 | 1198 | ||
1200 | /** | 1199 | /** |
@@ -1216,7 +1215,6 @@ static void http_server_daemon_v6_run (void *cls, | |||
1216 | 1215 | ||
1217 | GNUNET_assert (MHD_YES == MHD_run (plugin->http_server_daemon_v6)); | 1216 | GNUNET_assert (MHD_YES == MHD_run (plugin->http_server_daemon_v6)); |
1218 | plugin->http_server_task_v6 = http_server_daemon_prepare (plugin, plugin->http_server_daemon_v6); | 1217 | plugin->http_server_task_v6 = http_server_daemon_prepare (plugin, plugin->http_server_daemon_v6); |
1219 | return; | ||
1220 | } | 1218 | } |
1221 | 1219 | ||
1222 | static size_t curl_get_header_cb( void *ptr, size_t size, size_t nmemb, void *stream) | 1220 | static size_t curl_get_header_cb( void *ptr, size_t size, size_t nmemb, void *stream) |
@@ -1262,8 +1260,7 @@ static size_t curl_get_header_cb( void *ptr, size_t size, size_t nmemb, void *st | |||
1262 | } | 1260 | } |
1263 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: Header: %s\n",ps,tmp); | 1261 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: Header: %s\n",ps,tmp); |
1264 | } | 1262 | } |
1265 | if (NULL != tmp) | 1263 | GNUNET_free_non_null (tmp); |
1266 | GNUNET_free (tmp); | ||
1267 | #endif | 1264 | #endif |
1268 | 1265 | ||
1269 | return size * nmemb; | 1266 | return size * nmemb; |
@@ -1324,8 +1321,8 @@ static size_t curl_put_header_cb( void *ptr, size_t size, size_t nmemb, void *st | |||
1324 | tmp[len-2]= '\0'; | 1321 | tmp[len-2]= '\0'; |
1325 | } | 1322 | } |
1326 | } | 1323 | } |
1327 | if (NULL != tmp) | 1324 | |
1328 | GNUNET_free (tmp); | 1325 | GNUNET_free_non_null (tmp); |
1329 | 1326 | ||
1330 | return size * nmemb; | 1327 | return size * nmemb; |
1331 | } | 1328 | } |
@@ -1347,7 +1344,9 @@ static size_t curl_send_cb(void *stream, size_t size, size_t nmemb, void *ptr) | |||
1347 | size_t len; | 1344 | size_t len; |
1348 | 1345 | ||
1349 | if (ps->send_active == GNUNET_NO) | 1346 | if (ps->send_active == GNUNET_NO) |
1347 | { | ||
1350 | return CURL_READFUNC_PAUSE; | 1348 | return CURL_READFUNC_PAUSE; |
1349 | } | ||
1351 | 1350 | ||
1352 | if ((ps->pending_msgs_tail == NULL) && (ps->send_active == GNUNET_YES)) | 1351 | if ((ps->pending_msgs_tail == NULL) && (ps->send_active == GNUNET_YES)) |
1353 | { | 1352 | { |
@@ -1589,6 +1588,8 @@ static void curl_perform (void *cls, | |||
1589 | 1588 | ||
1590 | GNUNET_assert(cls !=NULL); | 1589 | GNUNET_assert(cls !=NULL); |
1591 | 1590 | ||
1591 | |||
1592 | |||
1592 | plugin->http_curl_task = GNUNET_SCHEDULER_NO_TASK; | 1593 | plugin->http_curl_task = GNUNET_SCHEDULER_NO_TASK; |
1593 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) | 1594 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) |
1594 | return; | 1595 | return; |
@@ -1602,6 +1603,7 @@ static void curl_perform (void *cls, | |||
1602 | handles_last_run = running; | 1603 | handles_last_run = running; |
1603 | } | 1604 | } |
1604 | while (mret == CURLM_CALL_MULTI_PERFORM); | 1605 | while (mret == CURLM_CALL_MULTI_PERFORM); |
1606 | |||
1605 | curl_schedule(plugin); | 1607 | curl_schedule(plugin); |
1606 | } | 1608 | } |
1607 | 1609 | ||
@@ -1632,6 +1634,7 @@ static int curl_schedule(void *cls) | |||
1632 | GNUNET_SCHEDULER_cancel(plugin->env->sched, plugin->http_curl_task); | 1634 | GNUNET_SCHEDULER_cancel(plugin->env->sched, plugin->http_curl_task); |
1633 | plugin->http_curl_task = GNUNET_SCHEDULER_NO_TASK; | 1635 | plugin->http_curl_task = GNUNET_SCHEDULER_NO_TASK; |
1634 | } | 1636 | } |
1637 | |||
1635 | max = -1; | 1638 | max = -1; |
1636 | FD_ZERO (&rs); | 1639 | FD_ZERO (&rs); |
1637 | FD_ZERO (&ws); | 1640 | FD_ZERO (&ws); |
@@ -1662,7 +1665,7 @@ static int curl_schedule(void *cls) | |||
1662 | plugin->http_curl_task = GNUNET_SCHEDULER_add_select (plugin->env->sched, | 1665 | plugin->http_curl_task = GNUNET_SCHEDULER_add_select (plugin->env->sched, |
1663 | GNUNET_SCHEDULER_PRIORITY_DEFAULT, | 1666 | GNUNET_SCHEDULER_PRIORITY_DEFAULT, |
1664 | GNUNET_SCHEDULER_NO_TASK, | 1667 | GNUNET_SCHEDULER_NO_TASK, |
1665 | GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 0), | 1668 | (to == -1) ? GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5) : GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, to), |
1666 | grs, | 1669 | grs, |
1667 | gws, | 1670 | gws, |
1668 | &curl_perform, | 1671 | &curl_perform, |
@@ -1732,16 +1735,12 @@ static ssize_t send_check_connections (void *cls, struct Session *ps) | |||
1732 | return GNUNET_SYSERR; | 1735 | return GNUNET_SYSERR; |
1733 | } | 1736 | } |
1734 | } | 1737 | } |
1735 | if (curl_schedule (plugin) == GNUNET_SYSERR) | 1738 | if (plugin->http_curl_task != GNUNET_SCHEDULER_NO_TASK) |
1736 | { | 1739 | { |
1737 | #if DEBUG_CONNECTIONS | 1740 | GNUNET_SCHEDULER_cancel(plugin->env->sched, plugin->http_curl_task); |
1738 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: could not schedule curl task\n",ps); | 1741 | plugin->http_curl_task = GNUNET_SCHEDULER_NO_TASK; |
1739 | #endif | 1742 | } |
1740 | return GNUNET_SYSERR; | 1743 | plugin->http_curl_task = GNUNET_SCHEDULER_add_now (plugin->env->sched, &curl_perform, plugin); |
1741 | } | ||
1742 | #if DEBUG_CONNECTIONS | ||
1743 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: inbound not connected, initiating connection\n",ps); | ||
1744 | #endif | ||
1745 | } | 1744 | } |
1746 | 1745 | ||
1747 | /* waiting for receive direction */ | 1746 | /* waiting for receive direction */ |
@@ -1767,6 +1766,12 @@ static ssize_t send_check_connections (void *cls, struct Session *ps) | |||
1767 | if (CURLE_OK == curl_easy_pause(ps->send_endpoint,CURLPAUSE_CONT)) | 1766 | if (CURLE_OK == curl_easy_pause(ps->send_endpoint,CURLPAUSE_CONT)) |
1768 | { | 1767 | { |
1769 | ps->send_active=GNUNET_YES; | 1768 | ps->send_active=GNUNET_YES; |
1769 | if (plugin->http_curl_task != GNUNET_SCHEDULER_NO_TASK) | ||
1770 | { | ||
1771 | GNUNET_SCHEDULER_cancel(plugin->env->sched, plugin->http_curl_task); | ||
1772 | plugin->http_curl_task = GNUNET_SCHEDULER_NO_TASK; | ||
1773 | } | ||
1774 | plugin->http_curl_task = GNUNET_SCHEDULER_add_now (plugin->env->sched, &curl_perform, plugin); | ||
1770 | return GNUNET_YES; | 1775 | return GNUNET_YES; |
1771 | } | 1776 | } |
1772 | else | 1777 | else |
@@ -1823,8 +1828,12 @@ static ssize_t send_check_connections (void *cls, struct Session *ps) | |||
1823 | } | 1828 | } |
1824 | } | 1829 | } |
1825 | } | 1830 | } |
1826 | if (curl_schedule (plugin) == GNUNET_SYSERR) | 1831 | if (plugin->http_curl_task != GNUNET_SCHEDULER_NO_TASK) |
1827 | return GNUNET_SYSERR; | 1832 | { |
1833 | GNUNET_SCHEDULER_cancel(plugin->env->sched, plugin->http_curl_task); | ||
1834 | plugin->http_curl_task = GNUNET_SCHEDULER_NO_TASK; | ||
1835 | } | ||
1836 | plugin->http_curl_task = GNUNET_SCHEDULER_add_now (plugin->env->sched, &curl_perform, plugin); | ||
1828 | return GNUNET_YES; | 1837 | return GNUNET_YES; |
1829 | } | 1838 | } |
1830 | if (ps->direction == INBOUND) | 1839 | if (ps->direction == INBOUND) |
@@ -2115,17 +2124,14 @@ http_plugin_send (void *cls, | |||
2115 | memcpy (msg->buf,msgbuf, msgbuf_size); | 2124 | memcpy (msg->buf,msgbuf, msgbuf_size); |
2116 | GNUNET_CONTAINER_DLL_insert(ps->pending_msgs_head,ps->pending_msgs_tail,msg); | 2125 | GNUNET_CONTAINER_DLL_insert(ps->pending_msgs_head,ps->pending_msgs_tail,msg); |
2117 | 2126 | ||
2118 | if (send_check_connections (plugin, ps) != GNUNET_SYSERR) | 2127 | if (send_check_connections (plugin, ps) == GNUNET_SYSERR) |
2119 | { | 2128 | return GNUNET_SYSERR; |
2120 | if (force_address != GNUNET_YES) | 2129 | if (force_address != GNUNET_YES) |
2121 | pc->last_session = ps; | 2130 | pc->last_session = ps; |
2122 | 2131 | ||
2123 | if (pc->last_session==NULL) | 2132 | if (pc->last_session==NULL) |
2124 | pc->last_session = ps; | 2133 | pc->last_session = ps; |
2125 | return msg->size; | 2134 | return msg->size; |
2126 | } | ||
2127 | else | ||
2128 | return GNUNET_SYSERR; | ||
2129 | } | 2135 | } |
2130 | 2136 | ||
2131 | 2137 | ||