aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs_download.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/fs_download.c')
-rw-r--r--src/fs/fs_download.c41
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);