You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

map.h 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #ifndef RSPAMD_MAP_H
  2. #define RSPAMD_MAP_H
  3. #include "config.h"
  4. #include <event.h>
  5. #include "ucl.h"
  6. #include "mem_pool.h"
  7. #include "radix.h"
  8. #include "dns.h"
  9. /**
  10. * Maps API is designed to load lists data from different dynamic sources.
  11. * It monitor files and HTTP locations for modifications and reload them if they are
  12. * modified.
  13. */
  14. struct map_cb_data;
  15. /**
  16. * Callback types
  17. */
  18. typedef gchar * (*map_cb_t)(gchar *chunk, gint len,
  19. struct map_cb_data *data, gboolean final);
  20. typedef void (*map_fin_cb_t)(struct map_cb_data *data);
  21. typedef void (*map_dtor_t)(struct map_cb_data *data);
  22. typedef gboolean (*rspamd_map_traverse_cb)(gconstpointer key,
  23. gconstpointer value, gsize hits, gpointer ud);
  24. typedef void (*rspamd_map_traverse_function)(void *data,
  25. rspamd_map_traverse_cb cb,
  26. gpointer cbdata, gboolean reset_hits);
  27. /**
  28. * Common map object
  29. */
  30. struct rspamd_config;
  31. struct rspamd_map;
  32. /**
  33. * Callback data for async load
  34. */
  35. struct map_cb_data {
  36. struct rspamd_map *map;
  37. gint state;
  38. void *prev_data;
  39. void *cur_data;
  40. };
  41. /**
  42. * Returns TRUE if line looks like a map definition
  43. * @param map_line
  44. * @return
  45. */
  46. gboolean rspamd_map_is_map (const gchar *map_line);
  47. /**
  48. * Add map from line
  49. */
  50. struct rspamd_map* rspamd_map_add (struct rspamd_config *cfg,
  51. const gchar *map_line,
  52. const gchar *description,
  53. map_cb_t read_callback,
  54. map_fin_cb_t fin_callback,
  55. map_dtor_t dtor,
  56. void **user_data);
  57. /**
  58. * Add map from ucl
  59. */
  60. struct rspamd_map* rspamd_map_add_from_ucl (struct rspamd_config *cfg,
  61. const ucl_object_t *obj,
  62. const gchar *description,
  63. map_cb_t read_callback,
  64. map_fin_cb_t fin_callback,
  65. map_dtor_t dtor,
  66. void **user_data);
  67. /**
  68. * Start watching of maps by adding events to libevent event loop
  69. */
  70. void rspamd_map_watch (struct rspamd_config *cfg,
  71. struct event_base *ev_base,
  72. struct rspamd_dns_resolver *resolver,
  73. struct rspamd_worker *worker,
  74. gboolean active_http);
  75. /**
  76. * Preloads maps where all backends are file
  77. * @param cfg
  78. */
  79. void rspamd_map_preload (struct rspamd_config *cfg);
  80. /**
  81. * Remove all maps watched (remove events)
  82. */
  83. void rspamd_map_remove_all (struct rspamd_config *cfg);
  84. /**
  85. * Get traverse function for specific map
  86. * @param map
  87. * @return
  88. */
  89. rspamd_map_traverse_function rspamd_map_get_traverse_function (struct rspamd_map *map);
  90. /**
  91. * Perform map traverse
  92. * @param map
  93. * @param cb
  94. * @param cbdata
  95. * @param reset_hits
  96. * @return
  97. */
  98. void rspamd_map_traverse (struct rspamd_map *map, rspamd_map_traverse_cb cb,
  99. gpointer cbdata, gboolean reset_hits);
  100. #endif