Sfoglia il codice sorgente

Dont call directory_get_from_dirserver when you have a particular dirserver in mind; remove fetch-from-authority special-case in directory_get_from_dirserver.

svn:r5741
Nick Mathewson 19 anni fa
parent
commit
50b6b3258d
2 ha cambiato i file con 7 aggiunte e 14 eliminazioni
  1. 2 12
      src/or/directory.c
  2. 5 2
      src/or/routerlist.c

+ 2 - 12
src/or/directory.c

@@ -157,7 +157,7 @@ directory_get_from_dirserver(uint8_t purpose, const char *resource,
 {
   routerstatus_t *rs = NULL;
   or_options_t *options = get_options();
-  int fetch_fresh_first = server_mode(options) && options->DirPort != 0;
+  int prefer_authority = server_mode(options) && options->DirPort != 0;
   int directconn = !purpose_is_private(purpose);
 
   int need_v1_support = purpose == DIR_PURPOSE_FETCH_DIR ||
@@ -166,17 +166,7 @@ directory_get_from_dirserver(uint8_t purpose, const char *resource,
                         purpose == DIR_PURPOSE_FETCH_SERVERDESC;
 
   if (directconn) {
-    if (fetch_fresh_first && purpose == DIR_PURPOSE_FETCH_NETWORKSTATUS &&
-        !strcmpstart(resource,"fp/") && strlen(resource) >= HEX_DIGEST_LEN+3) {
-      /* Try to ask the actual dirserver its opinion. */
-      char digest[DIGEST_LEN];
-      trusted_dir_server_t *ds;
-      base16_decode(digest, DIGEST_LEN, resource+3, HEX_DIGEST_LEN);
-      ds = router_get_trusteddirserver_by_digest(digest);
-      if (ds)
-        rs = &(ds->fake_status);
-    }
-    if (!rs && fetch_fresh_first) {
+    if (prefer_authority) {
       /* only ask authdirservers, and don't ask myself */
       rs = router_pick_trusteddirserver(need_v1_support, 1, 1,
                                         retry_if_no_servers);

+ 5 - 2
src/or/routerlist.c

@@ -2225,8 +2225,11 @@ update_networkstatus_cache_downloads(time_t now)
          strlcpy(resource, "fp/", sizeof(resource));
          base16_encode(resource+3, sizeof(resource)-3, ds->digest, DIGEST_LEN);
          strlcat(resource, ".z", sizeof(resource));
-         directory_get_from_dirserver(DIR_PURPOSE_FETCH_NETWORKSTATUS,
-                                      resource,1);
+         directory_initiate_command_routerstatus(
+               &ds->fake_status, DIR_PURPOSE_FETCH_NETWORKSTATUS,
+               0, /* Not private */
+               resource,
+               NULL, 0 /* No payload. */);
        });
   } else {
     /* A non-authority cache launches one connection to a random authority. */