Minor changes to bug5603

* Minor stylistic changes to comments and doxygen
  * Use strcmp_opt; it already exists.
  * Tighten bridge_has_digest implementation a little.
This commit is contained in:
Nick Mathewson 2012-06-05 11:39:31 -04:00
parent 1e95a4a1f6
commit 64167e1772

View File

@ -4912,52 +4912,34 @@ learned_router_identity(const tor_addr_t *addr, uint16_t port,
} }
} }
/** Returns true if <b>bridge</b> has the same identity digest as /** Return true if <b>bridge</b> has the same identity digest as
* <b>digest</b>. <b>digest</b> is optional in which case it matches * <b>digest</b>. If <b>digest</b> is NULL, it matches
* bridges without identity digests. */ * bridges with unspecified identity digests. */
static int static int
bridge_has_digest(const bridge_info_t *bridge, const char *digest) bridge_has_digest(const bridge_info_t *bridge, const char *digest)
{ {
if (!digest && tor_digest_is_zero(bridge->identity)) if (digest)
return 1; return tor_memeq(digest, bridge->identity, DIGEST_LEN);
if (digest && tor_memeq(digest, bridge->identity, DIGEST_LEN)) else
return 1; return tor_digest_is_zero(bridge->identity);
return 0;
} }
/** Returns true if <b>bridge</b> uses the same pluggable transport as /** We are about to add a new bridge at <b>addr</b>:<b>port</b>, with optional
* <b>transport_name</b>. <b>transport_name</b> is optional in which * <b>digest</b> and <b>transport_name</b>. Mark for removal any previously
* case it matches bridges without pluggable transports. */ * existing bridge with the same address and port, and warn the user as
static int * appropriate.
bridge_has_transport_name(const bridge_info_t *bridge,
const char *transport_name)
{
if (!transport_name && !bridge->transport_name)
return 1;
if (transport_name && !strcmp(transport_name, bridge->transport_name))
return 1;
return 0;
}
/** We want to add a new bridge at <b>addr</b>:<b>port</b>, with
* optional <b>digest</b> and <b>transport_name</b>. See if this
* generates any conflicts with already registered bridges, try to
* resolve them and warn the user.
*
* This function might end up marking already registered bridges to
* be deleted.
*/ */
static void static void
bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port, bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port,
const char *digest, const char *transport_name) const char *digest, const char *transport_name)
{ {
/** Iterate the already-registered bridge list: /* Iterate the already-registered bridge list:
If you find a bridge with the same adress and port, mark it for If you find a bridge with the same adress and port, mark it for
removal. It doesn't make sense to have two active bridges with removal. It doesn't make sense to have two active bridges with
the same IP:PORT. If the bridge in question has a different the same IP:PORT. If the bridge in question has a different
digest or transport than <b>digest</b>/<b>transport_name</b>, digest or transport than <b>digest</b>/<b>transport_name</b>,
it's probably a misconfiguration and we should warn the user. it's probably a misconfiguration and we should warn the user.
*/ */
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) { SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) {
if (bridge->marked_for_removal) if (bridge->marked_for_removal)
@ -4968,7 +4950,7 @@ bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port,
bridge->marked_for_removal = 1; bridge->marked_for_removal = 1;
if (!bridge_has_digest(bridge, digest) || if (!bridge_has_digest(bridge, digest) ||
!bridge_has_transport_name(bridge, transport_name)) { strcmp_opt(bridge->transport_name, transport_name)) {
/* warn the user */ /* warn the user */
char *bridge_description_new, *bridge_description_old; char *bridge_description_new, *bridge_description_old;
tor_asprintf(&bridge_description_new, "%s:%u:%s:%s", tor_asprintf(&bridge_description_new, "%s:%u:%s:%s",