tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

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) */