mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Move dir_split_resource_into_spoolable() to dircache module.
Only directory caches actually need to spool things.
This commit is contained in:
parent
888a0be0b9
commit
4cf15ee015
@ -266,6 +266,37 @@ dirserv_get_consensus,(const char *flavor_name))
|
||||
return strmap_get(cached_consensuses, flavor_name);
|
||||
}
|
||||
|
||||
/** As dir_split_resource_into_fingerprints, but instead fills
|
||||
* <b>spool_out</b> with a list of spoolable_resource_t for the resource
|
||||
* identified through <b>source</b>. */
|
||||
int
|
||||
dir_split_resource_into_spoolable(const char *resource,
|
||||
dir_spool_source_t source,
|
||||
smartlist_t *spool_out,
|
||||
int *compressed_out,
|
||||
int flags)
|
||||
{
|
||||
smartlist_t *fingerprints = smartlist_new();
|
||||
|
||||
tor_assert(flags & (DSR_HEX|DSR_BASE64));
|
||||
const size_t digest_len =
|
||||
(flags & DSR_DIGEST256) ? DIGEST256_LEN : DIGEST_LEN;
|
||||
|
||||
int r = dir_split_resource_into_fingerprints(resource, fingerprints,
|
||||
compressed_out, flags);
|
||||
/* This is not a very efficient implementation XXXX */
|
||||
SMARTLIST_FOREACH_BEGIN(fingerprints, uint8_t *, digest) {
|
||||
spooled_resource_t *spooled =
|
||||
spooled_resource_new(source, digest, digest_len);
|
||||
if (spooled)
|
||||
smartlist_add(spool_out, spooled);
|
||||
tor_free(digest);
|
||||
} SMARTLIST_FOREACH_END(digest);
|
||||
|
||||
smartlist_free(fingerprints);
|
||||
return r;
|
||||
}
|
||||
|
||||
/** As dirserv_get_routerdescs(), but instead of getting signed_descriptor_t
|
||||
* pointers, adds copies of digests to fps_out, and doesn't use the
|
||||
* /tor/server/ prefix. For a /d/ request, adds descriptor digests; for other
|
||||
|
@ -73,6 +73,13 @@ typedef struct spooled_resource_t {
|
||||
|
||||
int connection_dirserv_flushed_some(dir_connection_t *conn);
|
||||
|
||||
enum dir_spool_source_t;
|
||||
int dir_split_resource_into_spoolable(const char *resource,
|
||||
enum dir_spool_source_t source,
|
||||
smartlist_t *spool_out,
|
||||
int *compressed_out,
|
||||
int flags);
|
||||
|
||||
int directory_fetches_from_authorities(const or_options_t *options);
|
||||
int directory_fetches_dir_info_early(const or_options_t *options);
|
||||
int directory_fetches_dir_info_later(const or_options_t *options);
|
||||
|
@ -702,34 +702,3 @@ dir_split_resource_into_fingerprints(const char *resource,
|
||||
smartlist_free(fp_tmp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** As dir_split_resource_into_fingerprints, but instead fills
|
||||
* <b>spool_out</b> with a list of spoolable_resource_t for the resource
|
||||
* identified through <b>source</b>. */
|
||||
int
|
||||
dir_split_resource_into_spoolable(const char *resource,
|
||||
dir_spool_source_t source,
|
||||
smartlist_t *spool_out,
|
||||
int *compressed_out,
|
||||
int flags)
|
||||
{
|
||||
smartlist_t *fingerprints = smartlist_new();
|
||||
|
||||
tor_assert(flags & (DSR_HEX|DSR_BASE64));
|
||||
const size_t digest_len =
|
||||
(flags & DSR_DIGEST256) ? DIGEST256_LEN : DIGEST_LEN;
|
||||
|
||||
int r = dir_split_resource_into_fingerprints(resource, fingerprints,
|
||||
compressed_out, flags);
|
||||
/* This is not a very efficient implementation XXXX */
|
||||
SMARTLIST_FOREACH_BEGIN(fingerprints, uint8_t *, digest) {
|
||||
spooled_resource_t *spooled =
|
||||
spooled_resource_new(source, digest, digest_len);
|
||||
if (spooled)
|
||||
smartlist_add(spool_out, spooled);
|
||||
tor_free(digest);
|
||||
} SMARTLIST_FOREACH_END(digest);
|
||||
|
||||
smartlist_free(fingerprints);
|
||||
return r;
|
||||
}
|
||||
|
@ -108,12 +108,6 @@ void connection_dir_about_to_close(dir_connection_t *dir_conn);
|
||||
int dir_split_resource_into_fingerprints(const char *resource,
|
||||
smartlist_t *fp_out, int *compressed_out,
|
||||
int flags);
|
||||
enum dir_spool_source_t;
|
||||
int dir_split_resource_into_spoolable(const char *resource,
|
||||
enum dir_spool_source_t source,
|
||||
smartlist_t *spool_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);
|
||||
|
Loading…
Reference in New Issue
Block a user