mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +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);
|
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
|
/** As dirserv_get_routerdescs(), but instead of getting signed_descriptor_t
|
||||||
* pointers, adds copies of digests to fps_out, and doesn't use the
|
* 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
|
* /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);
|
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_from_authorities(const or_options_t *options);
|
||||||
int directory_fetches_dir_info_early(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);
|
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);
|
smartlist_free(fp_tmp);
|
||||||
return 0;
|
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,
|
int dir_split_resource_into_fingerprints(const char *resource,
|
||||||
smartlist_t *fp_out, int *compressed_out,
|
smartlist_t *fp_out, int *compressed_out,
|
||||||
int flags);
|
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,
|
int dir_split_resource_into_fingerprint_pairs(const char *res,
|
||||||
smartlist_t *pairs_out);
|
smartlist_t *pairs_out);
|
||||||
char *directory_dump_request_log(void);
|
char *directory_dump_request_log(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user