Merge branch 'maint-0.4.8' into release-0.4.8
[tor.git] / src / feature / dircache / consdiffmgr.h
blob6f8bfed3eea96c4645edb6cfaeeb0f219b542342
1 /* Copyright (c) 2017-2021, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
4 /**
5 * @file consdiffmgr.h
6 * @brief Header for consdiffmgr.c
7 **/
9 #ifndef TOR_CONSDIFFMGR_H
10 #define TOR_CONSDIFFMGR_H
12 enum compress_method_t;
14 /**
15 * Possible outcomes from trying to look up a given consensus diff.
17 typedef enum consdiff_status_t {
18 CONSDIFF_AVAILABLE,
19 CONSDIFF_NOT_FOUND,
20 CONSDIFF_IN_PROGRESS,
21 } consdiff_status_t;
23 typedef struct consdiff_cfg_t {
24 int32_t cache_max_num;
25 } consdiff_cfg_t;
27 struct consensus_cache_entry_t; // from conscache.h
29 int consdiffmgr_add_consensus(const char *consensus,
30 size_t consensus_len,
31 const networkstatus_t *as_parsed);
33 consdiff_status_t consdiffmgr_find_consensus(
34 struct consensus_cache_entry_t **entry_out,
35 consensus_flavor_t flavor,
36 enum compress_method_t method);
38 consdiff_status_t consdiffmgr_find_diff_from(
39 struct consensus_cache_entry_t **entry_out,
40 consensus_flavor_t flavor,
41 int digest_type,
42 const uint8_t *digest,
43 size_t digestlen,
44 enum compress_method_t method);
46 int consensus_cache_entry_get_voter_id_digests(
47 const struct consensus_cache_entry_t *ent,
48 smartlist_t *out);
49 int consensus_cache_entry_get_fresh_until(
50 const struct consensus_cache_entry_t *ent,
51 time_t *out);
52 int consensus_cache_entry_get_valid_until(
53 const struct consensus_cache_entry_t *ent,
54 time_t *out);
55 int consensus_cache_entry_get_valid_after(
56 const struct consensus_cache_entry_t *ent,
57 time_t *out);
59 void consdiffmgr_rescan(void);
60 int consdiffmgr_cleanup(void);
61 void consdiffmgr_enable_background_compression(void);
62 void consdiffmgr_configure(const consdiff_cfg_t *cfg);
63 struct sandbox_cfg_elem_t;
64 int consdiffmgr_register_with_sandbox(struct sandbox_cfg_elem_t **cfg);
65 void consdiffmgr_free_all(void);
66 int consdiffmgr_validate(void);
68 #ifdef CONSDIFFMGR_PRIVATE
69 struct consensus_cache_t;
70 struct consensus_cache_entry_t;
71 STATIC unsigned n_diff_compression_methods(void);
72 STATIC unsigned n_consensus_compression_methods(void);
73 STATIC struct consensus_cache_t *cdm_cache_get(void);
74 STATIC struct consensus_cache_entry_t *cdm_cache_lookup_consensus(
75 consensus_flavor_t flavor, time_t valid_after);
76 STATIC int cdm_entry_get_sha3_value(uint8_t *digest_out,
77 struct consensus_cache_entry_t *ent,
78 const char *label);
79 STATIC int uncompress_or_set_ptr(const char **out, size_t *outlen,
80 char **owned_out,
81 struct consensus_cache_entry_t *ent);
82 #endif /* defined(CONSDIFFMGR_PRIVATE) */
84 #ifdef TOR_UNIT_TESTS
85 int consdiffmgr_add_consensus_nulterm(const char *consensus,
86 const networkstatus_t *as_parsed);
87 #endif
89 #endif /* !defined(TOR_CONSDIFFMGR_H) */