conn: Stop writing when our write bandwidth limist is exhausted
[tor.git] / src / or / replaycache.h
blob81a8d907fd3862636d184a31b7d37e12945dc31b
1 /* Copyright (c) 2012-2017, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
4 /**
5 * \file replaycache.h
6 * \brief Header file for replaycache.c.
7 **/
9 #ifndef TOR_REPLAYCACHE_H
10 #define TOR_REPLAYCACHE_H
12 typedef struct replaycache_s replaycache_t;
14 #ifdef REPLAYCACHE_PRIVATE
16 struct replaycache_s {
17 /* Scrub interval */
18 time_t scrub_interval;
19 /* Last scrubbed */
20 time_t scrubbed;
22 * Horizon
23 * (don't return true on digests in the cache but older than this)
25 time_t horizon;
27 * Digest map: keys are digests, values are times the digest was last seen
29 digest256map_t *digests_seen;
32 #endif /* defined(REPLAYCACHE_PRIVATE) */
34 /* replaycache_t free/new */
36 void replaycache_free_(replaycache_t *r);
37 #define replaycache_free(r) \
38 FREE_AND_NULL(replaycache_t, replaycache_free_, (r))
39 replaycache_t * replaycache_new(time_t horizon, time_t interval);
41 #ifdef REPLAYCACHE_PRIVATE
44 * replaycache_t internal functions:
46 * These take the time to treat as the present as an argument for easy unit
47 * testing. For everything else, use the wrappers below instead.
50 STATIC int replaycache_add_and_test_internal(
51 time_t present, replaycache_t *r, const void *data, size_t len,
52 time_t *elapsed);
53 STATIC void replaycache_scrub_if_needed_internal(
54 time_t present, replaycache_t *r);
56 #endif /* defined(REPLAYCACHE_PRIVATE) */
59 * replaycache_t methods
62 int replaycache_add_and_test(replaycache_t *r, const void *data, size_t len);
63 int replaycache_add_test_and_elapsed(
64 replaycache_t *r, const void *data, size_t len, time_t *elapsed);
65 void replaycache_scrub_if_needed(replaycache_t *r);
67 #endif /* !defined(TOR_REPLAYCACHE_H) */