diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-03-13 15:38:20 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-03-28 19:55:03 +0200 |
commit | 8aa69a1b69b64185333fb1b6e74d55fc5e341fd8 (patch) | |
tree | 376215dbef2ca72b2638956fabd14f6294c33bbc /src/or/or.h | |
parent | 8587f663ee5f8f4af4fbbd5542116eb22ed1814e (diff) | |
download | tor-8aa69a1b69b64185333fb1b6e74d55fc5e341fd8.tar.gz tor-8aa69a1b69b64185333fb1b6e74d55fc5e341fd8.zip |
Refactor the directory spool implementation
The old implementation had duplicated code in a bunch of places, and
it interspersed spool-management with resource management. The new
implementation should make it easier to add new resource types and
maintain the spooling code.
Closing ticket 21651.
Diffstat (limited to 'src/or/or.h')
-rw-r--r-- | src/or/or.h | 24 |
1 files changed, 4 insertions, 20 deletions
diff --git a/src/or/or.h b/src/or/or.h index dee8b85674..83a10299be 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -1732,14 +1732,6 @@ typedef struct entry_connection_t { unsigned int is_socks_socket:1; } entry_connection_t; -typedef enum { - DIR_SPOOL_NONE=0, DIR_SPOOL_SERVER_BY_DIGEST, DIR_SPOOL_SERVER_BY_FP, - DIR_SPOOL_EXTRA_BY_DIGEST, DIR_SPOOL_EXTRA_BY_FP, - DIR_SPOOL_NETWORKSTATUS, - DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */ -} dir_spool_source_t; -#define dir_spool_source_bitfield_t ENUM_BF(dir_spool_source_t) - /** Subtype of connection_t for an "directory connection" -- that is, an HTTP * connection to retrieve or serve directory material. */ typedef struct dir_connection_t { @@ -1754,21 +1746,13 @@ typedef struct dir_connection_t { char *requested_resource; unsigned int dirconn_direct:1; /**< Is this dirconn direct, or via Tor? */ - /* Used only for server sides of some dir connections, to implement - * "spooling" of directory material to the outbuf. Otherwise, we'd have - * to append everything to the outbuf in one enormous chunk. */ - /** What exactly are we spooling right now? */ - dir_spool_source_bitfield_t dir_spool_src : 3; - /** If we're fetching descriptors, what router purpose shall we assign * to them? */ uint8_t router_purpose; - /** List of fingerprints for networkstatuses or descriptors to be spooled. */ - smartlist_t *fingerprint_stack; - /** A cached_dir_t object that we're currently spooling out */ - struct cached_dir_t *cached_dir; - /** The current offset into cached_dir. */ - off_t cached_dir_offset; + + /** List of spooled_resource_t for objects that we're spooling. We use + * it from back to front. */ + smartlist_t *spool; /** The zlib object doing on-the-fly compression for spooled data. */ tor_zlib_state_t *zlib_state; |