Loading src/or/directory.c +7 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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); Loading src/or/dirserv.c +3 −3 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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; Loading @@ -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) { Loading src/or/main.c +3 −7 Original line number Diff line number Diff line Loading @@ -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 { 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; Loading src/or/router.c +9 −7 Original line number Diff line number Diff line Loading @@ -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){ 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; } /* set time to 1 so it will be replaced on first download. */ } else { /* set time to 1 so it will be replaced on first download. */ dirserv_set_cached_directory(cp, 1); } tor_free(cp); } /* success */ Loading src/or/routerlist.c +12 −9 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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? */ } /* Loading Loading
src/or/directory.c +7 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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); Loading
src/or/dirserv.c +3 −3 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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; Loading @@ -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) { Loading
src/or/main.c +3 −7 Original line number Diff line number Diff line Loading @@ -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 { 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; Loading
src/or/router.c +9 −7 Original line number Diff line number Diff line Loading @@ -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){ 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; } /* set time to 1 so it will be replaced on first download. */ } else { /* set time to 1 so it will be replaced on first download. */ dirserv_set_cached_directory(cp, 1); } tor_free(cp); } /* success */ Loading
src/or/routerlist.c +12 −9 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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? */ } /* Loading