|
@@ -31,6 +31,7 @@
|
|
|
#include "router.h"
|
|
|
#include "routerlist.h"
|
|
|
#include "routerparse.h"
|
|
|
+#include "transports.h"
|
|
|
|
|
|
/** Map from lowercase nickname to identity digest of named server, if any. */
|
|
|
static strmap_t *named_server_map = NULL;
|
|
@@ -884,14 +885,37 @@ update_consensus_networkstatus_fetch_time(time_t now)
|
|
|
|
|
|
/** Return 1 if there's a reason we shouldn't try any directory
|
|
|
* fetches yet (e.g. we demand bridges and none are yet known).
|
|
|
- * Else return 0. */
|
|
|
+ * Else return 0.
|
|
|
+
|
|
|
+ * If we return 1 and <b>msg_out</b> is provided, set <b>msg_out</b>
|
|
|
+ * to an explanation of why directory fetches are delayed. (If we
|
|
|
+ * return 0, we set msg_out to NULL.)
|
|
|
+ */
|
|
|
int
|
|
|
-should_delay_dir_fetches(const or_options_t *options)
|
|
|
+should_delay_dir_fetches(const or_options_t *options, const char **msg_out)
|
|
|
{
|
|
|
- if (options->UseBridges && !any_bridge_descriptors_known()) {
|
|
|
- log_info(LD_DIR, "delaying dir fetches (no running bridges known)");
|
|
|
- return 1;
|
|
|
+ if (msg_out) {
|
|
|
+ *msg_out = NULL;
|
|
|
}
|
|
|
+
|
|
|
+ if (options->UseBridges) {
|
|
|
+ if (!any_bridge_descriptors_known()) {
|
|
|
+ if (msg_out) {
|
|
|
+ *msg_out = "No running bridges";
|
|
|
+ }
|
|
|
+ log_info(LD_DIR, "Delaying dir fetches (no running bridges known)");
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pt_proxies_configuration_pending()) {
|
|
|
+ if (msg_out) {
|
|
|
+ *msg_out = "Pluggable transport proxies still configuring";
|
|
|
+ }
|
|
|
+ log_info(LD_DIR, "Delaying dir fetches (pt proxies still configuring)");
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -901,7 +925,7 @@ void
|
|
|
update_networkstatus_downloads(time_t now)
|
|
|
{
|
|
|
const or_options_t *options = get_options();
|
|
|
- if (should_delay_dir_fetches(options))
|
|
|
+ if (should_delay_dir_fetches(options, NULL))
|
|
|
return;
|
|
|
update_consensus_networkstatus_downloads(now);
|
|
|
update_certificate_downloads(now);
|