From: Vsevolod Stakhov Date: Thu, 21 Apr 2022 20:49:35 +0000 (+0100) Subject: [Project] Add some more methods X-Git-Tag: 3.3~293^2~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=80cb6a01d7de62e525b9a791f90041536b3dc977;p=thirdparty%2Frspamd.git [Project] Add some more methods --- diff --git a/src/libserver/symcache/symcache_c.cxx b/src/libserver/symcache/symcache_c.cxx index 7e552e83a8..bdef8b1620 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 1bfd2f881b..974c34e756 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 + 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 c5b6c8ff70..23347a8ecf 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()) {