From c53b6cc8315fac37a05112553476930a21990d97 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Wed, 21 Jul 2010 16:17:10 +0200 Subject: Create router.h --- src/test/test_dir.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/test/test_dir.c') diff --git a/src/test/test_dir.c b/src/test/test_dir.c index a746beda2..f99352a9b 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -8,6 +8,7 @@ #define DIRVOTE_PRIVATE #define ROUTER_PRIVATE #include "or.h" +#include "router.h" #include "test.h" static void -- cgit v1.2.3 From cbee969f407b53d2b453d03460eb2864d0eaf1db Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Wed, 21 Jul 2010 17:08:11 +0200 Subject: Create routerlist.h --- src/or/circuitbuild.c | 1 + src/or/circuitlist.c | 1 + src/or/circuituse.c | 1 + src/or/command.c | 1 + src/or/config.c | 1 + src/or/connection_edge.c | 1 + src/or/connection_or.c | 1 + src/or/control.c | 1 + src/or/directory.c | 1 + src/or/dirserv.c | 1 + src/or/dirvote.c | 1 + src/or/geoip.c | 1 + src/or/main.c | 1 + src/or/networkstatus.c | 1 + src/or/or.h | 175 ------------------------------------------ src/or/relay.c | 1 + src/or/rendclient.c | 1 + src/or/rendcommon.c | 1 + src/or/rendservice.c | 1 + src/or/rephist.c | 1 + src/or/router.c | 1 + src/or/routerlist.c | 1 + src/or/routerlist.h | 193 +++++++++++++++++++++++++++++++++++++++++++++++ src/or/routerparse.c | 1 + src/test/test_dir.c | 1 + 25 files changed, 216 insertions(+), 175 deletions(-) create mode 100644 src/or/routerlist.h (limited to 'src/test/test_dir.c') diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 0a25c034e..08aa2524f 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -13,6 +13,7 @@ #include "or.h" #include "router.h" +#include "routerlist.h" #include "crypto.h" #undef log #include diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index e18e89266..cc33fcb35 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -10,6 +10,7 @@ **/ #include "or.h" +#include "routerlist.h" #include "ht.h" /********* START VARIABLES **********/ diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 7a7cc4d30..753ae7b78 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -11,6 +11,7 @@ #include "or.h" #include "router.h" +#include "routerlist.h" /********* START VARIABLES **********/ diff --git a/src/or/command.c b/src/or/command.c index e367dd739..8ba45a398 100644 --- a/src/or/command.c +++ b/src/or/command.c @@ -17,6 +17,7 @@ #include "or.h" #include "router.h" +#include "routerlist.h" /** How many CELL_PADDING cells have we received, ever? */ uint64_t stats_n_padding_cells_processed = 0; diff --git a/src/or/config.c b/src/or/config.c index 48fa11eca..8cd719a75 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -14,6 +14,7 @@ #include "or.h" #include "geoip.h" #include "router.h" +#include "routerlist.h" #ifdef MS_WINDOWS #include #endif diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 35d01ea56..8c63d516e 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -12,6 +12,7 @@ #include "or.h" #include "dnsserv.h" #include "router.h" +#include "routerlist.h" #ifdef HAVE_LINUX_TYPES_H #include diff --git a/src/or/connection_or.c b/src/or/connection_or.c index e4fe58a2f..b1ed17449 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -13,6 +13,7 @@ #include "or.h" #include "geoip.h" #include "router.h" +#include "routerlist.h" static int connection_tls_finish_handshake(or_connection_t *conn); static int connection_or_process_cells_from_inbuf(or_connection_t *conn); diff --git a/src/or/control.c b/src/or/control.c index 59d0a681d..b99451327 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -14,6 +14,7 @@ #include "dnsserv.h" #include "geoip.h" #include "router.h" +#include "routerlist.h" /** Yield true iff s is the state of a control_connection_t that has * finished authentication and is accepting commands. */ diff --git a/src/or/directory.c b/src/or/directory.c index 993044416..1e311697d 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -6,6 +6,7 @@ #include "or.h" #include "geoip.h" #include "router.h" +#include "routerlist.h" #if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) #ifndef OPENBSD diff --git a/src/or/dirserv.c b/src/or/dirserv.c index dbff93205..59a8fdc88 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -6,6 +6,7 @@ #define DIRSERV_PRIVATE #include "or.h" #include "router.h" +#include "routerlist.h" /** * \file dirserv.c diff --git a/src/or/dirvote.c b/src/or/dirvote.c index 637ad54e0..782e04c1b 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -6,6 +6,7 @@ #define DIRVOTE_PRIVATE #include "or.h" #include "router.h" +#include "routerlist.h" /** * \file dirvote.c diff --git a/src/or/geoip.c b/src/or/geoip.c index f027f3299..5275c6ec7 100644 --- a/src/or/geoip.c +++ b/src/or/geoip.c @@ -12,6 +12,7 @@ #include "ht.h" #include "dnsserv.h" #include "geoip.h" +#include "routerlist.h" static void clear_geoip_db(void); diff --git a/src/or/main.c b/src/or/main.c index d21de19f0..271d6fe77 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -15,6 +15,7 @@ #include "dnsserv.h" #include "geoip.h" #include "router.h" +#include "routerlist.h" #ifdef USE_DMALLOC #include #include diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 724730cbd..92a41b964 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -12,6 +12,7 @@ #include "or.h" #include "router.h" +#include "routerlist.h" /* For tracking v2 networkstatus documents. Only caches do this now. */ diff --git a/src/or/or.h b/src/or/or.h index 5eac3290b..e9fd5b1b9 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4808,21 +4808,6 @@ typedef struct trusted_dir_server_t { #define ROUTER_MAX_DECLARED_BANDWIDTH INT32_MAX -int get_n_authorities(authority_type_t type); -int trusted_dirs_reload_certs(void); -int trusted_dirs_load_certs_from_string(const char *contents, int from_store, - int flush); -void trusted_dirs_flush_certs_to_disk(void); -authority_cert_t *authority_cert_get_newest_by_id(const char *id_digest); -authority_cert_t *authority_cert_get_by_sk_digest(const char *sk_digest); -authority_cert_t *authority_cert_get_by_digests(const char *id_digest, - const char *sk_digest); -void authority_cert_get_all(smartlist_t *certs_out); -void authority_cert_dl_failed(const char *id_digest, int status); -void authority_certs_fetch_missing(networkstatus_t *status, time_t now); -int router_reload_router_list(void); -smartlist_t *router_get_trusted_dir_servers(void); - /* Flags for pick_directory_server and pick_trusteddirserver. */ /** Flag to indicate that we should not automatically be willing to use * ourself to answer a directory request. @@ -4852,25 +4837,6 @@ smartlist_t *router_get_trusted_dir_servers(void); */ #define PDS_NO_EXISTING_SERVERDESC_FETCH (1<<3) #define _PDS_PREFER_TUNNELED_DIR_CONNS (1<<16) -routerstatus_t *router_pick_directory_server(authority_type_t type, int flags); -trusted_dir_server_t *router_get_trusteddirserver_by_digest(const char *d); -trusted_dir_server_t *trusteddirserver_get_by_v3_auth_digest(const char *d); -routerstatus_t *router_pick_trusteddirserver(authority_type_t type, int flags); -int router_get_my_share_of_directory_requests(double *v2_share_out, - double *v3_share_out); -void router_reset_status_download_failures(void); -void routerlist_add_family(smartlist_t *sl, routerinfo_t *router); -int routers_in_same_family(routerinfo_t *r1, routerinfo_t *r2); -void add_nickname_list_to_smartlist(smartlist_t *sl, const char *list, - int must_be_running); -int router_nickname_is_in_list(routerinfo_t *router, const char *list); -routerinfo_t *routerlist_find_my_routerinfo(void); -routerinfo_t *router_find_exact_exit_enclave(const char *address, - uint16_t port); -int router_is_unreliable(routerinfo_t *router, int need_uptime, - int need_capacity, int need_guard); -uint32_t router_get_advertised_bandwidth(routerinfo_t *router); -uint32_t router_get_advertised_bandwidth_capped(routerinfo_t *router); /** Possible ways to weight routers when choosing one randomly. See * routerlist_sl_choose_by_bandwidth() for more information.*/ @@ -4878,10 +4844,6 @@ typedef enum bandwidth_weight_rule_t { NO_WEIGHTING, WEIGHT_FOR_EXIT, WEIGHT_FOR_MID, WEIGHT_FOR_GUARD, WEIGHT_FOR_DIR } bandwidth_weight_rule_t; -routerinfo_t *routerlist_sl_choose_by_bandwidth(smartlist_t *sl, - bandwidth_weight_rule_t rule); -routerstatus_t *routerstatus_sl_choose_by_bandwidth(smartlist_t *sl, - bandwidth_weight_rule_t rule); /* XXXX actually declared in reasons.c */ const char *bandwidth_weight_rule_to_string(enum bandwidth_weight_rule_t rule); @@ -4897,38 +4859,6 @@ typedef enum { CRN_WEIGHT_AS_EXIT = 1<<5 } router_crn_flags_t; -routerinfo_t *router_choose_random_node(smartlist_t *excludedsmartlist, - struct routerset_t *excludedset, - router_crn_flags_t flags); - -routerinfo_t *router_get_by_nickname(const char *nickname, - int warn_if_unnamed); -int router_digest_version_as_new_as(const char *digest, const char *cutoff); -int router_digest_is_trusted_dir_type(const char *digest, - authority_type_t type); -#define router_digest_is_trusted_dir(d) \ - router_digest_is_trusted_dir_type((d), NO_AUTHORITY) - -int router_addr_is_trusted_dir(uint32_t addr); -int hexdigest_to_digest(const char *hexdigest, char *digest); -routerinfo_t *router_get_by_hexdigest(const char *hexdigest); -routerinfo_t *router_get_by_digest(const char *digest); -signed_descriptor_t *router_get_by_descriptor_digest(const char *digest); -signed_descriptor_t *router_get_by_extrainfo_digest(const char *digest); -signed_descriptor_t *extrainfo_get_by_descriptor_digest(const char *digest); -const char *signed_descriptor_get_body(signed_descriptor_t *desc); -const char *signed_descriptor_get_annotations(signed_descriptor_t *desc); -routerlist_t *router_get_routerlist(void); -void routerinfo_free(routerinfo_t *router); -void extrainfo_free(extrainfo_t *extrainfo); -void routerlist_free(routerlist_t *rl); -void dump_routerlist_mem_usage(int severity); -void routerlist_remove(routerlist_t *rl, routerinfo_t *ri, int make_old, - time_t now); -void routerlist_free_all(void); -void routerlist_reset_warnings(void); -void router_set_status(const char *digest, int up); - /** Return value for router_add_to_routerlist() and dirserv_add_descriptor() */ typedef enum was_router_added_t { ROUTER_ADDED_SUCCESSFULLY = 1, @@ -4940,111 +4870,6 @@ typedef enum was_router_added_t { ROUTER_AUTHDIR_REJECTS = -5, } was_router_added_t; -static int WRA_WAS_ADDED(was_router_added_t s); -static int WRA_WAS_OUTDATED(was_router_added_t s); -static int WRA_WAS_REJECTED(was_router_added_t s); -/** Return true iff the descriptor was added. It might still be necessary to - * check whether the descriptor generator should be notified. - */ -static INLINE int -WRA_WAS_ADDED(was_router_added_t s) { - return s == ROUTER_ADDED_SUCCESSFULLY || s == ROUTER_ADDED_NOTIFY_GENERATOR; -} -/** Return true iff the descriptor was not added because it was either: - * - not in the consensus - * - neither in the consensus nor in any networkstatus document - * - it was outdated. - */ -static INLINE int WRA_WAS_OUTDATED(was_router_added_t s) -{ - return (s == ROUTER_WAS_NOT_NEW || - s == ROUTER_NOT_IN_CONSENSUS || - s == ROUTER_NOT_IN_CONSENSUS_OR_NETWORKSTATUS); -} -/** Return true iff the descriptor rejected because it was malformed. */ -static INLINE int WRA_WAS_REJECTED(was_router_added_t s) -{ - return (s == ROUTER_AUTHDIR_REJECTS); -} -was_router_added_t router_add_to_routerlist(routerinfo_t *router, - const char **msg, - int from_cache, - int from_fetch); -was_router_added_t router_add_extrainfo_to_routerlist( - extrainfo_t *ei, const char **msg, - int from_cache, int from_fetch); -void routerlist_remove_old_routers(void); -int router_load_single_router(const char *s, uint8_t purpose, int cache, - const char **msg); -int router_load_routers_from_string(const char *s, const char *eos, - saved_location_t saved_location, - smartlist_t *requested_fingerprints, - int descriptor_digests, - const char *prepend_annotations); -void router_load_extrainfo_from_string(const char *s, const char *eos, - saved_location_t saved_location, - smartlist_t *requested_fingerprints, - int descriptor_digests); -void routerlist_retry_directory_downloads(time_t now); -int router_exit_policy_all_routers_reject(uint32_t addr, uint16_t port, - int need_uptime); -int router_exit_policy_rejects_all(routerinfo_t *router); -trusted_dir_server_t *add_trusted_dir_server(const char *nickname, - const char *address, - uint16_t dir_port, uint16_t or_port, - const char *digest, const char *v3_auth_digest, - authority_type_t type); -void authority_cert_free(authority_cert_t *cert); -void clear_trusted_dir_servers(void); -int any_trusted_dir_is_v1_authority(void); -void update_consensus_router_descriptor_downloads(time_t now, int is_vote, - networkstatus_t *consensus); -void update_router_descriptor_downloads(time_t now); -void update_extrainfo_downloads(time_t now); -int router_have_minimum_dir_info(void); -void router_dir_info_changed(void); -const char *get_dir_info_status_string(void); -int count_loading_descriptors_progress(void); -void router_reset_descriptor_download_failures(void); -int router_differences_are_cosmetic(routerinfo_t *r1, routerinfo_t *r2); -int routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, - signed_descriptor_t *sd, - const char **msg); -void routerlist_assert_ok(routerlist_t *rl); -const char *esc_router_info(routerinfo_t *router); -void routers_sort_by_identity(smartlist_t *routers); - -routerset_t *routerset_new(void); -int routerset_parse(routerset_t *target, const char *s, - const char *description); -void routerset_union(routerset_t *target, const routerset_t *source); -int routerset_is_list(const routerset_t *set); -int routerset_needs_geoip(const routerset_t *set); -int routerset_contains_router(const routerset_t *set, routerinfo_t *ri); -int routerset_contains_routerstatus(const routerset_t *set, - routerstatus_t *rs); -int routerset_contains_extendinfo(const routerset_t *set, - const extend_info_t *ei); -void routerset_get_all_routers(smartlist_t *out, const routerset_t *routerset, - int running_only); -void routersets_get_disjunction(smartlist_t *target, const smartlist_t *source, - const routerset_t *include, - const routerset_t *exclude, int running_only); -void routerset_subtract_routers(smartlist_t *out, - const routerset_t *routerset); -char *routerset_to_string(const routerset_t *routerset); -void routerset_refresh_countries(routerset_t *target); -int routerset_equal(const routerset_t *old, const routerset_t *new); -void routerset_free(routerset_t *routerset); -void routerinfo_set_country(routerinfo_t *ri); -void routerlist_refresh_countries(void); -void refresh_all_country_info(void); - -int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs, - const char *id); -int hid_serv_acting_as_directory(void); -int hid_serv_responsible_for_desc_id(const char *id); - /********************************* routerparse.c ************************/ #define MAX_STATUS_TAG_LEN 32 diff --git a/src/or/relay.c b/src/or/relay.c index 1c15549d0..d227bdfed 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -14,6 +14,7 @@ #include "or.h" #include "geoip.h" #include "mempool.h" +#include "routerlist.h" static int relay_crypt(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction, diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 9a31c2d73..0a9f483e5 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -8,6 +8,7 @@ **/ #include "or.h" +#include "routerlist.h" /** Called when we've established a circuit to an introduction point: * send the introduction request. */ diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c index 814abd8cc..4af041525 100644 --- a/src/or/rendcommon.c +++ b/src/or/rendcommon.c @@ -9,6 +9,7 @@ **/ #include "or.h" +#include "routerlist.h" /** Return 0 if one and two are the same service ids, else -1 or 1 */ int diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 30df64e05..c7dc3c901 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -9,6 +9,7 @@ #include "or.h" #include "router.h" +#include "routerlist.h" static origin_circuit_t *find_intro_circuit(rend_intro_point_t *intro, const char *pk_digest); diff --git a/src/or/rephist.c b/src/or/rephist.c index 00a2cabe2..25fda237a 100644 --- a/src/or/rephist.c +++ b/src/or/rephist.c @@ -11,6 +11,7 @@ #include "or.h" #include "router.h" +#include "routerlist.h" #include "ht.h" static void bw_arrays_init(void); diff --git a/src/or/router.c b/src/or/router.c index 20316815b..53a4a7db4 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -9,6 +9,7 @@ #include "or.h" #include "geoip.h" #include "router.h" +#include "routerlist.h" /** * \file router.c diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 7d9e48c1d..b4803e9ac 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -14,6 +14,7 @@ #include "or.h" #include "geoip.h" #include "router.h" +#include "routerlist.h" // #define DEBUG_ROUTERLIST diff --git a/src/or/routerlist.h b/src/or/routerlist.h new file mode 100644 index 000000000..bbb3c5fe0 --- /dev/null +++ b/src/or/routerlist.h @@ -0,0 +1,193 @@ +/* Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2010, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file routerlist.h + * \brief Header file for routerlist functions + **/ + +#ifndef _TOR_ROUTERLIST_H +#define _TOR_ROUTERLIST_H + +int get_n_authorities(authority_type_t type); +int trusted_dirs_reload_certs(void); +int trusted_dirs_load_certs_from_string(const char *contents, int from_store, + int flush); +void trusted_dirs_flush_certs_to_disk(void); +authority_cert_t *authority_cert_get_newest_by_id(const char *id_digest); +authority_cert_t *authority_cert_get_by_sk_digest(const char *sk_digest); +authority_cert_t *authority_cert_get_by_digests(const char *id_digest, + const char *sk_digest); +void authority_cert_get_all(smartlist_t *certs_out); +void authority_cert_dl_failed(const char *id_digest, int status); +void authority_certs_fetch_missing(networkstatus_t *status, time_t now); +int router_reload_router_list(void); +smartlist_t *router_get_trusted_dir_servers(void); + +routerstatus_t *router_pick_directory_server(authority_type_t type, int flags); +trusted_dir_server_t *router_get_trusteddirserver_by_digest(const char *d); +trusted_dir_server_t *trusteddirserver_get_by_v3_auth_digest(const char *d); +routerstatus_t *router_pick_trusteddirserver(authority_type_t type, int flags); +int router_get_my_share_of_directory_requests(double *v2_share_out, + double *v3_share_out); +void router_reset_status_download_failures(void); +void routerlist_add_family(smartlist_t *sl, routerinfo_t *router); +int routers_in_same_family(routerinfo_t *r1, routerinfo_t *r2); +void add_nickname_list_to_smartlist(smartlist_t *sl, const char *list, + int must_be_running); +int router_nickname_is_in_list(routerinfo_t *router, const char *list); +routerinfo_t *routerlist_find_my_routerinfo(void); +routerinfo_t *router_find_exact_exit_enclave(const char *address, + uint16_t port); +int router_is_unreliable(routerinfo_t *router, int need_uptime, + int need_capacity, int need_guard); +uint32_t router_get_advertised_bandwidth(routerinfo_t *router); +uint32_t router_get_advertised_bandwidth_capped(routerinfo_t *router); + +routerinfo_t *routerlist_sl_choose_by_bandwidth(smartlist_t *sl, + bandwidth_weight_rule_t rule); +routerstatus_t *routerstatus_sl_choose_by_bandwidth(smartlist_t *sl, + bandwidth_weight_rule_t rule); + +routerinfo_t *router_choose_random_node(smartlist_t *excludedsmartlist, + struct routerset_t *excludedset, + router_crn_flags_t flags); + +routerinfo_t *router_get_by_nickname(const char *nickname, + int warn_if_unnamed); +int router_digest_version_as_new_as(const char *digest, const char *cutoff); +int router_digest_is_trusted_dir_type(const char *digest, + authority_type_t type); +#define router_digest_is_trusted_dir(d) \ + router_digest_is_trusted_dir_type((d), NO_AUTHORITY) + +int router_addr_is_trusted_dir(uint32_t addr); +int hexdigest_to_digest(const char *hexdigest, char *digest); +routerinfo_t *router_get_by_hexdigest(const char *hexdigest); +routerinfo_t *router_get_by_digest(const char *digest); +signed_descriptor_t *router_get_by_descriptor_digest(const char *digest); +signed_descriptor_t *router_get_by_extrainfo_digest(const char *digest); +signed_descriptor_t *extrainfo_get_by_descriptor_digest(const char *digest); +const char *signed_descriptor_get_body(signed_descriptor_t *desc); +const char *signed_descriptor_get_annotations(signed_descriptor_t *desc); +routerlist_t *router_get_routerlist(void); +void routerinfo_free(routerinfo_t *router); +void extrainfo_free(extrainfo_t *extrainfo); +void routerlist_free(routerlist_t *rl); +void dump_routerlist_mem_usage(int severity); +void routerlist_remove(routerlist_t *rl, routerinfo_t *ri, int make_old, + time_t now); +void routerlist_free_all(void); +void routerlist_reset_warnings(void); +void router_set_status(const char *digest, int up); + +static int WRA_WAS_ADDED(was_router_added_t s); +static int WRA_WAS_OUTDATED(was_router_added_t s); +static int WRA_WAS_REJECTED(was_router_added_t s); +/** Return true iff the descriptor was added. It might still be necessary to + * check whether the descriptor generator should be notified. + */ +static INLINE int +WRA_WAS_ADDED(was_router_added_t s) { + return s == ROUTER_ADDED_SUCCESSFULLY || s == ROUTER_ADDED_NOTIFY_GENERATOR; +} +/** Return true iff the descriptor was not added because it was either: + * - not in the consensus + * - neither in the consensus nor in any networkstatus document + * - it was outdated. + */ +static INLINE int WRA_WAS_OUTDATED(was_router_added_t s) +{ + return (s == ROUTER_WAS_NOT_NEW || + s == ROUTER_NOT_IN_CONSENSUS || + s == ROUTER_NOT_IN_CONSENSUS_OR_NETWORKSTATUS); +} +static INLINE int WRA_WAS_REJECTED(was_router_added_t s) +{ + return (s == ROUTER_AUTHDIR_REJECTS); +} +was_router_added_t router_add_to_routerlist(routerinfo_t *router, + const char **msg, + int from_cache, + int from_fetch); +was_router_added_t router_add_extrainfo_to_routerlist( + extrainfo_t *ei, const char **msg, + int from_cache, int from_fetch); +void routerlist_remove_old_routers(void); +int router_load_single_router(const char *s, uint8_t purpose, int cache, + const char **msg); +int router_load_routers_from_string(const char *s, const char *eos, + saved_location_t saved_location, + smartlist_t *requested_fingerprints, + int descriptor_digests, + const char *prepend_annotations); +void router_load_extrainfo_from_string(const char *s, const char *eos, + saved_location_t saved_location, + smartlist_t *requested_fingerprints, + int descriptor_digests); + +void routerlist_retry_directory_downloads(time_t now); +int router_exit_policy_all_routers_reject(uint32_t addr, uint16_t port, + int need_uptime); +int router_exit_policy_rejects_all(routerinfo_t *router); +trusted_dir_server_t *add_trusted_dir_server(const char *nickname, + const char *address, + uint16_t dir_port, uint16_t or_port, + const char *digest, const char *v3_auth_digest, + authority_type_t type); +void authority_cert_free(authority_cert_t *cert); +void clear_trusted_dir_servers(void); +int any_trusted_dir_is_v1_authority(void); +void update_consensus_router_descriptor_downloads(time_t now, int is_vote, + networkstatus_t *consensus); +void update_router_descriptor_downloads(time_t now); +void update_extrainfo_downloads(time_t now); +int router_have_minimum_dir_info(void); +void router_dir_info_changed(void); +const char *get_dir_info_status_string(void); +int count_loading_descriptors_progress(void); +void router_reset_descriptor_download_failures(void); +int router_differences_are_cosmetic(routerinfo_t *r1, routerinfo_t *r2); +int routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, + signed_descriptor_t *sd, + const char **msg); + +void routerlist_assert_ok(routerlist_t *rl); +const char *esc_router_info(routerinfo_t *router); +void routers_sort_by_identity(smartlist_t *routers); + +routerset_t *routerset_new(void); +int routerset_parse(routerset_t *target, const char *s, + const char *description); +void routerset_union(routerset_t *target, const routerset_t *source); +int routerset_is_list(const routerset_t *set); +int routerset_needs_geoip(const routerset_t *set); +int routerset_contains_router(const routerset_t *set, routerinfo_t *ri); +int routerset_contains_routerstatus(const routerset_t *set, + routerstatus_t *rs); +int routerset_contains_extendinfo(const routerset_t *set, + const extend_info_t *ei); +void routerset_get_all_routers(smartlist_t *out, const routerset_t *routerset, + int running_only); +void routersets_get_disjunction(smartlist_t *target, const smartlist_t *source, + const routerset_t *include, + const routerset_t *exclude, int running_only); +void routerset_subtract_routers(smartlist_t *out, + const routerset_t *routerset); +char *routerset_to_string(const routerset_t *routerset); +void routerset_refresh_countries(routerset_t *target); +int routerset_equal(const routerset_t *old, const routerset_t *new); +void routerset_free(routerset_t *routerset); +void routerinfo_set_country(routerinfo_t *ri); +void routerlist_refresh_countries(void); +void refresh_all_country_info(void); + +int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs, + const char *id); +int hid_serv_acting_as_directory(void); +int hid_serv_responsible_for_desc_id(const char *id); + +#endif + diff --git a/src/or/routerparse.c b/src/or/routerparse.c index 3da1915cc..760f876c3 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -11,6 +11,7 @@ #include "or.h" #include "router.h" +#include "routerlist.h" #include "memarea.h" #undef log #include diff --git a/src/test/test_dir.c b/src/test/test_dir.c index f99352a9b..5ea09d092 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -9,6 +9,7 @@ #define ROUTER_PRIVATE #include "or.h" #include "router.h" +#include "routerlist.h" #include "test.h" static void -- cgit v1.2.3 From bec1c838ca96b69d69b3c275b4703fa539c8c106 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Thu, 22 Jul 2010 11:54:50 +0200 Subject: Create directory.h --- src/or/circuitbuild.c | 1 + src/or/connection.c | 1 + src/or/control.c | 1 + src/or/directory.c | 1 + src/or/directory.h | 108 +++++++++++++++++++++++++++++++++++++++++++++++++ src/or/dirserv.c | 1 + src/or/dirvote.c | 1 + src/or/main.c | 1 + src/or/networkstatus.c | 1 + src/or/or.h | 90 ----------------------------------------- src/or/rendclient.c | 1 + src/or/rendservice.c | 1 + src/or/router.c | 1 + src/or/routerlist.c | 1 + src/test/test_dir.c | 1 + 15 files changed, 121 insertions(+), 90 deletions(-) create mode 100644 src/or/directory.h (limited to 'src/test/test_dir.c') diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index a675d7dad..1a189caab 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -20,6 +20,7 @@ #include "connection_edge.h" #include "connection_or.h" #include "control.h" +#include "directory.h" #include "router.h" #include "routerlist.h" #include "crypto.h" diff --git a/src/or/connection.c b/src/or/connection.c index ac8123cf3..f41578322 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -21,6 +21,7 @@ #include "connection_or.h" #include "control.h" #include "cpuworker.h" +#include "directory.h" #include "dnsserv.h" #include "geoip.h" #include "rendclient.h" diff --git a/src/or/control.c b/src/or/control.c index 77ca08516..e90134afc 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -19,6 +19,7 @@ #include "connection.h" #include "connection_edge.h" #include "control.h" +#include "directory.h" #include "dnsserv.h" #include "geoip.h" #include "router.h" diff --git a/src/or/directory.c b/src/or/directory.c index 5fdae4309..41b27945d 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -10,6 +10,7 @@ #include "connection.h" #include "connection_edge.h" #include "control.h" +#include "directory.h" #include "geoip.h" #include "rendclient.h" #include "rendcommon.h" diff --git a/src/or/directory.h b/src/or/directory.h new file mode 100644 index 000000000..36b4cf2b1 --- /dev/null +++ b/src/or/directory.h @@ -0,0 +1,108 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2010, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file directory.h + * \brief Header file for directory.c. + **/ + +#ifndef _TOR_DIRECTORY_H +#define _TOR_DIRECTORY_H + +int directories_have_accepted_server_descriptor(void); +char *authority_type_to_string(authority_type_t auth); +void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose, + authority_type_t type, const char *payload, + size_t payload_len, size_t extrainfo_len); +void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, + const char *resource, + int pds_flags); +void directory_get_from_all_authorities(uint8_t dir_purpose, + uint8_t router_purpose, + const char *resource); +void directory_initiate_command_routerstatus(routerstatus_t *status, + uint8_t dir_purpose, + uint8_t router_purpose, + int anonymized_connection, + const char *resource, + const char *payload, + size_t payload_len, + time_t if_modified_since); +void directory_initiate_command_routerstatus_rend(routerstatus_t *status, + uint8_t dir_purpose, + uint8_t router_purpose, + int anonymized_connection, + const char *resource, + const char *payload, + size_t payload_len, + time_t if_modified_since, + const rend_data_t *rend_query); + +int parse_http_response(const char *headers, int *code, time_t *date, + compress_method_t *compression, char **response); + +int connection_dir_is_encrypted(dir_connection_t *conn); +int connection_dir_reached_eof(dir_connection_t *conn); +int connection_dir_process_inbuf(dir_connection_t *conn); +int connection_dir_finished_flushing(dir_connection_t *conn); +int connection_dir_finished_connecting(dir_connection_t *conn); +void connection_dir_request_failed(dir_connection_t *conn); +void directory_initiate_command(const char *address, const tor_addr_t *addr, + uint16_t or_port, uint16_t dir_port, + int supports_conditional_consensus, + int supports_begindir, const char *digest, + uint8_t dir_purpose, uint8_t router_purpose, + int anonymized_connection, + const char *resource, + const char *payload, size_t payload_len, + time_t if_modified_since); + +#define DSR_HEX (1<<0) +#define DSR_BASE64 (1<<1) +#define DSR_DIGEST256 (1<<2) +#define DSR_SORT_UNIQ (1<<3) +int dir_split_resource_into_fingerprints(const char *resource, + smartlist_t *fp_out, int *compressed_out, + int flags); + +int dir_split_resource_into_fingerprint_pairs(const char *res, + smartlist_t *pairs_out); +char *directory_dump_request_log(void); +void note_request(const char *key, size_t bytes); +int router_supports_extrainfo(const char *identity_digest, int is_authority); + +time_t download_status_increment_failure(download_status_t *dls, + int status_code, const char *item, + int server, time_t now); +/** Increment the failure count of the download_status_t dls, with + * the optional status code sc. */ +#define download_status_failed(dls, sc) \ + download_status_increment_failure((dls), (sc), NULL, \ + get_options()->DirPort, time(NULL)) + +void download_status_reset(download_status_t *dls); +static int download_status_is_ready(download_status_t *dls, time_t now, + int max_failures); +/** Return true iff, as of now, the resource tracked by dls is + * ready to get its download reattempted. */ +static INLINE int +download_status_is_ready(download_status_t *dls, time_t now, + int max_failures) +{ + return (dls->n_download_failures <= max_failures + && dls->next_attempt_at <= now); +} + +static void download_status_mark_impossible(download_status_t *dl); +/** Mark dl as never downloadable. */ +static INLINE void +download_status_mark_impossible(download_status_t *dl) +{ + dl->n_download_failures = IMPOSSIBLE_TO_DOWNLOAD; +} + +#endif + diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 80423381e..5eea9ce1a 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -10,6 +10,7 @@ #include "connection.h" #include "connection_or.h" #include "control.h" +#include "directory.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/dirvote.c b/src/or/dirvote.c index 6e6bf8d08..f24a91f8e 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -6,6 +6,7 @@ #define DIRVOTE_PRIVATE #include "or.h" #include "config.h" +#include "directory.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/main.c b/src/or/main.c index 46ab044c3..4bd815a6f 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -23,6 +23,7 @@ #include "connection_or.h" #include "control.h" #include "cpuworker.h" +#include "directory.h" #include "dnsserv.h" #include "geoip.h" #include "rendclient.h" diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 21774976c..799d21f9d 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -15,6 +15,7 @@ #include "config.h" #include "connection.h" #include "control.h" +#include "directory.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/or.h b/src/or/or.h index f38567f53..58339b291 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3166,101 +3166,11 @@ typedef enum { /********************************* directory.c ***************************/ -int directories_have_accepted_server_descriptor(void); -char *authority_type_to_string(authority_type_t auth); -void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose, - authority_type_t type, const char *payload, - size_t payload_len, size_t extrainfo_len); -void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, - const char *resource, - int pds_flags); -void directory_get_from_all_authorities(uint8_t dir_purpose, - uint8_t router_purpose, - const char *resource); -void directory_initiate_command_routerstatus(routerstatus_t *status, - uint8_t dir_purpose, - uint8_t router_purpose, - int anonymized_connection, - const char *resource, - const char *payload, - size_t payload_len, - time_t if_modified_since); -void directory_initiate_command_routerstatus_rend(routerstatus_t *status, - uint8_t dir_purpose, - uint8_t router_purpose, - int anonymized_connection, - const char *resource, - const char *payload, - size_t payload_len, - time_t if_modified_since, - const rend_data_t *rend_query); - -int parse_http_response(const char *headers, int *code, time_t *date, - compress_method_t *compression, char **response); - -int connection_dir_is_encrypted(dir_connection_t *conn); -int connection_dir_reached_eof(dir_connection_t *conn); -int connection_dir_process_inbuf(dir_connection_t *conn); -int connection_dir_finished_flushing(dir_connection_t *conn); -int connection_dir_finished_connecting(dir_connection_t *conn); -void connection_dir_request_failed(dir_connection_t *conn); -void directory_initiate_command(const char *address, const tor_addr_t *addr, - uint16_t or_port, uint16_t dir_port, - int supports_conditional_consensus, - int supports_begindir, const char *digest, - uint8_t dir_purpose, uint8_t router_purpose, - int anonymized_connection, - const char *resource, - const char *payload, size_t payload_len, - time_t if_modified_since); - -#define DSR_HEX (1<<0) -#define DSR_BASE64 (1<<1) -#define DSR_DIGEST256 (1<<2) -#define DSR_SORT_UNIQ (1<<3) -int dir_split_resource_into_fingerprints(const char *resource, - smartlist_t *fp_out, int *compressed_out, - int flags); /** A pair of digests created by dir_split_resource_info_fingerprint_pairs() */ typedef struct { char first[DIGEST_LEN]; char second[DIGEST_LEN]; } fp_pair_t; -int dir_split_resource_into_fingerprint_pairs(const char *res, - smartlist_t *pairs_out); -char *directory_dump_request_log(void); -void note_request(const char *key, size_t bytes); -int router_supports_extrainfo(const char *identity_digest, int is_authority); - -time_t download_status_increment_failure(download_status_t *dls, - int status_code, const char *item, - int server, time_t now); -/** Increment the failure count of the download_status_t dls, with - * the optional status code sc. */ -#define download_status_failed(dls, sc) \ - download_status_increment_failure((dls), (sc), NULL, \ - get_options()->DirPort, time(NULL)) - -void download_status_reset(download_status_t *dls); -static int download_status_is_ready(download_status_t *dls, time_t now, - int max_failures); -/** Return true iff, as of now, the resource tracked by dls is - * ready to get its download reattempted. */ -static INLINE int -download_status_is_ready(download_status_t *dls, time_t now, - int max_failures) -{ - return (dls->n_download_failures <= max_failures - && dls->next_attempt_at <= now); -} - -static void download_status_mark_impossible(download_status_t *dl); -/** Mark dl as never downloadable. */ -static INLINE void -download_status_mark_impossible(download_status_t *dl) -{ - dl->n_download_failures = IMPOSSIBLE_TO_DOWNLOAD; -} /********************************* dirserv.c ***************************/ /** Maximum length of an exit policy summary. */ diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 3665eb118..92d43bc18 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -14,6 +14,7 @@ #include "config.h" #include "connection.h" #include "connection_edge.h" +#include "directory.h" #include "rendclient.h" #include "rendcommon.h" #include "routerlist.h" diff --git a/src/or/rendservice.c b/src/or/rendservice.c index a7ed2007f..5d72ef8c0 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -12,6 +12,7 @@ #include "circuitlist.h" #include "circuituse.h" #include "config.h" +#include "directory.h" #include "rendclient.h" #include "rendcommon.h" #include "rendservice.h" diff --git a/src/or/router.c b/src/or/router.c index 722bb4da5..8dd7ef8dc 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -12,6 +12,7 @@ #include "config.h" #include "connection.h" #include "control.h" +#include "directory.h" #include "geoip.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/routerlist.c b/src/or/routerlist.c index a28415289..ca5d75dd7 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -16,6 +16,7 @@ #include "config.h" #include "connection.h" #include "control.h" +#include "directory.h" #include "geoip.h" #include "rendcommon.h" #include "rendservice.h" diff --git a/src/test/test_dir.c b/src/test/test_dir.c index 5ea09d092..e01da1467 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -8,6 +8,7 @@ #define DIRVOTE_PRIVATE #define ROUTER_PRIVATE #include "or.h" +#include "directory.h" #include "router.h" #include "routerlist.h" #include "test.h" -- cgit v1.2.3 From 7d4c027fb064b6163fb4b74fc1b3f86fff1335c9 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Thu, 22 Jul 2010 12:09:49 +0200 Subject: Create dirserv.h --- src/or/config.c | 1 + src/or/connection.c | 1 + src/or/connection_edge.c | 1 + src/or/connection_or.c | 1 + src/or/control.c | 1 + src/or/directory.c | 1 + src/or/dirserv.c | 1 + src/or/dirserv.h | 133 +++++++++++++++++++++++++++++++++++++++++++++++ src/or/dirvote.c | 1 + src/or/main.c | 1 + src/or/networkstatus.c | 1 + src/or/or.h | 112 --------------------------------------- src/or/policies.c | 1 + src/or/router.c | 1 + src/or/routerlist.c | 1 + src/or/routerparse.c | 1 + src/or/routerparse.h | 93 +++++++++++++++++++++++++++++++++ src/test/test_dir.c | 1 + 18 files changed, 241 insertions(+), 112 deletions(-) create mode 100644 src/or/dirserv.h create mode 100644 src/or/routerparse.h (limited to 'src/test/test_dir.c') diff --git a/src/or/config.c b/src/or/config.c index 3f18984f0..884a059b6 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -19,6 +19,7 @@ #include "connection_edge.h" #include "control.h" #include "cpuworker.h" +#include "dirserv.h" #include "geoip.h" #include "rendclient.h" #include "rendservice.h" diff --git a/src/or/connection.c b/src/or/connection.c index f41578322..522b5ff77 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -22,6 +22,7 @@ #include "control.h" #include "cpuworker.h" #include "directory.h" +#include "dirserv.h" #include "dnsserv.h" #include "geoip.h" #include "rendclient.h" diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 023c8aeac..44c48c6e1 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -19,6 +19,7 @@ #include "connection_or.h" #include "control.h" #include "dnsserv.h" +#include "dirserv.h" #include "rendclient.h" #include "rendcommon.h" #include "rendservice.h" diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 213653f1d..b3b3cf013 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -18,6 +18,7 @@ #include "connection.h" #include "connection_or.h" #include "control.h" +#include "dirserv.h" #include "geoip.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/control.c b/src/or/control.c index e90134afc..9ad6dfd47 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -20,6 +20,7 @@ #include "connection_edge.h" #include "control.h" #include "directory.h" +#include "dirserv.h" #include "dnsserv.h" #include "geoip.h" #include "router.h" diff --git a/src/or/directory.c b/src/or/directory.c index 41b27945d..10d6ae7ce 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -11,6 +11,7 @@ #include "connection_edge.h" #include "control.h" #include "directory.h" +#include "dirserv.h" #include "geoip.h" #include "rendclient.h" #include "rendcommon.h" diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 5eea9ce1a..0a39b5d2c 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -11,6 +11,7 @@ #include "connection_or.h" #include "control.h" #include "directory.h" +#include "dirserv.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/dirserv.h b/src/or/dirserv.h new file mode 100644 index 000000000..fc5a5549c --- /dev/null +++ b/src/or/dirserv.h @@ -0,0 +1,133 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2010, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file dirserv.h + * \brief Header file for dirserv.c. + **/ + +#ifndef _TOR_DIRSERV_H +#define _TOR_DIRSERV_H + +/** Maximum length of an exit policy summary. */ +#define MAX_EXITPOLICY_SUMMARY_LEN 1000 + +/** Maximum allowable length of a version line in a networkstatus. */ +#define MAX_V_LINE_LEN 128 +/** Length of "r Authority BadDirectory BadExit Exit Fast Guard HSDir Named + * Running Stable Unnamed V2Dir Valid\n". */ +#define MAX_FLAG_LINE_LEN 96 +/** Length of "w" line for weighting. Currently at most + * "w Bandwidth= Measured=\n" */ +#define MAX_WEIGHT_LINE_LEN (12+10+10+10+1) +/** Maximum length of an exit policy summary line. */ +#define MAX_POLICY_LINE_LEN (3+MAX_EXITPOLICY_SUMMARY_LEN) +/** Amount of space to allocate for each entry: r, s, and v lines. */ +#define RS_ENTRY_LEN \ + ( /* first line */ \ + MAX_NICKNAME_LEN+BASE64_DIGEST_LEN*2+ISO_TIME_LEN+INET_NTOA_BUF_LEN+ \ + 5*2 /* ports */ + 10 /* punctuation */ + \ + /* second line */ \ + MAX_FLAG_LINE_LEN + \ + /* weight line */ \ + MAX_WEIGHT_LINE_LEN + \ + /* p line. */ \ + MAX_POLICY_LINE_LEN + \ + /* v line. */ \ + MAX_V_LINE_LEN \ + ) + +#define UNNAMED_ROUTER_NICKNAME "Unnamed" + +int connection_dirserv_flushed_some(dir_connection_t *conn); + +int dirserv_add_own_fingerprint(const char *nickname, crypto_pk_env_t *pk); +int dirserv_load_fingerprint_file(void); +void dirserv_free_fingerprint_list(void); +const char *dirserv_get_nickname_by_digest(const char *digest); +enum was_router_added_t dirserv_add_multiple_descriptors( + const char *desc, uint8_t purpose, + const char *source, + const char **msg); +enum was_router_added_t dirserv_add_descriptor(routerinfo_t *ri, + const char **msg, + const char *source); +void dirserv_free_descriptors(void); +void dirserv_set_router_is_running(routerinfo_t *router, time_t now); +int list_server_status_v1(smartlist_t *routers, char **router_status_out, + int for_controller); +int dirserv_dump_directory_to_string(char **dir_out, + crypto_pk_env_t *private_key); + +int directory_fetches_from_authorities(or_options_t *options); +int directory_fetches_dir_info_early(or_options_t *options); +int directory_fetches_dir_info_later(or_options_t *options); +int directory_caches_v2_dir_info(or_options_t *options); +#define directory_caches_v1_dir_info(o) directory_caches_v2_dir_info(o) +int directory_caches_dir_info(or_options_t *options); +int directory_permits_begindir_requests(or_options_t *options); +int directory_permits_controller_requests(or_options_t *options); +int directory_too_idle_to_fetch_descriptors(or_options_t *options, time_t now); + +void directory_set_dirty(void); +cached_dir_t *dirserv_get_directory(void); +cached_dir_t *dirserv_get_runningrouters(void); +cached_dir_t *dirserv_get_consensus(const char *flavor_name); +void dirserv_set_cached_directory(const char *directory, time_t when, + int is_running_routers); +void dirserv_set_cached_networkstatus_v2(const char *directory, + const char *identity, + time_t published); +void dirserv_set_cached_consensus_networkstatus(const char *consensus, + const char *flavor_name, + const digests_t *digests, + time_t published); +void dirserv_clear_old_networkstatuses(time_t cutoff); +void dirserv_clear_old_v1_info(time_t now); +void dirserv_get_networkstatus_v2(smartlist_t *result, const char *key); +void dirserv_get_networkstatus_v2_fingerprints(smartlist_t *result, + const char *key); +int dirserv_get_routerdesc_fingerprints(smartlist_t *fps_out, const char *key, + const char **msg, + int for_unencrypted_conn, + int is_extrainfo); +int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key, + const char **msg); +void dirserv_orconn_tls_done(const char *address, + uint16_t or_port, + const char *digest_rcvd, + int as_advertised); +void dirserv_single_reachability_test(time_t now, routerinfo_t *router); +void dirserv_test_reachability(time_t now); +int authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg, + int complain); +int dirserv_would_reject_router(routerstatus_t *rs); +int dirserv_remove_old_statuses(smartlist_t *fps, time_t cutoff); +int dirserv_have_any_serverdesc(smartlist_t *fps, int spool_src); +int dirserv_have_any_microdesc(const smartlist_t *fps); +size_t dirserv_estimate_data_size(smartlist_t *fps, int is_serverdescs, + int compressed); +size_t dirserv_estimate_microdesc_size(const smartlist_t *fps, int compressed); + +int routerstatus_format_entry(char *buf, size_t buf_len, + routerstatus_t *rs, const char *platform, + routerstatus_format_type_t format); +void dirserv_free_all(void); +void cached_dir_decref(cached_dir_t *d); +cached_dir_t *new_cached_dir(char *s, time_t published); + +#ifdef DIRSERV_PRIVATE +int measured_bw_line_parse(measured_bw_line_t *out, const char *line); + +int measured_bw_line_apply(measured_bw_line_t *parsed_line, + smartlist_t *routerstatuses); +#endif + +int dirserv_read_measured_bandwidths(const char *from_file, + smartlist_t *routerstatuses); + +#endif + diff --git a/src/or/dirvote.c b/src/or/dirvote.c index f24a91f8e..a013c504e 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -7,6 +7,7 @@ #include "or.h" #include "config.h" #include "directory.h" +#include "dirserv.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/main.c b/src/or/main.c index 4bd815a6f..89a8eac16 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -24,6 +24,7 @@ #include "control.h" #include "cpuworker.h" #include "directory.h" +#include "dirserv.h" #include "dnsserv.h" #include "geoip.h" #include "rendclient.h" diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 799d21f9d..96c768704 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -16,6 +16,7 @@ #include "connection.h" #include "control.h" #include "directory.h" +#include "dirserv.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/or.h b/src/or/or.h index 58339b291..47a0a90ae 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3173,115 +3173,10 @@ typedef struct { } fp_pair_t; /********************************* dirserv.c ***************************/ -/** Maximum length of an exit policy summary. */ -#define MAX_EXITPOLICY_SUMMARY_LEN 1000 - -/** Maximum allowable length of a version line in a networkstatus. */ -#define MAX_V_LINE_LEN 128 -/** Length of "r Authority BadDirectory BadExit Exit Fast Guard HSDir Named - * Running Stable Unnamed V2Dir Valid\n". */ -#define MAX_FLAG_LINE_LEN 96 -/** Length of "w" line for weighting. Currently at most - * "w Bandwidth= Measured=\n" */ -#define MAX_WEIGHT_LINE_LEN (12+10+10+10+1) -/** Maximum length of an exit policy summary line. */ -#define MAX_POLICY_LINE_LEN (3+MAX_EXITPOLICY_SUMMARY_LEN) -/** Amount of space to allocate for each entry: r, s, and v lines. */ -#define RS_ENTRY_LEN \ - ( /* first line */ \ - MAX_NICKNAME_LEN+BASE64_DIGEST_LEN*2+ISO_TIME_LEN+INET_NTOA_BUF_LEN+ \ - 5*2 /* ports */ + 10 /* punctuation */ + \ - /* second line */ \ - MAX_FLAG_LINE_LEN + \ - /* weight line */ \ - MAX_WEIGHT_LINE_LEN + \ - /* p line. */ \ - MAX_POLICY_LINE_LEN + \ - /* v line. */ \ - MAX_V_LINE_LEN \ - ) -#define UNNAMED_ROUTER_NICKNAME "Unnamed" - -int connection_dirserv_flushed_some(dir_connection_t *conn); - -int dirserv_add_own_fingerprint(const char *nickname, crypto_pk_env_t *pk); -int dirserv_load_fingerprint_file(void); -void dirserv_free_fingerprint_list(void); -const char *dirserv_get_nickname_by_digest(const char *digest); -enum was_router_added_t dirserv_add_multiple_descriptors( - const char *desc, uint8_t purpose, - const char *source, - const char **msg); -enum was_router_added_t dirserv_add_descriptor(routerinfo_t *ri, - const char **msg, - const char *source); -void dirserv_free_descriptors(void); -void dirserv_set_router_is_running(routerinfo_t *router, time_t now); -int list_server_status_v1(smartlist_t *routers, char **router_status_out, - int for_controller); -int dirserv_dump_directory_to_string(char **dir_out, - crypto_pk_env_t *private_key); - -int directory_fetches_from_authorities(or_options_t *options); -int directory_fetches_dir_info_early(or_options_t *options); -int directory_fetches_dir_info_later(or_options_t *options); -int directory_caches_v2_dir_info(or_options_t *options); -#define directory_caches_v1_dir_info(o) directory_caches_v2_dir_info(o) -int directory_caches_dir_info(or_options_t *options); -int directory_permits_begindir_requests(or_options_t *options); -int directory_permits_controller_requests(or_options_t *options); -int directory_too_idle_to_fetch_descriptors(or_options_t *options, time_t now); - -void directory_set_dirty(void); -cached_dir_t *dirserv_get_directory(void); -cached_dir_t *dirserv_get_runningrouters(void); -cached_dir_t *dirserv_get_consensus(const char *flavor_name); -void dirserv_set_cached_directory(const char *directory, time_t when, - int is_running_routers); -void dirserv_set_cached_networkstatus_v2(const char *directory, - const char *identity, - time_t published); -void dirserv_set_cached_consensus_networkstatus(const char *consensus, - const char *flavor_name, - const digests_t *digests, - time_t published); -void dirserv_clear_old_networkstatuses(time_t cutoff); -void dirserv_clear_old_v1_info(time_t now); -void dirserv_get_networkstatus_v2(smartlist_t *result, const char *key); -void dirserv_get_networkstatus_v2_fingerprints(smartlist_t *result, - const char *key); -int dirserv_get_routerdesc_fingerprints(smartlist_t *fps_out, const char *key, - const char **msg, - int for_unencrypted_conn, - int is_extrainfo); -int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key, - const char **msg); -void dirserv_orconn_tls_done(const char *address, - uint16_t or_port, - const char *digest_rcvd, - int as_advertised); -void dirserv_single_reachability_test(time_t now, routerinfo_t *router); -void dirserv_test_reachability(time_t now); -int authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg, - int complain); -int dirserv_would_reject_router(routerstatus_t *rs); -int dirserv_remove_old_statuses(smartlist_t *fps, time_t cutoff); -int dirserv_have_any_serverdesc(smartlist_t *fps, int spool_src); -int dirserv_have_any_microdesc(const smartlist_t *fps); -size_t dirserv_estimate_data_size(smartlist_t *fps, int is_serverdescs, - int compressed); -size_t dirserv_estimate_microdesc_size(const smartlist_t *fps, int compressed); - typedef enum { NS_V2, NS_V3_CONSENSUS, NS_V3_VOTE, NS_CONTROL_PORT, NS_V3_CONSENSUS_MICRODESC } routerstatus_format_type_t; -int routerstatus_format_entry(char *buf, size_t buf_len, - routerstatus_t *rs, const char *platform, - routerstatus_format_type_t format); -void dirserv_free_all(void); -void cached_dir_decref(cached_dir_t *d); -cached_dir_t *new_cached_dir(char *s, time_t published); #ifdef DIRSERV_PRIVATE typedef struct measured_bw_line_t { @@ -3290,15 +3185,8 @@ typedef struct measured_bw_line_t { long int bw; } measured_bw_line_t; -int measured_bw_line_parse(measured_bw_line_t *out, const char *line); - -int measured_bw_line_apply(measured_bw_line_t *parsed_line, - smartlist_t *routerstatuses); #endif -int dirserv_read_measured_bandwidths(const char *from_file, - smartlist_t *routerstatuses); - /********************************* dirvote.c ************************/ /** Lowest allowable value for VoteSeconds. */ diff --git a/src/or/policies.c b/src/or/policies.c index 8866b57c9..72eb16847 100644 --- a/src/or/policies.c +++ b/src/or/policies.c @@ -10,6 +10,7 @@ #include "or.h" #include "config.h" +#include "dirserv.h" #include "ht.h" /** Policy that addresses for incoming SOCKS connections must match. */ diff --git a/src/or/router.c b/src/or/router.c index 8dd7ef8dc..a424bf5d1 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -13,6 +13,7 @@ #include "connection.h" #include "control.h" #include "directory.h" +#include "dirserv.h" #include "geoip.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/routerlist.c b/src/or/routerlist.c index ca5d75dd7..f8c8bad04 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -17,6 +17,7 @@ #include "connection.h" #include "control.h" #include "directory.h" +#include "dirserv.h" #include "geoip.h" #include "rendcommon.h" #include "rendservice.h" diff --git a/src/or/routerparse.c b/src/or/routerparse.c index b406a1cba..304509c31 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -11,6 +11,7 @@ #include "or.h" #include "config.h" +#include "dirserv.h" #include "rendcommon.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/routerparse.h b/src/or/routerparse.h new file mode 100644 index 000000000..e61563646 --- /dev/null +++ b/src/or/routerparse.h @@ -0,0 +1,93 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2010, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file geoip.h + * \brief Header file for geoip functions + **/ + +#ifndef _TOR_GEOIP_H +#define _TOR_GEOIP_H + +#define MAX_STATUS_TAG_LEN 32 + +int router_get_router_hash(const char *s, size_t s_len, char *digest); +int router_get_dir_hash(const char *s, char *digest); +int router_get_runningrouters_hash(const char *s, char *digest); +int router_get_networkstatus_v2_hash(const char *s, char *digest); +int router_get_networkstatus_v3_hash(const char *s, char *digest, + digest_algorithm_t algorithm); +int router_get_networkstatus_v3_hashes(const char *s, digests_t *digests); +int router_get_extrainfo_hash(const char *s, char *digest); +int router_append_dirobj_signature(char *buf, size_t buf_len, + const char *digest, + size_t digest_len, + crypto_pk_env_t *private_key); +int router_parse_list_from_string(const char **s, const char *eos, + smartlist_t *dest, + saved_location_t saved_location, + int is_extrainfo, + int allow_annotations, + const char *prepend_annotations); +int router_parse_routerlist_from_directory(const char *s, + routerlist_t **dest, + crypto_pk_env_t *pkey, + int check_version, + int write_to_cache); +int router_parse_runningrouters(const char *str); +int router_parse_directory(const char *str); + +routerinfo_t *router_parse_entry_from_string(const char *s, const char *end, + int cache_copy, + int allow_annotations, + const char *prepend_annotations); +extrainfo_t *extrainfo_parse_entry_from_string(const char *s, const char *end, + int cache_copy, struct digest_ri_map_t *routermap); +addr_policy_t *router_parse_addr_policy_item_from_string(const char *s, + int assume_action); +version_status_t tor_version_is_obsolete(const char *myversion, + const char *versionlist); +int tor_version_parse(const char *s, tor_version_t *out); +int tor_version_as_new_as(const char *platform, const char *cutoff); +int tor_version_compare(tor_version_t *a, tor_version_t *b); +void sort_version_list(smartlist_t *lst, int remove_duplicates); +void assert_addr_policy_ok(smartlist_t *t); +void dump_distinct_digest_count(int severity); + +int compare_routerstatus_entries(const void **_a, const void **_b); +networkstatus_v2_t *networkstatus_v2_parse_from_string(const char *s); +int networkstatus_verify_bw_weights(networkstatus_t *ns); +networkstatus_t *networkstatus_parse_vote_from_string(const char *s, + const char **eos_out, + networkstatus_type_t ns_type); +ns_detached_signatures_t *networkstatus_parse_detached_signatures( + const char *s, const char *eos); + +smartlist_t *microdescs_parse_from_string(const char *s, const char *eos, + int allow_annotations, + int copy_body); + +authority_cert_t *authority_cert_parse_from_string(const char *s, + const char **end_of_string); +int rend_parse_v2_service_descriptor(rend_service_descriptor_t **parsed_out, + char *desc_id_out, + char **intro_points_encrypted_out, + size_t *intro_points_encrypted_size_out, + size_t *encoded_size_out, + const char **next_out, const char *desc); +int rend_decrypt_introduction_points(char **ipos_decrypted, + size_t *ipos_decrypted_size, + const char *descriptor_cookie, + const char *ipos_encrypted, + size_t ipos_encrypted_size); +int rend_parse_introduction_points(rend_service_descriptor_t *parsed, + const char *intro_points_encoded, + size_t intro_points_encoded_size); +int rend_parse_client_keys(strmap_t *parsed_clients, const char *str); + +void tor_gettimeofday_cache_clear(void); + +#endif diff --git a/src/test/test_dir.c b/src/test/test_dir.c index e01da1467..0379811dd 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -9,6 +9,7 @@ #define ROUTER_PRIVATE #include "or.h" #include "directory.h" +#include "dirserv.h" #include "router.h" #include "routerlist.h" #include "test.h" -- cgit v1.2.3 From 85f7d544187d48b8cb9516e964b35e1999a15968 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Thu, 22 Jul 2010 12:19:28 +0200 Subject: Create dirvote.h --- src/or/config.c | 1 + src/or/directory.c | 1 + src/or/dirserv.c | 1 + src/or/dirvote.c | 1 + src/or/dirvote.h | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/or/main.c | 1 + src/or/networkstatus.c | 1 + src/or/or.h | 75 ---------------------------------------- src/or/routerlist.c | 1 + src/or/routerparse.c | 1 + src/test/test_dir.c | 1 + 11 files changed, 102 insertions(+), 75 deletions(-) create mode 100644 src/or/dirvote.h (limited to 'src/test/test_dir.c') diff --git a/src/or/config.c b/src/or/config.c index 884a059b6..70cadaa0a 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -20,6 +20,7 @@ #include "control.h" #include "cpuworker.h" #include "dirserv.h" +#include "dirvote.h" #include "geoip.h" #include "rendclient.h" #include "rendservice.h" diff --git a/src/or/directory.c b/src/or/directory.c index 10d6ae7ce..69700e867 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -12,6 +12,7 @@ #include "control.h" #include "directory.h" #include "dirserv.h" +#include "dirvote.h" #include "geoip.h" #include "rendclient.h" #include "rendcommon.h" diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 0a39b5d2c..b9fc489d5 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -12,6 +12,7 @@ #include "control.h" #include "directory.h" #include "dirserv.h" +#include "dirvote.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/dirvote.c b/src/or/dirvote.c index a013c504e..b0c467984 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -8,6 +8,7 @@ #include "config.h" #include "directory.h" #include "dirserv.h" +#include "dirvote.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/dirvote.h b/src/or/dirvote.h new file mode 100644 index 000000000..e384dc53b --- /dev/null +++ b/src/or/dirvote.h @@ -0,0 +1,93 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2010, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file dirvote.h + * \brief Header file for dirvote.c. + **/ + +#ifndef _TOR_DIRVOTE_H +#define _TOR_DIRVOTE_H + +/** Lowest allowable value for VoteSeconds. */ +#define MIN_VOTE_SECONDS 20 +/** Lowest allowable value for DistSeconds. */ +#define MIN_DIST_SECONDS 20 +/** Smallest allowable voting interval. */ +#define MIN_VOTE_INTERVAL 300 + +/** Precision multiplier for the Bw weights */ +#define BW_WEIGHT_SCALE 10000 + +void dirvote_free_all(void); + +/* vote manipulation */ +char *networkstatus_compute_consensus(smartlist_t *votes, + int total_authorities, + crypto_pk_env_t *identity_key, + crypto_pk_env_t *signing_key, + const char *legacy_identity_key_digest, + crypto_pk_env_t *legacy_signing_key, + consensus_flavor_t flavor); +int networkstatus_add_detached_signatures(networkstatus_t *target, + ns_detached_signatures_t *sigs, + const char **msg_out); +char *networkstatus_get_detached_signatures(smartlist_t *consensuses); +void ns_detached_signatures_free(ns_detached_signatures_t *s); + +/* cert manipulation */ +authority_cert_t *authority_cert_dup(authority_cert_t *cert); + +/* vote scheduling */ +void dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out); +time_t dirvote_get_start_of_next_interval(time_t now, int interval); +void dirvote_recalculate_timing(or_options_t *options, time_t now); +void dirvote_act(or_options_t *options, time_t now); + +/* invoked on timers and by outside triggers. */ +struct pending_vote_t * dirvote_add_vote(const char *vote_body, + const char **msg_out, + int *status_out); +int dirvote_add_signatures(const char *detached_signatures_body, + const char *source, + const char **msg_out); + +/* Item access */ +const char *dirvote_get_pending_consensus(consensus_flavor_t flav); +const char *dirvote_get_pending_detached_signatures(void); +#define DGV_BY_ID 1 +#define DGV_INCLUDE_PENDING 2 +#define DGV_INCLUDE_PREVIOUS 4 +const cached_dir_t *dirvote_get_vote(const char *fp, int flags); +void set_routerstatus_from_routerinfo(routerstatus_t *rs, + routerinfo_t *ri, time_t now, + int naming, int listbadexits, + int listbaddirs); +void router_clear_status_flags(routerinfo_t *ri); +networkstatus_t * +dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key, + authority_cert_t *cert); + +microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri); +ssize_t dirvote_format_microdesc_vote_line(char *out, size_t out_len, + const microdesc_t *md); + +int vote_routerstatus_find_microdesc_hash(char *digest256_out, + const vote_routerstatus_t *vrs, + int method, + digest_algorithm_t alg); +document_signature_t *voter_get_sig_by_algorithm( + const networkstatus_voter_info_t *voter, + digest_algorithm_t alg); + +#ifdef DIRVOTE_PRIVATE +char *format_networkstatus_vote(crypto_pk_env_t *private_key, + networkstatus_t *v3_ns); +char *dirvote_compute_params(smartlist_t *votes); +#endif + +#endif + diff --git a/src/or/main.c b/src/or/main.c index 89a8eac16..e77359c4d 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -25,6 +25,7 @@ #include "cpuworker.h" #include "directory.h" #include "dirserv.h" +#include "dirvote.h" #include "dnsserv.h" #include "geoip.h" #include "rendclient.h" diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 96c768704..98af3a284 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -17,6 +17,7 @@ #include "control.h" #include "directory.h" #include "dirserv.h" +#include "dirvote.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/or.h b/src/or/or.h index 47a0a90ae..b56837200 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3189,35 +3189,6 @@ typedef struct measured_bw_line_t { /********************************* dirvote.c ************************/ -/** Lowest allowable value for VoteSeconds. */ -#define MIN_VOTE_SECONDS 20 -/** Lowest allowable value for DistSeconds. */ -#define MIN_DIST_SECONDS 20 -/** Smallest allowable voting interval. */ -#define MIN_VOTE_INTERVAL 300 - -/** Precision multiplier for the Bw weights */ -#define BW_WEIGHT_SCALE 10000 - -void dirvote_free_all(void); - -/* vote manipulation */ -char *networkstatus_compute_consensus(smartlist_t *votes, - int total_authorities, - crypto_pk_env_t *identity_key, - crypto_pk_env_t *signing_key, - const char *legacy_identity_key_digest, - crypto_pk_env_t *legacy_signing_key, - consensus_flavor_t flavor); -int networkstatus_add_detached_signatures(networkstatus_t *target, - ns_detached_signatures_t *sigs, - const char **msg_out); -char *networkstatus_get_detached_signatures(smartlist_t *consensuses); -void ns_detached_signatures_free(ns_detached_signatures_t *s); - -/* cert manipulation */ -authority_cert_t *authority_cert_dup(authority_cert_t *cert); - /** Describes the schedule by which votes should be generated. */ typedef struct vote_timing_t { int vote_interval; @@ -3225,52 +3196,6 @@ typedef struct vote_timing_t { int vote_delay; int dist_delay; } vote_timing_t; -/* vote scheduling */ -void dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out); -time_t dirvote_get_start_of_next_interval(time_t now, int interval); -void dirvote_recalculate_timing(or_options_t *options, time_t now); -void dirvote_act(or_options_t *options, time_t now); - -/* invoked on timers and by outside triggers. */ -struct pending_vote_t * dirvote_add_vote(const char *vote_body, - const char **msg_out, - int *status_out); -int dirvote_add_signatures(const char *detached_signatures_body, - const char *source, - const char **msg_out); - -/* Item access */ -const char *dirvote_get_pending_consensus(consensus_flavor_t flav); -const char *dirvote_get_pending_detached_signatures(void); -#define DGV_BY_ID 1 -#define DGV_INCLUDE_PENDING 2 -#define DGV_INCLUDE_PREVIOUS 4 -const cached_dir_t *dirvote_get_vote(const char *fp, int flags); -void set_routerstatus_from_routerinfo(routerstatus_t *rs, - routerinfo_t *ri, time_t now, - int naming, int listbadexits, - int listbaddirs); -void router_clear_status_flags(routerinfo_t *ri); -networkstatus_t * -dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key, - authority_cert_t *cert); - -microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri); -ssize_t dirvote_format_microdesc_vote_line(char *out, size_t out_len, - const microdesc_t *md); -int vote_routerstatus_find_microdesc_hash(char *digest256_out, - const vote_routerstatus_t *vrs, - int method, - digest_algorithm_t alg); -document_signature_t *voter_get_sig_by_algorithm( - const networkstatus_voter_info_t *voter, - digest_algorithm_t alg); - -#ifdef DIRVOTE_PRIVATE -char *format_networkstatus_vote(crypto_pk_env_t *private_key, - networkstatus_t *v3_ns); -char *dirvote_compute_params(smartlist_t *votes); -#endif /********************************* dns.c ***************************/ diff --git a/src/or/routerlist.c b/src/or/routerlist.c index f8c8bad04..85e2d14ed 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -18,6 +18,7 @@ #include "control.h" #include "directory.h" #include "dirserv.h" +#include "dirvote.h" #include "geoip.h" #include "rendcommon.h" #include "rendservice.h" diff --git a/src/or/routerparse.c b/src/or/routerparse.c index 304509c31..6021ef2a9 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -12,6 +12,7 @@ #include "or.h" #include "config.h" #include "dirserv.h" +#include "dirvote.h" #include "rendcommon.h" #include "router.h" #include "routerlist.h" diff --git a/src/test/test_dir.c b/src/test/test_dir.c index 0379811dd..206ee4807 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -10,6 +10,7 @@ #include "or.h" #include "directory.h" #include "dirserv.h" +#include "dirvote.h" #include "router.h" #include "routerlist.h" #include "test.h" -- cgit v1.2.3 From 69fcbbaa8932f83ca715d0cf40c69340c90001a1 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Fri, 23 Jul 2010 20:18:55 +0200 Subject: Create networkstatus.h --- src/or/circuitbuild.c | 1 + src/or/circuitlist.c | 1 + src/or/config.c | 1 + src/or/connection_or.c | 1 + src/or/control.c | 1 + src/or/directory.c | 1 + src/or/dirserv.c | 1 + src/or/dirvote.c | 1 + src/or/main.c | 1 + src/or/networkstatus.c | 1 + src/or/networkstatus.h | 101 +++++++++++++++++++++++++++++++++++++++++++++++++ src/or/or.h | 85 ----------------------------------------- src/or/relay.c | 1 + src/or/rendservice.c | 1 + src/or/routerlist.c | 1 + src/or/routerparse.c | 1 + src/test/test_dir.c | 1 + 17 files changed, 116 insertions(+), 85 deletions(-) create mode 100644 src/or/networkstatus.h (limited to 'src/test/test_dir.c') diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 71eb64379..5b360807d 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -22,6 +22,7 @@ #include "control.h" #include "directory.h" #include "main.h" +#include "networkstatus.h" #include "router.h" #include "routerlist.h" #include "crypto.h" diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index d2212dc28..b8c273766 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -18,6 +18,7 @@ #include "connection_edge.h" #include "connection_or.h" #include "control.h" +#include "networkstatus.h" #include "rendclient.h" #include "rendcommon.h" #include "routerlist.h" diff --git a/src/or/config.c b/src/or/config.c index 34acc4f8b..bfec2f41b 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -25,6 +25,7 @@ #include "geoip.h" #include "hibernate.h" #include "main.h" +#include "networkstatus.h" #include "rendclient.h" #include "rendservice.h" #include "router.h" diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 0ddd5f14f..8ec52901c 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -21,6 +21,7 @@ #include "dirserv.h" #include "geoip.h" #include "main.h" +#include "networkstatus.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/control.c b/src/or/control.c index e1073ab43..5f5e45fd8 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -25,6 +25,7 @@ #include "geoip.h" #include "hibernate.h" #include "main.h" +#include "networkstatus.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/directory.c b/src/or/directory.c index 8c7bf4fcd..057961da8 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -15,6 +15,7 @@ #include "dirvote.h" #include "geoip.h" #include "main.h" +#include "networkstatus.h" #include "rendclient.h" #include "rendcommon.h" #include "router.h" diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 5f2c78917..d23542cf6 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -15,6 +15,7 @@ #include "dirvote.h" #include "hibernate.h" #include "microdesc.h" +#include "networkstatus.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/dirvote.c b/src/or/dirvote.c index 394029812..5b53267ba 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -10,6 +10,7 @@ #include "dirserv.h" #include "dirvote.h" #include "microdesc.h" +#include "networkstatus.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/main.c b/src/or/main.c index 8e4f35cc0..18525f038 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -32,6 +32,7 @@ #include "hibernate.h" #include "main.h" #include "microdesc.h" +#include "networkstatus.h" #include "rendclient.h" #include "rendcommon.h" #include "rendservice.h" diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 98af3a284..bd986609f 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -18,6 +18,7 @@ #include "directory.h" #include "dirserv.h" #include "dirvote.h" +#include "networkstatus.h" #include "router.h" #include "routerlist.h" diff --git a/src/or/networkstatus.h b/src/or/networkstatus.h new file mode 100644 index 000000000..4059dead5 --- /dev/null +++ b/src/or/networkstatus.h @@ -0,0 +1,101 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2010, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file networkstatus.h + * \brief Header file for networkstatus.c. + **/ + +#ifndef _TOR_NETWORKSTATUS_H +#define _TOR_NETWORKSTATUS_H + +/** How old do we allow a v2 network-status to get before removing it + * completely? */ +#define MAX_NETWORKSTATUS_AGE (10*24*60*60) + +void networkstatus_reset_warnings(void); +void networkstatus_reset_download_failures(void); +int router_reload_v2_networkstatus(void); +int router_reload_consensus_networkstatus(void); +void routerstatus_free(routerstatus_t *rs); +void networkstatus_v2_free(networkstatus_v2_t *ns); +void networkstatus_vote_free(networkstatus_t *ns); +networkstatus_voter_info_t *networkstatus_get_voter_by_id( + networkstatus_t *vote, + const char *identity); +int networkstatus_check_consensus_signature(networkstatus_t *consensus, + int warn); +int networkstatus_check_document_signature(const networkstatus_t *consensus, + document_signature_t *sig, + const authority_cert_t *cert); +char *networkstatus_get_cache_filename(const char *identity_digest); +int router_set_networkstatus_v2(const char *s, time_t arrived_at, + v2_networkstatus_source_t source, + smartlist_t *requested_fingerprints); +void networkstatus_v2_list_clean(time_t now); +int compare_digest_to_routerstatus_entry(const void *_key, + const void **_member); +routerstatus_t *networkstatus_v2_find_entry(networkstatus_v2_t *ns, + const char *digest); +routerstatus_t *networkstatus_vote_find_entry(networkstatus_t *ns, + const char *digest); +int networkstatus_vote_find_entry_idx(networkstatus_t *ns, + const char *digest, int *found_out); +const smartlist_t *networkstatus_get_v2_list(void); +download_status_t *router_get_dl_status_by_descriptor_digest(const char *d); +routerstatus_t *router_get_consensus_status_by_id(const char *digest); +routerstatus_t *router_get_consensus_status_by_descriptor_digest( + const char *digest); +routerstatus_t *router_get_consensus_status_by_nickname(const char *nickname, + int warn_if_unnamed); +const char *networkstatus_get_router_digest_by_nickname(const char *nickname); +int networkstatus_nickname_is_unnamed(const char *nickname); +void networkstatus_consensus_download_failed(int status_code); +void update_consensus_networkstatus_fetch_time(time_t now); +int should_delay_dir_fetches(or_options_t *options); +void update_networkstatus_downloads(time_t now); +void update_certificate_downloads(time_t now); +int consensus_is_waiting_for_certs(void); +networkstatus_v2_t *networkstatus_v2_get_by_digest(const char *digest); +networkstatus_t *networkstatus_get_latest_consensus(void); +networkstatus_t *networkstatus_get_live_consensus(time_t now); +networkstatus_t *networkstatus_get_reasonably_live_consensus(time_t now); +#define NSSET_FROM_CACHE 1 +#define NSSET_WAS_WAITING_FOR_CERTS 2 +#define NSSET_DONT_DOWNLOAD_CERTS 4 +#define NSSET_ACCEPT_OBSOLETE 8 +#define NSSET_REQUIRE_FLAVOR 16 +int networkstatus_set_current_consensus(const char *consensus, + const char *flavor, + unsigned flags); +void networkstatus_note_certs_arrived(void); +void routers_update_all_from_networkstatus(time_t now, int dir_version); +void routerstatus_list_update_from_consensus_networkstatus(time_t now); +void routers_update_status_from_consensus_networkstatus(smartlist_t *routers, + int reset_failures); +void signed_descs_update_status_from_consensus_networkstatus( + smartlist_t *descs); + +char *networkstatus_getinfo_helper_single(routerstatus_t *rs); +char *networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now); +void networkstatus_dump_bridge_status_to_file(time_t now); +int32_t get_net_param_from_list(smartlist_t *net_params, const char *name, + int default_val); +int32_t networkstatus_get_param(networkstatus_t *ns, const char *param_name, + int32_t default_val); +int getinfo_helper_networkstatus(control_connection_t *conn, + const char *question, char **answer, + const char **errmsg); +int32_t networkstatus_get_bw_weight(networkstatus_t *ns, const char *weight, + int32_t default_val); +const char *networkstatus_get_flavor_name(consensus_flavor_t flav); +int networkstatus_parse_flavor_name(const char *flavname); +void document_signature_free(document_signature_t *sig); +document_signature_t *document_signature_dup(const document_signature_t *sig); +void networkstatus_free_all(void); + +#endif + diff --git a/src/or/or.h b/src/or/or.h index 2b3b38480..4f1eab526 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3274,10 +3274,6 @@ typedef struct microdesc_cache_t microdesc_cache_t; /********************************* networkstatus.c *********************/ -/** How old do we allow a v2 network-status to get before removing it - * completely? */ -#define MAX_NETWORKSTATUS_AGE (10*24*60*60) - /** Location where we found a v2 networkstatus. */ typedef enum { NS_FROM_CACHE, NS_FROM_DIR_BY_FP, NS_FROM_DIR_ALL, NS_GENERATED @@ -3297,87 +3293,6 @@ typedef enum version_status_t { VS_UNKNOWN, /**< We have no idea. */ } version_status_t; -void networkstatus_reset_warnings(void); -void networkstatus_reset_download_failures(void); -int router_reload_v2_networkstatus(void); -int router_reload_consensus_networkstatus(void); -void routerstatus_free(routerstatus_t *rs); -void networkstatus_v2_free(networkstatus_v2_t *ns); -void networkstatus_vote_free(networkstatus_t *ns); -networkstatus_voter_info_t *networkstatus_get_voter_by_id( - networkstatus_t *vote, - const char *identity); -int networkstatus_check_consensus_signature(networkstatus_t *consensus, - int warn); -int networkstatus_check_document_signature(const networkstatus_t *consensus, - document_signature_t *sig, - const authority_cert_t *cert); -char *networkstatus_get_cache_filename(const char *identity_digest); -int router_set_networkstatus_v2(const char *s, time_t arrived_at, - v2_networkstatus_source_t source, - smartlist_t *requested_fingerprints); -void networkstatus_v2_list_clean(time_t now); -int compare_digest_to_routerstatus_entry(const void *_key, - const void **_member); -routerstatus_t *networkstatus_v2_find_entry(networkstatus_v2_t *ns, - const char *digest); -routerstatus_t *networkstatus_vote_find_entry(networkstatus_t *ns, - const char *digest); -int networkstatus_vote_find_entry_idx(networkstatus_t *ns, - const char *digest, int *found_out); -const smartlist_t *networkstatus_get_v2_list(void); -download_status_t *router_get_dl_status_by_descriptor_digest(const char *d); -routerstatus_t *router_get_consensus_status_by_id(const char *digest); -routerstatus_t *router_get_consensus_status_by_descriptor_digest( - const char *digest); -routerstatus_t *router_get_consensus_status_by_nickname(const char *nickname, - int warn_if_unnamed); -const char *networkstatus_get_router_digest_by_nickname(const char *nickname); -int networkstatus_nickname_is_unnamed(const char *nickname); -void networkstatus_consensus_download_failed(int status_code); -void update_consensus_networkstatus_fetch_time(time_t now); -int should_delay_dir_fetches(or_options_t *options); -void update_networkstatus_downloads(time_t now); -void update_certificate_downloads(time_t now); -int consensus_is_waiting_for_certs(void); -networkstatus_v2_t *networkstatus_v2_get_by_digest(const char *digest); -networkstatus_t *networkstatus_get_latest_consensus(void); -networkstatus_t *networkstatus_get_live_consensus(time_t now); -networkstatus_t *networkstatus_get_reasonably_live_consensus(time_t now); -#define NSSET_FROM_CACHE 1 -#define NSSET_WAS_WAITING_FOR_CERTS 2 -#define NSSET_DONT_DOWNLOAD_CERTS 4 -#define NSSET_ACCEPT_OBSOLETE 8 -#define NSSET_REQUIRE_FLAVOR 16 -int networkstatus_set_current_consensus(const char *consensus, - const char *flavor, - unsigned flags); -void networkstatus_note_certs_arrived(void); -void routers_update_all_from_networkstatus(time_t now, int dir_version); -void routerstatus_list_update_from_consensus_networkstatus(time_t now); -void routers_update_status_from_consensus_networkstatus(smartlist_t *routers, - int reset_failures); -void signed_descs_update_status_from_consensus_networkstatus( - smartlist_t *descs); - -char *networkstatus_getinfo_helper_single(routerstatus_t *rs); -char *networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now); -void networkstatus_dump_bridge_status_to_file(time_t now); -int32_t get_net_param_from_list(smartlist_t *net_params, const char *name, - int default_val); -int32_t networkstatus_get_param(networkstatus_t *ns, const char *param_name, - int32_t default_val); -int getinfo_helper_networkstatus(control_connection_t *conn, - const char *question, char **answer, - const char **errmsg); -int32_t networkstatus_get_bw_weight(networkstatus_t *ns, const char *weight, - int32_t default_val); -const char *networkstatus_get_flavor_name(consensus_flavor_t flav); -int networkstatus_parse_flavor_name(const char *flavname); -void document_signature_free(document_signature_t *sig); -document_signature_t *document_signature_dup(const document_signature_t *sig); -void networkstatus_free_all(void); - /********************************* ntmain.c ***************************/ #ifdef MS_WINDOWS #if !defined (WINCE) diff --git a/src/or/relay.c b/src/or/relay.c index c362bcbfd..83f875428 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -23,6 +23,7 @@ #include "geoip.h" #include "main.h" #include "mempool.h" +#include "networkstatus.h" #include "rendcommon.h" #include "routerlist.h" diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 5d72ef8c0..0324102d9 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -13,6 +13,7 @@ #include "circuituse.h" #include "config.h" #include "directory.h" +#include "networkstatus.h" #include "rendclient.h" #include "rendcommon.h" #include "rendservice.h" diff --git a/src/or/routerlist.c b/src/or/routerlist.c index a84ccb853..f189943a1 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -22,6 +22,7 @@ #include "geoip.h" #include "hibernate.h" #include "main.h" +#include "networkstatus.h" #include "rendcommon.h" #include "rendservice.h" #include "router.h" diff --git a/src/or/routerparse.c b/src/or/routerparse.c index c3b6ffbb3..a7df1f5e0 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -18,6 +18,7 @@ #include "routerlist.h" #include "memarea.h" #include "microdesc.h" +#include "networkstatus.h" #undef log #include diff --git a/src/test/test_dir.c b/src/test/test_dir.c index 206ee4807..628dac7cf 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -11,6 +11,7 @@ #include "directory.h" #include "dirserv.h" #include "dirvote.h" +#include "networkstatus.h" #include "router.h" #include "routerlist.h" #include "test.h" -- cgit v1.2.3 From 05072723cb8c14193376964ad5716a962d707770 Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Fri, 23 Jul 2010 23:23:43 +0200 Subject: Create routerparse.h --- src/or/circuitbuild.c | 1 + src/or/connection.c | 1 + src/or/control.c | 1 + src/or/directory.c | 1 + src/or/dirserv.c | 1 + src/or/dirvote.c | 1 + src/or/main.c | 1 + src/or/microdesc.c | 1 + src/or/networkstatus.c | 1 + src/or/or.h | 75 -------------------------------------------------- src/or/policies.c | 1 + src/or/relay.c | 1 + src/or/rendcommon.c | 1 + src/or/rendservice.c | 1 + src/or/router.c | 1 + src/or/routerlist.c | 1 + src/or/routerparse.c | 1 + src/or/routerparse.h | 11 ++++---- src/test/test.c | 1 + src/test/test_dir.c | 1 + 20 files changed, 23 insertions(+), 81 deletions(-) (limited to 'src/test/test_dir.c') diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index fc3dbda13..5bb9d70d5 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -29,6 +29,7 @@ #include "rephist.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" #include "crypto.h" #undef log #include diff --git a/src/or/connection.c b/src/or/connection.c index 02acd97e7..55d2fa814 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -34,6 +34,7 @@ #include "rendcommon.h" #include "rephist.h" #include "router.h" +#include "routerparse.h" static connection_t *connection_create_listener( struct sockaddr *listensockaddr, diff --git a/src/or/control.c b/src/or/control.c index ffcbcfdcd..7cbb1bd1f 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -30,6 +30,7 @@ #include "reasons.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" /** Yield true iff s is the state of a control_connection_t that has * finished authentication and is accepting commands. */ diff --git a/src/or/directory.c b/src/or/directory.c index c1e68bf45..a3e575ac9 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -22,6 +22,7 @@ #include "rephist.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" #if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) #ifndef OPENBSD diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 397a0c866..86cd18611 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -20,6 +20,7 @@ #include "rephist.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" /** * \file dirserv.c diff --git a/src/or/dirvote.c b/src/or/dirvote.c index 2448a6a19..fd4d742cc 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -15,6 +15,7 @@ #include "rephist.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" /** * \file dirvote.c diff --git a/src/or/main.c b/src/or/main.c index 92c60e7e8..ff674f386 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -43,6 +43,7 @@ #include "rephist.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" #ifdef USE_DMALLOC #include #include diff --git a/src/or/microdesc.c b/src/or/microdesc.c index ead0f9ffa..f56ccd9ee 100644 --- a/src/or/microdesc.c +++ b/src/or/microdesc.c @@ -4,6 +4,7 @@ #include "or.h" #include "config.h" #include "microdesc.h" +#include "routerparse.h" /** A data structure to hold a bunch of cached microdescriptors. There are * two active files in the cache: a "cache file" that we mmap, and a "journal diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index c763e23a8..a9a9c78b8 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -22,6 +22,7 @@ #include "relay.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" /* For tracking v2 networkstatus documents. Only caches do this now. */ diff --git a/src/or/or.h b/src/or/or.h index f51da60f7..44fdd6977 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3494,80 +3494,5 @@ typedef struct tor_version_t { char git_tag[DIGEST_LEN]; } tor_version_t; -int router_get_router_hash(const char *s, size_t s_len, char *digest); -int router_get_dir_hash(const char *s, char *digest); -int router_get_runningrouters_hash(const char *s, char *digest); -int router_get_networkstatus_v2_hash(const char *s, char *digest); -int router_get_networkstatus_v3_hash(const char *s, char *digest, - digest_algorithm_t algorithm); -int router_get_networkstatus_v3_hashes(const char *s, digests_t *digests); -int router_get_extrainfo_hash(const char *s, char *digest); -int router_append_dirobj_signature(char *buf, size_t buf_len, - const char *digest, - size_t digest_len, - crypto_pk_env_t *private_key); -int router_parse_list_from_string(const char **s, const char *eos, - smartlist_t *dest, - saved_location_t saved_location, - int is_extrainfo, - int allow_annotations, - const char *prepend_annotations); -int router_parse_routerlist_from_directory(const char *s, - routerlist_t **dest, - crypto_pk_env_t *pkey, - int check_version, - int write_to_cache); -int router_parse_runningrouters(const char *str); -int router_parse_directory(const char *str); -routerinfo_t *router_parse_entry_from_string(const char *s, const char *end, - int cache_copy, - int allow_annotations, - const char *prepend_annotations); -extrainfo_t *extrainfo_parse_entry_from_string(const char *s, const char *end, - int cache_copy, struct digest_ri_map_t *routermap); -addr_policy_t *router_parse_addr_policy_item_from_string(const char *s, - int assume_action); -version_status_t tor_version_is_obsolete(const char *myversion, - const char *versionlist); -int tor_version_parse(const char *s, tor_version_t *out); -int tor_version_as_new_as(const char *platform, const char *cutoff); -int tor_version_compare(tor_version_t *a, tor_version_t *b); -void sort_version_list(smartlist_t *lst, int remove_duplicates); -void assert_addr_policy_ok(smartlist_t *t); -void dump_distinct_digest_count(int severity); - -int compare_routerstatus_entries(const void **_a, const void **_b); -networkstatus_v2_t *networkstatus_v2_parse_from_string(const char *s); -int networkstatus_verify_bw_weights(networkstatus_t *ns); -networkstatus_t *networkstatus_parse_vote_from_string(const char *s, - const char **eos_out, - networkstatus_type_t ns_type); -ns_detached_signatures_t *networkstatus_parse_detached_signatures( - const char *s, const char *eos); - -smartlist_t *microdescs_parse_from_string(const char *s, const char *eos, - int allow_annotations, - int copy_body); - -authority_cert_t *authority_cert_parse_from_string(const char *s, - const char **end_of_string); -int rend_parse_v2_service_descriptor(rend_service_descriptor_t **parsed_out, - char *desc_id_out, - char **intro_points_encrypted_out, - size_t *intro_points_encrypted_size_out, - size_t *encoded_size_out, - const char **next_out, const char *desc); -int rend_decrypt_introduction_points(char **ipos_decrypted, - size_t *ipos_decrypted_size, - const char *descriptor_cookie, - const char *ipos_encrypted, - size_t ipos_encrypted_size); -int rend_parse_introduction_points(rend_service_descriptor_t *parsed, - const char *intro_points_encoded, - size_t intro_points_encoded_size); -int rend_parse_client_keys(strmap_t *parsed_clients, const char *str); - -void tor_gettimeofday_cache_clear(void); - #endif diff --git a/src/or/policies.c b/src/or/policies.c index cd6307daa..db3c6d886 100644 --- a/src/or/policies.c +++ b/src/or/policies.c @@ -12,6 +12,7 @@ #include "config.h" #include "dirserv.h" #include "policies.h" +#include "routerparse.h" #include "ht.h" /** Policy that addresses for incoming SOCKS connections must match. */ diff --git a/src/or/relay.c b/src/or/relay.c index a40013ab4..22ecdaafa 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -29,6 +29,7 @@ #include "relay.h" #include "rendcommon.h" #include "routerlist.h" +#include "routerparse.h" static int relay_crypt(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction, diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c index 8a4de3cca..ec6680b1e 100644 --- a/src/or/rendcommon.c +++ b/src/or/rendcommon.c @@ -17,6 +17,7 @@ #include "rendservice.h" #include "rephist.h" #include "routerlist.h" +#include "routerparse.h" /** Return 0 if one and two are the same service ids, else -1 or 1 */ int diff --git a/src/or/rendservice.c b/src/or/rendservice.c index f7ab60dbf..b0d791529 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -21,6 +21,7 @@ #include "relay.h" #include "rephist.h" #include "routerlist.h" +#include "routerparse.h" static origin_circuit_t *find_intro_circuit(rend_intro_point_t *intro, const char *pk_digest); diff --git a/src/or/router.c b/src/or/router.c index 36e2d2608..978078bf7 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -23,6 +23,7 @@ #include "rephist.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" /** * \file router.c diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 7f47e7128..146040ac6 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -29,6 +29,7 @@ #include "rephist.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" // #define DEBUG_ROUTERLIST diff --git a/src/or/routerparse.c b/src/or/routerparse.c index 88fbdbf6c..96749e5a7 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -21,6 +21,7 @@ #include "microdesc.h" #include "networkstatus.h" #include "rephist.h" +#include "routerparse.h" #undef log #include diff --git a/src/or/routerparse.h b/src/or/routerparse.h index e61563646..e246dbe9c 100644 --- a/src/or/routerparse.h +++ b/src/or/routerparse.h @@ -5,14 +5,12 @@ /* See LICENSE for licensing information */ /** - * \file geoip.h - * \brief Header file for geoip functions + * \file routerpase.h + * \brief Header file for router information parsing. **/ -#ifndef _TOR_GEOIP_H -#define _TOR_GEOIP_H - -#define MAX_STATUS_TAG_LEN 32 +#ifndef _TOR_ROUTERPARSE_H +#define _TOR_ROUTERPARSE_H int router_get_router_hash(const char *s, size_t s_len, char *digest); int router_get_dir_hash(const char *s, char *digest); @@ -91,3 +89,4 @@ int rend_parse_client_keys(strmap_t *parsed_clients, const char *str); void tor_gettimeofday_cache_clear(void); #endif + diff --git a/src/test/test.c b/src/test/test.c index 8bb694dba..755d1233f 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -56,6 +56,7 @@ double fabs(double x); #include "onion.h" #include "policies.h" #include "rephist.h" +#include "routerparse.h" #ifdef USE_DMALLOC #include diff --git a/src/test/test_dir.c b/src/test/test_dir.c index 628dac7cf..a129bf977 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -14,6 +14,7 @@ #include "networkstatus.h" #include "router.h" #include "routerlist.h" +#include "routerparse.h" #include "test.h" static void -- cgit v1.2.3