]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Expose the protocol to Lua
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 29 Jun 2021 12:35:16 +0000 (14:35 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 29 Jun 2021 14:49:52 +0000 (16:49 +0200)
pdns/dnsdist-lua-bindings-dnsquestion.cc
pdns/dnsdist.hh

index 94e84350b8904d55d443358592752eeb85deaad2..f213335e268f03f1cf313d4bb7192e2d85d63ce8 100644 (file)
@@ -73,6 +73,10 @@ void setupLuaBindingsDNSQuestion(LuaContext& luaCtx)
       return dq.sni;
     });
 
+  luaCtx.registerFunction<std::string (DNSQuestion::*)()const>("getProtocol", [](const DNSQuestion& dq) {
+    return DNSQuestion::ProtocolToString(dq.getProtocol());
+  });
+
   luaCtx.registerFunction<void(DNSQuestion::*)(std::string)>("sendTrap", [](const DNSQuestion& dq, boost::optional<std::string> reason) {
 #ifdef HAVE_NET_SNMP
       if (g_snmpAgent && g_snmpTrapsEnabled) {
@@ -247,6 +251,10 @@ void setupLuaBindingsDNSQuestion(LuaContext& luaCtx)
       return *dr.qTag;
     });
 
+  luaCtx.registerFunction<std::string (DNSResponse::*)()const>("getProtocol", [](const DNSResponse& dr) {
+    return DNSQuestion::ProtocolToString(dr.getProtocol());
+  });
+
   luaCtx.registerFunction<void(DNSResponse::*)(std::string)>("sendTrap", [](const DNSResponse& dr, boost::optional<std::string> reason) {
 #ifdef HAVE_NET_SNMP
       if (g_snmpAgent && g_snmpTrapsEnabled) {
index 2ec6e2c485169bf5cb849fb6c52d887cf5e91d64..153eee4e12a16a8276aae08942f222bd66f9961b 100644 (file)
@@ -64,6 +64,11 @@ using QTag = std::unordered_map<string, string>;
 struct DNSQuestion
 {
   enum class Protocol : uint8_t { DoUDP, DoTCP, DNSCryptUDP, DNSCryptTCP, DoT, DoH };
+  static const std::string& ProtocolToString(Protocol proto)
+  {
+    static const std::vector<std::string> values = { "Do53 UDP", "Do53 TCP", "DNSCrypt UDP", "DNSCrypt TCP", "DNS over TLS", "DNS over HTTPS" };
+    return values.at(static_cast<int>(proto));
+  }
 
   DNSQuestion(const DNSName* name, uint16_t type, uint16_t class_, const ComboAddress* lc, const ComboAddress* rem, PacketBuffer& data_, Protocol proto, const struct timespec* queryTime_):
     data(data_), qname(name), local(lc), remote(rem), queryTime(queryTime_), tempFailureTTL(boost::none), qtype(type), qclass(class_), ecsPrefixLength(rem->sin4.sin_family == AF_INET ? g_ECSSourcePrefixV4 : g_ECSSourcePrefixV6), protocol(proto), ecsOverride(g_ECSOverride) {