bugfix: only warn about an unrouter router after we've fetched a directory

svn:r1178
This commit is contained in:
Roger Dingledine 2004-02-29 01:31:33 +00:00
parent b4338ce704
commit 4716d4d871
4 changed files with 24 additions and 5 deletions

View File

@ -10,6 +10,7 @@ static int directory_handle_command(connection_t *conn);
/********* START VARIABLES **********/ /********* START VARIABLES **********/
extern or_options_t options; /* command-line and config-file options */ extern or_options_t options; /* command-line and config-file options */
extern int has_fetched_directory;
static char fetchstring[] = "GET / HTTP/1.0\r\n\r\n"; static char fetchstring[] = "GET / HTTP/1.0\r\n\r\n";
static char answerstring[] = "HTTP/1.0 200 OK\r\n\r\n"; static char answerstring[] = "HTTP/1.0 200 OK\r\n\r\n";
@ -129,6 +130,7 @@ int connection_dir_process_inbuf(connection_t *conn) {
} else { } else {
log_fn(LOG_INFO,"updated routers."); log_fn(LOG_INFO,"updated routers.");
} }
has_fetched_directory=1;
if(options.ORPort) { /* connect to them all */ if(options.ORPort) { /* connect to them all */
router_retry_connections(); router_retry_connections();
} }

View File

@ -4,7 +4,7 @@
#include "or.h" #include "or.h"
/********* START PROTOTYPES **********/ /********* PROTOTYPES **********/
static void dumpstats(int severity); /* log stats */ static void dumpstats(int severity); /* log stats */
static int init_from_config(int argc, char **argv); static int init_from_config(int argc, char **argv);
@ -34,6 +34,14 @@ static int please_reset=0; /* whether we just got a sighup */
static int please_reap_children=0; /* whether we should waitpid for exited children */ static int please_reap_children=0; /* whether we should waitpid for exited children */
#endif /* signal stuff */ #endif /* signal stuff */
int has_fetched_directory=0;
/* we set this to 1 when we've fetched a dir, to know whether to complain
* yet about unrecognized nicknames in entrynodes, exitnodes, etc. */
int has_completed_circuit=0;
/* we set this to 1 when we've opened a circuit, so we can print a log
* entry to inform the user that Tor is working. */
/********* END VARIABLES ************/ /********* END VARIABLES ************/
/**************************************************************************** /****************************************************************************

View File

@ -157,6 +157,8 @@ int onionskin_answer(circuit_t *circ, unsigned char *payload, unsigned char *key
return 0; return 0;
} }
extern int has_fetched_directory;
static void add_nickname_list_to_smartlist(smartlist_t *sl, char *list) { static void add_nickname_list_to_smartlist(smartlist_t *sl, char *list) {
char *start,*end; char *start,*end;
char nick[MAX_NICKNAME_LEN]; char nick[MAX_NICKNAME_LEN];
@ -170,10 +172,14 @@ static void add_nickname_list_to_smartlist(smartlist_t *sl, char *list) {
memcpy(nick,start,end-start); memcpy(nick,start,end-start);
nick[end-start] = 0; /* null terminate it */ nick[end-start] = 0; /* null terminate it */
router = router_get_by_nickname(nick); router = router_get_by_nickname(nick);
if(router && router->is_running) if (router) {
if (router->is_running)
smartlist_add(sl,router); smartlist_add(sl,router);
else else
log_fn(LOG_WARN,"Nickname list includes '%s' which isn't a known router.",nick); log_fn(LOG_WARN,"Nickname list includes '%s' which is known but down.",nick);
} else
log_fn(has_fetched_directory ? LOG_WARN : LOG_INFO,
"Nickname list includes '%s' which isn't a known router.",nick);
while(isspace(*end) || *end==',') end++; while(isspace(*end) || *end==',') end++;
start = end; start = end;
} }

View File

@ -95,6 +95,8 @@ router_release_token(directory_token_t *tok);
/****************************************************************************/ /****************************************************************************/
extern int has_fetched_directory;
/* try to find a running dirserver. if there are no dirservers /* try to find a running dirserver. if there are no dirservers
* in our routerlist, reload the routerlist and try again. */ * in our routerlist, reload the routerlist and try again. */
routerinfo_t *router_pick_directory_server(void) { routerinfo_t *router_pick_directory_server(void) {
@ -103,6 +105,7 @@ routerinfo_t *router_pick_directory_server(void) {
choice = router_pick_directory_server_impl(); choice = router_pick_directory_server_impl();
if(!choice) { if(!choice) {
log_fn(LOG_WARN,"No dirservers known. Reloading and trying again."); log_fn(LOG_WARN,"No dirservers known. Reloading and trying again.");
has_fetched_directory=0; /* reset it */
if(options.RouterFile) { if(options.RouterFile) {
if(router_set_routerlist_from_file(options.RouterFile) < 0) if(router_set_routerlist_from_file(options.RouterFile) < 0)
return NULL; return NULL;