]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Introduce a new bridge_has_invalid_transport() function.
authorNick Mathewson <nickm@torproject.org>
Thu, 21 Jan 2021 18:17:16 +0000 (13:17 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 21 Jan 2021 18:17:16 +0000 (13:17 -0500)
In addition to simplifying callsites a little, this function gives
correct behavior for bridges without a configured transport.

src/feature/client/bridges.c
src/feature/client/bridges.h
src/feature/client/entrynodes.c

index 11b2ffd62dbf8b50e58bb360cb9ebdcf1b8d4edb..96c3497c6fb02298a6fffa9a8440941f5b5a4b38 100644 (file)
@@ -175,6 +175,17 @@ bridget_get_transport_name(const bridge_info_t *bridge)
   return bridge->transport_name;
 }
 
+/**
+ * Return true if @a bridge has a transport name for which we don't actually
+ * know a transport.
+ */
+bool
+bridge_has_invalid_transport(const bridge_info_t *bridge)
+{
+  const char *tname = bridget_get_transport_name(bridge);
+  return tname && transport_get_by_name(tname) == NULL;
+}
+
 /** If we have a bridge configured whose digest matches <b>digest</b>, or a
  * bridge with no known digest whose address matches any of the
  * tor_addr_port_t's in <b>orports</b>, return that bridge.  Else return
@@ -656,7 +667,7 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
       DIR_PURPOSE_FETCH_SERVERDESC))
     return; /* it's already on the way */
 
-  if (transport_get_by_name(bridget_get_transport_name(bridge)) == NULL) {
+  if (bridge_has_invalid_transport(bridge)) {
     download_status_mark_impossible(&bridge->fetch_status);
     log_warn(LD_CONFIG, "Can't use bridge at %s: there is no configured "
              "transport called \"%s\".",
index 1b090e864995426768c5a1cd4f6f3c08b9682830..f5ecc1b76da0f1bf194df824e4a66bcaa7298f45 100644 (file)
@@ -24,6 +24,7 @@ const smartlist_t *bridge_list_get(void);
 const uint8_t *bridge_get_rsa_id_digest(const bridge_info_t *bridge);
 const tor_addr_port_t * bridge_get_addr_port(const bridge_info_t *bridge);
 const char *bridget_get_transport_name(const bridge_info_t *bridge);
+bool bridge_has_invalid_transport(const bridge_info_t *bridge);
 bridge_info_t *get_configured_bridge_by_addr_port_digest(
                                           const tor_addr_t *addr,
                                           uint16_t port,
index 2676df6aaeb4e5920a9ed35c2fe75a95bf8b7c93..232216c5215a66892b492d6ba8d5b4e6bedd9b2b 100644 (file)
@@ -804,7 +804,7 @@ get_sampled_guard_for_bridge(guard_selection_t *gs,
   entry_guard_t *guard;
   if (BUG(!addrport))
     return NULL; // LCOV_EXCL_LINE
-  if (!transport_get_by_name(bridget_get_transport_name(bridge))) {
+  if (bridge_has_invalid_transport(bridge)) {
     return NULL;
   }
   guard = get_sampled_guard_by_bridge_addr(gs, addrport);