Commit dbb481c1 authored by Roger Dingledine's avatar Roger Dingledine
Browse files

Serve the latest v3 networkstatus consensus via the control

port. Use "getinfo dir/status-vote/current/consensus" to fetch it.


svn:r16907
parent 4045ef72
Loading
Loading
Loading
Loading
+3 −1
Changes for ChangeLog: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -33,7 +33,9 @@ Changes in version 0.2.1.6-alpha - 2008-09-xx
    - Use a lockfile to make sure that two Tor processes are not
      simultaneously running with the same datadir.
    - Directory mirrors store and serve v2 hidden service descriptors by
      default (new default value for HidServDirectoryV2 is 1).
      default (i.e. new default value for HidServDirectoryV2 is 1).
    - Serve the latest v3 networkstatus consensus via the control
      port. Use "getinfo dir/status-vote/current/consensus" to fetch it.

  o Code simplifications and refactoring:
    - Revise the connection_new functions so that a more typesafe variant
+1 −0
Changes for doc/spec/control-spec.txt: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -531,6 +531,7 @@ $Id$
    "next-circuit/IP:port"
      XXX todo.

    "dir/status-vote/current/consensus" [added in Tor 0.2.1.6-alpha]
    "dir/status/authority"
    "dir/status/fp/<F>"
    "dir/status/fp/<F1>+<F2>+<F3>"
+17 −3
Changes for src/or/control.c: 17 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -1401,7 +1401,7 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
 * <b>ei</b> into the resulting string.  The thing you get back won't
 * necessarily have a valid signature.
 *
 * New code should never use this; it's for backward compatibiliy.
 * New code should never use this; it's for backward compatibility.
 *
 * NOTE: <b>ri_body</b> is as returned by signed_descriptor_get_body: it might
 * not be NUL-terminated. */
@@ -1572,7 +1572,18 @@ getinfo_helper_dir(control_connection_t *control_conn,
      SMARTLIST_FOREACH(status_list, char *, s, tor_free(s));
      smartlist_free(status_list);
    }
  } else if (!strcmp(question, "network-status")) {
  } else if (!strcmp(question, "dir/status-vote/current/consensus")) { /* v3 */
    if (directory_caches_dir_info(get_options())) {
      const cached_dir_t *consensus = dirserv_get_consensus();
      if (consensus)
        *answer = tor_strdup(consensus->dir);
    }
    if (!*answer) { /* try loading it from disk */
      char *filename = get_datadir_fname("cached-consensus");
      *answer = read_file_to_str(filename, RFTS_IGNORE_MISSING, NULL);
      tor_free(filename);
    }
  } else if (!strcmp(question, "network-status")) { /* v1 */
    routerlist_t *routerlist = router_get_routerlist();
    int verbose = control_conn->use_long_names;
    if (!routerlist || !routerlist->routers ||
@@ -1920,7 +1931,10 @@ static const getinfo_item_t getinfo_items[] = {
  ITEM("dir-usage", misc, "Breakdown of bytes transferred over DirPort."),
  PREFIX("desc-annotations/id/", dir, "Router annotations by hexdigest."),
  PREFIX("dir/server/", dir,"Router descriptors as retrieved from a DirPort."),
  PREFIX("dir/status/", dir,"Networkstatus docs as retrieved from a DirPort."),
  PREFIX("dir/status/", dir,
         "v2 networkstatus docs as retrieved from a DirPort."),
  ITEM("dir/status-vote/current/consensus", dir,
       "v3 Networkstatus consensus as retrieved from a DirPort."),
  PREFIX("exit-policy/default", policies,
         "The default value appended to the configured exit policy."),
  PREFIX("ip-to-country/", geoip, "Perform a GEOIP lookup"),
+1 −1
Changes for src/or/directory.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -2408,7 +2408,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
    url_len -= 2;
  }

  if (!strcmp(url,"/tor/") || !strcmp(url,"/tor/dir")) { /* dir fetch */
  if (!strcmp(url,"/tor/") || !strcmp(url,"/tor/dir")) { /* v1 dir fetch */
    cached_dir_t *d = dirserv_get_directory();

    if (!d) {
+1 −1
Changes for src/or/dirserv.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -1300,7 +1300,7 @@ _free_cached_dir(void *_d)
  cached_dir_decref(d);
}

/** If we have no cached directory, or it is older than <b>published</b>,
/** If we have no cached v1 directory, or it is older than <b>published</b>,
 * then replace it with <b>directory</b>, published at <b>published</b>.
 *
 * If <b>published</b> is too old, do nothing.