#endif /* DISABLE_PROTOBUF */
}
+#ifndef DISABLE_NON_FFI_DQ_BINDINGS
+static LuaArray<EDNSOptionValues> EDNSOptionViewsToValues(const EDNSOptionViewMap& ednsOptions)
+{
+ LuaArray<EDNSOptionValues> copy;
+ for (const auto& [code, views] : ednsOptions) {
+ EDNSOptionValues options;
+ for (const auto& value : views.values) {
+ options.values.emplace_back(value.content, value.size);
+ }
+ copy.emplace_back(code, std::move(options));
+ }
+ return copy;
+}
+#endif /* DISABLE_NON_FFI_DQ_BINDINGS */
+
// NOLINTNEXTLINE(readability-function-cognitive-complexity): this function declares Lua bindings, even with a good refactoring it will likely blow up the threshold
void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
{
return true;
});
});
- luaCtx.registerFunction<std::map<uint16_t, EDNSOptionView> (DNSQuestion::*)() const>("getEDNSOptions", [](const DNSQuestion& dnsQuestion) -> std::map<uint16_t, EDNSOptionView> {
+ luaCtx.registerFunction<LuaArray<EDNSOptionValues> (DNSQuestion::*)() const>("getEDNSOptions", [](const DNSQuestion& dnsQuestion) -> LuaArray<EDNSOptionValues> {
auto ednsOptions = parseEDNSOptions(dnsQuestion);
if (!ednsOptions) {
return {};
}
-
- return *ednsOptions;
+ return EDNSOptionViewsToValues(*ednsOptions);
});
luaCtx.registerFunction<std::string (DNSQuestion::*)(void) const>("getTrailingData", [](const DNSQuestion& dnsQuestion) {
return dnsQuestion.getTrailingData();
});
});
- luaCtx.registerFunction<std::map<uint16_t, EDNSOptionView> (DNSResponse::*)() const>("getEDNSOptions", [](const DNSResponse& dnsQuestion) -> std::map<uint16_t, EDNSOptionView> {
+ luaCtx.registerFunction<LuaArray<EDNSOptionValues> (DNSResponse::*)() const>("getEDNSOptions", [](const DNSResponse& dnsQuestion) -> LuaArray<EDNSOptionValues> {
auto ednsOptions = parseEDNSOptions(dnsQuestion);
if (!ednsOptions) {
return {};
}
-
- return *ednsOptions;
+ return EDNSOptionViewsToValues(*ednsOptions);
});
luaCtx.registerFunction<std::string (DNSResponse::*)(void) const>("getTrailingData", [](const DNSResponse& dnsQuestion) {
return dnsQuestion.getTrailingData();
return xsk->getMetrics();
});
#endif /* HAVE_XSK */
- /* EDNSOptionView */
- luaCtx.registerFunction<size_t (EDNSOptionView::*)() const>("count", [](const EDNSOptionView& option) {
- return option.values.size();
+ /* EDNSOptionValues */
+ luaCtx.registerFunction<size_t (EDNSOptionValues::*)() const>("count", [](const EDNSOptionValues& values) {
+ return values.values.size();
});
- luaCtx.registerFunction<std::vector<string> (EDNSOptionView::*)() const>("getValues", [](const EDNSOptionView& option) {
- std::vector<string> values;
- values.reserve(values.size());
- for (const auto& value : option.values) {
- values.emplace_back(value.content, value.size);
- }
- return values;
+ luaCtx.registerFunction<std::vector<string> (EDNSOptionValues::*)() const>("getValues", [](const EDNSOptionValues& values) {
+ return values.values;
});
luaCtx.writeFunction("newDOHResponseMapEntry", [](const std::string& regex, uint64_t status, const std::string& content, std::optional<LuaAssociativeTable<std::string>> customHeaders) {
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
-#include "namespaces.hh"
+#include <map>
+#include <vector>
#include "noinitvector.hh"
std::vector<EDNSOptionViewValue> values;
};
+struct EDNSOptionValues
+{
+ std::vector<std::string> values;
+};
+
static constexpr size_t EDNSOptionCodeSize = 2;
static constexpr size_t EDNSOptionLengthSize = 2;