[or-cvs] Fix a bunch of log messages. Deprecate some routerlist fie...
Nick Mathewson
nickm at seul.org
Wed Sep 14 23:42:08 UTC 2005
Update of /home/or/cvsroot/tor/src/or
In directory moria:/tmp/cvs-serv6308/src/or
Modified Files:
circuitbuild.c main.c or.h routerlist.c routerparse.c
Log Message:
Fix a bunch of log messages. Deprecate some routerlist fields; remove others, and status_set_at from routerinfo_t. Compress routerlist.c cleanup functions. Update cached networkstatus mtime when we download the same one twice. Change some interfaces.
Index: circuitbuild.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/circuitbuild.c,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -d -r1.143 -r1.144
--- circuitbuild.c 14 Sep 2005 20:59:25 -0000 1.143
+++ circuitbuild.c 14 Sep 2005 23:42:06 -0000 1.144
@@ -1740,15 +1740,14 @@
routerinfo_t *r = router_get_by_digest(helper->identity);
if (! r) {
if (! helper->unlisted_since) {
- /* Watch out for skew here. XXXX */
- helper->unlisted_since = routers->published_on;
+ helper->unlisted_since = time(NULL);
++changed;
- log_fn(LOG_WARN,"Helper node '%s' is not published in latest directory",
+ log_fn(LOG_WARN,"Helper node '%s' is not listed by directories",
helper->nickname);
}
} else {
if (helper->unlisted_since) {
- log_fn(LOG_WARN,"Helper node '%s' is listed again in latest directory",
+ log_fn(LOG_WARN,"Helper node '%s' is listed again by directories",
helper->nickname);
++changed;
}
@@ -1761,7 +1760,7 @@
}
} else {
if (helper->down_since) {
- log_fn(LOG_WARN,"Helper node '%s' is up in latest directory",
+ log_fn(LOG_WARN,"Helper node '%s' is up in latest directories",
helper->nickname);
++changed;
}
Index: main.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/main.c,v
retrieving revision 1.550
retrieving revision 1.551
diff -u -d -r1.550 -r1.551
--- main.c 14 Sep 2005 21:09:25 -0000 1.550
+++ main.c 14 Sep 2005 23:42:06 -0000 1.551
@@ -1340,8 +1340,7 @@
void
tor_free_all(int postfork)
{
- routerlist_free_current();
- free_trusted_dir_servers();
+ routerlist_free_all();
addressmap_free_all();
set_exit_redirects(NULL); /* free the registered exit redirects */
free_socks_policy();
Index: or.h
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/or.h,v
retrieving revision 1.682
retrieving revision 1.683
diff -u -d -r1.682 -r1.683
--- or.h 14 Sep 2005 21:38:05 -0000 1.682
+++ or.h 14 Sep 2005 23:42:06 -0000 1.683
@@ -772,8 +772,6 @@
/*XXXX Make this get used once we think we do naming right. NM */
unsigned int is_named:1; /* Do we believe the nickname that this OR gives us? */
- time_t status_set_at; /**< When did we last update is_running? */
-
/* The below items are used only by authdirservers for
* reachability testing. */
/** When was the last time we could reach this OR? */
@@ -847,7 +845,9 @@
smartlist_t *routers;
/** When was the most recent directory that contributed to this list
* published? */
- time_t published_on;
+ /* XXXX011 NM This field is only used in moribund code; remove it
+ * once the moribund code is dead. */
+ time_t published_on_xx;
#if 0
/** Which versions of tor are recommended by this directory? */
char *software_versions;
@@ -2079,13 +2079,14 @@
routerinfo_t *router_get_by_digest(const char *digest);
int router_digest_is_trusted_dir(const char *digest);
void router_get_routerlist(routerlist_t **prouterlist);
+#if 0
time_t routerlist_get_published_time(void);
+#endif
void routerlist_free(routerlist_t *routerlist);
void routerinfo_free(routerinfo_t *router);
void routerstatus_free(routerstatus_t *routerstatus);
void networkstatus_free(networkstatus_t *networkstatus);
-void routerlist_free_current(void);
-void free_trusted_dir_servers(void);
+void routerlist_free_all(void);
routerinfo_t *routerinfo_copy(const routerinfo_t *router);
void router_mark_as_down(const char *digest);
void routerlist_remove_old_routers(int age);
@@ -2153,7 +2154,7 @@
int router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
crypto_pk_env_t *private_key);
int router_parse_list_from_string(const char **s,
- routerlist_t **dest,
+ smartlist_t *dest,
time_t published);
int router_parse_routerlist_from_directory(const char *s,
routerlist_t **dest,
Index: routerlist.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/routerlist.c,v
retrieving revision 1.289
retrieving revision 1.290
diff -u -d -r1.289 -r1.290
--- routerlist.c 14 Sep 2005 21:38:05 -0000 1.289
+++ routerlist.c 14 Sep 2005 23:42:06 -0000 1.290
@@ -76,7 +76,7 @@
log_fn(LOG_WARN, "Cached directory at '%s' was unparseable; ignoring.", filename);
}
if (routerlist &&
- ((routerlist->published_on > time(NULL) - MIN_ONION_KEY_LIFETIME/2)
+ ((routerlist->published_on_xx > time(NULL) - MIN_ONION_KEY_LIFETIME/2)
|| is_recent)) {
directory_has_arrived(st.st_mtime, NULL); /* do things we've been waiting to do */
}
@@ -438,7 +438,6 @@
if (router_digest_is_trusted_dir(router->identity_digest) &&
router->dir_port > 0) {
router->is_running = 1;
- router->status_set_at = time(NULL);
});
}
if (trusted_dir_servers) {
@@ -840,6 +839,8 @@
SMARTLIST_FOREACH(routerlist->routers, routerinfo_t *, router,
{
+ /* XXXX001 NM Should this restrict by Named rouers, or warn on
+ * non-named routers, or something? */
if (0 == strcasecmp(router->nickname, nickname) ||
(maybedigest && 0 == memcmp(digest, router->identity_digest,
DIGEST_LEN)))
@@ -905,6 +906,7 @@
*prouterlist = routerlist;
}
+#if 0
/** Return the publication time on the current routerlist, or 0 if we have no
* routerlist. */
time_t
@@ -912,6 +914,8 @@
{
return routerlist ? routerlist->published_on : 0;
}
+#endif
+
/** Free all storage held by <b>router</b>. */
void
@@ -983,9 +987,9 @@
tor_free(rl);
}
-/** Free all entries in the current router list. */
+/** Free all memory held by the rouerlist module */
void
-routerlist_free_current(void)
+routerlist_free_all(void)
{
if (routerlist)
routerlist_free(routerlist);
@@ -995,6 +999,18 @@
smartlist_free(warned_nicknames);
warned_nicknames = NULL;
}
+ if (trusted_dir_servers) {
+ SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
+ { tor_free(ds->address); tor_free(ds); });
+ smartlist_free(trusted_dir_servers);
+ trusted_dir_servers = NULL;
+ }
+ if (networkstatus_list) {
+ SMARTLIST_FOREACH(networkstatus_list, networkstatus_t *, ns,
+ networkstatus_free(ns));
+ smartlist_free(networkstatus_list);
+ networkstatus_list = NULL;
+ }
}
/** Free all storage held by the routerstatus object <b>rs</b>. */
@@ -1021,18 +1037,6 @@
tor_free(ns);
}
-/** Free all entries in the list of trusted directory servers. */
-void
-free_trusted_dir_servers(void)
-{
- if (trusted_dir_servers) {
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
- { tor_free(ds->address); tor_free(ds); });
- smartlist_free(trusted_dir_servers);
- trusted_dir_servers = NULL;
- }
-}
-
/** Mark the router with ID <b>digest</b> as non-running in our routerlist. */
void
router_mark_as_down(const char *digest)
@@ -1051,7 +1055,6 @@
if (router_is_me(router) && !we_are_hibernating())
log_fn(LOG_WARN, "We just marked ourself as down. Are your external addresses reachable?");
router->is_running = 0;
- router->status_set_at = time(NULL);
}
/** Add <b>router</b> to the routerlist, if we don't already have it. Replace
@@ -1303,7 +1306,7 @@
smartlist_add(changed, r);
});
smartlist_clear(new_list->routers);
- routerlist->published_on = new_list->published_on;
+ routerlist->published_on_xx = new_list->published_on_xx;
routerlist_free(new_list);
control_event_descriptors_changed(changed);
smartlist_free(changed);
@@ -1374,6 +1377,7 @@
int skewed = 0;
trusted_dir_server_t *trusted_dir;
char fp[HEX_DIGEST_LEN+1];
+ char published[ISO_TIME_LEN+1];
ns = networkstatus_parse_from_string(s);
if (!ns) {
@@ -1391,8 +1395,10 @@
ns->received_on = arrived_at;
+ format_iso_time(published, ns->published_on);
+
if (ns->published_on > now + NETWORKSTATUS_ALLOW_SKEW) {
- log_fn(LOG_WARN, "Network status was published in the future (?). Somebody is skewed here: check your clock. Not caching.");
+ log_fn(LOG_WARN, "Network status was published in the future (%s GMT). Somebody is skewed here: check your clock. Not caching.", published);
skewed = 1;
}
@@ -1412,7 +1418,7 @@
smartlist_string_remove(requested_fingerprints, fp);
} else {
char *requested = smartlist_join_strings(requested_fingerprints," ",0,NULL);
- log_fn(LOG_WARN, "We received a network status with a fingerprint (%s) that we never requested. (%s) Dropping.", fp, requested);
+ log_fn(LOG_WARN, "We received a network status with a fingerprint (%s) that we never requested. (We asked for: %s.) Dropping.", fp, requested);
tor_free(requested);
return 0;
}
@@ -1430,13 +1436,27 @@
ns->networkstatus_digest, DIGEST_LEN)) {
/* Same one we had before. */
networkstatus_free(ns);
- log_fn(LOG_NOTICE, "Dropping network-status (%s); already have it.",fp);
- if (old_ns->received_on < arrived_at)
- /* XXXX We should touch the cache file. NM */
+ log_fn(LOG_NOTICE,
+ "Dropping network-status from %s:%d (published %s); already have it.",
+ trusted_dir->address, trusted_dir->dir_port, published);
+ if (old_ns->received_on < arrived_at) {
+ if (source != NS_FROM_CACHE) {
+ char *fn = networkstatus_get_cache_filename(old_ns);
+ /* We use mtime to tell when it arrived, so update that. */
+ touch_file(fn);
+ tor_free(fn);
+ }
old_ns->received_on = arrived_at;
+ }
return 0;
} else if (old_ns->published_on >= ns->published_on) {
- log_fn(LOG_NOTICE, "Dropping network-status (%s); we have a newer one for this authority.", fp);
+ char old_published[ISO_TIME_LEN+1];
+ format_iso_time(old_published, old_ns->published_on);
+ log_fn(LOG_NOTICE,
+ "Dropping network-status from %s:%d (published %s);"
+ " we have a newer one (published %s) for this authority.",
+ trusted_dir->address, trusted_dir->dir_port, published,
+ old_published);
networkstatus_free(ns);
return 0;
} else {
@@ -1452,10 +1472,10 @@
smartlist_add(networkstatus_list, ns);
/*XXXX011 downgrade to INFO NM */
- log_fn(LOG_NOTICE, "New networkstatus %s (%s).",
- source == NS_FROM_CACHE?"from our cache":
- (source==NS_FROM_DIR?"from a directory server":"from this authority"),
- fp);
+ log_fn(LOG_NOTICE, "Setting networkstatus %s %s:%d (published %s)",
+ source == NS_FROM_CACHE?"cached from":
+ (source==NS_FROM_DIR?"downloaded from":"generated for"),
+ trusted_dir->address, trusted_dir->dir_port, published);
networkstatus_list_has_changed = 1;
smartlist_sort(networkstatus_list, _compare_networkstatus_published_on);
Index: routerparse.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/routerparse.c,v
retrieving revision 1.139
retrieving revision 1.140
diff -u -d -r1.139 -r1.140
--- routerparse.c 14 Sep 2005 21:38:05 -0000 1.139
+++ routerparse.c 14 Sep 2005 23:42:06 -0000 1.140
@@ -533,13 +533,15 @@
/* Read the router list from s, advancing s up past the end of the last
* router. */
str = end;
- if (router_parse_list_from_string(&str, &new_dir,
+ new_dir = tor_malloc_zero(sizeof(routerlist_t));
+ new_dir->routers = smartlist_create();
+ if (router_parse_list_from_string(&str, new_dir->routers,
published_on)) {
log_fn(LOG_WARN, "Error reading routers from directory");
goto err;
}
- new_dir->published_on = published_on;
+ new_dir->published_on_xx = published_on;
SMARTLIST_FOREACH(tokens, directory_token_t *, tok, token_free(tok));
smartlist_free(tokens);
@@ -754,15 +756,12 @@
}
/** Given a string *<b>s</b> containing a concatenated sequence of router
- * descriptors, parses them and stores the result in *<b>dest</b>. If
- * good_nickname_list is provided, then routers are marked as
- * running/nonrunning and verified/unverified based on their status in the
- * list. Otherwise, all routers are marked running and verified. Advances
- * *s to a point immediately following the last router entry. Returns 0 on
- * success and -1 on failure.
+ * descriptors, parses them and stores the result in <b>dest</b>. All routers
+ * are marked running and verified. Advances *s to a point immediately
+ * following the last router entry. Returns 0 on success and -1 on failure.
*/
int
-router_parse_list_from_string(const char **s, routerlist_t **dest,
+router_parse_list_from_string(const char **s, smartlist_t *dest,
time_t published_on)
{
routerinfo_t *router;
@@ -799,10 +798,7 @@
routers_update_status_from_networkstatus(routers);
- if (*dest)
- routerlist_free(*dest);
- *dest = tor_malloc_zero(sizeof(routerlist_t));
- (*dest)->routers = routers;
+ smartlist_add_all(dest, routers);
return 0;
}
More information about the tor-commits
mailing list