directory.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /* Copyright (c) 2001 Matej Pfajfar.
  2. * Copyright (c) 2001-2004, Roger Dingledine.
  3. * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
  4. * Copyright (c) 2007-2012, The Tor Project, Inc. */
  5. /* See LICENSE for licensing information */
  6. /**
  7. * \file directory.h
  8. * \brief Header file for directory.c.
  9. **/
  10. #ifndef _TOR_DIRECTORY_H
  11. #define _TOR_DIRECTORY_H
  12. int directories_have_accepted_server_descriptor(void);
  13. void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
  14. dirinfo_type_t type, const char *payload,
  15. size_t payload_len, size_t extrainfo_len);
  16. void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
  17. const char *resource,
  18. int pds_flags);
  19. void directory_get_from_all_authorities(uint8_t dir_purpose,
  20. uint8_t router_purpose,
  21. const char *resource);
  22. void directory_initiate_command_routerstatus(const routerstatus_t *status,
  23. uint8_t dir_purpose,
  24. uint8_t router_purpose,
  25. int anonymized_connection,
  26. const char *resource,
  27. const char *payload,
  28. size_t payload_len,
  29. time_t if_modified_since);
  30. void directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
  31. uint8_t dir_purpose,
  32. uint8_t router_purpose,
  33. int anonymized_connection,
  34. const char *resource,
  35. const char *payload,
  36. size_t payload_len,
  37. time_t if_modified_since,
  38. const rend_data_t *rend_query);
  39. int parse_http_response(const char *headers, int *code, time_t *date,
  40. compress_method_t *compression, char **response);
  41. int connection_dir_is_encrypted(dir_connection_t *conn);
  42. int connection_dir_reached_eof(dir_connection_t *conn);
  43. int connection_dir_process_inbuf(dir_connection_t *conn);
  44. int connection_dir_finished_flushing(dir_connection_t *conn);
  45. int connection_dir_finished_connecting(dir_connection_t *conn);
  46. void connection_dir_about_to_close(dir_connection_t *dir_conn);
  47. void directory_initiate_command(const char *address, const tor_addr_t *addr,
  48. uint16_t or_port, uint16_t dir_port,
  49. int supports_conditional_consensus,
  50. int supports_begindir, const char *digest,
  51. uint8_t dir_purpose, uint8_t router_purpose,
  52. int anonymized_connection,
  53. const char *resource,
  54. const char *payload, size_t payload_len,
  55. time_t if_modified_since);
  56. #define DSR_HEX (1<<0)
  57. #define DSR_BASE64 (1<<1)
  58. #define DSR_DIGEST256 (1<<2)
  59. #define DSR_SORT_UNIQ (1<<3)
  60. int dir_split_resource_into_fingerprints(const char *resource,
  61. smartlist_t *fp_out, int *compressed_out,
  62. int flags);
  63. int dir_split_resource_into_fingerprint_pairs(const char *res,
  64. smartlist_t *pairs_out);
  65. char *directory_dump_request_log(void);
  66. void note_request(const char *key, size_t bytes);
  67. int router_supports_extrainfo(const char *identity_digest, int is_authority);
  68. time_t download_status_increment_failure(download_status_t *dls,
  69. int status_code, const char *item,
  70. int server, time_t now);
  71. /** Increment the failure count of the download_status_t <b>dls</b>, with
  72. * the optional status code <b>sc</b>. */
  73. #define download_status_failed(dls, sc) \
  74. download_status_increment_failure((dls), (sc), NULL, \
  75. get_options()->DirPort!=NULL, time(NULL))
  76. void download_status_reset(download_status_t *dls);
  77. static int download_status_is_ready(download_status_t *dls, time_t now,
  78. int max_failures);
  79. /** Return true iff, as of <b>now</b>, the resource tracked by <b>dls</b> is
  80. * ready to get its download reattempted. */
  81. static INLINE int
  82. download_status_is_ready(download_status_t *dls, time_t now,
  83. int max_failures)
  84. {
  85. return (dls->n_download_failures <= max_failures
  86. && dls->next_attempt_at <= now);
  87. }
  88. static void download_status_mark_impossible(download_status_t *dl);
  89. /** Mark <b>dl</b> as never downloadable. */
  90. static INLINE void
  91. download_status_mark_impossible(download_status_t *dl)
  92. {
  93. dl->n_download_failures = IMPOSSIBLE_TO_DOWNLOAD;
  94. }
  95. int download_status_get_n_failures(const download_status_t *dls);
  96. #endif