diff options
Diffstat (limited to 'dnsdist-lua-hooks.cc')
-rw-r--r-- | dnsdist-lua-hooks.cc | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/dnsdist-lua-hooks.cc b/dnsdist-lua-hooks.cc index c5ccb48..2904cd3 100644 --- a/dnsdist-lua-hooks.cc +++ b/dnsdist-lua-hooks.cc @@ -2,9 +2,13 @@ #include "dnsdist-lua-hooks.hh" #include "dnsdist-lua.hh" #include "lock.hh" +#include "tcpiohandler.hh" namespace dnsdist::lua::hooks { +using MaintenanceCallback = std::function<void()>; +using TicketsKeyAddedHook = std::function<void(const char*, size_t)>; + static LockGuarded<std::vector<MaintenanceCallback>> s_maintenanceHooks; void runMaintenanceHooks(const LuaContext& context) @@ -15,7 +19,7 @@ void runMaintenanceHooks(const LuaContext& context) } } -void addMaintenanceCallback(const LuaContext& context, MaintenanceCallback callback) +static void addMaintenanceCallback(const LuaContext& context, MaintenanceCallback callback) { (void)context; s_maintenanceHooks.lock()->push_back(std::move(callback)); @@ -26,12 +30,29 @@ void clearMaintenanceHooks() s_maintenanceHooks.lock()->clear(); } +static void setTicketsKeyAddedHook(const LuaContext& context, const TicketsKeyAddedHook& hook) +{ + TLSCtx::setTicketsKeyAddedHook([hook](const std::string& key) { + try { + auto lua = g_lua.lock(); + hook(key.c_str(), key.size()); + } + catch (const std::exception& exp) { + warnlog("Error calling the Lua hook after new tickets key has been added: %s", exp.what()); + } + }); +} + void setupLuaHooks(LuaContext& luaCtx) { luaCtx.writeFunction("addMaintenanceCallback", [&luaCtx](const MaintenanceCallback& callback) { setLuaSideEffect(); addMaintenanceCallback(luaCtx, callback); }); + luaCtx.writeFunction("setTicketsKeyAddedHook", [&luaCtx](const TicketsKeyAddedHook& hook) { + setLuaSideEffect(); + setTicketsKeyAddedHook(luaCtx, hook); + }); } } |