summaryrefslogtreecommitdiffstats
path: root/dnsdist-lua-hooks.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-08-26 10:29:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-08-26 10:29:59 +0000
commitef9d2cfde6b877081c468c6d550b1e48866e9ed0 (patch)
tree06a2d35c73bfee9212c3dda128d56c3f07608948 /dnsdist-lua-hooks.cc
parentAdding upstream version 1.9.5. (diff)
downloaddnsdist-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.cc23
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);
+ });
}
}