|
@@ -597,7 +597,7 @@ check_whether_dirport_reachable(void)
|
|
|
* a DirPort.
|
|
|
*/
|
|
|
static int
|
|
|
-decide_to_advertise_dirport(or_options_t *options, routerinfo_t *router)
|
|
|
+decide_to_advertise_dirport(or_options_t *options, uint16_t dir_port)
|
|
|
{
|
|
|
static int advertising=1; /* start out assuming we will advertise */
|
|
|
int new_choice=1;
|
|
@@ -607,10 +607,10 @@ decide_to_advertise_dirport(or_options_t *options, routerinfo_t *router)
|
|
|
* worth mentioning to the user, either because they're obvious
|
|
|
* or because they're normal behavior. */
|
|
|
|
|
|
- if (!router->dir_port) /* short circuit the rest of the function */
|
|
|
+ if (!dir_port) /* short circuit the rest of the function */
|
|
|
return 0;
|
|
|
if (authdir_mode(options)) /* always publish */
|
|
|
- return router->dir_port;
|
|
|
+ return dir_port;
|
|
|
if (we_are_hibernating())
|
|
|
return 0;
|
|
|
if (!check_whether_dirport_reachable())
|
|
@@ -635,7 +635,7 @@ decide_to_advertise_dirport(or_options_t *options, routerinfo_t *router)
|
|
|
|
|
|
if (advertising != new_choice) {
|
|
|
if (new_choice == 1) {
|
|
|
- log(LOG_NOTICE, LD_DIR, "Advertising DirPort as %d", router->dir_port);
|
|
|
+ log(LOG_NOTICE, LD_DIR, "Advertising DirPort as %d", dir_port);
|
|
|
} else {
|
|
|
tor_assert(reason);
|
|
|
log(LOG_NOTICE, LD_DIR, "Not advertising DirPort (Reason: %s)", reason);
|
|
@@ -643,7 +643,7 @@ decide_to_advertise_dirport(or_options_t *options, routerinfo_t *router)
|
|
|
advertising = new_choice;
|
|
|
}
|
|
|
|
|
|
- return advertising ? router->dir_port : 0;
|
|
|
+ return advertising ? dir_port : 0;
|
|
|
}
|
|
|
|
|
|
/** Some time has passed, or we just got new directory information.
|
|
@@ -722,7 +722,8 @@ router_dirport_found_reachable(void)
|
|
|
log_notice(LD_DIRSERV,"Self-testing indicates your DirPort is reachable "
|
|
|
"from the outside. Excellent.");
|
|
|
can_reach_dir_port = 1;
|
|
|
- mark_my_descriptor_dirty();
|
|
|
+ if (!me || decide_to_advertise_dirport(get_options(), me->dir_port))
|
|
|
+ mark_my_descriptor_dirty();
|
|
|
if (!me)
|
|
|
return;
|
|
|
control_event_server_status(LOG_NOTICE,
|
|
@@ -1553,7 +1554,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
|
|
|
router->nickname,
|
|
|
router->address,
|
|
|
router->or_port,
|
|
|
- decide_to_advertise_dirport(options, router),
|
|
|
+ decide_to_advertise_dirport(options, router->dir_port),
|
|
|
router->platform,
|
|
|
published,
|
|
|
fingerprint,
|