diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-08-26 10:29:59 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-08-26 10:29:59 +0000 |
commit | ef9d2cfde6b877081c468c6d550b1e48866e9ed0 (patch) | |
tree | 06a2d35c73bfee9212c3dda128d56c3f07608948 /dnsdist-lua-hooks.cc | |
parent | Adding upstream version 1.9.5. (diff) | |
download | dnsdist-ef9d2cfde6b877081c468c6d550b1e48866e9ed0.tar.xz dnsdist-ef9d2cfde6b877081c468c6d550b1e48866e9ed0.zip |
Adding upstream version 1.9.6.upstream/1.9.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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); + }); } } |