aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_http.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2010-09-08 16:30:28 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2010-09-08 16:30:28 +0000
commit042b6ba7300b7d34555b630cca28cbb1fd743f12 (patch)
treedaa42ce9a53e9b12a6df94df9406965775e296fc /src/transport/plugin_transport_http.c
parentd48acad134d12c3b43ebf6dad76e678f76477927 (diff)
downloadgnunet-042b6ba7300b7d34555b630cca28cbb1fd743f12.tar.gz
gnunet-042b6ba7300b7d34555b630cca28cbb1fd743f12.zip
Diffstat (limited to 'src/transport/plugin_transport_http.c')
-rw-r--r--src/transport/plugin_transport_http.c56
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
1222static size_t curl_get_header_cb( void *ptr, size_t size, size_t nmemb, void *stream) 1220static 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