]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Use a more helpful log message when we can't find a proxy.
authorGeorge Kadianakis <desnacked@riseup.net>
Fri, 18 May 2012 00:07:46 +0000 (03:07 +0300)
committerGeorge Kadianakis <desnacked@riseup.net>
Fri, 18 May 2012 00:07:46 +0000 (03:07 +0300)
src/or/circuitbuild.c
src/or/circuitbuild.h
src/or/connection_or.c

index 403f65f284dafb6396524030d3128daac9113644..82ff327135d98d05b8cef71ce79fa40eb5165c38 100644 (file)
@@ -4972,6 +4972,21 @@ find_bridge_by_digest(const char *digest)
   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
  * bridge of ours that uses pluggable transports, place its transport
  * in <b>transport</b>.
index a7fd2083055aac14695cac52371bee40cb54148f..2ef5be8f25acc8be49e90e10d23f6fcf03c57591 100644 (file)
@@ -157,6 +157,9 @@ void transport_free(transport_t *transport);
 transport_t *transport_new(const tor_addr_t *addr, uint16_t port,
                                       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,
                                       const transport_t **transport);
 transport_t *transport_get_by_name(const char *name);
index 0d3f9d87f227165809e46e0da95f8d2f1fadcdac..81df70eb374c5b39755606575af3f0bedea72c86 100644 (file)
@@ -1051,8 +1051,27 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
       conn->_base.proxy_state = PROXY_INFANT;
     }
   } else {
-    log_warn(LD_GENERAL, "Tried to connect through proxy, but proxy address "
-             "could not be found.");
+    /* get_proxy_addrport() might fail if we have a Bridge line that
+       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));
     return NULL;
   }