diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-03-04 12:09:54 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-03-04 12:09:54 +0000 |
commit | 8ef6a251c80c2a57e470e5928c44954b2d582484 (patch) | |
tree | c6f1fe894d9354b085b9b674dc38572d4d333e78 /src/fs/gnunet-service-fs_lc.c | |
parent | 3ef84f3677066f95a67a3df8b9943cf7892a7894 (diff) | |
download | gnunet-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.c | 59 |
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, |