mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-03 00:53:32 +01:00
61 lines
2.0 KiB
C
61 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-2021, The Tor Project, Inc. */
|
|
/* See LICENSE for licensing information */
|
|
|
|
/**
|
|
* @file bridgeauth.c
|
|
* @brief Bridge authority code
|
|
**/
|
|
|
|
#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);
|
|
}
|