Browse Source

Code to implement networkstatus fetch from controllers. Only works when dirport is set for now; should be good enough to make serifos html front-end not be as wrong.

svn:r6251
Nick Mathewson 18 years ago
parent
commit
2421724853
1 changed files with 20 additions and 0 deletions
  1. 20 0
      src/or/control.c

+ 20 - 0
src/or/control.c

@@ -1481,6 +1481,26 @@ handle_getinfo_helper(const char *question, char **answer)
     *cp = '\0';
     tor_free(url);
     smartlist_free(descs);
+  } else if (!strcmpstart(question, "dir/status/")) {
+    smartlist_t *status_list;
+    size_t len;
+    char *cp;
+    if (!get_options()->DirPort)
+      return 0;
+    status_list = smartlist_create();
+    if (!dirserv_get_networkstatus_v2(status_list,
+                                      question+strlen("dir/status/"))) {
+      smartlist_free(status_list);
+      return 0;
+    }
+    len = 0;
+    SMARTLIST_FOREACH(status_list, cached_dir_t *, d, len += d->dir_len);
+    cp = *answer = tor_malloc(len+1);
+    SMARTLIST_FOREACH(status_list, cached_dir_t *, d, {
+      memcpy(cp, d->dir, d->dir_len);
+      cp += d->dir_len;
+      });
+    *cp = '\0';
   }
   return 0;
 }