|
@@ -990,6 +990,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
|
|
|
|
|
|
if (conn->_base.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->_base.address, conn->_base.port);
|
|
@@ -1006,11 +1007,13 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
|
|
|
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, 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,
|
|
@@ -1019,6 +1022,11 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
|
|
|
base16_encode(cp, HEX_DIGEST_LEN+1, ds->digest, DIGEST_LEN);
|
|
|
smartlist_add(which, cp);
|
|
|
});
|
|
|
+ } else {
|
|
|
+ /* Can we even end up here? -- weasel*/
|
|
|
+ source = NS_FROM_DIR_BY_FP;
|
|
|
+ log_warn(LD_BUG, "we received a networkstatus but we did neither ask"
|
|
|
+ "for it by fp/ nor did we ask for all.");
|
|
|
}
|
|
|
cp = body;
|
|
|
while (*cp) {
|
|
@@ -1026,7 +1034,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
|
|
|
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';
|