aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2022-04-21 21:49:35 +0100
committerVsevolod Stakhov <vsevolod@rspamd.com>2022-04-21 21:49:35 +0100
commit80cb6a01d7de62e525b9a791f90041536b3dc977 (patch)
tree30e1d1dc33b4176e23d7832da3dbea650a2cfbe0
parent5d5672f5600c517c23348cbdf9400e1bcae3364c (diff)
downloadrspamd-80cb6a01d7de62e525b9a791f90041536b3dc977.tar.gz
rspamd-80cb6a01d7de62e525b9a791f90041536b3dc977.zip
[Project] Add some more methods
-rw-r--r--src/libserver/symcache/symcache_c.cxx19
-rw-r--r--src/libserver/symcache/symcache_internal.hxx16
-rw-r--r--src/libserver/symcache/symcache_item.hxx4
3 files changed, 39 insertions, 0 deletions
diff --git a/src/libserver/symcache/symcache_c.cxx b/src/libserver/symcache/symcache_c.cxx
index 7e552e83a..bdef8b162 100644
--- a/src/libserver/symcache/symcache_c.cxx
+++ b/src/libserver/symcache/symcache_c.cxx
@@ -218,9 +218,28 @@ rspamd_symcache_item_name (struct rspamd_symcache_item *item)
return real_item->get_name().c_str();
}
+gint
+rspamd_symcache_item_flags (struct rspamd_symcache_item *item)
+{
+ auto *real_item = C_API_SYMCACHE_ITEM(item);
+ return real_item->get_flags();
+}
+
const struct rspamd_symcache_item_stat *
rspamd_symcache_item_stat (struct rspamd_symcache_item *item)
{
auto *real_item = C_API_SYMCACHE_ITEM(item);
return real_item->st;
+}
+
+void
+rspamd_symcache_foreach(struct rspamd_symcache *cache,
+ void (*func) (struct rspamd_symcache_item *item, gpointer /* userdata */),
+ gpointer ud)
+{
+ auto *real_cache = C_API_SYMCACHE(cache);
+
+ real_cache->symbols_foreach([&](const rspamd::symcache::cache_item* item) {
+ func((struct rspamd_symcache_item *)item, ud);
+ });
} \ No newline at end of file
diff --git a/src/libserver/symcache/symcache_internal.hxx b/src/libserver/symcache/symcache_internal.hxx
index 1bfd2f881..974c34e75 100644
--- a/src/libserver/symcache/symcache_internal.hxx
+++ b/src/libserver/symcache/symcache_internal.hxx
@@ -317,7 +317,23 @@ public:
*/
auto periodic_resort(struct ev_loop *ev_loop, double cur_time, double last_resort) -> void;
+ /**
+ * A simple helper to get the reload time
+ * @return
+ */
auto get_reload_time() const { return reload_time; };
+
+ /**
+ * Iterate over all symbols using a specific functor
+ * @tparam Functor
+ * @param f
+ */
+ template<typename Functor>
+ auto symbols_foreach(Functor f) -> void {
+ for (const auto &sym_it : items_by_symbol) {
+ f(sym_it.second.get());
+ }
+ }
};
/*
diff --git a/src/libserver/symcache/symcache_item.hxx b/src/libserver/symcache/symcache_item.hxx
index c5b6c8ff7..23347a8ec 100644
--- a/src/libserver/symcache/symcache_item.hxx
+++ b/src/libserver/symcache/symcache_item.hxx
@@ -265,6 +265,10 @@ public:
return symbol;
}
+ auto get_flags() const -> auto {
+ return flags;
+ };
+
auto add_condition(lua_State *L, int cbref) -> bool
{
if (!is_virtual()) {