diff options
Diffstat (limited to 'src/fs/fs_download.c')
-rw-r--r-- | src/fs/fs_download.c | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/src/fs/fs_download.c b/src/fs/fs_download.c index 424aaf5d4..14e6266f8 100644 --- a/src/fs/fs_download.c +++ b/src/fs/fs_download.c | |||
@@ -23,8 +23,9 @@ | |||
23 | * @author Christian Grothoff | 23 | * @author Christian Grothoff |
24 | * | 24 | * |
25 | * TODO: | 25 | * TODO: |
26 | * - location URI suppport (can wait, easy) | ||
27 | * - persistence (can wait) | 26 | * - persistence (can wait) |
27 | * - location URI suppport (can wait, easy) | ||
28 | * - different priority for scheduling probe downloads? | ||
28 | * - check if iblocks can be computed from existing blocks (can wait, hard) | 29 | * - check if iblocks can be computed from existing blocks (can wait, hard) |
29 | */ | 30 | */ |
30 | #include "platform.h" | 31 | #include "platform.h" |
@@ -137,8 +138,8 @@ compute_dblock_offset (uint64_t offset, | |||
137 | 138 | ||
138 | 139 | ||
139 | /** | 140 | /** |
140 | * Fill in all of the generic fields for | 141 | * Fill in all of the generic fields for a download event and call the |
141 | * a download event. | 142 | * callback. |
142 | * | 143 | * |
143 | * @param pi structure to fill in | 144 | * @param pi structure to fill in |
144 | * @param dc overall download context | 145 | * @param dc overall download context |
@@ -168,6 +169,12 @@ make_download_status (struct GNUNET_FS_ProgressInfo *pi, | |||
168 | = GNUNET_TIME_calculate_eta (dc->start_time, | 169 | = GNUNET_TIME_calculate_eta (dc->start_time, |
169 | dc->completed, | 170 | dc->completed, |
170 | dc->length); | 171 | dc->length); |
172 | if (0 == (dc->options & GNUNET_FS_DOWNLOAD_IS_PROBE)) | ||
173 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | ||
174 | pi); | ||
175 | else | ||
176 | dc->client_info = GNUNET_FS_search_probe_progress_ (NULL, | ||
177 | pi); | ||
171 | } | 178 | } |
172 | 179 | ||
173 | /** | 180 | /** |
@@ -624,8 +631,6 @@ check_completed (struct GNUNET_FS_DownloadContext *dc) | |||
624 | /* signal completion */ | 631 | /* signal completion */ |
625 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_COMPLETED; | 632 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_COMPLETED; |
626 | make_download_status (&pi, dc); | 633 | make_download_status (&pi, dc); |
627 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | ||
628 | &pi); | ||
629 | if (dc->parent != NULL) | 634 | if (dc->parent != NULL) |
630 | check_completed (dc->parent); | 635 | check_completed (dc->parent); |
631 | } | 636 | } |
@@ -847,10 +852,8 @@ process_result_with_request (void *cls, | |||
847 | dc->emsg = GNUNET_strdup ("Internal error or bogus download URI"); | 852 | dc->emsg = GNUNET_strdup ("Internal error or bogus download URI"); |
848 | /* signal error */ | 853 | /* signal error */ |
849 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_ERROR; | 854 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_ERROR; |
850 | make_download_status (&pi, dc); | ||
851 | pi.value.download.specifics.error.message = dc->emsg; | 855 | pi.value.download.specifics.error.message = dc->emsg; |
852 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | 856 | make_download_status (&pi, dc); |
853 | &pi); | ||
854 | /* abort all pending requests */ | 857 | /* abort all pending requests */ |
855 | if (NULL != dc->th) | 858 | if (NULL != dc->th) |
856 | { | 859 | { |
@@ -913,11 +916,8 @@ process_result_with_request (void *cls, | |||
913 | 916 | ||
914 | /* signal error */ | 917 | /* signal error */ |
915 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_ERROR; | 918 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_ERROR; |
916 | make_download_status (&pi, dc); | ||
917 | pi.value.download.specifics.error.message = emsg; | 919 | pi.value.download.specifics.error.message = emsg; |
918 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | 920 | make_download_status (&pi, dc); |
919 | &pi); | ||
920 | |||
921 | /* abort all pending requests */ | 921 | /* abort all pending requests */ |
922 | if (NULL != dc->th) | 922 | if (NULL != dc->th) |
923 | { | 923 | { |
@@ -961,13 +961,11 @@ process_result_with_request (void *cls, | |||
961 | 961 | ||
962 | } | 962 | } |
963 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_PROGRESS; | 963 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_PROGRESS; |
964 | make_download_status (&pi, dc); | ||
965 | pi.value.download.specifics.progress.data = pt; | 964 | pi.value.download.specifics.progress.data = pt; |
966 | pi.value.download.specifics.progress.offset = sm->offset; | 965 | pi.value.download.specifics.progress.offset = sm->offset; |
967 | pi.value.download.specifics.progress.data_len = prc->size; | 966 | pi.value.download.specifics.progress.data_len = prc->size; |
968 | pi.value.download.specifics.progress.depth = sm->depth; | 967 | pi.value.download.specifics.progress.depth = sm->depth; |
969 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | 968 | make_download_status (&pi, dc); |
970 | &pi); | ||
971 | GNUNET_assert (dc->completed <= dc->length); | 969 | GNUNET_assert (dc->completed <= dc->length); |
972 | if (dc->completed == dc->length) | 970 | if (dc->completed == dc->length) |
973 | { | 971 | { |
@@ -999,8 +997,6 @@ process_result_with_request (void *cls, | |||
999 | /* signal completion */ | 997 | /* signal completion */ |
1000 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_COMPLETED; | 998 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_COMPLETED; |
1001 | make_download_status (&pi, dc); | 999 | make_download_status (&pi, dc); |
1002 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | ||
1003 | &pi); | ||
1004 | if (dc->parent != NULL) | 1000 | if (dc->parent != NULL) |
1005 | check_completed (dc->parent); | 1001 | check_completed (dc->parent); |
1006 | } | 1002 | } |
@@ -1296,8 +1292,6 @@ activate_fs_download (void *cls, | |||
1296 | GNUNET_TIME_UNIT_FOREVER_REL); | 1292 | GNUNET_TIME_UNIT_FOREVER_REL); |
1297 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_ACTIVE; | 1293 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_ACTIVE; |
1298 | make_download_status (&pi, dc); | 1294 | make_download_status (&pi, dc); |
1299 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | ||
1300 | &pi); | ||
1301 | GNUNET_CONTAINER_multihashmap_iterate (dc->active, | 1295 | GNUNET_CONTAINER_multihashmap_iterate (dc->active, |
1302 | &retry_entry, | 1296 | &retry_entry, |
1303 | dc); | 1297 | dc); |
@@ -1336,8 +1330,6 @@ deactivate_fs_download (void *cls) | |||
1336 | } | 1330 | } |
1337 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_INACTIVE; | 1331 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_INACTIVE; |
1338 | make_download_status (&pi, dc); | 1332 | make_download_status (&pi, dc); |
1339 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | ||
1340 | &pi); | ||
1341 | } | 1333 | } |
1342 | 1334 | ||
1343 | 1335 | ||
@@ -1464,10 +1456,8 @@ GNUNET_FS_download_start (struct GNUNET_FS_Handle *h, | |||
1464 | #endif | 1456 | #endif |
1465 | // FIXME: make persistent | 1457 | // FIXME: make persistent |
1466 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_START; | 1458 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_START; |
1467 | make_download_status (&pi, dc); | ||
1468 | pi.value.download.specifics.start.meta = meta; | 1459 | pi.value.download.specifics.start.meta = meta; |
1469 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | 1460 | make_download_status (&pi, dc); |
1470 | &pi); | ||
1471 | schedule_block_download (dc, | 1461 | schedule_block_download (dc, |
1472 | &dc->uri->data.chk.chk, | 1462 | &dc->uri->data.chk.chk, |
1473 | 0, | 1463 | 0, |
@@ -1527,9 +1517,6 @@ GNUNET_FS_download_stop (struct GNUNET_FS_DownloadContext *dc, | |||
1527 | 1517 | ||
1528 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_STOPPED; | 1518 | pi.status = GNUNET_FS_STATUS_DOWNLOAD_STOPPED; |
1529 | make_download_status (&pi, dc); | 1519 | make_download_status (&pi, dc); |
1530 | dc->client_info = dc->h->upcb (dc->h->upcb_cls, | ||
1531 | &pi); | ||
1532 | |||
1533 | if (GNUNET_SCHEDULER_NO_TASK != dc->task) | 1520 | if (GNUNET_SCHEDULER_NO_TASK != dc->task) |
1534 | GNUNET_SCHEDULER_cancel (dc->h->sched, | 1521 | GNUNET_SCHEDULER_cancel (dc->h->sched, |
1535 | dc->task); | 1522 | dc->task); |