| Tor
    0.4.7.0-alpha-dev
    | 
#include <download_status_st.h>
| Data Fields | |
| time_t | next_attempt_at | 
| uint8_t | n_download_failures | 
| uint8_t | n_download_attempts | 
| download_schedule_bitfield_t | schedule: 8 | 
| download_want_authority_bitfield_t | want_authority: 1 | 
| download_schedule_increment_bitfield_t | increment_on: 1 | 
| uint8_t | last_backoff_position | 
| int | last_delay_used | 
Information about our plans for retrying downloads for a downloadable directory object. Each type of downloadable directory object has a corresponding retry schedule, which can be different depending on whether the object is being downloaded from an authority or a mirror (want_authority). next_attempt_at contains the next time we will attempt to download the object. For schedules that increment_on failure, n_download_failures is used to determine the position in the schedule. (Each schedule is a smartlist of integer delays, parsed from a CSV option.) Every time a connection attempt fails, n_download_failures is incremented, the new delay value is looked up from the schedule, and next_attempt_at is set delay seconds from the time the previous connection failed. Therefore, at most one failure-based connection can be in progress for each download_status_t. For schedules that increment_on attempt, n_download_attempts is used to determine the position in the schedule. Every time a connection attempt is made, n_download_attempts is incremented, the new delay value is looked up from the schedule, and next_attempt_at is set delay seconds from the time the previous connection was attempted. Therefore, multiple concurrent attempted-based connections can be in progress for each download_status_t. After an object is successfully downloaded, any other concurrent connections are terminated. A new schedule which starts at position 0 is used for subsequent downloads of the same object.
Definition at line 41 of file download_status_st.h.
| download_schedule_increment_bitfield_t increment_on | 
does this schedule increment on each attempt, or after each failure?
Definition at line 58 of file download_status_st.h.
Referenced by download_status_increment_attempt(), download_status_increment_failure(), and download_status_schedule_get_delay().
| uint8_t last_backoff_position | 
number of attempts/failures, depending on increment_on, when we last recalculated the delay. Only updated if backoff == 1.
Definition at line 61 of file download_status_st.h.
| int last_delay_used | 
last delay used for random exponential backoff; only updated if backoff == 1
Definition at line 65 of file download_status_st.h.
| uint8_t n_download_attempts | 
Number of (potentially concurrent) attempts to download the most recent object, since the last success.
Definition at line 46 of file download_status_st.h.
Referenced by download_status_get_n_attempts(), download_status_mark_impossible(), and download_status_reset().
| uint8_t n_download_failures | 
Number of failed downloads of the most recent object, since the last success.
Definition at line 44 of file download_status_st.h.
Referenced by download_status_get_n_failures(), download_status_increment_failure(), download_status_mark_impossible(), and download_status_reset().
| time_t next_attempt_at | 
When should we try downloading this object again?
Definition at line 42 of file download_status_st.h.
Referenced by download_status_get_next_attempt_at(), download_status_increment_attempt(), download_status_increment_failure(), download_status_is_ready(), and download_status_reset().
| download_schedule_bitfield_t schedule | 
What kind of object is being downloaded? This determines the schedule used for the download.
Definition at line 49 of file download_status_st.h.
Referenced by download_status_cert_init(), find_dl_min_delay(), and update_consensus_bootstrap_attempt_downloads().
| download_want_authority_bitfield_t want_authority | 
Is the download happening from an authority or a mirror? This determines the schedule used for the download.
Definition at line 53 of file download_status_st.h.