From: Remi Gacogne Date: Mon, 11 Apr 2022 16:12:38 +0000 (+0200) Subject: dnsdist: Add Lua FFI interface to network endpoint X-Git-Tag: dnsdist-1.8.0-rc1~285^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d23b74da551cf080d232edebcddd34c7e0eb3f81;p=thirdparty%2Fpdns.git dnsdist: Add Lua FFI interface to network endpoint --- diff --git a/pdns/dnsdistdist/dnsdist-lua-ffi-interface.h b/pdns/dnsdistdist/dnsdist-lua-ffi-interface.h index a22904a6b1..528d45cd40 100644 --- a/pdns/dnsdistdist/dnsdist-lua-ffi-interface.h +++ b/pdns/dnsdistdist/dnsdist-lua-ffi-interface.h @@ -180,3 +180,10 @@ void dnsdist_ffi_ring_entry_list_free(dnsdist_ffi_ring_entry_list_t*) __attribut size_t dnsdist_ffi_ring_get_entries(dnsdist_ffi_ring_entry_list_t** out) __attribute__ ((visibility ("default"))); size_t dnsdist_ffi_ring_get_entries_by_addr(const char* addr, dnsdist_ffi_ring_entry_list_t** out) __attribute__ ((visibility ("default"))); size_t dnsdist_ffi_ring_get_entries_by_mac(const char* addr, dnsdist_ffi_ring_entry_list_t** out) __attribute__ ((visibility ("default"))); + +typedef struct dnsdist_ffi_network_endpoint_t dnsdist_ffi_network_endpoint_t; + +bool dnsdist_ffi_network_endpoint_new(const char* path, size_t pathSize, dnsdist_ffi_network_endpoint_t** out) __attribute__ ((visibility ("default"))); +bool dnsdist_ffi_network_endpoint_is_valid(const dnsdist_ffi_network_endpoint_t* endpoint) __attribute__ ((visibility ("default"))); +bool dnsdist_ffi_network_endpoint_send(const dnsdist_ffi_network_endpoint_t* endpoint, const char* payload, size_t payloadSize) __attribute__ ((visibility ("default"))); +void dnsdist_ffi_network_endpoint_free(dnsdist_ffi_network_endpoint_t* endpoint) __attribute__ ((visibility ("default"))); diff --git a/pdns/dnsdistdist/dnsdist-lua-ffi.cc b/pdns/dnsdistdist/dnsdist-lua-ffi.cc index 8100c62516..c1a07ac2ea 100644 --- a/pdns/dnsdistdist/dnsdist-lua-ffi.cc +++ b/pdns/dnsdistdist/dnsdist-lua-ffi.cc @@ -22,6 +22,7 @@ #include "dnsdist-lua-ffi.hh" #include "dnsdist-mac-address.hh" +#include "dnsdist-lua-network.hh" #include "dnsdist-lua.hh" #include "dnsdist-ecs.hh" #include "dnsdist-rings.hh" @@ -1084,3 +1085,42 @@ size_t dnsdist_ffi_ring_get_entries_by_mac(const char* addr, dnsdist_ffi_ring_en return count; #endif } + +struct dnsdist_ffi_network_endpoint_t +{ + dnsdist::NetworkEndpoint d_endpoint; +}; + +bool dnsdist_ffi_network_endpoint_new(const char* path, size_t pathSize, dnsdist_ffi_network_endpoint_t** out) +{ + if (path == nullptr || pathSize == 0 || out == nullptr) { + return false; + } + try { + dnsdist::NetworkEndpoint endpoint(std::string(path, pathSize)); + *out = new dnsdist_ffi_network_endpoint_t{std::move(endpoint)}; + return true; + } + catch (const std::exception& e) { + vinfolog("Error creating a new network endpoint: %s", e.what()); + return false; + } +} + +bool dnsdist_ffi_network_endpoint_is_valid(const dnsdist_ffi_network_endpoint_t* endpoint) +{ + return endpoint != nullptr; +} + +bool dnsdist_ffi_network_endpoint_send(const dnsdist_ffi_network_endpoint_t* endpoint, const char* payload, size_t payloadSize) +{ + if (endpoint != nullptr && payload != nullptr && payloadSize != 0) { + return endpoint->d_endpoint.send(std::string_view(payload, payloadSize)); + } + return false; +} + +void dnsdist_ffi_network_endpoint_free(dnsdist_ffi_network_endpoint_t* endpoint) +{ + delete endpoint; +}