aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_http_client.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-09-16 12:38:26 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-09-16 12:38:26 +0000
commit063adb71c2a42c2733e0665caefabf1dd3e74844 (patch)
treeb7454d6f1b0e425a29ec6a8459386e8e69e1e670 /src/transport/plugin_transport_http_client.c
parent29fa14da9469c471234a09250cde179ec95066d3 (diff)
downloadgnunet-063adb71c2a42c2733e0665caefabf1dd3e74844.tar.gz
gnunet-063adb71c2a42c2733e0665caefabf1dd3e74844.zip
Diffstat (limited to 'src/transport/plugin_transport_http_client.c')
-rw-r--r--src/transport/plugin_transport_http_client.c67
1 files changed, 42 insertions, 25 deletions
diff --git a/src/transport/plugin_transport_http_client.c b/src/transport/plugin_transport_http_client.c
index ca582332a..f62f7b2dd 100644
--- a/src/transport/plugin_transport_http_client.c
+++ b/src/transport/plugin_transport_http_client.c
@@ -126,6 +126,7 @@ client_schedule (struct Plugin *plugin)
126 gws = GNUNET_NETWORK_fdset_create (); 126 gws = GNUNET_NETWORK_fdset_create ();
127 GNUNET_NETWORK_fdset_copy_native (grs, &rs, max + 1); 127 GNUNET_NETWORK_fdset_copy_native (grs, &rs, max + 1);
128 GNUNET_NETWORK_fdset_copy_native (gws, &ws, max + 1); 128 GNUNET_NETWORK_fdset_copy_native (gws, &ws, max + 1);
129
129 plugin->client_perform_task = 130 plugin->client_perform_task =
130 GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, 131 GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
131 GNUNET_SCHEDULER_NO_TASK, 132 GNUNET_SCHEDULER_NO_TASK,
@@ -179,10 +180,10 @@ client_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
179 { 180 {
180#if DEBUG_HTTP 181#if DEBUG_HTTP
181 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name, 182 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
182 "Connection to '%s' %s ended\n", GNUNET_i2s(&s->target), http_plugin_address_to_string(s->plugin, s->addr, s->addrlen)); 183 "Connection to '%s' %s ended\n", GNUNET_i2s(&s->target), http_plugin_address_to_string(plugin, s->addr, s->addrlen));
183#endif 184#endif
184 client_disconnect(s); 185 client_disconnect(s);
185 notify_session_end (s->plugin, &s->target, s); 186 notify_session_end (plugin, &s->target, s);
186 } 187 }
187 } 188 }
188 189
@@ -197,7 +198,7 @@ client_disconnect (struct Session *s)
197{ 198{
198 int res = GNUNET_OK; 199 int res = GNUNET_OK;
199 CURLMcode mret; 200 CURLMcode mret;
200 struct Plugin *plugin = s->plugin; 201 struct Plugin *plugin = plugin;
201 202
202#if DEBUG_HTTP 203#if DEBUG_HTTP
203 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name, 204 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
@@ -205,14 +206,18 @@ client_disconnect (struct Session *s)
205 GNUNET_i2s (&s->target)); 206 GNUNET_i2s (&s->target));
206#endif 207#endif
207 208
208 mret = curl_multi_remove_handle (plugin->client_mh, s->client_put); 209 if (s->client_put != NULL)
209 if (mret != CURLM_OK)
210 { 210 {
211 mret = curl_multi_remove_handle (plugin->client_mh, s->client_put);
212 if (mret != CURLM_OK)
213 {
214 curl_easy_cleanup (s->client_put);
215 res = GNUNET_SYSERR;
216 GNUNET_break (0);
217 }
211 curl_easy_cleanup (s->client_put); 218 curl_easy_cleanup (s->client_put);
212 res = GNUNET_SYSERR; 219 s->client_put = NULL;
213 GNUNET_break (0);
214 } 220 }
215 curl_easy_cleanup (s->client_put);
216 221
217#if DEBUG_HTTP 222#if DEBUG_HTTP
218 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name, 223 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
@@ -220,15 +225,20 @@ client_disconnect (struct Session *s)
220 GNUNET_i2s (&s->target)); 225 GNUNET_i2s (&s->target));
221#endif 226#endif
222 227
223 mret = curl_multi_remove_handle (plugin->client_mh, s->client_get); 228 if (s->client_get != NULL)
224 if (mret != CURLM_OK)
225 { 229 {
230 mret = curl_multi_remove_handle (plugin->client_mh, s->client_get);
231 if (mret != CURLM_OK)
232 {
233 curl_easy_cleanup (s->client_get);
234 res = GNUNET_SYSERR;
235 GNUNET_break (0);
236 }
226 curl_easy_cleanup (s->client_get); 237 curl_easy_cleanup (s->client_get);
227 res = GNUNET_SYSERR; 238 s->client_get = NULL;
228 GNUNET_break (0);
229 } 239 }
230 curl_easy_cleanup (s->client_get); 240
231 plugin->cur_connections += 2; 241 plugin->cur_connections -= 2;
232 242
233 /* Re-schedule since handles have changed */ 243 /* Re-schedule since handles have changed */
234 if (plugin->client_perform_task!= GNUNET_SCHEDULER_NO_TASK) 244 if (plugin->client_perform_task!= GNUNET_SCHEDULER_NO_TASK)
@@ -236,7 +246,6 @@ client_disconnect (struct Session *s)
236 GNUNET_SCHEDULER_cancel (plugin->client_perform_task); 246 GNUNET_SCHEDULER_cancel (plugin->client_perform_task);
237 plugin->client_perform_task = GNUNET_SCHEDULER_NO_TASK; 247 plugin->client_perform_task = GNUNET_SCHEDULER_NO_TASK;
238 } 248 }
239
240 plugin->client_perform_task = GNUNET_SCHEDULER_add_now(client_run, plugin); 249 plugin->client_perform_task = GNUNET_SCHEDULER_add_now(client_run, plugin);
241 250
242 return res; 251 return res;
@@ -246,23 +255,24 @@ client_disconnect (struct Session *s)
246int 255int
247client_connect (struct Session *s) 256client_connect (struct Session *s)
248{ 257{
258 struct Plugin *plugin = s->plugin;
249 int res = GNUNET_OK; 259 int res = GNUNET_OK;
250 char *url; 260 char *url;
251 CURLMcode mret; 261 CURLMcode mret;
252 262
253#if DEBUG_HTTP 263#if VERBOSE_CLIENT
254 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, s->plugin->name, 264 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
255 "Initiating outbound session peer `%s'\n", 265 "Initiating outbound session peer `%s'\n",
256 GNUNET_i2s (&s->target)); 266 GNUNET_i2s (&s->target));
257#endif 267#endif
258 268
259 s->inbound = GNUNET_NO; 269 s->inbound = GNUNET_NO;
260 270
261 s->plugin->last_tag++; 271 plugin->last_tag++;
262 /* create url */ 272 /* create url */
263 GNUNET_asprintf (&url, "%s%s;%u", http_plugin_address_to_string (s->plugin, s->addr, s->addrlen), GNUNET_h2s_full (&s->plugin->env->my_identity->hashPubKey),s->plugin->last_tag); 273 GNUNET_asprintf (&url, "%s%s;%u", http_plugin_address_to_string (plugin, s->addr, s->addrlen), GNUNET_h2s_full (&plugin->env->my_identity->hashPubKey),plugin->last_tag);
264#if 0 274#if 0
265 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, s->plugin->name, 275 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
266 "URL `%s'\n", 276 "URL `%s'\n",
267 url); 277 url);
268#endif 278#endif
@@ -329,7 +339,7 @@ client_connect (struct Session *s)
329 339
330 GNUNET_free (url); 340 GNUNET_free (url);
331 341
332 mret = curl_multi_add_handle (s->plugin->client_mh, s->client_get); 342 mret = curl_multi_add_handle (plugin->client_mh, s->client_get);
333 if (mret != CURLM_OK) 343 if (mret != CURLM_OK)
334 { 344 {
335 curl_easy_cleanup (s->client_get); 345 curl_easy_cleanup (s->client_get);
@@ -337,10 +347,10 @@ client_connect (struct Session *s)
337 GNUNET_break (0); 347 GNUNET_break (0);
338 } 348 }
339 349
340 mret = curl_multi_add_handle (s->plugin->client_mh, s->client_put); 350 mret = curl_multi_add_handle (plugin->client_mh, s->client_put);
341 if (mret != CURLM_OK) 351 if (mret != CURLM_OK)
342 { 352 {
343 curl_multi_remove_handle (s->plugin->client_mh, s->client_get); 353 curl_multi_remove_handle (plugin->client_mh, s->client_get);
344 curl_easy_cleanup (s->client_get); 354 curl_easy_cleanup (s->client_get);
345 curl_easy_cleanup (s->client_put); 355 curl_easy_cleanup (s->client_put);
346 res = GNUNET_SYSERR; 356 res = GNUNET_SYSERR;
@@ -348,8 +358,15 @@ client_connect (struct Session *s)
348 } 358 }
349 359
350 /* Perform connect */ 360 /* Perform connect */
351 s->plugin->cur_connections += 2; 361 plugin->cur_connections += 2;
352 s->plugin->client_perform_task = GNUNET_SCHEDULER_add_now (client_run, s->plugin); 362
363 /* Re-schedule since handles have changed */
364 if (plugin->client_perform_task!= GNUNET_SCHEDULER_NO_TASK)
365 {
366 GNUNET_SCHEDULER_cancel (plugin->client_perform_task);
367 plugin->client_perform_task = GNUNET_SCHEDULER_NO_TASK;
368 }
369 plugin->client_perform_task = GNUNET_SCHEDULER_add_now (client_run, plugin);
353 370
354 return res; 371 return res;
355} 372}