diff options
author | Roger Dingledine <arma@torproject.org> | 2013-02-11 17:09:10 -0500 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2013-02-11 17:09:10 -0500 |
commit | cc896f7c84c221d7dcfff1e0155533dce3ac5518 (patch) | |
tree | 55ff5874885e1208f15f728274fa80694897a45c /src/or/config.c | |
parent | 719940df2bdfbd0f5ee02a9ca404f345d2fc49e8 (diff) | |
download | tor-cc896f7c84c221d7dcfff1e0155533dce3ac5518.tar.gz tor-cc896f7c84c221d7dcfff1e0155533dce3ac5518.zip |
Teach resolve_my_address() to return a cached answer
I didn't make any of the callers use this feature yet.
Diffstat (limited to 'src/or/config.c')
-rw-r--r-- | src/or/config.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/or/config.c b/src/or/config.c index 7ca20e46b4..e37b148b7d 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -1908,12 +1908,16 @@ static uint32_t last_resolved_addr = 0; * holding that hostname. (If we didn't get our address by resolving a * hostname, set *<b>hostname_out</b> to NULL.) * + * If <b>use_cached_addr</b> is true, and we have a plausible answer, + * provide that answer and return. + * * XXXX ipv6 */ int resolve_my_address(int warn_severity, const or_options_t *options, uint32_t *addr_out, - const char **method_out, char **hostname_out) + const char **method_out, char **hostname_out, + int use_cached_addr) { struct in_addr in; uint32_t addr; /* host order */ @@ -1931,6 +1935,18 @@ resolve_my_address(int warn_severity, const or_options_t *options, tor_assert(addr_out); /* + * Step zero: if used_cached_addr is true, and we have a cached answer, + * just return it and be done. + */ + + if (use_cached_addr && last_resolved_addr) { + *addr_out = last_resolved_addr; + if (method_out) + *method_out = "CACHED"; + return 0; + } + + /* * Step one: Fill in 'hostname' to be our best guess. */ @@ -2343,7 +2359,7 @@ options_validate(or_options_t *old_options, or_options_t *options, if (authdir_mode(options)) { /* confirm that our address isn't broken, so we can complain now */ uint32_t tmp; - if (resolve_my_address(LOG_WARN, options, &tmp, NULL, NULL) < 0) + if (resolve_my_address(LOG_WARN, options, &tmp, NULL, NULL, 0) < 0) REJECT("Failed to resolve/guess local address. See logs for details."); } |