summaryrefslogtreecommitdiff
path: root/src/or/router.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-05-13 10:43:41 -0400
committerNick Mathewson <nickm@torproject.org>2011-05-13 10:43:41 -0400
commit5f2a1a7b4f20be121cd30def95cf7789924ca70a (patch)
treec9545f5af482e1380261a2fe7ba2e73b175b3b66 /src/or/router.c
parente0d5a6e1849673589c5b7f04d89e25194167344d (diff)
parent7f654a6a6fb5e956b996eece36ff95e590a6ad63 (diff)
downloadtor-5f2a1a7b4f20be121cd30def95cf7789924ca70a.tar.gz
tor-5f2a1a7b4f20be121cd30def95cf7789924ca70a.zip
Merge branch 'feature3076_squashed' into maint-0.2.2
Diffstat (limited to 'src/or/router.c')
-rw-r--r--src/or/router.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/src/or/router.c b/src/or/router.c
index a7148ea1f7..616a290d8a 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -704,8 +704,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);
@@ -1165,6 +1165,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.
*/
@@ -1398,8 +1428,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 */