diff options
author | Nick Mathewson <nickm@torproject.org> | 2011-11-08 21:13:54 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2011-11-30 11:55:44 -0500 |
commit | 19a82d293615f48acc2adf1aca1160982f247261 (patch) | |
tree | d2b1d4f3ed69a440da3dbf0baefea78341da687b /src/or/router.c | |
parent | 11d5a9f63d85adda25d1227befcebf249107a1bd (diff) | |
download | tor-19a82d293615f48acc2adf1aca1160982f247261.tar.gz tor-19a82d293615f48acc2adf1aca1160982f247261.zip |
Bridges can advertise a single IPv6 address with orport
This is deliberately more restrictive than we'd want to be.
Needs testing!
Diffstat (limited to 'src/or/router.c')
-rw-r--r-- | src/or/router.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/or/router.c b/src/or/router.c index 2e9b256cc2..c92c5bd3ef 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -1494,6 +1494,24 @@ router_rebuild_descriptor(int force) ri->cache_info.published_on = time(NULL); ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from * main thread */ + if (options->BridgeRelay) { + /* For now, only bridges advertise an ipv6 or-address. And only one. */ + const port_cfg_t *ipv6_orport = NULL; + SMARTLIST_FOREACH_BEGIN(get_configured_ports(), const port_cfg_t *, p) { + if (p->type == CONN_TYPE_OR_LISTENER && + ! p->no_advertise && + ! p->ipv4_only && + tor_addr_family(&p->addr) == AF_INET6 && + ! tor_addr_is_internal(&p->addr, 1)) { + ipv6_orport = p; + break; + } + } SMARTLIST_FOREACH_END(p); + if (ipv6_orport) { + tor_addr_copy(&ri->ipv6_addr, &ipv6_orport->addr); + ri->ipv6_orport = ipv6_orport->port; + } + } ri->identity_pkey = crypto_pk_dup_key(get_server_identity_key()); if (crypto_pk_get_digest(ri->identity_pkey, ri->cache_info.identity_digest)<0) { |