diff options
author | Nick Mathewson <nickm@torproject.org> | 2011-05-13 10:48:07 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2011-05-13 10:48:07 -0400 |
commit | 600744b4be3d83a3e4924c8712bc30b7de1f4d3c (patch) | |
tree | 9060cc5d17499fc87b93c8d14492df8cae1a9e59 /src/or/router.c | |
parent | 87c79cf01760787bcd9e8616b17babe5a7e4eca4 (diff) | |
parent | 5f2a1a7b4f20be121cd30def95cf7789924ca70a (diff) | |
download | tor-600744b4be3d83a3e4924c8712bc30b7de1f4d3c.tar.gz tor-600744b4be3d83a3e4924c8712bc30b7de1f4d3c.zip |
Merge remote-tracking branch 'origin/maint-0.2.2'
Conflicts:
src/or/config.c
src/or/dirserv.c
src/or/or.h
Diffstat (limited to 'src/or/router.c')
-rw-r--r-- | src/or/router.c | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/or/router.c b/src/or/router.c index 49c2a92e94..e2791c1c64 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -707,8 +707,8 @@ init_keys(void) ds = router_get_trusteddirserver_by_digest(digest); if (!ds) { ds = add_trusted_dir_server(options->Nickname, NULL, - (uint16_t)options->DirPort, - (uint16_t)options->ORPort, + router_get_advertised_dir_port(options), + router_get_advertised_or_port(options), digest, v3_digest, type); @@ -1171,6 +1171,36 @@ consider_publishable_server(int force) } } +/** Return the port that we should advertise as our ORPort; this is either + * the one configured in the ORPort option, or the one we actually bound to + * if ORPort is "auto". */ +uint16_t +router_get_advertised_or_port(or_options_t *options) +{ + if (options->ORPort == CFG_AUTO_PORT) { + connection_t *c = connection_get_by_type(CONN_TYPE_OR_LISTENER); + if (c) + return c->port; + return 0; + } + return options->ORPort; +} + +/** Return the port that we should advertise as our DirPort; this is either + * the one configured in the DirPort option, or the one we actually bound to + * if DirPort is "auto". */ +uint16_t +router_get_advertised_dir_port(or_options_t *options) +{ + if (options->DirPort == CFG_AUTO_PORT) { + connection_t *c = connection_get_by_type(CONN_TYPE_DIR_LISTENER); + if (c) + return c->port; + return 0; + } + return options->DirPort; +} + /* * OR descriptor generation. */ @@ -1400,8 +1430,8 @@ router_rebuild_descriptor(int force) ri->address = tor_dup_ip(addr); ri->nickname = tor_strdup(options->Nickname); ri->addr = addr; - ri->or_port = options->ORPort; - ri->dir_port = options->DirPort; + ri->or_port = router_get_advertised_or_port(options); + ri->dir_port = router_get_advertised_dir_port(options); ri->cache_info.published_on = time(NULL); ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from * main thread */ |