Use a more helpful log message when we can't find a proxy.

This commit is contained in:
George Kadianakis 2012-05-18 03:07:46 +03:00
parent f00a8b4307
commit 5dc9acb5e5
3 changed files with 39 additions and 2 deletions

View File

@ -4972,6 +4972,21 @@ find_bridge_by_digest(const char *digest)
return NULL; return NULL;
} }
const char *
find_transport_name_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
{
if (!bridge_list)
return NULL;
SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
if (tor_addr_eq(&bridge->addr, addr) &&
(bridge->port == port))
return bridge->transport_name;
} SMARTLIST_FOREACH_END(bridge);
return NULL;
}
/** If <b>addr</b> and <b>port</b> match the address and port of a /** If <b>addr</b> and <b>port</b> match the address and port of a
* bridge of ours that uses pluggable transports, place its transport * bridge of ours that uses pluggable transports, place its transport
* in <b>transport</b>. * in <b>transport</b>.

View File

@ -157,6 +157,9 @@ void transport_free(transport_t *transport);
transport_t *transport_new(const tor_addr_t *addr, uint16_t port, transport_t *transport_new(const tor_addr_t *addr, uint16_t port,
const char *name, int socks_ver); const char *name, int socks_ver);
const char *find_transport_name_by_bridge_addrport(const tor_addr_t *addr,
uint16_t port);
int find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port, int find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
const transport_t **transport); const transport_t **transport);
transport_t *transport_get_by_name(const char *name); transport_t *transport_get_by_name(const char *name);

View File

@ -1051,8 +1051,27 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
conn->_base.proxy_state = PROXY_INFANT; conn->_base.proxy_state = PROXY_INFANT;
} }
} else { } else {
log_warn(LD_GENERAL, "Tried to connect through proxy, but proxy address " /* get_proxy_addrport() might fail if we have a Bridge line that
"could not be found."); references a transport, but no ClientTransportPlugin lines
defining its transport proxy. If this is the case, let's try to
output a useful log message to the user. */
const char *transport_name =
find_transport_name_by_bridge_addrport(&TO_CONN(conn)->addr,
TO_CONN(conn)->port);
if (transport_name) {
log_warn(LD_GENERAL, "We were supposed to connect to bridge '%s:%u' "
"using pluggable transport '%s', but it seems that we can't "
"find a pluggable transport proxy supporting '%s'. Please make "
"sure that your configuration file is valid.",
fmt_addr(&TO_CONN(conn)->addr), TO_CONN(conn)->port,
transport_name, transport_name);
} else {
log_warn(LD_GENERAL, "Tried to connect to '%s:%u' through a proxy, but "
"the proxy address could not be found.",
fmt_addr(&TO_CONN(conn)->addr), TO_CONN(conn)->port);
}
connection_free(TO_CONN(conn)); connection_free(TO_CONN(conn));
return NULL; return NULL;
} }