[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r8491: backport weasel's r8398: - If we're a directory mirror and w (in tor/branches/tor-0_1_1-patches: . src/or)
- To: or-cvs@xxxxxxxxxxxxx
- Subject: [or-cvs] r8491: backport weasel's r8398: - If we're a directory mirror and w (in tor/branches/tor-0_1_1-patches: . src/or)
- From: arma@xxxxxxxx
- Date: Sun, 24 Sep 2006 19:11:27 -0400 (EDT)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Sun, 24 Sep 2006 19:11:36 -0400
- Reply-to: or-talk@xxxxxxxxxxxxx
- Sender: owner-or-cvs@xxxxxxxxxxxxx
Author: arma
Date: 2006-09-24 19:11:24 -0400 (Sun, 24 Sep 2006)
New Revision: 8491
Modified:
tor/branches/tor-0_1_1-patches/ChangeLog
tor/branches/tor-0_1_1-patches/src/or/directory.c
tor/branches/tor-0_1_1-patches/src/or/or.h
tor/branches/tor-0_1_1-patches/src/or/routerlist.c
Log:
backport weasel's r8398:
- If we're a directory mirror and we ask for "all" network status
documents, we would forget that's what we wanted and discard most
of them when they arrived.
Modified: tor/branches/tor-0_1_1-patches/ChangeLog
===================================================================
--- tor/branches/tor-0_1_1-patches/ChangeLog 2006-09-24 23:09:35 UTC (rev 8490)
+++ tor/branches/tor-0_1_1-patches/ChangeLog 2006-09-24 23:11:24 UTC (rev 8491)
@@ -6,6 +6,9 @@
whether we have enough directory information every time we want to
do something, only check when the directory information has changed.
This should improve client CPU usage by 25-50%.
+ - If we're a directory mirror and we ask for "all" network status
+ documents, we would forget that's what we wanted and discard most
+ of them when they arrived.
o Minor bugfixes:
- Allow Tor to start when RunAsDaemon is set but no logs are set.
Modified: tor/branches/tor-0_1_1-patches/src/or/directory.c
===================================================================
--- tor/branches/tor-0_1_1-patches/src/or/directory.c 2006-09-24 23:09:35 UTC (rev 8490)
+++ tor/branches/tor-0_1_1-patches/src/or/directory.c 2006-09-24 23:11:24 UTC (rev 8491)
@@ -977,6 +977,7 @@
if (conn->purpose == DIR_PURPOSE_FETCH_NETWORKSTATUS) {
smartlist_t *which = NULL;
+ int source;
char *cp;
log_info(LD_DIR,"Received networkstatus objects (size %d) from server "
"'%s:%d'",(int) body_len, conn->address, conn->port);
@@ -993,11 +994,13 @@
note_request(was_compressed?"dl/status.z":"dl/status", orig_len);
if (conn->requested_resource &&
!strcmpstart(conn->requested_resource,"fp/")) {
+ source = NS_FROM_DIR_BY_FP;
which = smartlist_create();
dir_split_resource_into_fingerprints(conn->requested_resource+3,
which, NULL, 0);
} else if (conn->requested_resource &&
!strcmpstart(conn->requested_resource, "all")) {
+ source = NS_FROM_DIR_ALL;
which = smartlist_create();
SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
trusted_dir_server_t *, ds,
@@ -1006,6 +1009,8 @@
base16_encode(cp, HEX_DIGEST_LEN+1, ds->digest, DIGEST_LEN);
smartlist_add(which, cp);
});
+ } else {
+ source = NS_FROM_DIR_BY_FP; /* probably not reached */
}
cp = body;
while (*cp) {
@@ -1013,7 +1018,7 @@
if (next)
next[1] = '\0';
/* learn from it, and then remove it from 'which' */
- if (router_set_networkstatus(cp, time(NULL), NS_FROM_DIR, which)<0)
+ if (router_set_networkstatus(cp, time(NULL), source, which)<0)
break;
if (next) {
next[1] = 'n';
Modified: tor/branches/tor-0_1_1-patches/src/or/or.h
===================================================================
--- tor/branches/tor-0_1_1-patches/src/or/or.h 2006-09-24 23:09:35 UTC (rev 8490)
+++ tor/branches/tor-0_1_1-patches/src/or/or.h 2006-09-24 23:11:24 UTC (rev 8491)
@@ -2363,7 +2363,7 @@
void router_load_routers_from_string(const char *s, int from_cache,
smartlist_t *requested_fingerprints);
typedef enum {
- NS_FROM_CACHE, NS_FROM_DIR, NS_GENERATED
+ NS_FROM_CACHE, NS_FROM_DIR_BY_FP, NS_FROM_DIR_ALL, NS_GENERATED
} networkstatus_source_t;
int router_set_networkstatus(const char *s, time_t arrived_at,
networkstatus_source_t source,
Modified: tor/branches/tor-0_1_1-patches/src/or/routerlist.c
===================================================================
--- tor/branches/tor-0_1_1-patches/src/or/routerlist.c 2006-09-24 23:09:35 UTC (rev 8490)
+++ tor/branches/tor-0_1_1-patches/src/or/routerlist.c 2006-09-24 23:11:24 UTC (rev 8491)
@@ -2093,7 +2093,8 @@
if (!networkstatus_list)
networkstatus_list = smartlist_create();
- if (source == NS_FROM_DIR && router_digest_is_me(ns->identity_digest)) {
+ if ( (source == NS_FROM_DIR_BY_FP || source == NS_FROM_DIR_ALL) &&
+ router_digest_is_me(ns->identity_digest)) {
/* Don't replace our own networkstatus when we get it from somebody else.*/
networkstatus_free(ns);
return 0;
@@ -2105,12 +2106,14 @@
} else {
char *requested =
smartlist_join_strings(requested_fingerprints," ",0,NULL);
- log_warn(LD_DIR,
+ if (source != NS_FROM_DIR_ALL) {
+ log_warn(LD_DIR,
"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;
+ tor_free(requested);
+ return 0;
+ }
}
}
@@ -2119,6 +2122,9 @@
/* We got a non-trusted networkstatus, and we're a directory cache.
* This means that we asked an authority, and it told us about another
* authority we didn't recognize. */
+ log_info(LD_DIR,
+ "We do not recognize authority (%s) but we are willing "
+ "to cache it", fp);
add_networkstatus_to_cache(s, source, ns);
networkstatus_free(ns);
}
@@ -2181,7 +2187,8 @@
log_info(LD_DIR, "Setting networkstatus %s %s (published %s)",
source == NS_FROM_CACHE?"cached from":
- (source==NS_FROM_DIR?"downloaded from":"generated for"),
+ ((source == NS_FROM_DIR_BY_FP || source == NS_FROM_DIR_ALL) ?
+ "downloaded from":"generated for"),
trusted_dir->description, published);
networkstatus_list_has_changed = 1;
router_dir_info_changed();