rendcache.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* Copyright (c) 2015, The Tor Project, Inc. */
  2. /* See LICENSE for licensing information */
  3. /**
  4. * \file rendcache.h
  5. * \brief Header file for rendcache.c
  6. **/
  7. #ifndef TOR_RENDCACHE_H
  8. #define TOR_RENDCACHE_H
  9. #include "or.h"
  10. /** How old do we let hidden service descriptors get before discarding
  11. * them as too old? */
  12. #define REND_CACHE_MAX_AGE (2*24*60*60)
  13. /** How wrong do we assume our clock may be when checking whether hidden
  14. * services are too old or too new? */
  15. #define REND_CACHE_MAX_SKEW (24*60*60)
  16. /* Do not allow more than this many introduction points in a hidden service
  17. * descriptor */
  18. #define MAX_INTRO_POINTS 10
  19. /** A cached rendezvous descriptor. */
  20. typedef struct rend_cache_entry_t {
  21. size_t len; /**< Length of <b>desc</b> */
  22. time_t last_served; /**< When did we last write this one to somebody?
  23. * (HSDir only) */
  24. char *desc; /**< Service descriptor */
  25. rend_service_descriptor_t *parsed; /**< Parsed value of 'desc' */
  26. } rend_cache_entry_t;
  27. void rend_cache_init(void);
  28. void rend_cache_clean(time_t now);
  29. void rend_cache_clean_v2_descs_as_dir(time_t now, size_t min_to_remove);
  30. void rend_cache_purge(void);
  31. void rend_cache_free_all(void);
  32. int rend_cache_lookup_entry(const char *query, int version,
  33. rend_cache_entry_t **entry_out);
  34. int rend_cache_lookup_v2_desc_as_dir(const char *query, const char **desc);
  35. /** Return value from rend_cache_store_v2_desc_as_{dir,client}. */
  36. typedef enum {
  37. RCS_NOTDIR = -2, /**< We're not a directory */
  38. RCS_BADDESC = -1, /**< This descriptor is no good. */
  39. RCS_OKAY = 0 /**< All worked as expected */
  40. } rend_cache_store_status_t;
  41. rend_cache_store_status_t rend_cache_store_v2_desc_as_dir(const char *desc);
  42. rend_cache_store_status_t rend_cache_store_v2_desc_as_client(const char *desc,
  43. const char *desc_id_base32,
  44. const rend_data_t *rend_query,
  45. rend_cache_entry_t **entry);
  46. size_t rend_cache_get_total_allocation(void);
  47. #endif /* TOR_RENDCACHE_H */