* \brief Basic history functionality for reputation module.
**/
-/* DOCDOC references to 'nicknames' in docs here are mostly wrong. */
-
#include "or.h"
/** History of an OR-\>OR link. */
time_t up_since;
/** If nonzero, we have been unable to connect since this time. */
time_t down_since;
- /** Map from lowercased OR2 name to a link_history_t for the link
+ /** Map from hex OR2 identity digest to a link_history_t for the link
* from this OR to OR2. */
strmap_t *link_history_map;
} or_history_t;
-/** Map from lowercased OR nickname to or_history_t. */
+/** Map from hex OR identity digest to or_history_t. */
static strmap_t *history_map = NULL;
/** Return the or_history_t for the named OR, creating it if necessary.
}
/** Return the link_history_t for the link from the first named OR to
- * the second, creating it if necessary.
+ * the second, creating it if necessary. (ORs are identified by
+ * identity digest)
*/
static link_history_t *get_link_history(const char *from_id,
const char *to_id)
history_map = strmap_new();
}
-/** Remember that an attempt to connect to the OR <b>nickname</b> failed at
- * <b>when</b>.
+/** Remember that an attempt to connect to the OR with identity digest
+ * <b>id</b> failed at <b>when</b>.
*/
void rep_hist_note_connect_failed(const char* id, time_t when)
{
hist->down_since = when;
}
-/** Remember that an attempt to connect to the OR <b>nickname</b> succeeded
- * at <b>when</b>.
+/** Remember that an attempt to connect to the OR with identity digest
+ * <b>id</b> succeeded at <b>when</b>.
*/
void rep_hist_note_connect_succeeded(const char* id, time_t when)
{
}
/** Remember that we intentionally closed our connection to the OR
- * <b>nickname</b> at <b>when</b>.
+ * with identity digest <b>id</b> at <b>when</b>.
*/
void rep_hist_note_disconnect(const char* id, time_t when)
{
}
}
-/** Remember that our connection to the OR <b>id</b> had an error and
- * stopped working at <b>when</b>.
+/** Remember that our connection to the OR with identity digest
+ * <b>id</b> had an error and stopped working at <b>when</b>.
*/
void rep_hist_note_connection_died(const char* id, time_t when)
{
hist->down_since = when;
}
-/** Remember that we successfully extended from the OR <b>from_name</b> to
- * the OR <b>to_name</b>.
+/** Remember that we successfully extended from the OR with identity
+ * digest <b>from_id</b> to the OR with identity digest
+ * <b>to_name</b>.
*/
void rep_hist_note_extend_succeeded(const char *from_id,
const char *to_id)
++hist->n_extend_ok;
}
-/** Remember that we tried to extend from the OR <b>from_name</b> to the OR
- * <b>to_name</b>, but failed.
+/** Remember that we tried to extend from the OR with identity digest
+ * <b>from_id</b> to the OR with identity digest <b>to_name</b>, but
+ * failed.
*/
void rep_hist_note_extend_failed(const char *from_id, const char *to_id)
{
return NULL;
}
-/* DOCDOC */
+/** Return true iff the digest of <b>router</b>'s identity key,
+ * encoded in hexadecimal, matches <b>hexdigest</b> (which is
+ * optionally prefixed with a single dollar sign). Return false if
+ * <b>hexdigest</b> is malformed, or it doesn't match. */
static INLINE int router_hex_digest_matches(routerinfo_t *router,
const char *hexdigest)
{
if (hexdigest[0] == '$')
++hexdigest;
- if (base16_decode(digest, DIGEST_LEN, hexdigest, HEX_DIGEST_LEN)<0)
+ if (strlen(hexdigest) != HEX_DIGEST_LEN ||
+ base16_decode(digest, DIGEST_LEN, hexdigest, HEX_DIGEST_LEN)<0)
return 0;
else
return (!memcmp(digest, router->identity_digest, DIGEST_LEN));
}
-/* DOCDOC */
+/* Return true if <b>router</b>'s nickname matches <b>nickname</b>
+ * (case-insensitive), or if <b>router's</b> identity key digest
+ * matches a hexadecimal value stored in <b>nickname</b>. Return
+ * false otherwise.*/
int router_nickname_matches(routerinfo_t *router, const char *nickname)
{
if (nickname[0]!='$' && !strcasecmp(router->nickname, nickname))
== ADDR_POLICY_REJECTED;
}
-/* DODCDOC */
+/* Release all space held in <b>rr</b>. */
void running_routers_free(running_routers_t *rr)
{
tor_assert(rr);
tor_free(rr);
}
-/* DOCDOC*/
+/* Update the running/not-running status of every router in <b>list</b>, based
+ * on the contents of <b>rr</b>. */
void routerlist_update_from_runningrouters(routerlist_t *list,
running_routers_t *rr)
{