aboutsummaryrefslogtreecommitdiff
path: root/src/fs/gnunet-service-fs_lc.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-03-04 12:09:54 +0000
committerChristian Grothoff <christian@grothoff.org>2011-03-04 12:09:54 +0000
commit8ef6a251c80c2a57e470e5928c44954b2d582484 (patch)
treec6f1fe894d9354b085b9b674dc38572d4d333e78 /src/fs/gnunet-service-fs_lc.c
parent3ef84f3677066f95a67a3df8b9943cf7892a7894 (diff)
downloadgnunet-8ef6a251c80c2a57e470e5928c44954b2d582484.tar.gz
gnunet-8ef6a251c80c2a57e470e5928c44954b2d582484.zip
fixes
Diffstat (limited to 'src/fs/gnunet-service-fs_lc.c')
-rw-r--r--src/fs/gnunet-service-fs_lc.c59
1 files changed, 33 insertions, 26 deletions
diff --git a/src/fs/gnunet-service-fs_lc.c b/src/fs/gnunet-service-fs_lc.c
index 474d2da2a..cb57e871f 100644
--- a/src/fs/gnunet-service-fs_lc.c
+++ b/src/fs/gnunet-service-fs_lc.c
@@ -26,6 +26,8 @@
26 26
27#include "platform.h" 27#include "platform.h"
28#include "gnunet-service-fs_lc.h" 28#include "gnunet-service-fs_lc.h"
29#include "gnunet-service-fs_cp.h"
30#include "gnunet-service-fs_pr.h"
29 31
30 32
31/** 33/**
@@ -205,6 +207,7 @@ client_response_handler (void *cls,
205 struct GSF_LocalClient *lc; 207 struct GSF_LocalClient *lc;
206 struct PutMessage *pm; 208 struct PutMessage *pm;
207 const struct GSF_PendingRequestData *prd; 209 const struct GSF_PendingRequestData *prd;
210 size_t msize;
208 211
209 if (NULL == data) 212 if (NULL == data)
210 { 213 {
@@ -213,18 +216,19 @@ client_response_handler (void *cls,
213 GNUNET_assert (GNUNET_NO == more); 216 GNUNET_assert (GNUNET_NO == more);
214 return; 217 return;
215 } 218 }
216 GNUNET_STATISTICS_update (stats, 219 GNUNET_STATISTICS_update (GSF_stats,
217 gettext_noop ("# replies received for local clients"), 220 gettext_noop ("# replies received for local clients"),
218 1, 221 1,
219 GNUNET_NO); 222 GNUNET_NO);
220 prd = GSF_pending_request_get_data_ (pr); 223 prd = GSF_pending_request_get_data_ (pr);
221 GNUNET_assert (pr == cr->pr); 224 GNUNET_assert (pr == cr->pr);
222 lc = cr->lc; 225 lc = cr->lc;
223 pm = GNUNET_malloc (sizeof (PutMessage) + data_len); 226 msize = sizeof (struct PutMessage) + data_len;
227 pm = GNUNET_malloc (msize);
224 pm->header.type = htons (GNUNET_MESSAGE_TYPE_FS_PUT); 228 pm->header.type = htons (GNUNET_MESSAGE_TYPE_FS_PUT);
225 pm->header.size = htons (msize); 229 pm->header.size = htons (msize);
226 pm->type = htonl (prd->type); 230 pm->type = htonl (prd->type);
227 pm->expiration = GNUNET_TIME_absolute_hton (prq->expiration); 231 pm->expiration = GNUNET_TIME_absolute_hton (expiration);
228 memcpy (&pm[1], data, data_len); 232 memcpy (&pm[1], data, data_len);
229 GSF_local_client_transmit_ (lc, &pm->header); 233 GSF_local_client_transmit_ (lc, &pm->header);
230 234
@@ -253,7 +257,7 @@ GSF_local_client_start_search_handler_ (struct GNUNET_SERVER_Client *client,
253 const struct SearchMessage *sm; 257 const struct SearchMessage *sm;
254 struct GSF_LocalClient *lc; 258 struct GSF_LocalClient *lc;
255 struct ClientRequest *cr; 259 struct ClientRequest *cr;
256 struct GSF_PendingRequest *pr; 260 struct GSF_PendingRequestData *prd;
257 uint16_t msize; 261 uint16_t msize;
258 unsigned int sc; 262 unsigned int sc;
259 enum GNUNET_BLOCK_Type type; 263 enum GNUNET_BLOCK_Type type;
@@ -268,7 +272,7 @@ GSF_local_client_start_search_handler_ (struct GNUNET_SERVER_Client *client,
268 GNUNET_SYSERR); 272 GNUNET_SYSERR);
269 return NULL; 273 return NULL;
270 } 274 }
271 GNUNET_STATISTICS_update (stats, 275 GNUNET_STATISTICS_update (GSF_stats,
272 gettext_noop ("# client searches received"), 276 gettext_noop ("# client searches received"),
273 1, 277 1,
274 GNUNET_NO); 278 GNUNET_NO);
@@ -289,22 +293,26 @@ GSF_local_client_start_search_handler_ (struct GNUNET_SERVER_Client *client,
289 (type == GNUNET_BLOCK_TYPE_ANY) ) 293 (type == GNUNET_BLOCK_TYPE_ANY) )
290 { 294 {
291 cr = lc->cr_head; 295 cr = lc->cr_head;
292 while ( (cl != NULL) && 296 while (cr != NULL)
293 ( (0 != memcmp (GSF_pending_request_get_query_ (cr->pr), 297 {
294 &sm->query, 298 prd = GSF_pending_request_get_data_ (cr->pr);
295 sizeof (GNUNET_HashCode))) || 299 if ( (0 != memcmp (&prd->query,
296 (GSF_pending_request_get_type_ (cr->pr) != type) ) ) 300 &sm->query,
297 cr = cr->next; 301 sizeof (GNUNET_HashCode))) &&
298 if (crl != NULL) 302 (prd->type == type) )
303 break;
304 cr = cr->next;
305 }
306 if (cr != NULL)
299 { 307 {
300#if DEBUG_FS 308#if DEBUG_FS
301 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 309 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
302 "Have existing request, merging content-seen lists.\n"); 310 "Have existing request, merging content-seen lists.\n");
303#endif 311#endif
304 GSF_pending_request_update_ (cr->pr, 312 GSF_pending_request_update_ (cr->pr,
305 &sm[1], 313 (const GNUNET_HashCode*) &sm[1],
306 sc); 314 sc);
307 GNUNET_STATISTICS_update (stats, 315 GNUNET_STATISTICS_update (GSF_stats,
308 gettext_noop ("# client searches updated (merged content seen list)"), 316 gettext_noop ("# client searches updated (merged content seen list)"),
309 1, 317 1,
310 GNUNET_NO); 318 GNUNET_NO);
@@ -314,7 +322,7 @@ GSF_local_client_start_search_handler_ (struct GNUNET_SERVER_Client *client,
314 } 322 }
315 } 323 }
316 324
317 GNUNET_STATISTICS_update (stats, 325 GNUNET_STATISTICS_update (GSF_stats,
318 gettext_noop ("# client searches active"), 326 gettext_noop ("# client searches active"),
319 1, 327 1,
320 GNUNET_NO); 328 GNUNET_NO);
@@ -329,18 +337,19 @@ GSF_local_client_start_search_handler_ (struct GNUNET_SERVER_Client *client,
329 cr->pr = GSF_pending_request_create_ (options, 337 cr->pr = GSF_pending_request_create_ (options,
330 type, 338 type,
331 &sm->query, 339 &sm->query,
332 (type == GNUNET_BLOCK_TYPE_SBLOCK) 340 (type == GNUNET_BLOCK_TYPE_FS_SBLOCK)
333 ? &sm->target /* namespace */ 341 ? &sm->target /* namespace */
334 : NULL, 342 : NULL,
335 (0 != memcmp (&sm->target, 343 (0 != memcmp (&sm->target,
336 &all_zeros, 344 &all_zeros,
337 sizeof (GNUNET_HashCode))) 345 sizeof (GNUNET_HashCode)))
338 ? &sm->target, 346 ? (const struct GNUNET_PeerIdentity*) &sm->target
339 : NULL, 347 : NULL,
340 NULL, 0, 0 /* bf */, 348 NULL, 0, 0 /* bf */,
341 ntohl (sm->anonymity_level), 349 ntohl (sm->anonymity_level),
342 0 /* priority */, 350 0 /* priority */,
343 &sm[1], sc, 351 0 /* ttl */,
352 (const GNUNET_HashCode*) &sm[1], sc,
344 &client_response_handler, 353 &client_response_handler,
345 cr); 354 cr);
346 return cr->pr; 355 return cr->pr;
@@ -370,7 +379,7 @@ transmit_to_client (void *cls,
370 struct ClientResponse *res; 379 struct ClientResponse *res;
371 size_t msize; 380 size_t msize;
372 381
373 cl->th = NULL; 382 lc->th = NULL;
374 if (NULL == buf) 383 if (NULL == buf)
375 return 0; 384 return 0;
376 msize = 0; 385 msize = 0;
@@ -380,8 +389,8 @@ transmit_to_client (void *cls,
380 memcpy (&cbuf[msize], &res[1], res->msize); 389 memcpy (&cbuf[msize], &res[1], res->msize);
381 msize += res->msize; 390 msize += res->msize;
382 size -= res->msize; 391 size -= res->msize;
383 GNUNET_CONTAINER_DLL_remove (cl->res_head, 392 GNUNET_CONTAINER_DLL_remove (lc->res_head,
384 cl->res_tail, 393 lc->res_tail,
385 res); 394 res);
386 GNUNET_free (res); 395 GNUNET_free (res);
387 } 396 }
@@ -418,11 +427,10 @@ GSF_local_client_transmit_ (struct GSF_LocalClient *lc,
418 GNUNET_CONTAINER_DLL_insert_tail (lc->res_head, 427 GNUNET_CONTAINER_DLL_insert_tail (lc->res_head,
419 lc->res_tail, 428 lc->res_tail,
420 res); 429 res);
421 if (NULL == lc->tc) 430 if (NULL == lc->th)
422 lc->tc = GNUNET_CLIENT_notify_transmit_ready (lc->client, 431 lc->th = GNUNET_SERVER_notify_transmit_ready (lc->client,
423 msize, 432 msize,
424 GNUNET_TIME_UNIT_FOREVER_REL, 433 GNUNET_TIME_UNIT_FOREVER_REL,
425 GNUNET_NO,
426 &transmit_to_client, 434 &transmit_to_client,
427 lc); 435 lc);
428} 436}
@@ -440,7 +448,6 @@ GSF_client_disconnect_handler_ (void *cls,
440 const struct GNUNET_SERVER_Client *client) 448 const struct GNUNET_SERVER_Client *client)
441{ 449{
442 struct GSF_LocalClient *pos; 450 struct GSF_LocalClient *pos;
443 struct DisconnectCallback *dc;
444 struct ClientRequest *cr; 451 struct ClientRequest *cr;
445 struct ClientResponse *res; 452 struct ClientResponse *res;
446 453
@@ -449,7 +456,7 @@ GSF_client_disconnect_handler_ (void *cls,
449 (pos->client != client) ) 456 (pos->client != client) )
450 pos = pos->next; 457 pos = pos->next;
451 if (pos == NULL) 458 if (pos == NULL)
452 return pos; 459 return;
453 while (NULL != (cr = pos->cr_head)) 460 while (NULL != (cr = pos->cr_head))
454 { 461 {
455 GNUNET_CONTAINER_DLL_remove (pos->cr_head, 462 GNUNET_CONTAINER_DLL_remove (pos->cr_head,