summaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-07-16 16:58:11 +0000
committerNick Mathewson <nickm@torproject.org>2007-07-16 16:58:11 +0000
commit26a25edaec6a71173e866d4632ace6af22de892f (patch)
tree3acaebe5c7b2bdca3ca7036fed53bc3a4810ba34 /src/or
parent483c1e9017f4ac2ef4c0652e3402887578a265d6 (diff)
downloadtor-26a25edaec6a71173e866d4632ace6af22de892f.tar.gz
tor-26a25edaec6a71173e866d4632ace6af22de892f.zip
r13777@catbus: nickm | 2007-07-16 12:58:08 -0400
Patch from tup: new address-mappings/ GETINFO that includes expiry times. svn:r10844
Diffstat (limited to 'src/or')
-rw-r--r--src/or/connection_edge.c28
-rw-r--r--src/or/control.c35
-rw-r--r--src/or/or.h2
3 files changed, 46 insertions, 19 deletions
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 5eea4a0ff5..49151b99ac 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -617,14 +617,14 @@ addressmap_ent_remove(const char *address, addressmap_entry_t *ent)
void
addressmap_clear_configured(void)
{
- addressmap_get_mappings(NULL, 0, 0);
+ addressmap_get_mappings(NULL, 0, 0, 0);
}
/** Remove all entries from the addressmap that are set to expire, ever. */
void
addressmap_clear_transient(void)
{
- addressmap_get_mappings(NULL, 2, TIME_MAX);
+ addressmap_get_mappings(NULL, 2, TIME_MAX, 0);
}
/** Clean out entries from the addressmap cache that were
@@ -633,7 +633,7 @@ addressmap_clear_transient(void)
void
addressmap_clean(time_t now)
{
- addressmap_get_mappings(NULL, 2, now);
+ addressmap_get_mappings(NULL, 2, now, 0);
}
/** Free all the elements in the addressmap, and free the addressmap
@@ -1136,12 +1136,13 @@ address_is_invalid_destination(const char *address, int client)
/** Iterate over all address mappings which have expiry times between
* min_expires and max_expires, inclusive. If sl is provided, add an
- * "old-addr new-addr" string to sl for each mapping. If sl is NULL,
- * remove the mappings.
+ * "old-addr new-addr expiry" string to sl for each mapping, omitting
+ * the expiry time if want_expiry is false. If sl is NULL, remove the
+ * mappings.
*/
void
addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
- time_t max_expires)
+ time_t max_expires, int want_expiry)
{
strmap_iter_t *iter;
const char *key;
@@ -1160,9 +1161,20 @@ addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
addressmap_ent_remove(key, val);
continue;
} else if (val->new_address) {
- size_t len = strlen(key)+strlen(val->new_address)+2;
+ size_t len = strlen(key)+strlen(val->new_address)+ISO_TIME_LEN+5;
char *line = tor_malloc(len);
- tor_snprintf(line, len, "%s %s", key, val->new_address);
+ if (want_expiry) {
+ if (val->expires < 3 || val->expires == TIME_MAX)
+ tor_snprintf(line, len, "%s %s NEVER", key, val->new_address);
+ else {
+ char time[ISO_TIME_LEN+1];
+ format_local_iso_time(time, val->expires);
+ tor_snprintf(line, len, "%s %s \"%s\"", key, val->new_address,
+ time);
+ }
+ } else {
+ tor_snprintf(line, len, "%s %s", key, val->new_address);
+ }
smartlist_add(sl, line);
}
}
diff --git a/src/or/control.c b/src/or/control.c
index f103982e0f..775dda3c35 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1457,22 +1457,28 @@ getinfo_helper_events(control_connection_t *control_conn,
*answer = smartlist_join_strings(status, "\r\n", 0, NULL);
SMARTLIST_FOREACH(status, char *, cp, tor_free(cp));
smartlist_free(status);
- } else if (!strcmpstart(question, "addr-mappings/")) {
+ } else if (!strcmpstart(question, "addr-mappings/") ||
+ !strcmpstart(question, "address-mappings/")) {
+ /* XXXX020 Warn about deprecated addr-mappings variant? Or wait for
+ * 0.2.1.x? */
time_t min_e, max_e;
smartlist_t *mappings;
- if (!strcmp(question, "addr-mappings/all")) {
+ int want_expiry = !strcmpstart(question, "address-mappings/");
+ question += strlen(want_expiry ? "address-mappings/"
+ : "addr-mappings/");
+ if (!strcmp(question, "all")) {
min_e = 0; max_e = TIME_MAX;
- } else if (!strcmp(question, "addr-mappings/cache")) {
+ } else if (!strcmp(question, "cache")) {
min_e = 2; max_e = TIME_MAX;
- } else if (!strcmp(question, "addr-mappings/config")) {
+ } else if (!strcmp(question, "config")) {
min_e = 0; max_e = 0;
- } else if (!strcmp(question, "addr-mappings/control")) {
+ } else if (!strcmp(question, "control")) {
min_e = 1; max_e = 1;
} else {
return 0;
}
mappings = smartlist_create();
- addressmap_get_mappings(mappings, min_e, max_e);
+ addressmap_get_mappings(mappings, min_e, max_e, want_expiry);
*answer = smartlist_join_strings(mappings, "\r\n", 0, NULL);
SMARTLIST_FOREACH(mappings, char *, cp, tor_free(cp));
smartlist_free(mappings);
@@ -1587,11 +1593,20 @@ static const getinfo_item_t getinfo_items[] = {
ITEM("circuit-status", events, "List of current circuits originating here."),
ITEM("stream-status", events,"List of current streams."),
ITEM("orconn-status", events, "A list of current OR connections."),
+ PREFIX("address-mappings/", events, NULL),
+ DOC("address-mappings/all", "Current address mappings."),
+ DOC("address-mappings/cache", "Current cached DNS replies."),
+ DOC("address-mappings/config",
+ "Current address mappings from configuration."),
+ DOC("address-mappings/control", "Current address mappings from controller."),
PREFIX("addr-mappings/", events, NULL),
- DOC("addr-mappings/all", "Current address mappings."),
- DOC("addr-mappings/cache", "Current cached DNS replies."),
- DOC("addr-mappings/config", "Current address mappings from configuration."),
- DOC("addr-mappings/control", "Current address mappings from controller."),
+ DOC("addr-mappings/all", "Current address mappings without expiry times."),
+ DOC("addr-mappings/cache",
+ "Current cached DNS replies without expiry times."),
+ DOC("addr-mappings/config",
+ "Current address mappings from configuration without expiry times."),
+ DOC("addr-mappings/control",
+ "Current address mappings from controller without expiry times."),
PREFIX("status/", events, NULL),
DOC("status/circuit-established",
"Whether we think client functionality is working."),
diff --git a/src/or/or.h b/src/or/or.h
index 03b2d97e77..b14f687bac 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -2511,7 +2511,7 @@ void client_dns_set_addressmap(const char *address, uint32_t val,
int address_is_in_virtual_range(const char *addr);
const char *addressmap_register_virtual_address(int type, char *new_address);
void addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
- time_t max_expires);
+ time_t max_expires, int want_expiry);
int connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath);