networkstatus.h (9166B)
1 /* Copyright (c) 2001 Matej Pfajfar. 2 * Copyright (c) 2001-2004, Roger Dingledine. 3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. 4 * Copyright (c) 2007-2021, The Tor Project, Inc. */ 5 /* See LICENSE for licensing information */ 6 7 /** 8 * \file networkstatus.h 9 * \brief Header file for networkstatus.c. 10 **/ 11 12 #ifndef TOR_NETWORKSTATUS_H 13 #define TOR_NETWORKSTATUS_H 14 15 #include "lib/testsupport/testsupport.h" 16 17 void networkstatus_reset_warnings(void); 18 void networkstatus_reset_download_failures(void); 19 MOCK_DECL(char *,networkstatus_get_cache_fname,(int flav, 20 const char *flavorname, 21 int unverified_consensus)); 22 tor_mmap_t *networkstatus_map_cached_consensus(const char *flavorname); 23 int router_reload_consensus_networkstatus(void); 24 void routerstatus_free_(routerstatus_t *rs); 25 #define routerstatus_free(rs) \ 26 FREE_AND_NULL(routerstatus_t, routerstatus_free_, (rs)) 27 void networkstatus_vote_free_(networkstatus_t *ns); 28 #define networkstatus_vote_free(ns) \ 29 FREE_AND_NULL(networkstatus_t, networkstatus_vote_free_, (ns)) 30 networkstatus_voter_info_t *networkstatus_get_voter_by_id( 31 networkstatus_t *vote, 32 const char *identity); 33 document_signature_t *networkstatus_get_voter_sig_by_alg( 34 const networkstatus_voter_info_t *voter, 35 digest_algorithm_t alg); 36 37 int networkstatus_check_consensus_signature(networkstatus_t *consensus, 38 int warn); 39 int networkstatus_check_document_signature(const networkstatus_t *consensus, 40 document_signature_t *sig, 41 const authority_cert_t *cert); 42 int compare_digest_to_routerstatus_entry(const void *_key, 43 const void **_member); 44 int compare_digest_to_vote_routerstatus_entry(const void *_key, 45 const void **_member); 46 MOCK_DECL(const routerstatus_t *,networkstatus_vote_find_entry,( 47 networkstatus_t *ns, 48 const char *digest)); 49 routerstatus_t *networkstatus_vote_find_mutable_entry(networkstatus_t *ns, 50 const char *digest); 51 int networkstatus_vote_find_entry_idx(networkstatus_t *ns, 52 const char *digest, int *found_out); 53 54 MOCK_DECL(download_status_t *, 55 networkstatus_get_dl_status_by_flavor, 56 (consensus_flavor_t flavor)); 57 MOCK_DECL(download_status_t *, 58 networkstatus_get_dl_status_by_flavor_bootstrap, 59 (consensus_flavor_t flavor)); 60 MOCK_DECL(download_status_t *, 61 networkstatus_get_dl_status_by_flavor_running, 62 (consensus_flavor_t flavor)); 63 64 MOCK_DECL(smartlist_t *, router_get_descriptor_digests, (void)); 65 MOCK_DECL(download_status_t *,router_get_dl_status_by_descriptor_digest, 66 (const char *d)); 67 68 const routerstatus_t *router_get_consensus_status_by_id(const char *digest); 69 routerstatus_t *router_get_mutable_consensus_status_by_id( 70 const char *digest); 71 const routerstatus_t *router_get_consensus_status_by_descriptor_digest( 72 networkstatus_t *consensus, 73 const char *digest); 74 MOCK_DECL(routerstatus_t *, 75 router_get_mutable_consensus_status_by_descriptor_digest, 76 (networkstatus_t *consensus, const char *digest)); 77 int we_want_to_fetch_flavor(const or_options_t *options, int flavor); 78 int we_want_to_fetch_unknown_auth_certs(const or_options_t *options); 79 void networkstatus_consensus_download_failed(int status_code, 80 const char *flavname); 81 void update_consensus_networkstatus_fetch_time(time_t now); 82 int should_delay_dir_fetches(const or_options_t *options,const char **msg_out); 83 void update_networkstatus_downloads(time_t now); 84 void update_certificate_downloads(time_t now); 85 int consensus_is_waiting_for_certs(void); 86 int client_would_use_router(const routerstatus_t *rs, time_t now); 87 MOCK_DECL(networkstatus_t *,networkstatus_get_latest_consensus,(void)); 88 MOCK_DECL(networkstatus_t *,networkstatus_get_latest_consensus_by_flavor, 89 (consensus_flavor_t f)); 90 MOCK_DECL(networkstatus_t *, networkstatus_get_live_consensus,(time_t now)); 91 int networkstatus_is_live(const networkstatus_t *ns, time_t now); 92 int networkstatus_consensus_reasonably_live(const networkstatus_t *consensus, 93 time_t now); 94 int networkstatus_valid_after_is_reasonably_live(time_t valid_after, 95 time_t now); 96 int networkstatus_valid_until_is_reasonably_live(time_t valid_until, 97 time_t now); 98 MOCK_DECL(networkstatus_t *,networkstatus_get_reasonably_live_consensus, 99 (time_t now, 100 int flavor)); 101 MOCK_DECL(int, networkstatus_consensus_is_bootstrapping,(time_t now)); 102 int networkstatus_consensus_can_use_multiple_directories( 103 const or_options_t *options); 104 MOCK_DECL(int, networkstatus_consensus_can_use_extra_fallbacks,( 105 const or_options_t *options)); 106 int networkstatus_consensus_is_already_downloading(const char *resource); 107 108 #define NSSET_FROM_CACHE 1 109 #define NSSET_WAS_WAITING_FOR_CERTS 2 110 #define NSSET_DONT_DOWNLOAD_CERTS 4 111 #define NSSET_ACCEPT_OBSOLETE 8 112 #define NSSET_REQUIRE_FLAVOR 16 113 int networkstatus_set_current_consensus(const char *consensus, 114 size_t consensus_len, 115 const char *flavor, 116 unsigned flags, 117 const char *source_dir); 118 void networkstatus_note_certs_arrived(const char *source_dir); 119 void routers_update_all_from_networkstatus(time_t now, int dir_version); 120 void routers_update_status_from_consensus_networkstatus(smartlist_t *routers, 121 int reset_failures); 122 void signed_descs_update_status_from_consensus_networkstatus( 123 smartlist_t *descs); 124 125 char *networkstatus_getinfo_helper_single(const routerstatus_t *rs); 126 char *networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now); 127 MOCK_DECL(int32_t, networkstatus_get_param, 128 (const networkstatus_t *ns, const char *param_name, 129 int32_t default_val, int32_t min_val, int32_t max_val)); 130 int32_t networkstatus_get_overridable_param(const networkstatus_t *ns, 131 int32_t torrc_value, 132 const char *param_name, 133 int32_t default_val, 134 int32_t min_val, int32_t max_val); 135 int getinfo_helper_networkstatus(control_connection_t *conn, 136 const char *question, char **answer, 137 const char **errmsg); 138 int32_t networkstatus_get_bw_weight(networkstatus_t *ns, const char *weight, 139 int32_t default_val); 140 const char *networkstatus_get_flavor_name(consensus_flavor_t flav); 141 int networkstatus_parse_flavor_name(const char *flavname); 142 void document_signature_free_(document_signature_t *sig); 143 #define document_signature_free(sig) \ 144 FREE_AND_NULL(document_signature_t, document_signature_free_, (sig)) 145 document_signature_t *document_signature_dup(const document_signature_t *sig); 146 void networkstatus_free_all(void); 147 int networkstatus_get_weight_scale_param(networkstatus_t *ns); 148 149 void vote_routerstatus_free_(vote_routerstatus_t *rs); 150 #define vote_routerstatus_free(rs) \ 151 FREE_AND_NULL(vote_routerstatus_t, vote_routerstatus_free_, (rs)) 152 153 void set_routerstatus_from_routerinfo(routerstatus_t *rs, 154 const node_t *node, 155 const routerinfo_t *ri); 156 time_t voting_sched_get_start_of_interval_after(time_t now, 157 int interval, 158 int offset); 159 160 #ifdef NETWORKSTATUS_PRIVATE 161 #ifdef TOR_UNIT_TESTS 162 STATIC int networkstatus_set_current_consensus_from_ns(networkstatus_t *c, 163 const char *flavor); 164 STATIC void warn_early_consensus(const networkstatus_t *c, const char *flavor, 165 time_t now); 166 extern networkstatus_t *current_ns_consensus; 167 extern networkstatus_t *current_md_consensus; 168 #endif /* defined(TOR_UNIT_TESTS) */ 169 STATIC int routerstatus_has_visibly_changed(const routerstatus_t *a, 170 const routerstatus_t *b); 171 #endif /* defined(NETWORKSTATUS_PRIVATE) */ 172 173 #endif /* !defined(TOR_NETWORKSTATUS_H) */