#ifndef TOR_REPLAYCACHE_H
#define TOR_REPLAYCACHE_H
typedef struct replaycache_t replaycache_t;
#ifdef REPLAYCACHE_PRIVATE
struct replaycache_t {
time_t scrub_interval;
time_t scrubbed;
time_t horizon;
digest256map_t *digests_seen;
};
#endif
void replaycache_free_(replaycache_t *r);
#define replaycache_free(r) \
FREE_AND_NULL(replaycache_t, replaycache_free_, (r))
replaycache_t * replaycache_new(time_t horizon, time_t interval);
#ifdef REPLAYCACHE_PRIVATE
STATIC int replaycache_add_and_test_internal(
time_t present, replaycache_t *r, const void *data, size_t len,
time_t *elapsed);
STATIC void replaycache_scrub_if_needed_internal(
time_t present, replaycache_t *r);
#endif
int replaycache_add_and_test(replaycache_t *r, const void *data, size_t len);
int replaycache_add_test_and_elapsed(
replaycache_t *r, const void *data, size_t len, time_t *elapsed);
void replaycache_scrub_if_needed(replaycache_t *r);
#endif