aboutsummaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-06-30 21:48:02 +0000
committerRoger Dingledine <arma@torproject.org>2004-06-30 21:48:02 +0000
commitf42f04c859a68dab45d021dd4197da816ec72b07 (patch)
treebe4634b8becfc47b80be3e6c83d8127a26badea3 /src/or
parent29818d5b6bccce2d4e6678cce82ebdefa47883bb (diff)
downloadtor-f42f04c859a68dab45d021dd4197da816ec72b07.tar
tor-f42f04c859a68dab45d021dd4197da816ec72b07.tar.gz
cleanups on 008pre1 items
svn:r1993
Diffstat (limited to 'src/or')
-rw-r--r--src/or/directory.c7
-rw-r--r--src/or/dirserv.c6
-rw-r--r--src/or/main.c10
-rw-r--r--src/or/router.c16
-rw-r--r--src/or/routerlist.c21
5 files changed, 34 insertions, 26 deletions
diff --git a/src/or/directory.c b/src/or/directory.c
index 61c98df4c..868f614ab 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -80,6 +80,9 @@ void
directory_get_from_dirserver(uint8_t purpose, const char *payload,
int payload_len)
{
+ /* FFFF we might pass pick_directory_server a boolean to prefer
+ * picking myself for some purposes, or prefer picking not myself
+ * for other purposes. */
directory_initiate_command(router_pick_directory_server(),
purpose, payload, payload_len);
}
@@ -498,6 +501,10 @@ directory_handle_command_get(connection_t *conn, char *headers,
if(!strcmp(url,"/running-routers")) { /* running-routers fetch */
dlen = dirserv_get_runningrouters(&cp);
+ if(dlen < 0) { /* we failed to create cp */
+ connection_write_to_buf(answer503, strlen(answer503), conn);
+ return 0;
+ }
snprintf(tmp, sizeof(tmp), "HTTP/1.0 200 OK\r\nContent-Length: %d\r\nContent-Type: text/plain\r\n\r\n",
(int)dlen);
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 8252ee077..77b5f2a7a 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -455,6 +455,7 @@ list_running_servers(char **nicknames_out)
continue; /* only list successfully handshaked OR's. */
if(!conn->nickname) /* it's an OP, don't list it */
continue;
+ /* XXX008 need to change this to list "!nickname" for down routers */
if (!router_nickname_is_approved(conn->nickname))
continue; /* If we removed them from the approved list, don't list it.*/
smartlist_add(nicknames, conn->nickname);
@@ -580,7 +581,7 @@ dirserv_dump_directory_to_string(char *s, unsigned int maxlen,
/** Most recently generated encoded signed directory. */
static char *the_directory = NULL;
static int the_directory_len = -1;
-static char *cached_directory = NULL;
+static char *cached_directory = NULL; /* used only by non-auth dirservers */
static time_t cached_directory_published = 0;
static int cached_directory_len = -1;
@@ -588,8 +589,7 @@ void dirserv_set_cached_directory(const char *directory, time_t when)
{
time_t now;
char filename[512];
- if (!options.AuthoritativeDir)
- return;
+ tor_assert(!options.AuthoritativeDir);
now = time(NULL);
if (when>cached_directory_published &&
when<now+ROUTER_ALLOW_SKEW) {
diff --git a/src/or/main.c b/src/or/main.c
index 9aba9cffe..ce0d6936c 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -451,18 +451,14 @@ static void run_scheduled_events(time_t now) {
router_rebuild_descriptor();
router_upload_dir_desc_to_dirservers();
}
- if(!options.DirPort || !options.AuthoritativeDir) {
- /* XXXX should directories do this next part too? */
- routerlist_remove_old_routers(); /* purge obsolete entries */
- directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 0);
- } else {
+ routerlist_remove_old_routers(); /* purge obsolete entries */
+ if(options.AuthoritativeDir) {
/* We're a directory; dump any old descriptors. */
dirserv_remove_old_servers();
/* dirservers try to reconnect too, in case connections have failed */
router_retry_connections();
- /* fetch another directory, in case it knows something we don't */
- directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 0);
}
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 0);
/* Force an upload of our descriptors every DirFetchPostPeriod seconds. */
rend_services_upload(1);
last_uploaded_services = now;
diff --git a/src/or/router.c b/src/or/router.c
index 26b8d89e1..6f18d1f41 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -285,14 +285,16 @@ int init_keys(void) {
if(!cp) {
log_fn(LOG_INFO,"Cached directory %s not present. Ok.",keydir);
} else {
- if(options.AuthoritativeDir && dirserv_load_from_directory_string(cp) < 0){
- log_fn(LOG_ERR, "Cached directory %s is corrupt", keydir);
- tor_free(cp);
- return -1;
+ if(options.AuthoritativeDir)
+ if(dirserv_load_from_directory_string(cp) < 0){
+ log_fn(LOG_ERR, "Cached directory %s is corrupt", keydir);
+ tor_free(cp);
+ return -1;
+ }
+ } else {
+ /* set time to 1 so it will be replaced on first download. */
+ dirserv_set_cached_directory(cp, 1);
}
- /* set time to 1 so it will be replaced on first download.
- */
- dirserv_set_cached_directory(cp, 1);
tor_free(cp);
}
/* success */
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 566ddb74f..68ab10a17 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -477,11 +477,13 @@ int router_load_routerlist_from_directory(const char *s,
log_fn(LOG_WARN, "Error resolving routerlist");
return -1;
}
- /* Remember the directory, if we're nonauthoritative.*/
- dirserv_set_cached_directory(s, routerlist->published_on);
- /* Learn about the descriptors in the directory, if we're authoritative */
- if (options.AuthoritativeDir)
+ if (options.AuthoritativeDir) {
+ /* Learn about the descriptors in the directory. */
dirserv_load_from_directory_string(s);
+ } else {
+ /* Remember the directory. */
+ dirserv_set_cached_directory(s, routerlist->published_on);
+ }
return 0;
}
@@ -657,16 +659,17 @@ void routerlist_update_from_runningrouters(routerlist_t *list,
router = smartlist_get(list->routers, i);
for (j=0; j<n_names; ++j) {
name = smartlist_get(rr->running_routers, j);
- if (!strcmp(name, router->nickname)) {
- running=1;
+ if (!strcasecmp(name, router->nickname)) {
+ router->is_running = 1;
+ break;
+ }
+ if (*name == '!' && strcasecmp(name+1, router->nickname)) {
+ router->is_running = 0;
break;
}
}
- router->is_running = 1; /* arma: is this correct? */
}
list->running_routers_updated_on = rr->published_on;
- /* XXXX008 Should there also be a list of which are down, so that we
- * don't mark merely unknown routers as down? */
}
/*