|
@@ -1459,13 +1459,18 @@ consider_publishable_server(int force)
|
|
|
|
|
|
multiple listeners. */
|
|
|
uint16_t
|
|
|
-router_get_active_listener_port_by_type(int listener_type)
|
|
|
+router_get_active_listener_port_by_type_af(int listener_type,
|
|
|
+ sa_family_t family)
|
|
|
{
|
|
|
|
|
|
the port. Not very sophisticated or fast, but effective. */
|
|
|
- const connection_t *c = connection_get_by_type(listener_type);
|
|
|
- if (c)
|
|
|
- return c->port;
|
|
|
+ smartlist_t *conns = get_connection_array();
|
|
|
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
|
|
|
+ if (conn->type == listener_type && !conn->marked_for_close &&
|
|
|
+ conn->socket_family == family) {
|
|
|
+ return conn->port;
|
|
|
+ }
|
|
|
+ } SMARTLIST_FOREACH_END(conn);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -1477,13 +1482,24 @@ router_get_active_listener_port_by_type(int listener_type)
|
|
|
uint16_t
|
|
|
router_get_advertised_or_port(const or_options_t *options)
|
|
|
{
|
|
|
- int port = get_primary_or_port();
|
|
|
+ return router_get_advertised_or_port_by_af(options, AF_INET);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+ */
|
|
|
+uint16_t
|
|
|
+router_get_advertised_or_port_by_af(const or_options_t *options,
|
|
|
+ sa_family_t family)
|
|
|
+{
|
|
|
+ int port = get_first_advertised_port_by_type_af(CONN_TYPE_OR_LISTENER,
|
|
|
+ family);
|
|
|
(void)options;
|
|
|
|
|
|
|
|
|
router_get_listener_port_by_type(). */
|
|
|
if (port == CFG_AUTO_PORT)
|
|
|
- return router_get_active_listener_port_by_type(CONN_TYPE_OR_LISTENER);
|
|
|
+ return router_get_active_listener_port_by_type_af(CONN_TYPE_OR_LISTENER,
|
|
|
+ family);
|
|
|
|
|
|
return port;
|
|
|
}
|
|
@@ -1503,7 +1519,8 @@ router_get_advertised_dir_port(const or_options_t *options, uint16_t dirport)
|
|
|
return dirport;
|
|
|
|
|
|
if (dirport_configured == CFG_AUTO_PORT)
|
|
|
- return router_get_active_listener_port_by_type(CONN_TYPE_DIR_LISTENER);
|
|
|
+ return router_get_active_listener_port_by_type_af(CONN_TYPE_DIR_LISTENER,
|
|
|
+ AF_INET);
|
|
|
|
|
|
return dirport_configured;
|
|
|
}
|