summaryrefslogtreecommitdiff
path: root/src/or/networkstatus.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/or/networkstatus.c')
-rw-r--r--src/or/networkstatus.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index a25413a12f..9d6d5abe6a 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -1915,9 +1915,27 @@ getinfo_helper_networkstatus(control_connection_t *conn,
return *answer ? 0 : -1;
} else if (!strcmp(question, "consensus/packages")) {
const networkstatus_t *ns = networkstatus_get_latest_consensus();
- if (ns->package_lines)
+ if (ns && ns->package_lines)
*answer = smartlist_join_strings(ns->package_lines, "\n", 1, NULL);
return *answer ? 0 : -1;
+ } else if (!strcmp(question, "consensus/valid-after") ||
+ !strcmp(question, "consensus/fresh-until") ||
+ !strcmp(question, "consensus/valid-until")) {
+ const networkstatus_t *ns = networkstatus_get_latest_consensus();
+ if (ns) {
+ time_t t;
+ if (!strcmp(question, "consensus/valid-after"))
+ t = ns->valid_after;
+ else if (!strcmp(question, "consensus/fresh-until"))
+ t = ns->fresh_until;
+ else
+ t = ns->valid_until;
+
+ char tbuf[ISO_TIME_LEN+1];
+ format_iso_time(tbuf, t);
+ *answer = tor_strdup(tbuf);
+ }
+ return *answer ? 0 : -1;
} else {
return 0;
}