replaycache.h (1809B)
1 /* Copyright (c) 2012-2021, The Tor Project, Inc. */ 2 /* See LICENSE for licensing information */ 3 4 /** 5 * \file replaycache.h 6 * \brief Header file for replaycache.c. 7 **/ 8 9 #ifndef TOR_REPLAYCACHE_H 10 #define TOR_REPLAYCACHE_H 11 12 typedef struct replaycache_t replaycache_t; 13 14 #ifdef REPLAYCACHE_PRIVATE 15 16 struct replaycache_t { 17 /** Scrub interval */ 18 time_t scrub_interval; 19 /** Last scrubbed */ 20 time_t scrubbed; 21 /** 22 * Horizon 23 * (don't return true on digests in the cache but older than this) 24 */ 25 time_t horizon; 26 /** 27 * Digest map: keys are digests, values are times the digest was last seen 28 */ 29 digest256map_t *digests_seen; 30 }; 31 32 #endif /* defined(REPLAYCACHE_PRIVATE) */ 33 34 /* replaycache_t free/new */ 35 36 void replaycache_free_(replaycache_t *r); 37 /** 38 * @copydoc replaycache_free_ 39 * 40 * Additionally, set the pointer <b>r</b> to NULL. 41 **/ 42 #define replaycache_free(r) \ 43 FREE_AND_NULL(replaycache_t, replaycache_free_, (r)) 44 replaycache_t * replaycache_new(time_t horizon, time_t interval); 45 46 #ifdef REPLAYCACHE_PRIVATE 47 48 /* 49 * replaycache_t internal functions: 50 * 51 * These take the time to treat as the present as an argument for easy unit 52 * testing. For everything else, use the wrappers below instead. 53 */ 54 55 STATIC int replaycache_add_and_test_internal( 56 time_t present, replaycache_t *r, const void *data, size_t len, 57 time_t *elapsed); 58 STATIC void replaycache_scrub_if_needed_internal( 59 time_t present, replaycache_t *r); 60 61 #endif /* defined(REPLAYCACHE_PRIVATE) */ 62 63 /* 64 * replaycache_t methods 65 */ 66 67 int replaycache_add_and_test(replaycache_t *r, const void *data, size_t len); 68 int replaycache_add_test_and_elapsed( 69 replaycache_t *r, const void *data, size_t len, time_t *elapsed); 70 void replaycache_scrub_if_needed(replaycache_t *r); 71 72 #endif /* !defined(TOR_REPLAYCACHE_H) */