|
@@ -912,11 +912,14 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now)
|
|
|
} SMARTLIST_FOREACH_END(d);
|
|
|
|
|
|
if (smartlist_len(fps) > 1) {
|
|
|
+ static int want_auth = 0;
|
|
|
resource = smartlist_join_strings(fps, "", 0, NULL);
|
|
|
- /* XXX - do we want certs from authorities or mirrors? - teor */
|
|
|
directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0,
|
|
|
resource, PDS_RETRY_IF_NO_SERVERS,
|
|
|
- DL_WANT_ANY_DIRSERVER);
|
|
|
+ want_auth ? DL_WANT_AUTHORITY
|
|
|
+ : DL_WANT_ANY_DIRSERVER);
|
|
|
+ /* on failure, swap between using fallbacks and authorities */
|
|
|
+ want_auth = !want_auth;
|
|
|
tor_free(resource);
|
|
|
}
|
|
|
/* else we didn't add any: they were all pending */
|
|
@@ -958,11 +961,14 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now)
|
|
|
} SMARTLIST_FOREACH_END(d);
|
|
|
|
|
|
if (smartlist_len(fp_pairs) > 1) {
|
|
|
+ static int want_auth = 0;
|
|
|
resource = smartlist_join_strings(fp_pairs, "", 0, NULL);
|
|
|
- /* XXX - do we want certs from authorities or mirrors? - teor */
|
|
|
directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0,
|
|
|
resource, PDS_RETRY_IF_NO_SERVERS,
|
|
|
- DL_WANT_ANY_DIRSERVER);
|
|
|
+ want_auth ? DL_WANT_AUTHORITY
|
|
|
+ : DL_WANT_ANY_DIRSERVER);
|
|
|
+ /* on failure, swap between using fallbacks and authorities */
|
|
|
+ want_auth = !want_auth;
|
|
|
tor_free(resource);
|
|
|
}
|
|
|
/* else they were all pending */
|