Loading src/or/control.c +1 −1 Original line number Diff line number Diff line Loading @@ -1704,7 +1704,7 @@ getinfo_helper_misc(control_connection_t *conn, const char *question, *answer = tor_strdup("VERBOSE_NAMES EXTENDED_EVENTS"); } else if (!strcmp(question, "address")) { uint32_t addr; if (router_pick_published_address(get_options(), &addr) < 0) { if (router_pick_published_address(get_options(), &addr, 0) < 0) { *errmsg = "Address unknown"; return -1; } Loading src/or/dirserv.c +2 −1 Original line number Diff line number Diff line Loading @@ -1033,7 +1033,8 @@ directory_fetches_from_authorities(const or_options_t *options) return 1; if (options->BridgeRelay == 1) return 0; if (server_mode(options) && router_pick_published_address(options, &addr)<0) if (server_mode(options) && router_pick_published_address(options, &addr, 0) < 0) return 1; /* we don't know our IP address; ask an authority. */ refuseunknown = ! router_my_exit_policy_is_reject_star() && should_refuse_unknown_exits(options); Loading src/or/router.c +25 −14 Original line number Diff line number Diff line Loading @@ -1961,23 +1961,34 @@ static int router_guess_address_from_dir_headers(uint32_t *guess); /** Make a current best guess at our address, either because * it's configured in torrc, or because we've learned it from * dirserver headers. Place the answer in *<b>addr</b> and return * 0 on success, else return -1 if we have no guess. */ * 0 on success, else return -1 if we have no guess. * * If <b>cache_only</b> is true, just return any cached answers, and * don't try to get any new answers. */ MOCK_IMPL(int, router_pick_published_address,(const or_options_t *options, uint32_t *addr)) router_pick_published_address,(const or_options_t *options, uint32_t *addr, int cache_only)) { /* First, check the cached output from resolve_my_address(). */ *addr = get_last_resolved_addr(); if (!*addr && resolve_my_address(LOG_INFO, options, addr, NULL, NULL) < 0) { log_info(LD_CONFIG, "Could not determine our address locally. " "Checking if directory headers provide any hints."); if (router_guess_address_from_dir_headers(addr) < 0) { log_info(LD_CONFIG, "No hints from directory headers either. " "Will try again later."); return -1; if (*addr) return 0; /* Second, consider doing a resolve attempt right here. */ if (!cache_only) { if (resolve_my_address(LOG_INFO, options, addr, NULL, NULL) >= 0) { log_info(LD_CONFIG,"Success: chose address '%s'.", fmt_addr32(*addr)); return 0; } } log_info(LD_CONFIG,"Success: chose address '%s'.", fmt_addr32(*addr)); /* Third, check the cached output from router_new_address_suggestion(). */ if (router_guess_address_from_dir_headers(addr) >= 0) return 0; /* We have no useful cached answers. Return failure. */ return -1; } /* Like router_check_descriptor_address_consistency, but specifically for the Loading Loading @@ -2074,7 +2085,7 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) int hibernating = we_are_hibernating(); const or_options_t *options = get_options(); if (router_pick_published_address(options, &addr) < 0) { if (router_pick_published_address(options, &addr, 0) < 0) { log_warn(LD_CONFIG, "Don't know my address while generating descriptor"); return -1; } Loading Loading @@ -2323,7 +2334,7 @@ router_rebuild_descriptor(int force) if (desc_clean_since && !force) return 0; if (router_pick_published_address(options, &addr) < 0 || if (router_pick_published_address(options, &addr, 0) < 0 || router_get_advertised_or_port(options) == 0) { /* Stop trying to rebuild our descriptor every second. We'll * learn that it's time to try again when ip_address_changed() Loading src/or/router.h +2 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,8 @@ const uint8_t *router_get_my_id_digest(void); int router_extrainfo_digest_is_me(const char *digest); int router_is_me(const routerinfo_t *router); MOCK_DECL(int,router_pick_published_address,(const or_options_t *options, uint32_t *addr)); uint32_t *addr, int cache_only)); int router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e); int router_rebuild_descriptor(int force); char *router_dump_router_to_string(routerinfo_t *router, Loading src/or/transports.c +1 −1 Original line number Diff line number Diff line Loading @@ -1611,7 +1611,7 @@ pt_get_extra_info_descriptor_string(void) uint32_t external_ip_address = 0; if (tor_addr_is_null(&t->addr) && router_pick_published_address(get_options(), &external_ip_address) >= 0) { &external_ip_address, 0) >= 0) { tor_addr_t addr; tor_addr_from_ipv4h(&addr, external_ip_address); addrport = fmt_addrport(&addr, t->port); Loading Loading
src/or/control.c +1 −1 Original line number Diff line number Diff line Loading @@ -1704,7 +1704,7 @@ getinfo_helper_misc(control_connection_t *conn, const char *question, *answer = tor_strdup("VERBOSE_NAMES EXTENDED_EVENTS"); } else if (!strcmp(question, "address")) { uint32_t addr; if (router_pick_published_address(get_options(), &addr) < 0) { if (router_pick_published_address(get_options(), &addr, 0) < 0) { *errmsg = "Address unknown"; return -1; } Loading
src/or/dirserv.c +2 −1 Original line number Diff line number Diff line Loading @@ -1033,7 +1033,8 @@ directory_fetches_from_authorities(const or_options_t *options) return 1; if (options->BridgeRelay == 1) return 0; if (server_mode(options) && router_pick_published_address(options, &addr)<0) if (server_mode(options) && router_pick_published_address(options, &addr, 0) < 0) return 1; /* we don't know our IP address; ask an authority. */ refuseunknown = ! router_my_exit_policy_is_reject_star() && should_refuse_unknown_exits(options); Loading
src/or/router.c +25 −14 Original line number Diff line number Diff line Loading @@ -1961,23 +1961,34 @@ static int router_guess_address_from_dir_headers(uint32_t *guess); /** Make a current best guess at our address, either because * it's configured in torrc, or because we've learned it from * dirserver headers. Place the answer in *<b>addr</b> and return * 0 on success, else return -1 if we have no guess. */ * 0 on success, else return -1 if we have no guess. * * If <b>cache_only</b> is true, just return any cached answers, and * don't try to get any new answers. */ MOCK_IMPL(int, router_pick_published_address,(const or_options_t *options, uint32_t *addr)) router_pick_published_address,(const or_options_t *options, uint32_t *addr, int cache_only)) { /* First, check the cached output from resolve_my_address(). */ *addr = get_last_resolved_addr(); if (!*addr && resolve_my_address(LOG_INFO, options, addr, NULL, NULL) < 0) { log_info(LD_CONFIG, "Could not determine our address locally. " "Checking if directory headers provide any hints."); if (router_guess_address_from_dir_headers(addr) < 0) { log_info(LD_CONFIG, "No hints from directory headers either. " "Will try again later."); return -1; if (*addr) return 0; /* Second, consider doing a resolve attempt right here. */ if (!cache_only) { if (resolve_my_address(LOG_INFO, options, addr, NULL, NULL) >= 0) { log_info(LD_CONFIG,"Success: chose address '%s'.", fmt_addr32(*addr)); return 0; } } log_info(LD_CONFIG,"Success: chose address '%s'.", fmt_addr32(*addr)); /* Third, check the cached output from router_new_address_suggestion(). */ if (router_guess_address_from_dir_headers(addr) >= 0) return 0; /* We have no useful cached answers. Return failure. */ return -1; } /* Like router_check_descriptor_address_consistency, but specifically for the Loading Loading @@ -2074,7 +2085,7 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) int hibernating = we_are_hibernating(); const or_options_t *options = get_options(); if (router_pick_published_address(options, &addr) < 0) { if (router_pick_published_address(options, &addr, 0) < 0) { log_warn(LD_CONFIG, "Don't know my address while generating descriptor"); return -1; } Loading Loading @@ -2323,7 +2334,7 @@ router_rebuild_descriptor(int force) if (desc_clean_since && !force) return 0; if (router_pick_published_address(options, &addr) < 0 || if (router_pick_published_address(options, &addr, 0) < 0 || router_get_advertised_or_port(options) == 0) { /* Stop trying to rebuild our descriptor every second. We'll * learn that it's time to try again when ip_address_changed() Loading
src/or/router.h +2 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,8 @@ const uint8_t *router_get_my_id_digest(void); int router_extrainfo_digest_is_me(const char *digest); int router_is_me(const routerinfo_t *router); MOCK_DECL(int,router_pick_published_address,(const or_options_t *options, uint32_t *addr)); uint32_t *addr, int cache_only)); int router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e); int router_rebuild_descriptor(int force); char *router_dump_router_to_string(routerinfo_t *router, Loading
src/or/transports.c +1 −1 Original line number Diff line number Diff line Loading @@ -1611,7 +1611,7 @@ pt_get_extra_info_descriptor_string(void) uint32_t external_ip_address = 0; if (tor_addr_is_null(&t->addr) && router_pick_published_address(get_options(), &external_ip_address) >= 0) { &external_ip_address, 0) >= 0) { tor_addr_t addr; tor_addr_from_ipv4h(&addr, external_ip_address); addrport = fmt_addrport(&addr, t->port); Loading