From f42f04c859a68dab45d021dd4197da816ec72b07 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Wed, 30 Jun 2004 21:48:02 +0000 Subject: [PATCH] cleanups on 008pre1 items svn:r1993 --- src/or/directory.c | 7 +++++++ src/or/dirserv.c | 6 +++--- src/or/main.c | 10 +++------- src/or/router.c | 16 +++++++++------- src/or/routerlist.c | 21 ++++++++++++--------- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/or/directory.c b/src/or/directory.c index 61c98df4c0..868f614ab5 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 8252ee077b..77b5f2a7a0 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 && whenpublished_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; jrunning_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? */ } /*