12 #ifndef TOR_DIRECTORY_H 13 #define TOR_DIRECTORY_H 20 size_t payload_len,
size_t extrainfo_len);
21 MOCK_DECL(
void, directory_get_from_dirserver, (
23 uint8_t router_purpose,
28 uint8_t router_purpose,
29 const char *resource);
44 int directory_must_use_begindir(
const or_options_t *options);
55 #define directory_request_free(req) \ 56 FREE_AND_NULL(directory_request_t, directory_request_free_, (req)) 64 struct circuit_guard_state_t *state);
66 uint8_t router_purpose);
68 dir_indirection_t indirection);
70 const char *resource);
75 time_t if_modified_since);
93 char **command_out,
char **url_out);
103 #define DSR_HEX (1<<0) 104 #define DSR_BASE64 (1<<1) 105 #define DSR_DIGEST256 (1<<2) 106 #define DSR_SORT_UNIQ (1<<3) 118 char *directory_dump_request_log(
void);
119 void note_request(
const char *key,
size_t bytes);
123 int status_code,
const char *item,
124 int server, time_t now);
126 const char *item, time_t now);
129 #define download_status_failed(dls, sc) \ 130 download_status_increment_failure((dls), (sc), NULL, \ 131 dir_server_mode(get_options()), \ 164 const char *resource);
166 #ifdef DIRECTORY_PRIVATE 170 typedef struct response_handler_args_t {
176 } response_handler_args_t;
196 uint8_t router_purpose;
199 dir_indirection_t indirection;
201 const char *resource;
207 time_t if_modified_since;
217 struct circuit_guard_state_t *guard_state;
229 const response_handler_args_t *args);
231 const response_handler_args_t *args);
234 const response_handler_args_t *args);
238 #ifdef TOR_UNIT_TESTS 243 const char *resource);
246 const char *req_body,
247 size_t req_body_len));
256 STATIC
int handle_post_hs_descriptor(
const char *
url,
const char *body);
273 STATIC
int parse_hs_version_from_post(
const char *
url,
const char *prefix,
274 const char **end_pos);
279 #if defined(TOR_UNIT_TESTS) || defined(DIRECTORY_PRIVATE) 283 #define DIR_DEFAULT_RANDOM_MULTIPLIER (3) 285 #define DIR_TEST_NET_RANDOM_MULTIPLIER (2)
Definition: confline.h:23
dir_indirection_t
Definition: directory.h:32
const char * headers
Definition: directory.c:3743
#define DIGEST_LEN
Definition: crypto_digest.h:22
time_t download_status_get_next_attempt_at(const download_status_t *dls)
Definition: directory.c:5634
Definition: directory.h:37
void directory_request_set_payload(directory_request_t *req, const char *payload, size_t payload_len)
Definition: directory.c:1195
int connection_dir_reached_eof(dir_connection_t *conn)
Definition: directory.c:3350
STATIC void next_random_exponential_delay_range(int *low_bound_out, int *high_bound_out, int delay, int base_delay)
Definition: directory.c:5337
void download_status_reset(download_status_t *dls)
Definition: directory.c:5601
download_want_authority_t
Definition: or.h:2064
void connection_dir_about_to_close(dir_connection_t *dir_conn)
Definition: directory.c:3449
Definition: hs_ident.h:93
STATIC int find_dl_min_delay(const download_status_t *dls, const or_options_t *options)
Definition: directory.c:5269
STATIC char * accept_encoding_header(void)
Definition: directory.c:3644
int dir_split_resource_into_fingerprint_pairs(const char *res, smartlist_t *pairs_out)
Definition: directory.c:5746
int connection_dir_finished_flushing(dir_connection_t *conn)
Definition: directory.c:5175
STATIC int directory_handle_command(dir_connection_t *conn)
Definition: directory.c:5127
time_t download_status_increment_attempt(download_status_t *dls, const char *item, time_t now)
Definition: directory.c:5546
void directory_request_set_if_modified_since(directory_request_t *req, time_t if_modified_since)
Definition: directory.c:1209
void directory_request_set_router_purpose(directory_request_t *req, uint8_t router_purpose)
Definition: directory.c:1155
Definition: directory.c:3733
#define IMPOSSIBLE_TO_DOWNLOAD
Definition: or.h:2136
uint8_t n_download_attempts
Definition: or.h:2112
MOCK_DECL(int, router_have_minimum_dir_info,(void))
void directory_request_set_indirection(directory_request_t *req, dir_indirection_t indirection)
Definition: directory.c:1171
STATIC void warn_disallowed_anonymous_compression_method(compress_method_t method)
Definition: directory.c:4155
Definition: container.h:18
STATIC compression_level_t choose_compression_level(ssize_t n_bytes)
Definition: directory.c:3717
dirinfo_type_t
Definition: or.h:2879
STATIC int should_use_directory_guards(const or_options_t *options)
Definition: directory.c:446
int parse_http_command(const char *headers, char **command_out, char **url_out)
Definition: directory.c:1953
directory_request_t * directory_request_new(uint8_t dir_purpose)
Definition: directory.c:1087
Definition: directory.h:35
void directory_request_set_dir_addr_port(directory_request_t *req, const tor_addr_port_t *p)
Definition: directory.c:1133
int purpose_needs_anonymity(uint8_t dir_purpose, uint8_t router_purpose, const char *resource)
Definition: directory.c:161
int connection_dir_process_inbuf(dir_connection_t *conn)
Definition: directory.c:3380
const char * url
Definition: directory.c:3741
dir_spool_source_t
Definition: dirserv.h:36
void directory_request_set_routerstatus(directory_request_t *req, const routerstatus_t *rs)
Definition: directory.c:1301
STATIC int download_status_schedule_get_delay(download_status_t *dls, int min_delay, time_t now)
Definition: directory.c:5391
void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose, dirinfo_type_t type, const char *payload, size_t payload_len, size_t extrainfo_len)
Definition: directory.c:366
void directory_get_from_all_authorities(uint8_t dir_purpose, uint8_t router_purpose, const char *resource)
Definition: directory.c:718
time_t next_attempt_at
Definition: or.h:2108
Header file containing circuit and connection identifier data for the whole HS subsytem.
void directory_request_set_resource(directory_request_t *req, const char *resource)
Definition: directory.c:1184
STATIC int handle_get_hs_descriptor_v3(dir_connection_t *conn, const get_handler_args_t *args)
Definition: directory.c:4820
void directory_request_set_rend_query(directory_request_t *req, const rend_data_t *query)
Definition: directory.c:1235
int parse_http_response(const char *headers, int *code, time_t *date, compress_method_t *compression, char **response)
Definition: directory.c:2069
STATIC int handle_response_fetch_consensus(dir_connection_t *conn, const response_handler_args_t *args)
Definition: directory.c:2549
STATIC int next_random_exponential_delay(int delay, int base_delay)
Definition: directory.c:5367
int directories_have_accepted_server_descriptor(void)
Definition: directory.c:335
void directory_request_add_header(directory_request_t *req, const char *key, const char *val)
Definition: directory.c:1223
int dir_split_resource_into_fingerprints(const char *resource, smartlist_t *fp_out, int *compressed_out, int flags)
Definition: directory.c:5805
char * http_get_header(const char *headers, const char *which)
Definition: directory.c:2007
void directory_request_free_(directory_request_t *req)
Definition: directory.c:1109
void directory_request_set_directory_id_digest(directory_request_t *req, const char *digest)
Definition: directory.c:1143
STATIC const char * dir_conn_purpose_to_string(int purpose)
Definition: directory.c:230
int download_status_get_n_attempts(const download_status_t *dls)
Definition: directory.c:5627
int dir_split_resource_into_spoolable(const char *resource, enum dir_spool_source_t source, smartlist_t *spool_out, int *compressed_out, int flags)
Definition: directory.c:5887
int download_status_get_n_failures(const download_status_t *dls)
Definition: directory.c:5618
STATIC unsigned parse_accept_encoding_header(const char *h)
Definition: directory.c:3610
uint8_t n_download_failures
Definition: or.h:2110
int connection_dir_finished_connecting(dir_connection_t *conn)
Definition: directory.c:5247
STATIC int handle_response_fetch_hsdesc_v3(dir_connection_t *conn, const response_handler_args_t *args)
Definition: directory.c:3080
Definition: directory.h:39
compression_level_t
Definition: compress.h:32
Definition: directory.h:41
STATIC int allowed_anonymous_connection_compression_method(compress_method_t method)
Definition: directory.c:4133
compress_method_t
Definition: compress.h:18
int connection_dir_is_encrypted(const dir_connection_t *conn)
Definition: directory.c:1580
void directory_request_fetch_set_hs_ident(directory_request_t *req, const hs_ident_dir_conn_t *ident)
Definition: directory.c:1264
STATIC int handle_response_fetch_microdesc(dir_connection_t *conn, const response_handler_args_t *args)
Definition: directory.c:2880
void directory_request_upload_set_hs_ident(directory_request_t *req, const hs_ident_dir_conn_t *ident)
Definition: directory.c:1250
struct directory_request_t directory_request_t
Definition: directory.h:52
void directory_request_set_guard_state(directory_request_t *req, struct circuit_guard_state_t *state)
Definition: directory.c:1276
time_t download_status_increment_failure(download_status_t *dls, int status_code, const char *item, int server, time_t now)
Definition: directory.c:5487
STATIC char * authdir_type_to_string(dirinfo_type_t auth)
Definition: directory.c:211
int router_supports_extrainfo(const char *identity_digest, int is_authority)
Definition: directory.c:312
STATIC int parse_http_url(const char *headers, char **url)
Definition: directory.c:1930
STATIC dirinfo_type_t dir_fetch_type(int dir_purpose, int router_purpose, const char *resource)
Definition: directory.c:270
void directory_request_set_or_addr_port(directory_request_t *req, const tor_addr_port_t *p)
Definition: directory.c:1122