mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-09-23 22:44:58 +02:00
6f42efaa59
For various reasons, this was a nontrivial movement. There are several places in the code where we do something like "update the flags on this routerstatus or node if we're an authority", and at least one where we pretended to be an authority when we weren't.
56 lines
2.0 KiB
C
56 lines
2.0 KiB
C
/* Copyright (c) 2001 Matej Pfajfar.
|
|
* Copyright (c) 2001-2004, Roger Dingledine.
|
|
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
|
* Copyright (c) 2007-2019, The Tor Project, Inc. */
|
|
/* See LICENSE for licensing information */
|
|
|
|
#include "core/or/or.h"
|
|
#include "feature/dirauth/bridgeauth.h"
|
|
#include "feature/dirauth/voteflags.h"
|
|
#include "feature/nodelist/networkstatus.h"
|
|
#include "feature/relay/router.h"
|
|
#include "app/config/config.h"
|
|
|
|
#include "feature/nodelist/routerinfo_st.h"
|
|
|
|
/** Write out router status entries for all our bridge descriptors. Here, we
|
|
* also mark routers as running. */
|
|
void
|
|
bridgeauth_dump_bridge_status_to_file(time_t now)
|
|
{
|
|
char *status;
|
|
char *fname = NULL;
|
|
char *thresholds = NULL;
|
|
char *published_thresholds_and_status = NULL;
|
|
char published[ISO_TIME_LEN+1];
|
|
const routerinfo_t *me = router_get_my_routerinfo();
|
|
char fingerprint[FINGERPRINT_LEN+1];
|
|
char *fingerprint_line = NULL;
|
|
|
|
dirserv_set_bridges_running(now);
|
|
status = networkstatus_getinfo_by_purpose("bridge", now);
|
|
|
|
if (me && crypto_pk_get_fingerprint(me->identity_pkey,
|
|
fingerprint, 0) >= 0) {
|
|
tor_asprintf(&fingerprint_line, "fingerprint %s\n", fingerprint);
|
|
} else {
|
|
log_warn(LD_BUG, "Error computing fingerprint for bridge status.");
|
|
}
|
|
format_iso_time(published, now);
|
|
dirserv_compute_bridge_flag_thresholds();
|
|
thresholds = dirserv_get_flag_thresholds_line();
|
|
tor_asprintf(&published_thresholds_and_status,
|
|
"published %s\nflag-thresholds %s\n%s%s",
|
|
published, thresholds, fingerprint_line ? fingerprint_line : "",
|
|
status);
|
|
fname = get_datadir_fname("networkstatus-bridges");
|
|
if (write_str_to_file(fname,published_thresholds_and_status,0)<0) {
|
|
log_warn(LD_DIRSERV, "Unable to write networkstatus-bridges file.");
|
|
}
|
|
tor_free(thresholds);
|
|
tor_free(published_thresholds_and_status);
|
|
tor_free(fname);
|
|
tor_free(status);
|
|
tor_free(fingerprint_line);
|
|
}
|