]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
chore(dnsdist): Switch from boost::optional to std::optional
authorPieter Lexis <pieter.lexis@powerdns.com>
Thu, 13 Nov 2025 11:28:54 +0000 (12:28 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Fri, 28 Nov 2025 12:39:35 +0000 (13:39 +0100)
This also updates the DNSTap code to accept a DNSName as `auth` always
and checks its emptyness.

44 files changed:
pdns/dnsdistdist/dnsdist-actions-factory.cc
pdns/dnsdistdist/dnsdist-actions-factory.hh
pdns/dnsdistdist/dnsdist-cache.cc
pdns/dnsdistdist/dnsdist-cache.hh
pdns/dnsdistdist/dnsdist-configuration-yaml.cc
pdns/dnsdistdist/dnsdist-console.cc
pdns/dnsdistdist/dnsdist-dnsparser.hh
pdns/dnsdistdist/dnsdist-doh-common.hh
pdns/dnsdistdist/dnsdist-dynblocks.cc
pdns/dnsdistdist/dnsdist-dynblocks.hh
pdns/dnsdistdist/dnsdist-idstate.hh
pdns/dnsdistdist/dnsdist-lua-actions.cc
pdns/dnsdistdist/dnsdist-lua-bindings-dnscrypt.cc
pdns/dnsdistdist/dnsdist-lua-bindings-dnsquestion.cc
pdns/dnsdistdist/dnsdist-lua-bindings-kvs.cc
pdns/dnsdistdist/dnsdist-lua-bindings-packetcache.cc
pdns/dnsdistdist/dnsdist-lua-bindings-protobuf.cc
pdns/dnsdistdist/dnsdist-lua-bindings.cc
pdns/dnsdistdist/dnsdist-lua-ffi.cc
pdns/dnsdistdist/dnsdist-lua-inspection.cc
pdns/dnsdistdist/dnsdist-lua-rules.cc
pdns/dnsdistdist/dnsdist-lua.cc
pdns/dnsdistdist/dnsdist-lua.hh
pdns/dnsdistdist/dnsdist-nghttp2-in.cc
pdns/dnsdistdist/dnsdist-nghttp2-in.hh
pdns/dnsdistdist/dnsdist-nghttp2.cc
pdns/dnsdistdist/dnsdist-protobuf.hh
pdns/dnsdistdist/dnsdist-rules-factory.hh
pdns/dnsdistdist/dnsdist-tcp-downstream.cc
pdns/dnsdistdist/dnsdist-tcp-downstream.hh
pdns/dnsdistdist/dnsdist-tcp-upstream.hh
pdns/dnsdistdist/dnsdist-tcp.cc
pdns/dnsdistdist/dnsdist.cc
pdns/dnsdistdist/fuzz_dnsdistcache.cc
pdns/dnsdistdist/tcpiohandler-mplexer.hh
pdns/dnsdistdist/test-dnsdist-lua-ffi.cc
pdns/dnsdistdist/test-dnsdist-opentelemetry_cc.cc
pdns/dnsdistdist/test-dnsdistdynblocks_hh.cc
pdns/dnsdistdist/test-dnsdistpacketcache_cc.cc
pdns/dnstap.cc
pdns/dnstap.hh
pdns/recursordist/lwres.cc
pdns/recursordist/resolve-context.hh
pdns/recursordist/syncres.cc

index 7a3c3e15efec861e21460fc8a032dd6a953e0c89..1bd2a4ed42e655d49cf1b9be47cccfb8d7dd8f07 100644 (file)
@@ -533,7 +533,7 @@ public:
         auto lock = g_lua.lock();
         auto ret = d_func(dnsquestion);
         if (ruleresult != nullptr) {
-          if (boost::optional<std::string> rule = std::get<1>(ret)) {
+          if (std::optional<std::string> rule = std::get<1>(ret)) {
             *ruleresult = *rule;
           }
           else {
@@ -578,7 +578,7 @@ public:
         auto lock = g_lua.lock();
         auto ret = d_func(response);
         if (ruleresult != nullptr) {
-          if (boost::optional<std::string> rule = std::get<1>(ret)) {
+          if (std::optional<std::string> rule = std::get<1>(ret)) {
             *ruleresult = *rule;
           }
           else {
@@ -1464,16 +1464,16 @@ private:
 };
 
 #ifndef DISABLE_PROTOBUF
-static std::tuple<DnstapMessage::ProtocolType, boost::optional<DnstapMessage::HttpProtocolType>> ProtocolToDNSTap(dnsdist::Protocol protocol)
+static std::tuple<DnstapMessage::ProtocolType, std::optional<DnstapMessage::HttpProtocolType>> ProtocolToDNSTap(dnsdist::Protocol protocol)
 {
   if (protocol == dnsdist::Protocol::DoUDP) {
-    return {DnstapMessage::ProtocolType::DoUDP, boost::none};
+    return {DnstapMessage::ProtocolType::DoUDP, std::nullopt};
   }
   if (protocol == dnsdist::Protocol::DoTCP) {
-    return {DnstapMessage::ProtocolType::DoTCP, boost::none};
+    return {DnstapMessage::ProtocolType::DoTCP, std::nullopt};
   }
   if (protocol == dnsdist::Protocol::DoT) {
-    return {DnstapMessage::ProtocolType::DoT, boost::none};
+    return {DnstapMessage::ProtocolType::DoT, std::nullopt};
   }
   if (protocol == dnsdist::Protocol::DoH) {
     return {DnstapMessage::ProtocolType::DoH, DnstapMessage::HttpProtocolType::HTTP2};
@@ -1482,13 +1482,13 @@ static std::tuple<DnstapMessage::ProtocolType, boost::optional<DnstapMessage::Ht
     return {DnstapMessage::ProtocolType::DoH, DnstapMessage::HttpProtocolType::HTTP3};
   }
   if (protocol == dnsdist::Protocol::DNSCryptUDP) {
-    return {DnstapMessage::ProtocolType::DNSCryptUDP, boost::none};
+    return {DnstapMessage::ProtocolType::DNSCryptUDP, std::nullopt};
   }
   if (protocol == dnsdist::Protocol::DNSCryptTCP) {
-    return {DnstapMessage::ProtocolType::DNSCryptTCP, boost::none};
+    return {DnstapMessage::ProtocolType::DNSCryptTCP, std::nullopt};
   }
   if (protocol == dnsdist::Protocol::DoQ) {
-    return {DnstapMessage::ProtocolType::DoQ, boost::none};
+    return {DnstapMessage::ProtocolType::DoQ, std::nullopt};
   }
   throw std::runtime_error("Unhandled protocol for dnstap: " + protocol.toPrettyString());
 }
@@ -1529,7 +1529,7 @@ public:
 
     auto [protocol, httpProtocol] = ProtocolToDNSTap(dnsquestion->getProtocol());
     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
-    DnstapMessage message(std::move(data), !dnsquestion->getHeader()->qr ? DnstapMessage::MessageType::client_query : DnstapMessage::MessageType::client_response, d_identity, &dnsquestion->ids.origRemote, &dnsquestion->ids.origDest, protocol, reinterpret_cast<const char*>(dnsquestion->getData().data()), dnsquestion->getData().size(), &dnsquestion->getQueryRealTime(), nullptr, boost::none, httpProtocol);
+    DnstapMessage message(std::move(data), !dnsquestion->getHeader()->qr ? DnstapMessage::MessageType::client_query : DnstapMessage::MessageType::client_response, d_identity, &dnsquestion->ids.origRemote, &dnsquestion->ids.origDest, protocol, reinterpret_cast<const char*>(dnsquestion->getData().data()), dnsquestion->getData().size(), &dnsquestion->getQueryRealTime(), nullptr, DNSName(), httpProtocol);
     {
       if (d_alterFunc) {
         auto lock = g_lua.lock();
@@ -1802,7 +1802,7 @@ public:
 
     auto [protocol, httpProtocol] = ProtocolToDNSTap(response->getProtocol());
     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
-    DnstapMessage message(std::move(data), DnstapMessage::MessageType::client_response, d_identity, &response->ids.origRemote, &response->ids.origDest, protocol, reinterpret_cast<const char*>(response->getData().data()), response->getData().size(), &response->getQueryRealTime(), &now, boost::none, httpProtocol);
+    DnstapMessage message(std::move(data), DnstapMessage::MessageType::client_response, d_identity, &response->ids.origRemote, &response->ids.origDest, protocol, reinterpret_cast<const char*>(response->getData().data()), response->getData().size(), &response->getQueryRealTime(), &now, DNSName(), httpProtocol);
     {
       if (d_alterFunc) {
         auto lock = g_lua.lock();
index f02f0be2328b0236f6cbd4eeb0d254e027eb6568..9c0a441affe9314777f39ccd9cd30d3c68d26122 100644 (file)
@@ -45,8 +45,8 @@ class KeyValueLookupKey;
 
 namespace dnsdist::actions
 {
-using LuaActionFunction = std::function<std::tuple<int, boost::optional<string>>(DNSQuestion* dnsquestion)>;
-using LuaResponseActionFunction = std::function<std::tuple<int, boost::optional<string>>(DNSResponse* response)>;
+using LuaActionFunction = std::function<std::tuple<int, std::optional<string>>(DNSQuestion* dnsquestion)>;
+using LuaResponseActionFunction = std::function<std::tuple<int, std::optional<string>>(DNSResponse* response)>;
 using LuaActionFFIFunction = std::function<int(dnsdist_ffi_dnsquestion_t* dnsquestion)>;
 using LuaResponseActionFFIFunction = std::function<int(dnsdist_ffi_dnsresponse_t* dnsquestion)>;
 
index 64bdf7274be430f54f88483b87ba020017a4ab0b..74679f6e8d1df646876bdc0dee014ab99d2443a1 100644 (file)
@@ -50,7 +50,7 @@ DNSDistPacketCache::DNSDistPacketCache(CacheSettings settings) :
   }
 }
 
-bool DNSDistPacketCache::getClientSubnet(const PacketBuffer& packet, size_t qnameWireLength, boost::optional<Netmask>& subnet)
+bool DNSDistPacketCache::getClientSubnet(const PacketBuffer& packet, size_t qnameWireLength, std::optional<Netmask>& subnet)
 {
   uint16_t optRDPosition = 0;
   size_t remaining = 0;
@@ -78,7 +78,7 @@ bool DNSDistPacketCache::getClientSubnet(const PacketBuffer& packet, size_t qnam
   return false;
 }
 
-bool DNSDistPacketCache::cachedValueMatches(const CacheValue& cachedValue, uint16_t queryFlags, const DNSName& qname, uint16_t qtype, uint16_t qclass, bool receivedOverUDP, bool dnssecOK, const boost::optional<Netmask>& subnet) const
+bool DNSDistPacketCache::cachedValueMatches(const CacheValue& cachedValue, uint16_t queryFlags, const DNSName& qname, uint16_t qtype, uint16_t qclass, bool receivedOverUDP, bool dnssecOK, const std::optional<Netmask>& subnet) const
 {
   if (cachedValue.queryFlags != queryFlags || cachedValue.dnssecOK != dnssecOK || cachedValue.receivedOverUDP != receivedOverUDP || cachedValue.qtype != qtype || cachedValue.qclass != qclass || cachedValue.qname != qname) {
     return false;
@@ -125,7 +125,7 @@ bool DNSDistPacketCache::insertLocked(std::unordered_map<uint32_t, CacheValue>&
   return false;
 }
 
-void DNSDistPacketCache::insert(uint32_t key, const boost::optional<Netmask>& subnet, uint16_t queryFlags, bool dnssecOK, const DNSName& qname, uint16_t qtype, uint16_t qclass, const PacketBuffer& response, bool receivedOverUDP, uint8_t rcode, boost::optional<uint32_t> tempFailureTTL)
+void DNSDistPacketCache::insert(uint32_t key, const std::optional<Netmask>& subnet, uint16_t queryFlags, bool dnssecOK, const DNSName& qname, uint16_t qtype, uint16_t qclass, const PacketBuffer& response, bool receivedOverUDP, uint8_t rcode, std::optional<uint32_t> tempFailureTTL)
 {
   if (response.size() < sizeof(dnsheader) || response.size() > getMaximumEntrySize()) {
     return;
@@ -138,7 +138,7 @@ void DNSDistPacketCache::insert(uint32_t key, const boost::optional<Netmask>& su
   uint32_t minTTL{0};
 
   if (rcode == RCode::ServFail || rcode == RCode::Refused) {
-    minTTL = tempFailureTTL == boost::none ? d_settings.d_tempFailureTTL : *tempFailureTTL;
+    minTTL = tempFailureTTL == std::nullopt ? d_settings.d_tempFailureTTL : *tempFailureTTL;
     if (minTTL == 0) {
       return;
     }
@@ -218,7 +218,7 @@ void DNSDistPacketCache::insert(uint32_t key, const boost::optional<Netmask>& su
   }
 }
 
-bool DNSDistPacketCache::get(DNSQuestion& dnsQuestion, uint16_t queryId, uint32_t* keyOut, boost::optional<Netmask>& subnet, bool dnssecOK, bool receivedOverUDP, uint32_t allowExpired, bool skipAging, bool truncatedOK, bool recordMiss)
+bool DNSDistPacketCache::get(DNSQuestion& dnsQuestion, uint16_t queryId, uint32_t* keyOut, std::optional<Netmask>& subnet, bool dnssecOK, bool receivedOverUDP, uint32_t allowExpired, bool skipAging, bool truncatedOK, bool recordMiss)
 {
   if (dnsQuestion.ids.qtype == QType::AXFR || dnsQuestion.ids.qtype == QType::IXFR) {
     ++d_misses;
@@ -534,7 +534,7 @@ uint64_t DNSDistPacketCache::dump(int fileDesc, bool rawResponse)
           rcode = dnsHeader.rcode;
         }
 
-        fprintf(filePtr.get(), "%s %" PRId64 " %s %s ; ecs %s, rcode %" PRIu8 ", key %" PRIu32 ", length %" PRIu16 ", received over UDP %d, added %" PRId64 ", dnssecOK %d, raw query flags %" PRIu16, value.qname.toString().c_str(), static_cast<int64_t>(value.validity - now), QClass(value.qclass).toString().c_str(), QType(value.qtype).toString().c_str(), value.subnet ? value.subnet.get().toString().c_str() : "empty", rcode, entry.first, value.len, value.receivedOverUDP ? 1 : 0, static_cast<int64_t>(value.added), value.dnssecOK ? 1 : 0, value.queryFlags);
+        fprintf(filePtr.get(), "%s %" PRId64 " %s %s ; ecs %s, rcode %" PRIu8 ", key %" PRIu32 ", length %" PRIu16 ", received over UDP %d, added %" PRId64 ", dnssecOK %d, raw query flags %" PRIu16, value.qname.toString().c_str(), static_cast<int64_t>(value.validity - now), QClass(value.qclass).toString().c_str(), QType(value.qtype).toString().c_str(), value.subnet ? value.subnet.value().toString().c_str() : "empty", rcode, entry.first, value.len, value.receivedOverUDP ? 1 : 0, static_cast<int64_t>(value.added), value.dnssecOK ? 1 : 0, value.queryFlags);
 
         if (rawResponse) {
           std::string rawDataResponse = Base64Encode(value.value);
index c3e59c03e73edeadab0dd480fdceab675102ab60..9f28dcbe3302b68ab4bfd854a532a9cd13a4ce14 100644 (file)
@@ -57,8 +57,8 @@ public:
 
   DNSDistPacketCache(CacheSettings settings);
 
-  void insert(uint32_t key, const boost::optional<Netmask>& subnet, uint16_t queryFlags, bool dnssecOK, const DNSName& qname, uint16_t qtype, uint16_t qclass, const PacketBuffer& response, bool receivedOverUDP, uint8_t rcode, boost::optional<uint32_t> tempFailureTTL);
-  bool get(DNSQuestion& dnsQuestion, uint16_t queryId, uint32_t* keyOut, boost::optional<Netmask>& subnet, bool dnssecOK, bool receivedOverUDP, uint32_t allowExpired = 0, bool skipAging = false, bool truncatedOK = true, bool recordMiss = true);
+  void insert(uint32_t key, const std::optional<Netmask>& subnet, uint16_t queryFlags, bool dnssecOK, const DNSName& qname, uint16_t qtype, uint16_t qclass, const PacketBuffer& response, bool receivedOverUDP, uint8_t rcode, std::optional<uint32_t> tempFailureTTL);
+  bool get(DNSQuestion& dnsQuestion, uint16_t queryId, uint32_t* keyOut, std::optional<Netmask>& subnet, bool dnssecOK, bool receivedOverUDP, uint32_t allowExpired = 0, bool skipAging = false, bool truncatedOK = true, bool recordMiss = true);
   size_t purgeExpired(size_t upTo, time_t now);
   size_t expunge(size_t upTo = 0);
   size_t expungeByName(const DNSName& name, uint16_t qtype = QType::ANY, bool suffixMatch = false);
@@ -94,7 +94,7 @@ public:
   uint32_t getKey(const DNSName::string_t& qname, size_t qnameWireLength, const PacketBuffer& packet, bool receivedOverUDP) const;
 
   static uint32_t getMinTTL(const char* packet, uint16_t length, bool* seenNoDataSOA);
-  static bool getClientSubnet(const PacketBuffer& packet, size_t qnameWireLength, boost::optional<Netmask>& subnet);
+  static bool getClientSubnet(const PacketBuffer& packet, size_t qnameWireLength, std::optional<Netmask>& subnet);
 
 private:
   struct CacheValue
@@ -102,7 +102,7 @@ private:
     [[nodiscard]] time_t getTTD() const { return validity; }
     std::string value;
     DNSName qname;
-    boost::optional<Netmask> subnet;
+    std::optional<Netmask> subnet;
     uint16_t qtype{0};
     uint16_t qclass{0};
     uint16_t queryFlags{0};
@@ -142,7 +142,7 @@ private:
     std::atomic<uint64_t> d_entriesCount{0};
   };
 
-  [[nodiscard]] bool cachedValueMatches(const CacheValue& cachedValue, uint16_t queryFlags, const DNSName& qname, uint16_t qtype, uint16_t qclass, bool receivedOverUDP, bool dnssecOK, const boost::optional<Netmask>& subnet) const;
+  [[nodiscard]] bool cachedValueMatches(const CacheValue& cachedValue, uint16_t queryFlags, const DNSName& qname, uint16_t qtype, uint16_t qclass, bool receivedOverUDP, bool dnssecOK, const std::optional<Netmask>& subnet) const;
   [[nodiscard]] uint32_t getShardIndex(uint32_t key) const;
   bool insertLocked(std::unordered_map<uint32_t, CacheValue>& map, uint32_t key, CacheValue& newValue);
 
index 12b5c259fad91275f315da3858ddef5e76029ca7..112de6227cda078d292c75c78e5b4413159b52ae 100644 (file)
@@ -50,7 +50,6 @@
 #include "dnsdist-configuration-yaml-internal.hh"
 
 #include <variant>
-#include <boost/optional.hpp>
 #include <boost/uuid/string_generator.hpp>
 #include <boost/variant.hpp>
 
@@ -124,7 +123,7 @@ template <class T>
 static bool getOptionalLuaFunction(T& destination, const ::rust::string& functionName)
 {
   auto lua = g_lua.lock();
-  auto function = lua->readVariable<boost::optional<T>>(std::string(functionName));
+  auto function = lua->readVariable<std::optional<T>>(std::string(functionName));
   if (!function) {
     return false;
   }
@@ -374,7 +373,7 @@ static bool handleTLSConfiguration(const dnsdist::rust::settings::BindConfigurat
     if (!bind.doh.responses_map.empty()) {
       auto newMap = std::make_shared<std::vector<std::shared_ptr<DOHResponseMapEntry>>>();
       for (const auto& responsesMap : bind.doh.responses_map) {
-        boost::optional<std::unordered_map<std::string, std::string>> headers;
+        std::optional<std::unordered_map<std::string, std::string>> headers;
         if (!responsesMap.headers.empty()) {
           headers = std::unordered_map<std::string, std::string>();
           for (const auto& header : responsesMap.headers) {
@@ -1266,13 +1265,13 @@ bool loadConfigurationFromFile(const std::string& fileName, [[maybe_unused]] boo
 void addLuaBindingsForYAMLObjects([[maybe_unused]] LuaContext& luaCtx)
 {
 #if defined(HAVE_YAML_CONFIGURATION)
-  using ReturnValue = boost::optional<boost::variant<std::shared_ptr<DNSDistPacketCache>, std::shared_ptr<DNSRule>, std::shared_ptr<DNSAction>, std::shared_ptr<DNSResponseAction>, std::shared_ptr<NetmaskGroup>, std::shared_ptr<KeyValueStore>, std::shared_ptr<KeyValueLookupKey>, std::shared_ptr<RemoteLoggerInterface>, std::shared_ptr<ServerPolicy>, std::shared_ptr<TimedIPSetRule>, std::shared_ptr<XSKMap>>>;
+  using ReturnValue = std::optional<boost::variant<std::shared_ptr<DNSDistPacketCache>, std::shared_ptr<DNSRule>, std::shared_ptr<DNSAction>, std::shared_ptr<DNSResponseAction>, std::shared_ptr<NetmaskGroup>, std::shared_ptr<KeyValueStore>, std::shared_ptr<KeyValueLookupKey>, std::shared_ptr<RemoteLoggerInterface>, std::shared_ptr<ServerPolicy>, std::shared_ptr<TimedIPSetRule>, std::shared_ptr<XSKMap>>>;
 
   luaCtx.writeFunction("getObjectFromYAMLConfiguration", [](const std::string& name) -> ReturnValue {
     auto map = s_registeredTypesMap.lock();
     auto item = map->find(name);
     if (item == map->end()) {
-      return boost::none;
+      return std::nullopt;
     }
     if (auto* ptr = std::get_if<std::shared_ptr<DNSDistPacketCache>>(&item->second)) {
       return ReturnValue(*ptr);
@@ -1308,7 +1307,7 @@ void addLuaBindingsForYAMLObjects([[maybe_unused]] LuaContext& luaCtx)
       return ReturnValue(*ptr);
     }
 
-    return boost::none;
+    return std::nullopt;
   });
 #endif /* HAVE_YAML_CONFIGURATION */
 }
@@ -1659,7 +1658,7 @@ std::shared_ptr<DNSActionWrapper> getDnstapLogAction([[maybe_unused]] const Dnst
   if (!logger && !(dnsdist::configuration::yaml::s_inClientMode || dnsdist::configuration::yaml::s_inConfigCheckMode)) {
     throw std::runtime_error("Unable to find the dnstap logger named '" + std::string(config.logger_name) + "'");
   }
-  boost::optional<dnsdist::actions::DnstapAlterFunction> alterFuncHolder;
+  std::optional<dnsdist::actions::DnstapAlterFunction> alterFuncHolder;
   dnsdist::actions::DnstapAlterFunction alterFunc;
   if (dnsdist::configuration::yaml::getLuaFunctionFromConfiguration(alterFunc, config.alter_function_name, config.alter_function_code, config.alter_function_file, "dnstap log action")) {
     alterFuncHolder = std::move(alterFunc);
@@ -1678,7 +1677,7 @@ std::shared_ptr<DNSResponseActionWrapper> getDnstapLogResponseAction([[maybe_unu
   if (!logger && !(dnsdist::configuration::yaml::s_inClientMode || dnsdist::configuration::yaml::s_inConfigCheckMode)) {
     throw std::runtime_error("Unable to find the dnstap logger named '" + std::string(config.logger_name) + "'");
   }
-  boost::optional<dnsdist::actions::DnstapAlterResponseFunction> alterFuncHolder;
+  std::optional<dnsdist::actions::DnstapAlterResponseFunction> alterFuncHolder;
   dnsdist::actions::DnstapAlterResponseFunction alterFunc;
   if (dnsdist::configuration::yaml::getLuaFunctionFromConfiguration(alterFunc, config.alter_function_name, config.alter_function_code, config.alter_function_file, "dnstap log response action")) {
     alterFuncHolder = std::move(alterFunc);
index 9a6f36127e7faa0544d589df01ffebf2a0ea3e45..43a363b667df6312464cffcb0de259fbffdbb082 100644 (file)
@@ -399,7 +399,7 @@ void doConsole()
         g_outputBuffer.clear();
         resetLuaSideEffect();
         auto ret = lua->executeCode<
-          boost::optional<
+          std::optional<
             boost::variant<
               string,
               shared_ptr<DownstreamState>,
@@ -540,7 +540,7 @@ static void controlClientThread(ConsoleConnection&& conn)
           g_outputBuffer.clear();
           resetLuaSideEffect();
           auto ret = lua->executeCode<
-            boost::optional<
+            std::optional<
               boost::variant<
                 string,
                 shared_ptr<DownstreamState>,
index e9bb9691cd9b4c79c47d01d1c751ddc275deae9b..88a93b47e99a2b569870363ade41118670475fee 100644 (file)
@@ -73,9 +73,9 @@ namespace RecordParsers
 
 struct ResponseConfig
 {
-  boost::optional<bool> setAA{boost::none};
-  boost::optional<bool> setAD{boost::none};
-  boost::optional<bool> setRA{boost::none};
+  std::optional<bool> setAA{std::nullopt};
+  std::optional<bool> setAD{std::nullopt};
+  std::optional<bool> setRA{std::nullopt};
   uint32_t ttl{60};
 };
 void setResponseHeadersFromConfig(dnsheader& dnsheader, const ResponseConfig& config);
index 74f12b2fac61b245a0d6714e1fcf5e1a57782bf7..8c1c6623cdcf2dde0f54d3113888acfa48359fbd 100644 (file)
@@ -45,7 +45,7 @@ struct DOHServerConfig;
 class DOHResponseMapEntry
 {
 public:
-  DOHResponseMapEntry(const std::string& regex, uint16_t status, const PacketBuffer& content, const boost::optional<std::unordered_map<std::string, std::string>>& headers) :
+  DOHResponseMapEntry(const std::string& regex, uint16_t status, const PacketBuffer& content, const std::optional<std::unordered_map<std::string, std::string>>& headers) :
     d_regex(regex), d_customHeaders(headers), d_content(content), d_status(status)
   {
     if (status >= 400 && !d_content.empty() && d_content.at(d_content.size() - 1) != 0) {
@@ -69,14 +69,14 @@ public:
     return d_content;
   }
 
-  const boost::optional<std::unordered_map<std::string, std::string>>& getHeaders() const
+  const std::optional<std::unordered_map<std::string, std::string>>& getHeaders() const
   {
     return d_customHeaders;
   }
 
 private:
   Regex d_regex;
-  boost::optional<std::unordered_map<std::string, std::string>> d_customHeaders;
+  std::optional<std::unordered_map<std::string, std::string>> d_customHeaders;
   PacketBuffer d_content;
   uint16_t d_status;
 };
index 9fd8125d3c35b4fb7ec6356f4423371014add3bf..82b31f0959b43dbe361d560dbf8e8f7c215926bc 100644 (file)
@@ -28,7 +28,7 @@ void DynBlockRulesGroup::apply(const timespec& now)
     return;
   }
 
-  boost::optional<ClientAddressDynamicRules> blocks;
+  std::optional<ClientAddressDynamicRules> blocks;
   bool updated = false;
 
   for (const auto& entry : counts) {
@@ -140,10 +140,10 @@ void DynBlockRulesGroup::applySMT(const struct timespec& now, StatNode& statNode
       auto ret = d_smtVisitor(*node_, self, children);
       block = std::get<0>(ret);
       if (block) {
-        if (boost::optional<std::string> tmp = std::get<1>(ret)) {
+        if (std::optional<std::string> tmp = std::get<1>(ret)) {
           blockParameters.d_reason = std::move(*tmp);
         }
-        if (boost::optional<int> tmp = std::get<2>(ret)) {
+        if (std::optional<int> tmp = std::get<2>(ret)) {
           blockParameters.d_action = static_cast<DNSAction::Action>(*tmp);
         }
       }
@@ -316,7 +316,7 @@ bool addOrRefreshBlockSMT(SuffixDynamicRules& blocks, const timespec& now, DynBl
 }
 }
 
-void DynBlockRulesGroup::addOrRefreshBlock(boost::optional<ClientAddressDynamicRules>& blocks, const struct timespec& now, const AddressAndPortRange& requestor, const DynBlockRule& rule, bool& updated, bool warning)
+void DynBlockRulesGroup::addOrRefreshBlock(std::optional<ClientAddressDynamicRules>& blocks, const struct timespec& now, const AddressAndPortRange& requestor, const DynBlockRule& rule, bool& updated, bool warning)
 {
   /* network exclusions are address-based only (no port) */
   if (d_excludedSubnets.match(requestor.getNetwork())) {
index c21ca8be63afb40eb24ba5085c573fbb1d953345..a04d88b4e7634e3a58c62aaefe319442f3a7adc9 100644 (file)
@@ -257,7 +257,7 @@ public:
     d_respCacheMissRatioRule = std::move(rule);
   }
 
-  using smtVisitor_t = std::function<std::tuple<bool, boost::optional<std::string>, boost::optional<int>>(const StatNode&, const StatNode::Stat&, const StatNode::Stat&)>;
+  using smtVisitor_t = std::function<std::tuple<bool, std::optional<std::string>, std::optional<int>>(const StatNode&, const StatNode::Stat&, const StatNode::Stat&)>;
 
   void setSuffixMatchRule(DynBlockRule&& rule, smtVisitor_t visitor)
   {
@@ -362,15 +362,15 @@ private:
   void applySMT(const struct timespec& now, StatNode& statNodeRoot);
   bool checkIfQueryTypeMatches(const Rings::Query& query);
   bool checkIfResponseCodeMatches(const Rings::Response& response);
-  void addOrRefreshBlock(boost::optional<ClientAddressDynamicRules>& blocks, const struct timespec& now, const AddressAndPortRange& requestor, const DynBlockRule& rule, bool& updated, bool warning);
+  void addOrRefreshBlock(std::optional<ClientAddressDynamicRules>& blocks, const struct timespec& now, const AddressAndPortRange& requestor, const DynBlockRule& rule, bool& updated, bool warning);
   void addOrRefreshBlockSMT(SuffixDynamicRules& blocks, const struct timespec& now, const DNSName& name, const DynBlockRule& rule, bool& updated);
 
-  void addBlock(boost::optional<ClientAddressDynamicRules>& blocks, const struct timespec& now, const AddressAndPortRange& requestor, const DynBlockRule& rule, bool& updated)
+  void addBlock(std::optional<ClientAddressDynamicRules>& blocks, const struct timespec& now, const AddressAndPortRange& requestor, const DynBlockRule& rule, bool& updated)
   {
     addOrRefreshBlock(blocks, now, requestor, rule, updated, false);
   }
 
-  void handleWarning(boost::optional<ClientAddressDynamicRules>& blocks, const struct timespec& now, const AddressAndPortRange& requestor, const DynBlockRule& rule, bool& updated)
+  void handleWarning(std::optional<ClientAddressDynamicRules>& blocks, const struct timespec& now, const AddressAndPortRange& requestor, const DynBlockRule& rule, bool& updated)
   {
     addOrRefreshBlock(blocks, now, requestor, rule, updated, true);
   }
index eaa9975f9783cd5014273ef63fa7f5e470c0c88b..cb2b2be4ba3f34fa3241a13383ed84a2061eccdf 100644 (file)
@@ -177,7 +177,7 @@ struct InternalQueryState
 
   InternalQueryState partialCloneForXFR() const;
 
-  boost::optional<Netmask> subnet{boost::none}; // 40
+  std::optional<Netmask> subnet{std::nullopt}; // 40
   std::string poolName; // 32
 #if !defined(DISABLE_PROTOBUF)
   std::string d_rawProtobufContent; // protobuf-encoded content to add to protobuf messages // 32
@@ -204,7 +204,7 @@ public:
   std::vector<std::pair<std::string, std::shared_ptr<RemoteLoggerInterface>>> delayedResponseMsgs;
 #endif
   std::unique_ptr<EDNSExtendedError> d_extendedError{nullptr};
-  boost::optional<uint32_t> tempFailureTTL{boost::none}; // 8
+  std::optional<uint32_t> tempFailureTTL{std::nullopt}; // 8
   ClientState* cs{nullptr}; // 8
   std::unique_ptr<DOHUnitInterface> du; // 8
   size_t d_proxyProtocolPayloadSize{0}; // 8
index 3a15cd2fe24d8578c096d8db77d44deeb248a4a4..f79ec1b480d611ddb691af76d38c9b353593cb4c 100644 (file)
@@ -33,7 +33,7 @@
 
 using responseParams_t = std::unordered_map<std::string, boost::variant<bool, uint32_t>>;
 
-static dnsdist::ResponseConfig parseResponseConfig(boost::optional<responseParams_t>& vars)
+static dnsdist::ResponseConfig parseResponseConfig(std::optional<responseParams_t>& vars)
 {
   dnsdist::ResponseConfig config;
   getOptionalValue<uint32_t>(vars, "ttl", config.ttl);
@@ -55,7 +55,7 @@ static std::vector<T> convertLuaArrayToRegular(const LuaArray<T>& luaArray)
 }
 
 template <class T>
-std::optional<T> boostToStandardOptional(const boost::optional<T>& boostOpt)
+std::optional<T> boostToStandardOptional(const std::optional<T>& boostOpt)
 {
   return boostOpt ? *boostOpt : std::optional<T>();
 }
@@ -63,7 +63,7 @@ std::optional<T> boostToStandardOptional(const boost::optional<T>& boostOpt)
 // NOLINTNEXTLINE(readability-function-cognitive-complexity): this function declares Lua bindings, even with a good refactoring it will likely blow up the threshold
 void setupLuaActions(LuaContext& luaCtx)
 {
-  luaCtx.writeFunction("newRuleAction", [](const luadnsrule_t& dnsrule, std::shared_ptr<DNSAction> action, boost::optional<luaruleparams_t> params) {
+  luaCtx.writeFunction("newRuleAction", [](const luadnsrule_t& dnsrule, std::shared_ptr<DNSAction> action, std::optional<luaruleparams_t> params) {
     boost::uuids::uuid uuid{};
     uint64_t creationOrder = 0;
     std::string name;
@@ -110,7 +110,7 @@ void setupLuaActions(LuaContext& luaCtx)
     return dnsdist::actions::getLuaFFIResponseAction(std::move(function));
   });
 
-  luaCtx.writeFunction("SpoofAction", [](LuaTypeOrArrayOf<std::string> inp, boost::optional<responseParams_t> vars) {
+  luaCtx.writeFunction("SpoofAction", [](LuaTypeOrArrayOf<std::string> inp, std::optional<responseParams_t> vars) {
     vector<ComboAddress> addrs;
     if (auto* ipaddr = boost::get<std::string>(&inp)) {
       addrs.emplace_back(*ipaddr);
@@ -128,7 +128,7 @@ void setupLuaActions(LuaContext& luaCtx)
     return ret;
   });
 
-  luaCtx.writeFunction("SpoofSVCAction", [](const LuaArray<SVCRecordParameters>& parameters, boost::optional<responseParams_t> vars) {
+  luaCtx.writeFunction("SpoofSVCAction", [](const LuaArray<SVCRecordParameters>& parameters, std::optional<responseParams_t> vars) {
     auto responseConfig = parseResponseConfig(vars);
     checkAllParametersConsumed("SpoofAction", vars);
     auto svcParams = convertLuaArrayToRegular(parameters);
@@ -136,14 +136,14 @@ void setupLuaActions(LuaContext& luaCtx)
     return ret;
   });
 
-  luaCtx.writeFunction("SpoofCNAMEAction", [](const std::string& cname, boost::optional<responseParams_t> vars) {
+  luaCtx.writeFunction("SpoofCNAMEAction", [](const std::string& cname, std::optional<responseParams_t> vars) {
     auto responseConfig = parseResponseConfig(vars);
     checkAllParametersConsumed("SpoofCNAMEAction", vars);
     auto ret = dnsdist::actions::getSpoofAction(DNSName(cname), responseConfig);
     return ret;
   });
 
-  luaCtx.writeFunction("SpoofRawAction", [](LuaTypeOrArrayOf<std::string> inp, boost::optional<responseParams_t> vars) {
+  luaCtx.writeFunction("SpoofRawAction", [](LuaTypeOrArrayOf<std::string> inp, std::optional<responseParams_t> vars) {
     vector<string> raws;
     if (const auto* str = boost::get<std::string>(&inp)) {
       raws.push_back(*str);
@@ -178,7 +178,7 @@ void setupLuaActions(LuaContext& luaCtx)
     return ret;
   });
 
-  luaCtx.writeFunction("LimitTTLResponseAction", [](uint32_t min, uint32_t max, boost::optional<LuaArray<uint16_t>> types) {
+  luaCtx.writeFunction("LimitTTLResponseAction", [](uint32_t min, uint32_t max, std::optional<LuaArray<uint16_t>> types) {
     std::unordered_set<QType> capTypes;
     if (types) {
       capTypes.reserve(types->size());
@@ -226,14 +226,14 @@ void setupLuaActions(LuaContext& luaCtx)
     return dnsdist::actions::getClearRecordTypesResponseAction(std::move(qtypes));
   });
 
-  luaCtx.writeFunction("RCodeAction", [](uint8_t rcode, boost::optional<responseParams_t> vars) {
+  luaCtx.writeFunction("RCodeAction", [](uint8_t rcode, std::optional<responseParams_t> vars) {
     auto responseConfig = parseResponseConfig(vars);
     checkAllParametersConsumed("RCodeAction", vars);
     auto ret = dnsdist::actions::getRCodeAction(rcode, responseConfig);
     return ret;
   });
 
-  luaCtx.writeFunction("ERCodeAction", [](uint8_t rcode, boost::optional<responseParams_t> vars) {
+  luaCtx.writeFunction("ERCodeAction", [](uint8_t rcode, std::optional<responseParams_t> vars) {
     auto responseConfig = parseResponseConfig(vars);
     checkAllParametersConsumed("ERCodeAction", vars);
     auto ret = dnsdist::actions::getERCodeAction(rcode, responseConfig);
@@ -244,7 +244,7 @@ void setupLuaActions(LuaContext& luaCtx)
   // Used for both RemoteLogAction and RemoteLogResponseAction
   static const std::array<std::string, 2> s_validIpEncryptMethods = {"legacy", "ipcrypt-pfx"};
 
-  luaCtx.writeFunction("RemoteLogAction", [](std::shared_ptr<RemoteLoggerInterface> logger, boost::optional<dnsdist::actions::ProtobufAlterFunction> alterFunc, boost::optional<LuaAssociativeTable<std::string>> vars, boost::optional<LuaAssociativeTable<std::string>> metas) {
+  luaCtx.writeFunction("RemoteLogAction", [](std::shared_ptr<RemoteLoggerInterface> logger, std::optional<dnsdist::actions::ProtobufAlterFunction> alterFunc, std::optional<LuaAssociativeTable<std::string>> vars, std::optional<LuaAssociativeTable<std::string>> metas) {
     if (logger) {
       // avoids potentially-evaluated-expression warning with clang.
       RemoteLoggerInterface& remoteLoggerRef = *logger;
@@ -291,7 +291,7 @@ void setupLuaActions(LuaContext& luaCtx)
     return dnsdist::actions::getRemoteLogAction(config);
   });
 
-  luaCtx.writeFunction("RemoteLogResponseAction", [](std::shared_ptr<RemoteLoggerInterface> logger, boost::optional<dnsdist::actions::ProtobufAlterResponseFunction> alterFunc, boost::optional<bool> includeCNAME, boost::optional<LuaAssociativeTable<std::string>> vars, boost::optional<LuaAssociativeTable<std::string>> metas, boost::optional<bool> delay) {
+  luaCtx.writeFunction("RemoteLogResponseAction", [](std::shared_ptr<RemoteLoggerInterface> logger, std::optional<dnsdist::actions::ProtobufAlterResponseFunction> alterFunc, std::optional<bool> includeCNAME, std::optional<LuaAssociativeTable<std::string>> vars, std::optional<LuaAssociativeTable<std::string>> metas, std::optional<bool> delay) {
     if (logger) {
       // avoids potentially-evaluated-expression warning with clang.
       RemoteLoggerInterface& remoteLoggerRef = *logger;
@@ -343,16 +343,16 @@ void setupLuaActions(LuaContext& luaCtx)
     return dnsdist::actions::getRemoteLogResponseAction(config);
   });
 
-  luaCtx.writeFunction("DnstapLogAction", [](const std::string& identity, std::shared_ptr<RemoteLoggerInterface> logger, boost::optional<dnsdist::actions::DnstapAlterFunction> alterFunc) {
+  luaCtx.writeFunction("DnstapLogAction", [](const std::string& identity, std::shared_ptr<RemoteLoggerInterface> logger, std::optional<dnsdist::actions::DnstapAlterFunction> alterFunc) {
     return dnsdist::actions::getDnstapLogAction(identity, std::move(logger), alterFunc ? std::move(*alterFunc) : std::optional<dnsdist::actions::DnstapAlterFunction>());
   });
 
-  luaCtx.writeFunction("DnstapLogResponseAction", [](const std::string& identity, std::shared_ptr<RemoteLoggerInterface> logger, boost::optional<dnsdist::actions::DnstapAlterResponseFunction> alterFunc) {
+  luaCtx.writeFunction("DnstapLogResponseAction", [](const std::string& identity, std::shared_ptr<RemoteLoggerInterface> logger, std::optional<dnsdist::actions::DnstapAlterResponseFunction> alterFunc) {
     return dnsdist::actions::getDnstapLogResponseAction(identity, std::move(logger), alterFunc ? std::move(*alterFunc) : std::optional<dnsdist::actions::DnstapAlterResponseFunction>());
   });
 #endif /* DISABLE_PROTOBUF */
 
-  luaCtx.writeFunction("TeeAction", [](const std::string& remote, boost::optional<bool> addECS, boost::optional<std::string> local, boost::optional<bool> addProxyProtocol) {
+  luaCtx.writeFunction("TeeAction", [](const std::string& remote, std::optional<bool> addECS, std::optional<std::string> local, std::optional<bool> addProxyProtocol) {
     std::optional<ComboAddress> localAddr;
     if (local) {
       localAddr = ComboAddress(*local, 0);
@@ -361,7 +361,7 @@ void setupLuaActions(LuaContext& luaCtx)
     return dnsdist::actions::getTeeAction(ComboAddress(remote, 53), localAddr, addECS ? *addECS : false, addProxyProtocol ? *addProxyProtocol : false);
   });
 
-  luaCtx.writeFunction("SetECSAction", [](const std::string& v4Netmask, boost::optional<std::string> v6Netmask) {
+  luaCtx.writeFunction("SetECSAction", [](const std::string& v4Netmask, std::optional<std::string> v6Netmask) {
     if (v6Netmask) {
       return dnsdist::actions::getSetECSAction(v4Netmask, *v6Netmask);
     }
@@ -373,7 +373,7 @@ void setupLuaActions(LuaContext& luaCtx)
   });
 
 #ifdef HAVE_DNS_OVER_HTTPS
-  luaCtx.writeFunction("HTTPStatusAction", [](uint16_t status, std::string body, boost::optional<std::string> contentType, boost::optional<responseParams_t> vars) {
+  luaCtx.writeFunction("HTTPStatusAction", [](uint16_t status, std::string body, std::optional<std::string> contentType, std::optional<responseParams_t> vars) {
     auto responseConfig = parseResponseConfig(vars);
     checkAllParametersConsumed("HTTPStatusAction", vars);
     auto ret = dnsdist::actions::getHTTPStatusAction(status, PacketBuffer(body.begin(), body.end()), contentType ? *contentType : "", responseConfig);
@@ -391,7 +391,7 @@ void setupLuaActions(LuaContext& luaCtx)
   });
 #endif /* defined(HAVE_LMDB) || defined(HAVE_CDB) */
 
-  luaCtx.writeFunction("NegativeAndSOAAction", [](bool nxd, const std::string& zone, uint32_t ttl, const std::string& mname, const std::string& rname, uint32_t serial, uint32_t refresh, uint32_t retry, uint32_t expire, uint32_t minimum, boost::optional<responseParams_t> vars) {
+  luaCtx.writeFunction("NegativeAndSOAAction", [](bool nxd, const std::string& zone, uint32_t ttl, const std::string& mname, const std::string& rname, uint32_t serial, uint32_t refresh, uint32_t retry, uint32_t expire, uint32_t minimum, std::optional<responseParams_t> vars) {
     bool soaInAuthoritySection = false;
     getOptionalValue<bool>(vars, "soaInAuthoritySection", soaInAuthoritySection);
     auto responseConfig = parseResponseConfig(vars);
index dee2904ef38ccaf8b73507ea2620f3a0813d4588..bd430542b8cb29fd850a8d613fe3819505ee3f3d 100644 (file)
@@ -35,14 +35,14 @@ void setupLuaBindingsDNSCrypt([[maybe_unused]] LuaContext& luaCtx, [[maybe_unuse
   luaCtx.registerFunction("markInactive", &DNSCryptContext::markInactive);
   luaCtx.registerFunction("reloadCertificates", &DNSCryptContext::reloadCertificates);
   luaCtx.registerFunction("removeInactiveCertificate", &DNSCryptContext::removeInactiveCertificate);
-  luaCtx.registerFunction<void (std::shared_ptr<DNSCryptContext>::*)(const std::string& certFile, const std::string& keyFile, boost::optional<bool> active)>("loadNewCertificate", [](std::shared_ptr<DNSCryptContext>& ctx, const std::string& certFile, const std::string& keyFile, boost::optional<bool> active) {
+  luaCtx.registerFunction<void (std::shared_ptr<DNSCryptContext>::*)(const std::string& certFile, const std::string& keyFile, std::optional<bool> active)>("loadNewCertificate", [](std::shared_ptr<DNSCryptContext>& ctx, const std::string& certFile, const std::string& keyFile, std::optional<bool> active) {
     if (ctx == nullptr) {
       throw std::runtime_error("DNSCryptContext::loadNewCertificate() called on a nil value");
     }
 
     ctx->loadNewCertificate(certFile, keyFile, active ? *active : true);
   });
-  luaCtx.registerFunction<void (std::shared_ptr<DNSCryptContext>::*)(const DNSCryptCert& newCert, const DNSCryptPrivateKey& newKey, boost::optional<bool> active)>("addNewCertificate", [](std::shared_ptr<DNSCryptContext>& ctx, const DNSCryptCert& newCert, const DNSCryptPrivateKey& newKey, boost::optional<bool> active) {
+  luaCtx.registerFunction<void (std::shared_ptr<DNSCryptContext>::*)(const DNSCryptCert& newCert, const DNSCryptPrivateKey& newKey, std::optional<bool> active)>("addNewCertificate", [](std::shared_ptr<DNSCryptContext>& ctx, const DNSCryptCert& newCert, const DNSCryptPrivateKey& newKey, std::optional<bool> active) {
     if (ctx == nullptr) {
       throw std::runtime_error("DNSCryptContext::addNewCertificate() called on a nil value");
     }
@@ -62,12 +62,12 @@ void setupLuaBindingsDNSCrypt([[maybe_unused]] LuaContext& luaCtx, [[maybe_unuse
     return result;
   });
 
-  luaCtx.registerFunction<boost::optional<std::shared_ptr<DNSCryptCertificatePair>> (std::shared_ptr<DNSCryptContext>::*)(size_t idx)>("getCertificatePair", [](std::shared_ptr<DNSCryptContext>& ctx, size_t idx) {
+  luaCtx.registerFunction<std::optional<std::shared_ptr<DNSCryptCertificatePair>> (std::shared_ptr<DNSCryptContext>::*)(size_t idx)>("getCertificatePair", [](std::shared_ptr<DNSCryptContext>& ctx, size_t idx) {
     if (ctx == nullptr) {
       throw std::runtime_error("DNSCryptContext::getCertificatePair() called on a nil value");
     }
 
-    boost::optional<std::shared_ptr<DNSCryptCertificatePair>> result{boost::none};
+    std::optional<std::shared_ptr<DNSCryptCertificatePair>> result{std::nullopt};
     auto pairs = ctx->getCertificates();
     if (idx < pairs.size()) {
       result = pairs.at(idx);
@@ -108,7 +108,7 @@ void setupLuaBindingsDNSCrypt([[maybe_unused]] LuaContext& luaCtx, [[maybe_unuse
     return ret.str();
   });
 
-  luaCtx.registerFunction<bool (DNSCryptContext::*)(const std::string& providerPrivateKeyFile, uint32_t serial, time_t begin, time_t end, boost::optional<DNSCryptExchangeVersion> version)>("generateAndLoadInMemoryCertificate", [](DNSCryptContext& ctx, const std::string& providerPrivateKeyFile, uint32_t serial, time_t begin, time_t end, boost::optional<DNSCryptExchangeVersion> version) -> bool {
+  luaCtx.registerFunction<bool (DNSCryptContext::*)(const std::string& providerPrivateKeyFile, uint32_t serial, time_t begin, time_t end, std::optional<DNSCryptExchangeVersion> version)>("generateAndLoadInMemoryCertificate", [](DNSCryptContext& ctx, const std::string& providerPrivateKeyFile, uint32_t serial, time_t begin, time_t end, std::optional<DNSCryptExchangeVersion> version) -> bool {
     DNSCryptPrivateKey privateKey;
     DNSCryptCert cert;
 
@@ -168,7 +168,7 @@ void setupLuaBindingsDNSCrypt([[maybe_unused]] LuaContext& luaCtx, [[maybe_unuse
   luaCtx.registerFunction<uint32_t (DNSCryptCert::*)() const>("getTSStart", [](const DNSCryptCert& cert) { return ntohl(cert.getTSStart()); });
   luaCtx.registerFunction<uint32_t (DNSCryptCert::*)() const>("getTSEnd", [](const DNSCryptCert& cert) { return ntohl(cert.getTSEnd()); });
 
-  luaCtx.writeFunction("generateDNSCryptCertificate", [client](const std::string& providerPrivateKeyFile, const std::string& certificateFile, const std::string& privateKeyFile, uint32_t serial, time_t begin, time_t end, boost::optional<DNSCryptExchangeVersion> version) {
+  luaCtx.writeFunction("generateDNSCryptCertificate", [client](const std::string& providerPrivateKeyFile, const std::string& certificateFile, const std::string& privateKeyFile, uint32_t serial, time_t begin, time_t end, std::optional<DNSCryptExchangeVersion> version) {
     setLuaNoSideEffect();
     if (client) {
       return;
index 3d0754e263f8901490d1b06a98ec36c8b99bb202..1d64b84b4e297a18e13adc7bfb0c1477297c3e0d 100644 (file)
@@ -107,12 +107,12 @@ void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
     "ecsOverride", [](const DNSQuestion& dnsQuestion) -> bool { return dnsQuestion.ecsOverride; }, [](DNSQuestion& dnsQuestion, bool ecsOverride) { dnsQuestion.ecsOverride = ecsOverride; });
   luaCtx.registerMember<uint16_t(DNSQuestion::*)>(
     "ecsPrefixLength", [](const DNSQuestion& dnsQuestion) -> uint16_t { return dnsQuestion.ecsPrefixLength; }, [](DNSQuestion& dnsQuestion, uint16_t newPrefixLength) { dnsQuestion.ecsPrefixLength = newPrefixLength; });
-  luaCtx.registerMember<boost::optional<uint32_t>(DNSQuestion::*)>(
+  luaCtx.registerMember<std::optional<uint32_t>(DNSQuestion::*)>(
     "tempFailureTTL",
-    [](const DNSQuestion& dnsQuestion) -> boost::optional<uint32_t> {
+    [](const DNSQuestion& dnsQuestion) -> std::optional<uint32_t> {
       return dnsQuestion.ids.tempFailureTTL;
     },
-    [](DNSQuestion& dnsQuestion, boost::optional<uint32_t> newValue) {
+    [](DNSQuestion& dnsQuestion, std::optional<uint32_t> newValue) {
       dnsQuestion.ids.tempFailureTTL = newValue;
     });
   luaCtx.registerMember<std::string(DNSQuestion::*)>(
@@ -204,7 +204,7 @@ void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
     return dnsQuestion.ids.queryRealTime.udiff();
   });
 
-  luaCtx.registerFunction<void (DNSQuestion::*)(std::string)>("sendTrap", []([[maybe_unused]] const DNSQuestion& dnsQuestion, [[maybe_unused]] boost::optional<std::string> reason) {
+  luaCtx.registerFunction<void (DNSQuestion::*)(std::string)>("sendTrap", []([[maybe_unused]] const DNSQuestion& dnsQuestion, [[maybe_unused]] std::optional<std::string> reason) {
 #ifdef HAVE_NET_SNMP
     if (g_snmpAgent != nullptr && dnsdist::configuration::getImmutableConfiguration().d_snmpTrapsEnabled) {
       g_snmpAgent->sendDNSTrap(dnsQuestion, reason ? *reason : "");
@@ -290,7 +290,7 @@ void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
     return true;
   });
 
-  luaCtx.registerFunction<void (DNSQuestion::*)(const boost::variant<LuaArray<ComboAddress>, LuaArray<std::string>>&, boost::optional<uint16_t>)>("spoof", [](DNSQuestion& dnsQuestion, const boost::variant<LuaArray<ComboAddress>, LuaArray<std::string>>& response, boost::optional<uint16_t> typeForAny) {
+  luaCtx.registerFunction<void (DNSQuestion::*)(const boost::variant<LuaArray<ComboAddress>, LuaArray<std::string>>&, std::optional<uint16_t>)>("spoof", [](DNSQuestion& dnsQuestion, const boost::variant<LuaArray<ComboAddress>, LuaArray<std::string>>& response, std::optional<uint16_t> typeForAny) {
     dnsdist::ResponseConfig responseConfig;
     if (response.type() == typeid(LuaArray<ComboAddress>)) {
       std::vector<ComboAddress> data;
@@ -318,7 +318,7 @@ void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
     setEDNSOption(dnsQuestion, code, data);
   });
 
-  luaCtx.registerFunction<void (DNSQuestion::*)(uint16_t infoCode, const boost::optional<std::string>& extraText)>("setExtendedDNSError", [](DNSQuestion& dnsQuestion, uint16_t infoCode, const boost::optional<std::string>& extraText) {
+  luaCtx.registerFunction<void (DNSQuestion::*)(uint16_t infoCode, const std::optional<std::string>& extraText)>("setExtendedDNSError", [](DNSQuestion& dnsQuestion, uint16_t infoCode, const std::optional<std::string>& extraText) {
     EDNSExtendedError ede;
     ede.infoCode = infoCode;
     if (extraText) {
@@ -572,7 +572,7 @@ void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
     return {};
   });
 
-  luaCtx.registerFunction<void (DNSResponse::*)(std::string)>("sendTrap", []([[maybe_unused]] const DNSResponse& dnsResponse, [[maybe_unused]] boost::optional<std::string> reason) {
+  luaCtx.registerFunction<void (DNSResponse::*)(std::string)>("sendTrap", []([[maybe_unused]] const DNSResponse& dnsResponse, [[maybe_unused]] std::optional<std::string> reason) {
 #ifdef HAVE_NET_SNMP
     if (g_snmpAgent != nullptr && dnsdist::configuration::getImmutableConfiguration().d_snmpTrapsEnabled) {
       g_snmpAgent->sendDNSTrap(dnsResponse, reason ? *reason : "");
@@ -653,7 +653,7 @@ void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
     return LuaAssociativeTable<std::string>();
   });
 
-  luaCtx.registerFunction<void (DNSQuestion::*)(uint64_t statusCode, const std::string& body, const boost::optional<std::string> contentType)>("setHTTPResponse", [](DNSQuestion& dnsQuestion, uint64_t statusCode, const std::string& body, [[maybe_unused]] const boost::optional<std::string>& contentType) {
+  luaCtx.registerFunction<void (DNSQuestion::*)(uint64_t statusCode, const std::string& body, const std::optional<std::string> contentType)>("setHTTPResponse", [](DNSQuestion& dnsQuestion, uint64_t statusCode, const std::string& body, [[maybe_unused]] const std::optional<std::string>& contentType) {
     if (dnsQuestion.ids.du == nullptr && dnsQuestion.ids.doh3u == nullptr) {
       return;
     }
@@ -682,7 +682,7 @@ void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
     return setNegativeAndAdditionalSOA(dnsQuestion, nxd, DNSName(zone), ttl, DNSName(mname), DNSName(rname), serial, refresh, retry, expire, minimum, false);
   });
 
-  luaCtx.registerFunction<void (DNSResponse::*)(uint16_t infoCode, const boost::optional<std::string>& extraText)>("setExtendedDNSError", [](DNSResponse& dnsResponse, uint16_t infoCode, const boost::optional<std::string>& extraText) {
+  luaCtx.registerFunction<void (DNSResponse::*)(uint16_t infoCode, const std::optional<std::string>& extraText)>("setExtendedDNSError", [](DNSResponse& dnsResponse, uint16_t infoCode, const std::optional<std::string>& extraText) {
     EDNSExtendedError ede;
     ede.infoCode = infoCode;
     if (extraText) {
@@ -716,8 +716,8 @@ void setupLuaBindingsDNSQuestion([[maybe_unused]] LuaContext& luaCtx)
     return dnsdist::queueQueryResumptionEvent(std::move(query));
   });
 
-  luaCtx.registerFunction<boost::optional<std::shared_ptr<DownstreamState>> (DNSResponse::*)(void) const>("getSelectedBackend", [](const DNSResponse& dnsResponse) {
-    return dnsResponse.d_downstream ? dnsResponse.d_downstream : boost::optional<std::shared_ptr<DownstreamState>>();
+  luaCtx.registerFunction<std::optional<std::shared_ptr<DownstreamState>> (DNSResponse::*)(void) const>("getSelectedBackend", [](const DNSResponse& dnsResponse) {
+    return dnsResponse.d_downstream ? dnsResponse.d_downstream : std::optional<std::shared_ptr<DownstreamState>>();
   });
 
   luaCtx.registerFunction<bool (DNSResponse::*)()>("getStaleCacheHit", [](DNSResponse& dnsResponse) {
index 702acfb1ad3bc09b6f64da716ce0aaab70af012a..88aa008a05380b39cb4d375a73505d135490fde9 100644 (file)
@@ -26,7 +26,7 @@
 void setupLuaBindingsKVS([[maybe_unused]] LuaContext& luaCtx, [[maybe_unused]] bool client)
 {
 #ifdef HAVE_LMDB
-  luaCtx.writeFunction("newLMDBKVStore", [client](const std::string& fname, const std::string& dbName, boost::optional<bool> noLock) {
+  luaCtx.writeFunction("newLMDBKVStore", [client](const std::string& fname, const std::string& dbName, std::optional<bool> noLock) {
     if (client) {
       return std::shared_ptr<KeyValueStore>(nullptr);
     }
@@ -45,20 +45,20 @@ void setupLuaBindingsKVS([[maybe_unused]] LuaContext& luaCtx, [[maybe_unused]] b
 
 #if defined(HAVE_LMDB) || defined(HAVE_CDB)
   /* Key Value Store objects */
-  luaCtx.writeFunction("KeyValueLookupKeySourceIP", [](boost::optional<uint8_t> v4Mask, boost::optional<uint8_t> v6Mask, boost::optional<bool> includePort) {
+  luaCtx.writeFunction("KeyValueLookupKeySourceIP", [](std::optional<uint8_t> v4Mask, std::optional<uint8_t> v6Mask, std::optional<bool> includePort) {
     return std::shared_ptr<KeyValueLookupKey>(new KeyValueLookupKeySourceIP(v4Mask ? *v4Mask : 32, v6Mask ? *v6Mask : 128, includePort ? *includePort : false));
   });
-  luaCtx.writeFunction("KeyValueLookupKeyQName", [](boost::optional<bool> wireFormat) {
+  luaCtx.writeFunction("KeyValueLookupKeyQName", [](std::optional<bool> wireFormat) {
     return std::shared_ptr<KeyValueLookupKey>(new KeyValueLookupKeyQName(wireFormat ? *wireFormat : true));
   });
-  luaCtx.writeFunction("KeyValueLookupKeySuffix", [](boost::optional<size_t> minLabels, boost::optional<bool> wireFormat) {
+  luaCtx.writeFunction("KeyValueLookupKeySuffix", [](std::optional<size_t> minLabels, std::optional<bool> wireFormat) {
     return std::shared_ptr<KeyValueLookupKey>(new KeyValueLookupKeySuffix(minLabels ? *minLabels : 0, wireFormat ? *wireFormat : true));
   });
   luaCtx.writeFunction("KeyValueLookupKeyTag", [](const std::string& tag) {
     return std::shared_ptr<KeyValueLookupKey>(new KeyValueLookupKeyTag(tag));
   });
 
-  luaCtx.registerFunction<std::string(std::shared_ptr<KeyValueStore>::*)(const boost::variant<ComboAddress, DNSName, std::string>, boost::optional<bool> wireFormat)>("lookup", [](std::shared_ptr<KeyValueStore>& kvs, const boost::variant<ComboAddress, DNSName, std::string> keyVar, boost::optional<bool> wireFormat) {
+  luaCtx.registerFunction<std::string(std::shared_ptr<KeyValueStore>::*)(const boost::variant<ComboAddress, DNSName, std::string>, std::optional<bool> wireFormat)>("lookup", [](std::shared_ptr<KeyValueStore>& kvs, const boost::variant<ComboAddress, DNSName, std::string> keyVar, std::optional<bool> wireFormat) {
     std::string result;
     if (!kvs) {
       return result;
@@ -90,7 +90,7 @@ void setupLuaBindingsKVS([[maybe_unused]] LuaContext& luaCtx, [[maybe_unused]] b
     return result;
   });
 
-  luaCtx.registerFunction<std::string(std::shared_ptr<KeyValueStore>::*)(const DNSName&, boost::optional<size_t> minLabels, boost::optional<bool> wireFormat)>("lookupSuffix", [](std::shared_ptr<KeyValueStore>& kvs, const DNSName& dn, boost::optional<size_t> minLabels, boost::optional<bool> wireFormat) {
+  luaCtx.registerFunction<std::string(std::shared_ptr<KeyValueStore>::*)(const DNSName&, std::optional<size_t> minLabels, std::optional<bool> wireFormat)>("lookupSuffix", [](std::shared_ptr<KeyValueStore>& kvs, const DNSName& dn, std::optional<size_t> minLabels, std::optional<bool> wireFormat) {
     std::string result;
     if (!kvs) {
       return result;
index 6a3fb0059a54085ff2d97b6224eb9544a5fd6d95..2ccfa5b01226d333385653f35cb21dffe8639a38 100644 (file)
@@ -31,7 +31,7 @@
 void setupLuaBindingsPacketCache(LuaContext& luaCtx, bool client)
 {
   /* PacketCache */
-  luaCtx.writeFunction("newPacketCache", [client](size_t maxEntries, boost::optional<LuaAssociativeTable<boost::variant<bool, size_t, LuaArray<uint16_t>>>> vars) {
+  luaCtx.writeFunction("newPacketCache", [client](size_t maxEntries, std::optional<LuaAssociativeTable<boost::variant<bool, size_t, LuaArray<uint16_t>>>> vars) {
 
     DNSDistPacketCache::CacheSettings settings {
       .d_maxEntries = maxEntries,
@@ -130,11 +130,11 @@ void setupLuaBindingsPacketCache(LuaContext& luaCtx, bool client)
       }
       return static_cast<size_t>(0);
     });
-  luaCtx.registerFunction<void(std::shared_ptr<DNSDistPacketCache>::*)(const boost::variant<DNSName, string>& dname, boost::optional<uint16_t> qtype, boost::optional<bool> suffixMatch)>("expungeByName", [](
+  luaCtx.registerFunction<void(std::shared_ptr<DNSDistPacketCache>::*)(const boost::variant<DNSName, string>& dname, std::optional<uint16_t> qtype, std::optional<bool> suffixMatch)>("expungeByName", [](
               std::shared_ptr<DNSDistPacketCache>& cache,
               const boost::variant<DNSName, string>& dname,
-              boost::optional<uint16_t> qtype,
-              boost::optional<bool> suffixMatch) {
+              std::optional<uint16_t> qtype,
+              std::optional<bool> suffixMatch) {
                 DNSName qname;
                 if (dname.type() == typeid(DNSName)) {
                   qname = boost::get<DNSName>(dname);
@@ -208,7 +208,7 @@ void setupLuaBindingsPacketCache(LuaContext& luaCtx, bool client)
       return results;
     });
 
-  luaCtx.registerFunction<void(std::shared_ptr<DNSDistPacketCache>::*)(const std::string& fname, boost::optional<bool> rawResponse)const>("dump", [](const std::shared_ptr<DNSDistPacketCache>& cache, const std::string& fname, boost::optional<bool> rawResponse) {
+  luaCtx.registerFunction<void(std::shared_ptr<DNSDistPacketCache>::*)(const std::string& fname, std::optional<bool> rawResponse)const>("dump", [](const std::shared_ptr<DNSDistPacketCache>& cache, const std::string& fname, std::optional<bool> rawResponse) {
       if (cache) {
 
         int fd = open(fname.c_str(), O_CREAT | O_EXCL | O_WRONLY, 0660);
index 49f99ec366bbaa8e18f3a619fb895e15e35bb3a7..f7c654b97fd894b6ef9f3b02e7a3d6e779400029 100644 (file)
@@ -33,7 +33,7 @@
 #include "remote_logger_pool.hh"
 
 #ifdef HAVE_FSTRM
-static void parseFSTRMOptions(boost::optional<LuaAssociativeTable<unsigned int>>& params, LuaAssociativeTable<unsigned int>& options)
+static void parseFSTRMOptions(std::optional<LuaAssociativeTable<unsigned int>>& params, LuaAssociativeTable<unsigned int>& options)
 {
   if (!params) {
     return;
@@ -72,8 +72,8 @@ void setupLuaBindingsProtoBuf(LuaContext& luaCtx, bool client, bool configCheck)
     }
   });
 
-  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(boost::optional<time_t> sec, boost::optional<uint32_t> uSec)>("setProtobufResponseType",
-                                                                                                                         [](DNSDistProtoBufMessage& message, boost::optional<time_t> sec, boost::optional<uint32_t> uSec) {
+  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(std::optional<time_t> sec, std::optional<uint32_t> uSec)>("setProtobufResponseType",
+                                                                                                                         [](DNSDistProtoBufMessage& message, std::optional<time_t> sec, std::optional<uint32_t> uSec) {
                                                                                                                            message.setType(pdns::ProtoZero::Message::MessageType::DNSResponseType);
                                                                                                                            message.setQueryTime(sec ? *sec : 0, uSec ? *uSec : 0);
                                                                                                                          });
@@ -88,25 +88,25 @@ void setupLuaBindingsProtoBuf(LuaContext& luaCtx, bool client, bool configCheck)
   luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(time_t, uint32_t)>("setQueryTime", [](DNSDistProtoBufMessage& message, time_t sec, uint32_t usec) { message.setQueryTime(sec, usec); });
   luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(uint8_t)>("setResponseCode", [](DNSDistProtoBufMessage& message, uint8_t rcode) { message.setResponseCode(rcode); });
 
-  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(const ComboAddress&, boost::optional<uint16_t>)>("setRequestor", [](DNSDistProtoBufMessage& message, const ComboAddress& addr, boost::optional<uint16_t> port) {
+  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(const ComboAddress&, std::optional<uint16_t>)>("setRequestor", [](DNSDistProtoBufMessage& message, const ComboAddress& addr, std::optional<uint16_t> port) {
     message.setRequestor(addr);
     if (port) {
       message.setRequestorPort(*port);
     }
   });
-  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(const std::string&, boost::optional<uint16_t>)>("setRequestorFromString", [](DNSDistProtoBufMessage& message, const std::string& str, boost::optional<uint16_t> port) {
+  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(const std::string&, std::optional<uint16_t>)>("setRequestorFromString", [](DNSDistProtoBufMessage& message, const std::string& str, std::optional<uint16_t> port) {
     message.setRequestor(ComboAddress(str));
     if (port) {
       message.setRequestorPort(*port);
     }
   });
-  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(const ComboAddress&, boost::optional<uint16_t>)>("setResponder", [](DNSDistProtoBufMessage& message, const ComboAddress& addr, boost::optional<uint16_t> port) {
+  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(const ComboAddress&, std::optional<uint16_t>)>("setResponder", [](DNSDistProtoBufMessage& message, const ComboAddress& addr, std::optional<uint16_t> port) {
     message.setResponder(addr);
     if (port) {
       message.setResponderPort(*port);
     }
   });
-  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(const std::string&, boost::optional<uint16_t>)>("setResponderFromString", [](DNSDistProtoBufMessage& message, const std::string& str, boost::optional<uint16_t> port) {
+  luaCtx.registerFunction<void (DNSDistProtoBufMessage::*)(const std::string&, std::optional<uint16_t>)>("setResponderFromString", [](DNSDistProtoBufMessage& message, const std::string& str, std::optional<uint16_t> port) {
     message.setResponder(ComboAddress(str));
     if (port) {
       message.setResponderPort(*port);
@@ -121,7 +121,7 @@ void setupLuaBindingsProtoBuf(LuaContext& luaCtx, bool client, bool configCheck)
   });
 
   /* RemoteLogger */
-  luaCtx.writeFunction("newRemoteLogger", [client, configCheck](const std::string& remote, boost::optional<uint16_t> timeout, boost::optional<uint64_t> maxQueuedEntries, boost::optional<uint8_t> reconnectWaitTime, boost::optional<uint64_t> connectionCount) {
+  luaCtx.writeFunction("newRemoteLogger", [client, configCheck](const std::string& remote, std::optional<uint16_t> timeout, std::optional<uint64_t> maxQueuedEntries, std::optional<uint8_t> reconnectWaitTime, std::optional<uint64_t> connectionCount) {
     if (client || configCheck) {
       return std::shared_ptr<RemoteLoggerInterface>(nullptr);
     }
@@ -138,7 +138,7 @@ void setupLuaBindingsProtoBuf(LuaContext& luaCtx, bool client, bool configCheck)
     return std::shared_ptr<RemoteLoggerInterface>(new RemoteLogger(ComboAddress(remote), timeout ? *timeout : 2, maxQueuedEntries ? (*maxQueuedEntries * 100) : 10000, reconnectWaitTime ? *reconnectWaitTime : 1, client));
   });
 
-  luaCtx.writeFunction("newFrameStreamUnixLogger", [client, configCheck]([[maybe_unused]] const std::string& address, [[maybe_unused]] boost::optional<LuaAssociativeTable<unsigned int>> params) {
+  luaCtx.writeFunction("newFrameStreamUnixLogger", [client, configCheck]([[maybe_unused]] const std::string& address, [[maybe_unused]] std::optional<LuaAssociativeTable<unsigned int>> params) {
 #ifdef HAVE_FSTRM
     if (client || configCheck) {
       return std::shared_ptr<RemoteLoggerInterface>(nullptr);
@@ -167,7 +167,7 @@ void setupLuaBindingsProtoBuf(LuaContext& luaCtx, bool client, bool configCheck)
 #endif /* HAVE_FSTRM */
   });
 
-  luaCtx.writeFunction("newFrameStreamTcpLogger", [client, configCheck]([[maybe_unused]] const std::string& address, [[maybe_unused]] boost::optional<LuaAssociativeTable<unsigned int>> params) {
+  luaCtx.writeFunction("newFrameStreamTcpLogger", [client, configCheck]([[maybe_unused]] const std::string& address, [[maybe_unused]] std::optional<LuaAssociativeTable<unsigned int>> params) {
 #if defined(HAVE_FSTRM) && defined(HAVE_FSTRM_TCP_WRITER_INIT)
     if (client || configCheck) {
       return std::shared_ptr<RemoteLoggerInterface>(nullptr);
index 48a82303f51ef2a1b036dd6ac868ecbd0929d822..279135f4b52a0c843778b9755fb4e58aa54cb7fc 100644 (file)
@@ -255,7 +255,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     }
     return "lazy";
   });
-  luaCtx.registerFunction<void (std::shared_ptr<DownstreamState>::*)(boost::optional<bool> newStatus)>("setAuto", [](std::shared_ptr<DownstreamState>& state, boost::optional<bool> newStatus) {
+  luaCtx.registerFunction<void (std::shared_ptr<DownstreamState>::*)(std::optional<bool> newStatus)>("setAuto", [](std::shared_ptr<DownstreamState>& state, std::optional<bool> newStatus) {
     if (!state) {
       return;
     }
@@ -264,7 +264,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     }
     state->setAuto();
   });
-  luaCtx.registerFunction<void (std::shared_ptr<DownstreamState>::*)(boost::optional<bool> newStatus)>("setActiveAuto", [](std::shared_ptr<DownstreamState>& state, boost::optional<bool> newStatus) {
+  luaCtx.registerFunction<void (std::shared_ptr<DownstreamState>::*)(std::optional<bool> newStatus)>("setActiveAuto", [](std::shared_ptr<DownstreamState>& state, std::optional<bool> newStatus) {
     if (!state) {
       return;
     }
@@ -273,7 +273,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     }
     state->setActiveAuto();
   });
-  luaCtx.registerFunction<void (std::shared_ptr<DownstreamState>::*)(boost::optional<bool> newStatus)>("setLazyAuto", [](std::shared_ptr<DownstreamState>& state, boost::optional<bool> newStatus) {
+  luaCtx.registerFunction<void (std::shared_ptr<DownstreamState>::*)(std::optional<bool> newStatus)>("setLazyAuto", [](std::shared_ptr<DownstreamState>& state, std::optional<bool> newStatus) {
     if (!state) {
       return;
     }
@@ -282,7 +282,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     }
     state->setLazyAuto();
   });
-  luaCtx.registerFunction<void (std::shared_ptr<DownstreamState>::*)(boost::optional<LuaAssociativeTable<boost::variant<size_t>>>)>("setHealthCheckParams", [](std::shared_ptr<DownstreamState>& state, boost::optional<LuaAssociativeTable<boost::variant<size_t>>> vars) {
+  luaCtx.registerFunction<void (std::shared_ptr<DownstreamState>::*)(std::optional<LuaAssociativeTable<boost::variant<size_t>>>)>("setHealthCheckParams", [](std::shared_ptr<DownstreamState>& state, std::optional<LuaAssociativeTable<boost::variant<size_t>>> vars) {
     if (!state) {
       return;
     }
@@ -443,7 +443,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
 #ifndef DISABLE_COMBO_ADDR_BINDINGS
   /* ComboAddress */
   luaCtx.writeFunction("newCA", [](const std::string& name) { return ComboAddress(name); });
-  luaCtx.writeFunction("newCAFromRaw", [](const std::string& raw, boost::optional<uint16_t> port) {
+  luaCtx.writeFunction("newCAFromRaw", [](const std::string& raw, std::optional<uint16_t> port) {
     if (raw.size() == 4) {
       sockaddr_in sin4{};
       memset(&sin4, 0, sizeof(sin4));
@@ -574,8 +574,8 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
   // clang-format off
   luaCtx.registerFunction("check", (bool (SuffixMatchNode::*)(const DNSName&) const) &SuffixMatchNode::check);
   // clang-format on
-  luaCtx.registerFunction<boost::optional<DNSName> (SuffixMatchNode::*)(const DNSName&) const>("getBestMatch", [](const SuffixMatchNode& smn, const DNSName& needle) {
-    boost::optional<DNSName> result{boost::none};
+  luaCtx.registerFunction<std::optional<DNSName> (SuffixMatchNode::*)(const DNSName&) const>("getBestMatch", [](const SuffixMatchNode& smn, const DNSName& needle) {
+    std::optional<DNSName> result{std::nullopt};
     auto res = smn.getBestMatch(needle);
     if (res) {
       result = *res;
@@ -586,7 +586,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
 
 #ifndef DISABLE_NETMASK_BINDINGS
   /* Netmask */
-  luaCtx.writeFunction("newNetmask", [](boost::variant<std::string, ComboAddress> addrOrStr, boost::optional<uint8_t> bits) {
+  luaCtx.writeFunction("newNetmask", [](boost::variant<std::string, ComboAddress> addrOrStr, std::optional<uint8_t> bits) {
     if (addrOrStr.type() == typeid(ComboAddress)) {
       const auto& comboAddr = boost::get<ComboAddress>(addrOrStr);
       if (bits) {
@@ -756,7 +756,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     return std::make_shared<BPFFilter>(mapsConfig, format, external);
   });
 
-  luaCtx.registerFunction<void (std::shared_ptr<BPFFilter>::*)(const ComboAddress& addr, boost::optional<uint32_t> action)>("block", [](const std::shared_ptr<BPFFilter>& bpf, const ComboAddress& addr, boost::optional<uint32_t> action) {
+  luaCtx.registerFunction<void (std::shared_ptr<BPFFilter>::*)(const ComboAddress& addr, std::optional<uint32_t> action)>("block", [](const std::shared_ptr<BPFFilter>& bpf, const ComboAddress& addr, std::optional<uint32_t> action) {
     if (bpf) {
       if (!action) {
         return bpf->block(addr, BPFFilter::MatchAction::Drop);
@@ -779,7 +779,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
       return bpf->block(addr, match);
     }
   });
-  luaCtx.registerFunction<void (std::shared_ptr<BPFFilter>::*)(const string& range, uint32_t action, boost::optional<bool> force)>("addRangeRule", [](const std::shared_ptr<BPFFilter>& bpf, const string& range, uint32_t action, boost::optional<bool> force) {
+  luaCtx.registerFunction<void (std::shared_ptr<BPFFilter>::*)(const string& range, uint32_t action, std::optional<bool> force)>("addRangeRule", [](const std::shared_ptr<BPFFilter>& bpf, const string& range, uint32_t action, std::optional<bool> force) {
     if (!bpf) {
       return;
     }
@@ -799,7 +799,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     }
     return bpf->addRangeRule(Netmask(range), force ? *force : false, match);
   });
-  luaCtx.registerFunction<void (std::shared_ptr<BPFFilter>::*)(const DNSName& qname, boost::optional<uint16_t> qtype, boost::optional<uint32_t> action)>("blockQName", [](const std::shared_ptr<BPFFilter>& bpf, const DNSName& qname, boost::optional<uint16_t> qtype, boost::optional<uint32_t> action) {
+  luaCtx.registerFunction<void (std::shared_ptr<BPFFilter>::*)(const DNSName& qname, std::optional<uint16_t> qtype, std::optional<uint32_t> action)>("blockQName", [](const std::shared_ptr<BPFFilter>& bpf, const DNSName& qname, std::optional<uint16_t> qtype, std::optional<uint32_t> action) {
     if (bpf) {
       if (!action) {
         return bpf->block(qname, BPFFilter::MatchAction::Drop, qtype ? *qtype : 65535);
@@ -851,7 +851,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     }
     return res;
   });
-  luaCtx.registerFunction<void (std::shared_ptr<BPFFilter>::*)(const DNSName& qname, boost::optional<uint16_t> qtype)>("unblockQName", [](const std::shared_ptr<BPFFilter>& bpf, const DNSName& qname, boost::optional<uint16_t> qtype) {
+  luaCtx.registerFunction<void (std::shared_ptr<BPFFilter>::*)(const DNSName& qname, std::optional<uint16_t> qtype)>("unblockQName", [](const std::shared_ptr<BPFFilter>& bpf, const DNSName& qname, std::optional<uint16_t> qtype) {
     if (bpf) {
       return bpf->unblock(qname, qtype ? *qtype : 65535);
     }
@@ -907,7 +907,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     return std::make_shared<DynBPFFilter>(bpf);
   });
 
-  luaCtx.registerFunction<void (std::shared_ptr<DynBPFFilter>::*)(const ComboAddress& addr, boost::optional<int> seconds)>("block", [](const std::shared_ptr<DynBPFFilter>& dbpf, const ComboAddress& addr, boost::optional<int> seconds) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBPFFilter>::*)(const ComboAddress& addr, std::optional<int> seconds)>("block", [](const std::shared_ptr<DynBPFFilter>& dbpf, const ComboAddress& addr, std::optional<int> seconds) {
     if (dbpf) {
       timespec until{};
       clock_gettime(CLOCK_MONOTONIC, &until);
@@ -1009,9 +1009,9 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     return values;
   });
 
-  luaCtx.writeFunction("newDOHResponseMapEntry", [](const std::string& regex, uint64_t status, const std::string& content, boost::optional<LuaAssociativeTable<std::string>> customHeaders) {
+  luaCtx.writeFunction("newDOHResponseMapEntry", [](const std::string& regex, uint64_t status, const std::string& content, std::optional<LuaAssociativeTable<std::string>> customHeaders) {
     checkParameterBound("newDOHResponseMapEntry", status, std::numeric_limits<uint16_t>::max());
-    boost::optional<LuaAssociativeTable<std::string>> headers{boost::none};
+    std::optional<LuaAssociativeTable<std::string>> headers{std::nullopt};
     if (customHeaders) {
       headers = LuaAssociativeTable<std::string>();
       for (const auto& header : *customHeaders) {
@@ -1021,7 +1021,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
     return std::make_shared<DOHResponseMapEntry>(regex, status, PacketBuffer(content.begin(), content.end()), headers);
   });
 
-  luaCtx.writeFunction("newSVCRecordParameters", [](uint64_t priority, const std::string& target, boost::optional<svcParamsLua_t> additionalParameters) {
+  luaCtx.writeFunction("newSVCRecordParameters", [](uint64_t priority, const std::string& target, std::optional<svcParamsLua_t> additionalParameters) {
     checkParameterBound("newSVCRecordParameters", priority, std::numeric_limits<uint16_t>::max());
     SVCRecordParameters parameters;
     if (additionalParameters) {
index c1b174ddb124e7d12745549b608387b705ce45df..cfd51b39ce5001d11d1d4cda406a24468b7629e7 100644 (file)
@@ -233,7 +233,7 @@ uint16_t dnsdist_ffi_dnsquestion_get_ecs_prefix_length(const dnsdist_ffi_dnsques
 
 bool dnsdist_ffi_dnsquestion_is_temp_failure_ttl_set(const dnsdist_ffi_dnsquestion_t* dq)
 {
-  return dq->dq->ids.tempFailureTTL != boost::none;
+  return dq->dq->ids.tempFailureTTL != std::nullopt;
 }
 
 uint32_t dnsdist_ffi_dnsquestion_get_temp_failure_ttl(const dnsdist_ffi_dnsquestion_t* dq)
@@ -583,7 +583,7 @@ void dnsdist_ffi_dnsquestion_set_temp_failure_ttl(dnsdist_ffi_dnsquestion_t* dq,
 
 void dnsdist_ffi_dnsquestion_unset_temp_failure_ttl(dnsdist_ffi_dnsquestion_t* dq)
 {
-  dq->dq->ids.tempFailureTTL = boost::none;
+  dq->dq->ids.tempFailureTTL = std::nullopt;
 }
 
 void dnsdist_ffi_dnsquestion_set_tag(dnsdist_ffi_dnsquestion_t* dq, const char* label, const char* value)
index eb10bedbb16ea41709f7d962dd88bfa30952f478..c44d9b6ee4827f43cf9aedd19d0b2e1665a8a716 100644 (file)
@@ -35,7 +35,7 @@
 #include "statnode.hh"
 
 #ifndef DISABLE_TOP_N_BINDINGS
-static LuaArray<std::vector<boost::variant<string, double>>> getGenResponses(uint64_t top, boost::optional<int> labels, const std::function<bool(const Rings::Response&)>& pred)
+static LuaArray<std::vector<boost::variant<string, double>>> getGenResponses(uint64_t top, std::optional<int> labels, const std::function<bool(const Rings::Response&)>& pred)
 {
   setLuaNoSideEffect();
   map<DNSName, unsigned int> counts;
@@ -153,7 +153,7 @@ static void statNodeRespRing(statvisitor_t visitor, uint64_t seconds)
   root.visit([visitor = std::move(visitor)](const StatNode* node_, const StatNode::Stat& self, const StatNode::Stat& children) { visitor(*node_, self, children); }, node);
 }
 
-static LuaArray<LuaAssociativeTable<std::string>> getRespRing(boost::optional<int> rcode)
+static LuaArray<LuaAssociativeTable<std::string>> getRespRing(std::optional<int> rcode)
 {
   using entry_t = LuaAssociativeTable<std::string>;
   LuaArray<entry_t> ret;
@@ -163,7 +163,7 @@ static LuaArray<LuaAssociativeTable<std::string>> getRespRing(boost::optional<in
 
     int count = 1;
     for (const auto& entry : *respRing) {
-      if (rcode && (rcode.get() != entry.dh.rcode)) {
+      if (rcode && (rcode.value() != entry.dh.rcode)) {
         continue;
       }
       entry_t newEntry;
@@ -269,7 +269,7 @@ struct GrepQParams
   pdns::UniqueFilePtr outputFile{nullptr};
 };
 
-static std::optional<GrepQParams> parseGrepQParams(const LuaTypeOrArrayOf<std::string>& inp, boost::optional<LuaAssociativeTable<std::string>>& options)
+static std::optional<GrepQParams> parseGrepQParams(const LuaTypeOrArrayOf<std::string>& inp, std::optional<LuaAssociativeTable<std::string>>& options)
 {
   GrepQParams result{};
 
@@ -364,9 +364,9 @@ static bool ringEntryMatches(const GrepQParams& params, const C& entry)
 }
 
 #ifndef DISABLE_DYNBLOCKS
-using DynamicActionOptionalParameters = boost::optional<LuaAssociativeTable<std::string>>;
+using DynamicActionOptionalParameters = std::optional<LuaAssociativeTable<std::string>>;
 
-static void parseDynamicActionOptionalParameters(const std::string& directive, DynBlockRulesGroup::DynBlockRule& rule, const boost::optional<DNSAction::Action>& action, const DynamicActionOptionalParameters& optionalParameters)
+static void parseDynamicActionOptionalParameters(const std::string& directive, DynBlockRulesGroup::DynBlockRule& rule, const std::optional<DNSAction::Action>& action, const DynamicActionOptionalParameters& optionalParameters)
 {
   if (action && *action == DNSAction::Action::SetTag) {
     if (!optionalParameters) {
@@ -390,7 +390,7 @@ static void parseDynamicActionOptionalParameters(const std::string& directive, D
 void setupLuaInspection(LuaContext& luaCtx)
 {
 #ifndef DISABLE_TOP_N_BINDINGS
-  luaCtx.writeFunction("topClients", [](boost::optional<uint64_t> top_) {
+  luaCtx.writeFunction("topClients", [](std::optional<uint64_t> top_) {
     setLuaNoSideEffect();
     uint64_t top = top_ ? *top_ : 10U;
     map<ComboAddress, unsigned int, ComboAddress::addressOnlyLessThan> counts;
@@ -427,7 +427,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     g_outputBuffer += (fmt % (count) % "Rest" % rest % (total > 0 ? 100.0 * rest / total : 100.0)).str();
   });
 
-  luaCtx.writeFunction("getTopQueries", [](uint64_t top, boost::optional<int> labels) {
+  luaCtx.writeFunction("getTopQueries", [](uint64_t top, std::optional<int> labels) {
     setLuaNoSideEffect();
     map<DNSName, unsigned int> counts;
     unsigned int total = 0;
@@ -514,13 +514,13 @@ void setupLuaInspection(LuaContext& luaCtx)
     return ret;
   });
 
-  luaCtx.writeFunction("getTopResponses", [](uint64_t top, uint64_t kind, boost::optional<int> labels) {
+  luaCtx.writeFunction("getTopResponses", [](uint64_t top, uint64_t kind, std::optional<int> labels) {
     return getGenResponses(top, labels, [kind](const Rings::Response& resp) { return resp.dh.rcode == kind; });
   });
 
   luaCtx.executeCode(R"(function topResponses(top, kind, labels) top = top or 10; kind = kind or 0; for k,v in ipairs(getTopResponses(top, kind, labels)) do show(string.format("%4d  %-40s %4d %4.1f%%",k,v[1],v[2],v[3])) end end)");
 
-  luaCtx.writeFunction("getSlowResponses", [](uint64_t top, uint64_t msec, boost::optional<int> labels, boost::optional<bool> timeouts) {
+  luaCtx.writeFunction("getSlowResponses", [](uint64_t top, uint64_t msec, std::optional<int> labels, std::optional<bool> timeouts) {
     return getGenResponses(top, labels, [msec, timeouts](const Rings::Response& resp) {
       if (timeouts && *timeouts) {
         return resp.usec == std::numeric_limits<unsigned int>::max();
@@ -554,7 +554,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     }
   });
 
-  luaCtx.writeFunction("grepq", [](const LuaTypeOrArrayOf<std::string>& inp, boost::optional<unsigned int> limit, boost::optional<LuaAssociativeTable<std::string>> options) {
+  luaCtx.writeFunction("grepq", [](const LuaTypeOrArrayOf<std::string>& inp, std::optional<unsigned int> limit, std::optional<LuaAssociativeTable<std::string>> options) {
     setLuaNoSideEffect();
 
     auto paramsOrError = parseGrepQParams(inp, options);
@@ -912,7 +912,7 @@ void setupLuaInspection(LuaContext& luaCtx)
   luaCtx.registerMember("bytes", &StatNode::Stat::bytes);
   luaCtx.registerMember("hits", &StatNode::Stat::hits);
 
-  luaCtx.writeFunction("statNodeRespRing", [](statvisitor_t visitor, boost::optional<uint64_t> seconds) {
+  luaCtx.writeFunction("statNodeRespRing", [](statvisitor_t visitor, std::optional<uint64_t> seconds) {
     statNodeRespRing(std::move(visitor), seconds ? *seconds : 0U);
   });
 #endif /* DISABLE_DEPRECATED_DYNBLOCK */
@@ -920,7 +920,7 @@ void setupLuaInspection(LuaContext& luaCtx)
   /* DynBlockRulesGroup */
   luaCtx.writeFunction("dynBlockRulesGroup", []() { return std::make_shared<DynBlockRulesGroup>(); });
   // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(unsigned int, unsigned int, const std::string&, unsigned int, boost::optional<DNSAction::Action>, boost::optional<unsigned int>, DynamicActionOptionalParameters)>("setQueryRate", [](std::shared_ptr<DynBlockRulesGroup>& group, unsigned int rate, unsigned int seconds, const std::string& reason, unsigned int blockDuration, boost::optional<DNSAction::Action> action, boost::optional<unsigned int> warningRate, DynamicActionOptionalParameters optionalParameters) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(unsigned int, unsigned int, const std::string&, unsigned int, std::optional<DNSAction::Action>, std::optional<unsigned int>, DynamicActionOptionalParameters)>("setQueryRate", [](std::shared_ptr<DynBlockRulesGroup>& group, unsigned int rate, unsigned int seconds, const std::string& reason, unsigned int blockDuration, std::optional<DNSAction::Action> action, std::optional<unsigned int> warningRate, DynamicActionOptionalParameters optionalParameters) {
     if (group) {
       DynBlockRulesGroup::DynBlockRule rule(reason, blockDuration, rate, warningRate ? *warningRate : 0, seconds, action ? *action : DNSAction::Action::None);
       parseDynamicActionOptionalParameters("setQueryRate", rule, action, optionalParameters);
@@ -928,7 +928,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     }
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(unsigned int, unsigned int, const std::string&, unsigned int, boost::optional<DNSAction::Action>, boost::optional<unsigned int>, DynamicActionOptionalParameters)>("setResponseByteRate", [](std::shared_ptr<DynBlockRulesGroup>& group, unsigned int rate, unsigned int seconds, const std::string& reason, unsigned int blockDuration, boost::optional<DNSAction::Action> action, boost::optional<unsigned int> warningRate, DynamicActionOptionalParameters optionalParameters) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(unsigned int, unsigned int, const std::string&, unsigned int, std::optional<DNSAction::Action>, std::optional<unsigned int>, DynamicActionOptionalParameters)>("setResponseByteRate", [](std::shared_ptr<DynBlockRulesGroup>& group, unsigned int rate, unsigned int seconds, const std::string& reason, unsigned int blockDuration, std::optional<DNSAction::Action> action, std::optional<unsigned int> warningRate, DynamicActionOptionalParameters optionalParameters) {
     if (group) {
       DynBlockRulesGroup::DynBlockRule rule(reason, blockDuration, rate, warningRate ? *warningRate : 0, seconds, action ? *action : DNSAction::Action::None);
       parseDynamicActionOptionalParameters("setResponseByteRate", rule, action, optionalParameters);
@@ -936,7 +936,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     }
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(unsigned int, const std::string&, unsigned int, boost::optional<DNSAction::Action>, DynBlockRulesGroup::smtVisitor_t, DynamicActionOptionalParameters)>("setSuffixMatchRule", [](std::shared_ptr<DynBlockRulesGroup>& group, unsigned int seconds, const std::string& reason, unsigned int blockDuration, boost::optional<DNSAction::Action> action, DynBlockRulesGroup::smtVisitor_t visitor, DynamicActionOptionalParameters optionalParameters) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(unsigned int, const std::string&, unsigned int, std::optional<DNSAction::Action>, DynBlockRulesGroup::smtVisitor_t, DynamicActionOptionalParameters)>("setSuffixMatchRule", [](std::shared_ptr<DynBlockRulesGroup>& group, unsigned int seconds, const std::string& reason, unsigned int blockDuration, std::optional<DNSAction::Action> action, DynBlockRulesGroup::smtVisitor_t visitor, DynamicActionOptionalParameters optionalParameters) {
     if (group) {
       DynBlockRulesGroup::DynBlockRule rule(reason, blockDuration, 0, 0, seconds, action ? *action : DNSAction::Action::None);
       parseDynamicActionOptionalParameters("setSuffixMatchRule", rule, action, optionalParameters);
@@ -944,7 +944,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     }
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(unsigned int, const std::string&, unsigned int, boost::optional<DNSAction::Action>, dnsdist_ffi_stat_node_visitor_t, DynamicActionOptionalParameters)>("setSuffixMatchRuleFFI", [](std::shared_ptr<DynBlockRulesGroup>& group, unsigned int seconds, const std::string& reason, unsigned int blockDuration, boost::optional<DNSAction::Action> action, dnsdist_ffi_stat_node_visitor_t visitor, DynamicActionOptionalParameters optionalParameters) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(unsigned int, const std::string&, unsigned int, std::optional<DNSAction::Action>, dnsdist_ffi_stat_node_visitor_t, DynamicActionOptionalParameters)>("setSuffixMatchRuleFFI", [](std::shared_ptr<DynBlockRulesGroup>& group, unsigned int seconds, const std::string& reason, unsigned int blockDuration, std::optional<DNSAction::Action> action, dnsdist_ffi_stat_node_visitor_t visitor, DynamicActionOptionalParameters optionalParameters) {
     if (group) {
       DynBlockRulesGroup::DynBlockRule rule(reason, blockDuration, 0, 0, seconds, action ? *action : DNSAction::Action::None);
       parseDynamicActionOptionalParameters("setSuffixMatchRuleFFI", rule, action, optionalParameters);
@@ -957,7 +957,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     }
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(uint8_t, unsigned int, unsigned int, const std::string&, unsigned int, boost::optional<DNSAction::Action>, boost::optional<unsigned int>, DynamicActionOptionalParameters)>("setRCodeRate", [](std::shared_ptr<DynBlockRulesGroup>& group, uint8_t rcode, unsigned int rate, unsigned int seconds, const std::string& reason, unsigned int blockDuration, boost::optional<DNSAction::Action> action, boost::optional<unsigned int> warningRate, DynamicActionOptionalParameters optionalParameters) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(uint8_t, unsigned int, unsigned int, const std::string&, unsigned int, std::optional<DNSAction::Action>, std::optional<unsigned int>, DynamicActionOptionalParameters)>("setRCodeRate", [](std::shared_ptr<DynBlockRulesGroup>& group, uint8_t rcode, unsigned int rate, unsigned int seconds, const std::string& reason, unsigned int blockDuration, std::optional<DNSAction::Action> action, std::optional<unsigned int> warningRate, DynamicActionOptionalParameters optionalParameters) {
     if (group) {
       DynBlockRulesGroup::DynBlockRule rule(reason, blockDuration, rate, warningRate ? *warningRate : 0, seconds, action ? *action : DNSAction::Action::None);
       parseDynamicActionOptionalParameters("setRCodeRate", rule, action, optionalParameters);
@@ -965,7 +965,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     }
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(uint8_t, double, unsigned int, const std::string&, unsigned int, size_t, boost::optional<DNSAction::Action>, boost::optional<double>, DynamicActionOptionalParameters)>("setRCodeRatio", [](std::shared_ptr<DynBlockRulesGroup>& group, uint8_t rcode, double ratio, unsigned int seconds, const std::string& reason, unsigned int blockDuration, size_t minimumNumberOfResponses, boost::optional<DNSAction::Action> action, boost::optional<double> warningRatio, DynamicActionOptionalParameters optionalParameters) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(uint8_t, double, unsigned int, const std::string&, unsigned int, size_t, std::optional<DNSAction::Action>, std::optional<double>, DynamicActionOptionalParameters)>("setRCodeRatio", [](std::shared_ptr<DynBlockRulesGroup>& group, uint8_t rcode, double ratio, unsigned int seconds, const std::string& reason, unsigned int blockDuration, size_t minimumNumberOfResponses, std::optional<DNSAction::Action> action, std::optional<double> warningRatio, DynamicActionOptionalParameters optionalParameters) {
     if (group) {
       DynBlockRulesGroup::DynBlockRatioRule rule(reason, blockDuration, ratio, warningRatio ? *warningRatio : 0.0, seconds, action ? *action : DNSAction::Action::None, minimumNumberOfResponses);
       parseDynamicActionOptionalParameters("setRCodeRatio", rule, action, optionalParameters);
@@ -973,7 +973,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     }
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(uint16_t, unsigned int, unsigned int, const std::string&, unsigned int, boost::optional<DNSAction::Action>, boost::optional<unsigned int>, DynamicActionOptionalParameters)>("setQTypeRate", [](std::shared_ptr<DynBlockRulesGroup>& group, uint16_t qtype, unsigned int rate, unsigned int seconds, const std::string& reason, unsigned int blockDuration, boost::optional<DNSAction::Action> action, boost::optional<unsigned int> warningRate, DynamicActionOptionalParameters optionalParameters) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(uint16_t, unsigned int, unsigned int, const std::string&, unsigned int, std::optional<DNSAction::Action>, std::optional<unsigned int>, DynamicActionOptionalParameters)>("setQTypeRate", [](std::shared_ptr<DynBlockRulesGroup>& group, uint16_t qtype, unsigned int rate, unsigned int seconds, const std::string& reason, unsigned int blockDuration, std::optional<DNSAction::Action> action, std::optional<unsigned int> warningRate, DynamicActionOptionalParameters optionalParameters) {
     if (group) {
       DynBlockRulesGroup::DynBlockRule rule(reason, blockDuration, rate, warningRate ? *warningRate : 0, seconds, action ? *action : DNSAction::Action::None);
       parseDynamicActionOptionalParameters("setQTypeRate", rule, action, optionalParameters);
@@ -981,7 +981,7 @@ void setupLuaInspection(LuaContext& luaCtx)
     }
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(double, unsigned int, const std::string&, unsigned int, size_t, double, boost::optional<DNSAction::Action>, boost::optional<double>, DynamicActionOptionalParameters)>("setCacheMissRatio", [](std::shared_ptr<DynBlockRulesGroup>& group, double ratio, unsigned int seconds, const std::string& reason, unsigned int blockDuration, size_t minimumNumberOfResponses, double minimumGlobalCacheHitRatio, boost::optional<DNSAction::Action> action, boost::optional<double> warningRatio, DynamicActionOptionalParameters optionalParameters) {
+  luaCtx.registerFunction<void (std::shared_ptr<DynBlockRulesGroup>::*)(double, unsigned int, const std::string&, unsigned int, size_t, double, std::optional<DNSAction::Action>, std::optional<double>, DynamicActionOptionalParameters)>("setCacheMissRatio", [](std::shared_ptr<DynBlockRulesGroup>& group, double ratio, unsigned int seconds, const std::string& reason, unsigned int blockDuration, size_t minimumNumberOfResponses, double minimumGlobalCacheHitRatio, std::optional<DNSAction::Action> action, std::optional<double> warningRatio, DynamicActionOptionalParameters optionalParameters) {
     if (group) {
       DynBlockRulesGroup::DynBlockCacheMissRatioRule rule(reason, blockDuration, ratio, warningRatio ? *warningRatio : 0.0, seconds, action ? *action : DNSAction::Action::None, minimumNumberOfResponses, minimumGlobalCacheHitRatio);
       parseDynamicActionOptionalParameters("setCacheMissRatio", rule, action, optionalParameters);
@@ -1093,7 +1093,7 @@ void setupLuaInspection(LuaContext& luaCtx)
 
   luaCtx.writeFunction("addDynBlockSMT",
                        // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-                       [](const LuaArray<std::string>& names, const std::string& msg, boost::optional<int> seconds, boost::optional<DNSAction::Action> action, DynamicActionOptionalParameters optionalParameters) {
+                       [](const LuaArray<std::string>& names, const std::string& msg, std::optional<int> seconds, std::optional<DNSAction::Action> action, DynamicActionOptionalParameters optionalParameters) {
                          if (names.empty()) {
                            return;
                          }
@@ -1125,7 +1125,7 @@ void setupLuaInspection(LuaContext& luaCtx)
 
   luaCtx.writeFunction("addDynamicBlock",
                        // NOLINTNEXTLINE(performance-unnecessary-value-param): optional parameters cannot be passed by const reference
-                       [](const boost::variant<ComboAddress, std::string>& clientIP, const std::string& msg, const boost::optional<DNSAction::Action> action, const boost::optional<int> seconds, boost::optional<uint8_t> clientIPMask, boost::optional<uint8_t> clientIPPortMask, DynamicActionOptionalParameters optionalParameters) {
+                       [](const boost::variant<ComboAddress, std::string>& clientIP, const std::string& msg, const std::optional<DNSAction::Action> action, const std::optional<int> seconds, std::optional<uint8_t> clientIPMask, std::optional<uint8_t> clientIPPortMask, DynamicActionOptionalParameters optionalParameters) {
                          setLuaSideEffect();
 
                          ComboAddress clientIPCA;
index e915f817aa7cb13ce9f3e790e2275aaf895bece7..30d5f0db82420d98a17b9a23465327b81f989a3d 100644 (file)
@@ -25,6 +25,7 @@
 #include "dnsdist-rules-factory.hh"
 #include "dnsdist-rule-chains.hh"
 #include "dns_random.hh"
+#include <optional>
 
 std::shared_ptr<DNSRule> makeRule(const luadnsrule_t& var, const std::string& calledFrom)
 {
@@ -81,7 +82,7 @@ static boost::uuids::uuid makeRuleID(std::string& identifier)
   return getUniqueID(identifier);
 }
 
-void parseRuleParams(boost::optional<luaruleparams_t>& params, boost::uuids::uuid& uuid, std::string& name, uint64_t& creationOrder)
+void parseRuleParams(std::optional<luaruleparams_t>& params, boost::uuids::uuid& uuid, std::string& name, uint64_t& creationOrder)
 {
   static uint64_t s_creationOrder = 0;
 
@@ -97,7 +98,7 @@ void parseRuleParams(boost::optional<luaruleparams_t>& params, boost::uuids::uui
 using ruleparams_t = LuaAssociativeTable<boost::variant<bool, int, std::string, LuaArray<int>>>;
 
 template <typename T>
-static std::string rulesToString(const std::vector<T>& rules, boost::optional<ruleparams_t>& vars)
+static std::string rulesToString(const std::vector<T>& rules, std::optional<ruleparams_t>& vars)
 {
   int num = 0;
   bool showUUIDs = false;
@@ -130,7 +131,7 @@ static std::string rulesToString(const std::vector<T>& rules, boost::optional<ru
 }
 
 template <typename IdentifierT>
-static void showRules(IdentifierT identifier, boost::optional<ruleparams_t>& vars)
+static void showRules(IdentifierT identifier, std::optional<ruleparams_t>& vars)
 {
   setLuaNoSideEffect();
 
@@ -277,7 +278,7 @@ static std::vector<T> getTopRules(const std::vector<T>& rules, unsigned int top)
 }
 
 template <typename ActionT, typename IdentifierT>
-static void addRule(IdentifierT identifier, const std::string& methodName, const luadnsrule_t& var, const std::shared_ptr<ActionT>& action, boost::optional<luaruleparams_t>& params)
+static void addRule(IdentifierT identifier, const std::string& methodName, const luadnsrule_t& var, const std::shared_ptr<ActionT>& action, std::optional<luaruleparams_t>& params)
 {
   setLuaSideEffect();
 
@@ -309,7 +310,7 @@ static LuaArray<T> toLuaArray(std::vector<T>&& rules)
 }
 
 template <typename T>
-static boost::optional<T> getRuleFromSelector(const std::vector<T>& rules, const boost::variant<unsigned int, std::string>& selector)
+static std::optional<T> getRuleFromSelector(const std::vector<T>& rules, const boost::variant<unsigned int, std::string>& selector)
 {
   if (const auto* str = boost::get<std::string>(&selector)) {
     /* let's see if this a UUID */
@@ -335,12 +336,12 @@ static boost::optional<T> getRuleFromSelector(const std::vector<T>& rules, const
        supplied position is out of bounds, this is fine */
     return rules.at(*pos);
   }
-  return boost::none;
+  return std::nullopt;
 }
 
 namespace
 {
-std::shared_ptr<DNSRule> qnameSuffixRule(const boost::variant<const SuffixMatchNode&, std::string, const LuaArray<std::string>> names, boost::optional<bool> quiet)
+std::shared_ptr<DNSRule> qnameSuffixRule(const boost::variant<const SuffixMatchNode&, std::string, const LuaArray<std::string>> names, std::optional<bool> quiet)
 {
   if (names.type() == typeid(string)) {
     SuffixMatchNode smn;
@@ -361,7 +362,7 @@ std::shared_ptr<DNSRule> qnameSuffixRule(const boost::variant<const SuffixMatchN
 }
 
 template <class T>
-std::optional<T> boostToStandardOptional(const boost::optional<T>& boostOpt)
+std::optional<T> boostToStandardOptional(const std::optional<T>& boostOpt)
 {
   return boostOpt ? *boostOpt : std::optional<T>();
 }
@@ -370,7 +371,7 @@ std::optional<T> boostToStandardOptional(const boost::optional<T>& boostOpt)
 void setupLuaRuleChainsManagement(LuaContext& luaCtx)
 {
   for (const auto& chain : dnsdist::rules::getResponseRuleChainDescriptions()) {
-    luaCtx.writeFunction("show" + chain.prefix + "ResponseRules", [&chain](boost::optional<ruleparams_t> vars) {
+    luaCtx.writeFunction("show" + chain.prefix + "ResponseRules", [&chain](std::optional<ruleparams_t> vars) {
       showRules(chain.identifier, vars);
     });
     luaCtx.writeFunction("rm" + chain.prefix + "ResponseRule", [&chain](const boost::variant<unsigned int, std::string>& identifier) {
@@ -382,20 +383,20 @@ void setupLuaRuleChainsManagement(LuaContext& luaCtx)
     luaCtx.writeFunction("mv" + chain.prefix + "ResponseRule", [&chain](unsigned int from, unsigned int dest) {
       mvRule(chain.identifier, from, dest);
     });
-    luaCtx.writeFunction("get" + chain.prefix + "ResponseRule", [&chain](const boost::variant<unsigned int, std::string>& selector) -> boost::optional<dnsdist::rules::ResponseRuleAction> {
+    luaCtx.writeFunction("get" + chain.prefix + "ResponseRule", [&chain](const boost::variant<unsigned int, std::string>& selector) -> std::optional<dnsdist::rules::ResponseRuleAction> {
       const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
       const auto& rules = dnsdist::rules::getResponseRuleChain(chains, chain.identifier);
       return getRuleFromSelector(rules, selector);
     });
 
-    luaCtx.writeFunction("getTop" + chain.prefix + "ResponseRules", [&chain](boost::optional<unsigned int> top) {
+    luaCtx.writeFunction("getTop" + chain.prefix + "ResponseRules", [&chain](std::optional<unsigned int> top) {
       setLuaNoSideEffect();
       const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
       const auto& rules = dnsdist::rules::getResponseRuleChain(chains, chain.identifier);
       return toLuaArray(getTopRules(rules, (top ? *top : 10)));
     });
 
-    luaCtx.writeFunction("top" + chain.prefix + "ResponseRules", [&chain](boost::optional<unsigned int> top, boost::optional<ruleparams_t> vars) {
+    luaCtx.writeFunction("top" + chain.prefix + "ResponseRules", [&chain](std::optional<unsigned int> top, std::optional<ruleparams_t> vars) {
       setLuaNoSideEffect();
       const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
       const auto& rules = dnsdist::rules::getResponseRuleChain(chains, chain.identifier);
@@ -412,7 +413,7 @@ void setupLuaRuleChainsManagement(LuaContext& luaCtx)
   }
 
   for (const auto& chain : dnsdist::rules::getRuleChainDescriptions()) {
-    luaCtx.writeFunction("show" + chain.prefix + "Rules", [&chain](boost::optional<ruleparams_t> vars) {
+    luaCtx.writeFunction("show" + chain.prefix + "Rules", [&chain](std::optional<ruleparams_t> vars) {
       showRules(chain.identifier, vars);
     });
     luaCtx.writeFunction("rm" + chain.prefix + "Rule", [&chain](const boost::variant<unsigned int, std::string>& identifier) {
@@ -424,20 +425,20 @@ void setupLuaRuleChainsManagement(LuaContext& luaCtx)
     luaCtx.writeFunction("mv" + chain.prefix + "Rule", [&chain](unsigned int from, unsigned int dest) {
       mvRule(chain.identifier, from, dest);
     });
-    luaCtx.writeFunction("get" + chain.prefix + "Rule", [&chain](const boost::variant<int, std::string>& selector) -> boost::optional<dnsdist::rules::RuleAction> {
+    luaCtx.writeFunction("get" + chain.prefix + "Rule", [&chain](const boost::variant<int, std::string>& selector) -> std::optional<dnsdist::rules::RuleAction> {
       const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
       const auto& rules = dnsdist::rules::getRuleChain(chains, chain.identifier);
       return getRuleFromSelector(rules, selector);
     });
 
-    luaCtx.writeFunction("getTop" + chain.prefix + "Rules", [&chain](boost::optional<unsigned int> top) {
+    luaCtx.writeFunction("getTop" + chain.prefix + "Rules", [&chain](std::optional<unsigned int> top) {
       setLuaNoSideEffect();
       const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
       const auto& rules = dnsdist::rules::getRuleChain(chains, chain.identifier);
       return toLuaArray(getTopRules(rules, (top ? *top : 10)));
     });
 
-    luaCtx.writeFunction("top" + chain.prefix + "Rules", [&chain](boost::optional<unsigned int> top, boost::optional<ruleparams_t> vars) {
+    luaCtx.writeFunction("top" + chain.prefix + "Rules", [&chain](std::optional<unsigned int> top, std::optional<ruleparams_t> vars) {
       setLuaNoSideEffect();
       const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
       const auto& rules = dnsdist::rules::getRuleChain(chains, chain.identifier);
@@ -471,7 +472,7 @@ void setupLuaRuleChainsManagement(LuaContext& luaCtx)
 
   for (const auto& chain : dnsdist::rules::getRuleChainDescriptions()) {
     auto fullName = std::string("add") + chain.prefix + std::string("Action");
-    luaCtx.writeFunction(fullName, [&fullName, &chain](const luadnsrule_t& var, boost::variant<std::shared_ptr<DNSAction>, std::shared_ptr<DNSResponseAction>> era, boost::optional<luaruleparams_t> params) {
+    luaCtx.writeFunction(fullName, [&fullName, &chain](const luadnsrule_t& var, boost::variant<std::shared_ptr<DNSAction>, std::shared_ptr<DNSResponseAction>> era, std::optional<luaruleparams_t> params) {
       if (era.type() != typeid(std::shared_ptr<DNSAction>)) {
         throw std::runtime_error(fullName + "() can only be called with query-related actions, not response-related ones. Are you looking for addResponseAction()?");
       }
@@ -481,7 +482,7 @@ void setupLuaRuleChainsManagement(LuaContext& luaCtx)
     fullName = std::string("get") + chain.prefix + std::string("Action");
     luaCtx.writeFunction(fullName, [&chain](unsigned int num) {
       setLuaNoSideEffect();
-      boost::optional<std::shared_ptr<DNSAction>> ret;
+      std::optional<std::shared_ptr<DNSAction>> ret;
       const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
       const auto& ruleactions = dnsdist::rules::getRuleChain(chains, chain.identifier);
       if (num < ruleactions.size()) {
@@ -493,7 +494,7 @@ void setupLuaRuleChainsManagement(LuaContext& luaCtx)
 
   for (const auto& chain : dnsdist::rules::getResponseRuleChainDescriptions()) {
     const auto fullName = std::string("add") + chain.prefix + std::string("ResponseAction");
-    luaCtx.writeFunction(fullName, [&fullName, &chain](const luadnsrule_t& var, boost::variant<std::shared_ptr<DNSAction>, std::shared_ptr<DNSResponseAction>> era, boost::optional<luaruleparams_t> params) {
+    luaCtx.writeFunction(fullName, [&fullName, &chain](const luadnsrule_t& var, boost::variant<std::shared_ptr<DNSAction>, std::shared_ptr<DNSResponseAction>> era, std::optional<luaruleparams_t> params) {
       if (era.type() != typeid(std::shared_ptr<DNSResponseAction>)) {
         throw std::runtime_error(fullName + "() can only be called with response-related actions, not query-related ones. Are you looking for addAction()?");
       }
@@ -502,7 +503,7 @@ void setupLuaRuleChainsManagement(LuaContext& luaCtx)
     });
   }
 
-  luaCtx.writeFunction("benchRule", [](const std::shared_ptr<DNSRule>& rule, boost::optional<unsigned int> times_, boost::optional<string> suffix_) {
+  luaCtx.writeFunction("benchRule", [](const std::shared_ptr<DNSRule>& rule, std::optional<unsigned int> times_, std::optional<string> suffix_) {
     setLuaNoSideEffect();
     unsigned int times = times_ ? *times_ : 100000;
     DNSName suffix(suffix_ ? *suffix_ : "powerdns.com");
@@ -566,7 +567,7 @@ void setupLuaSelectors(LuaContext& luaCtx)
 
   luaCtx.writeFunction("SuffixMatchNodeRule", qnameSuffixRule);
 
-  luaCtx.writeFunction("NetmaskGroupRule", [](const boost::variant<const NetmaskGroup&, std::string, const LuaArray<std::string>> netmasks, boost::optional<bool> src, boost::optional<bool> quiet) {
+  luaCtx.writeFunction("NetmaskGroupRule", [](const boost::variant<const NetmaskGroup&, std::string, const LuaArray<std::string>> netmasks, std::optional<bool> src, std::optional<bool> quiet) {
     if (netmasks.type() == typeid(string)) {
       NetmaskGroup nmg;
       nmg.addMask(*boost::get<std::string>(&netmasks));
@@ -678,9 +679,9 @@ void setupLuaSelectors(LuaContext& luaCtx)
     return std::shared_ptr<DNSRule>(new QNameSetRule(names));
   });
 
-  // NOLINTNEXTLINE(performance-unnecessary-value-param): LuaWrapper does not play well with const boost::optional<T>&
-  luaCtx.writeFunction("TagRule", [](const std::string& tag, boost::optional<std::string> value) {
-    return std::shared_ptr<DNSRule>(dnsdist::selectors::getTagSelector(tag, boostToStandardOptional(value), !value));
+  // NOLINTNEXTLINE(performance-unnecessary-value-param): LuaWrapper does not play well with const std::optional<T>&
+  luaCtx.writeFunction("TagRule", [](const std::string& tag, std::optional<std::string> value) {
+    return std::shared_ptr<DNSRule>(dnsdist::selectors::getTagSelector(tag, value, !value));
   });
 
 #if defined(HAVE_LMDB) || defined(HAVE_CDB)
index 8acb9ab88e04bb212440278eb4eab217575bf5f7..4acdd1934c1cf538d4b63bbbd4ad8c1cd25142fd 100644 (file)
@@ -122,7 +122,7 @@ void resetLuaSideEffect()
 
 using localbind_t = LuaAssociativeTable<boost::variant<bool, int, std::string, LuaArray<int>, LuaArray<std::string>, LuaAssociativeTable<std::string>, std::shared_ptr<XskSocket>>>;
 
-static void parseLocalBindVars(boost::optional<localbind_t>& vars, bool& reusePort, int& tcpFastOpenQueueSize, std::string& interface, std::set<int>& cpus, int& tcpListenQueueSize, uint64_t& maxInFlightQueriesPerConnection, uint64_t& tcpMaxConcurrentConnections, bool& enableProxyProtocol)
+static void parseLocalBindVars(std::optional<localbind_t>& vars, bool& reusePort, int& tcpFastOpenQueueSize, std::string& interface, std::set<int>& cpus, int& tcpListenQueueSize, uint64_t& maxInFlightQueriesPerConnection, uint64_t& tcpMaxConcurrentConnections, bool& enableProxyProtocol)
 {
   if (vars) {
     LuaArray<int> setCpus;
@@ -142,7 +142,7 @@ static void parseLocalBindVars(boost::optional<localbind_t>& vars, bool& reusePo
   }
 }
 #ifdef HAVE_XSK
-static void parseXskVars(boost::optional<localbind_t>& vars, std::shared_ptr<XskSocket>& socket)
+static void parseXskVars(std::optional<localbind_t>& vars, std::shared_ptr<XskSocket>& socket)
 {
   if (!vars) {
     return;
@@ -197,7 +197,7 @@ static bool loadTLSCertificateAndKeys(const std::string& context, std::vector<TL
   return true;
 }
 
-static void parseTLSConfig(TLSConfig& config, const std::string& context, boost::optional<localbind_t>& vars)
+static void parseTLSConfig(TLSConfig& config, const std::string& context, std::optional<localbind_t>& vars)
 {
   getOptionalValue<std::string>(vars, "ciphers", config.d_ciphers);
   getOptionalValue<std::string>(vars, "ciphersTLS13", config.d_ciphers13);
@@ -279,9 +279,9 @@ static void LuaThread(const std::string& code)
   context.writeFunction("submitToMainThread", [](std::string cmd, LuaAssociativeTable<std::string> data) {
     auto lua = g_lua.lock();
     // maybe offer more than `void`
-    auto func = lua->readVariable<boost::optional<std::function<void(std::string cmd, LuaAssociativeTable<std::string> data)>>>("threadmessage");
+    auto func = lua->readVariable<std::optional<std::function<void(std::string cmd, LuaAssociativeTable<std::string> data)>>>("threadmessage");
     if (func) {
-      func.get()(std::move(cmd), std::move(data));
+      (*func)(std::move(cmd), std::move(data));
     }
     else {
       errlog("Lua thread called submitToMainThread but no threadmessage receiver is defined");
@@ -318,7 +318,7 @@ static bool checkConfigurationTime(const std::string& name)
 
 using newserver_t = LuaAssociativeTable<boost::variant<bool, std::string, LuaArray<std::string>, LuaArray<std::shared_ptr<XskSocket>>, DownstreamState::checkfunc_t>>;
 
-static void handleNewServerHealthCheckParameters(boost::optional<newserver_t>& vars, DownstreamState::Config& config)
+static void handleNewServerHealthCheckParameters(std::optional<newserver_t>& vars, DownstreamState::Config& config)
 {
   std::string valueStr;
 
@@ -396,7 +396,7 @@ static void handleNewServerHealthCheckParameters(boost::optional<newserver_t>& v
   getOptionalIntegerValue("newServer", vars, "rise", config.minRiseSuccesses);
 }
 
-static void handleNewServerSourceParameter(boost::optional<newserver_t>& vars, DownstreamState::Config& config)
+static void handleNewServerSourceParameter(std::optional<newserver_t>& vars, DownstreamState::Config& config)
 {
   std::string source;
   if (getOptionalValue<std::string>(vars, "source", source) <= 0) {
@@ -412,10 +412,10 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
   dnsdist::lua::setupConfigurationItems(luaCtx);
 
   luaCtx.writeFunction("newServer",
-                       [client, configCheck](boost::variant<string, newserver_t> pvars, boost::optional<int> qps) {
+                       [client, configCheck](boost::variant<string, newserver_t> pvars, std::optional<int> qps) {
                          setLuaSideEffect();
 
-                         boost::optional<newserver_t> vars = newserver_t();
+                         std::optional<newserver_t> vars = newserver_t();
                          DownstreamState::Config config;
 
                          std::string serverAddressStr;
@@ -739,7 +739,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     });
   });
 
-  luaCtx.writeFunction("setLocal", [client](const std::string& addr, boost::optional<localbind_t> vars) {
+  luaCtx.writeFunction("setLocal", [client](const std::string& addr, std::optional<localbind_t> vars) {
     setLuaSideEffect();
     if (client) {
       return;
@@ -811,7 +811,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     }
   });
 
-  luaCtx.writeFunction("addLocal", [client](const std::string& addr, boost::optional<localbind_t> vars) {
+  luaCtx.writeFunction("addLocal", [client](const std::string& addr, std::optional<localbind_t> vars) {
     setLuaSideEffect();
     if (client) {
       return;
@@ -932,7 +932,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 
   typedef LuaAssociativeTable<boost::variant<bool, std::string>> showserversopts_t;
 
-  luaCtx.writeFunction("showServers", [](boost::optional<showserversopts_t> vars) {
+  luaCtx.writeFunction("showServers", [](std::optional<showserversopts_t> vars) {
     setLuaNoSideEffect();
     bool showUUIDs = false;
     getOptionalValue<bool>(vars, "showUUIDs", showUUIDs);
@@ -1012,7 +1012,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     return getDownstreamCandidates(pool);
   });
 
-  luaCtx.writeFunction("getServer", [client](boost::variant<unsigned int, std::string> identifier) -> boost::optional<std::shared_ptr<DownstreamState>> {
+  luaCtx.writeFunction("getServer", [client](boost::variant<unsigned int, std::string> identifier) -> std::optional<std::shared_ptr<DownstreamState>> {
     if (client) {
       return std::make_shared<DownstreamState>(ComboAddress());
     }
@@ -1030,15 +1030,15 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
         return states.at(*pos);
       }
       g_outputBuffer = "Error: trying to retrieve server " + std::to_string(*pos) + " while there is only " + std::to_string(states.size()) + "servers\n";
-      return boost::none;
+      return std::nullopt;
     }
 
     g_outputBuffer = "Error: no server matched\n";
-    return boost::none;
+    return std::nullopt;
   });
 
 #ifndef DISABLE_CARBON
-  luaCtx.writeFunction("carbonServer", [](const std::string& address, boost::optional<string> ourName, boost::optional<uint64_t> interval, boost::optional<string> namespace_name, boost::optional<string> instance_name) {
+  luaCtx.writeFunction("carbonServer", [](const std::string& address, std::optional<string> ourName, std::optional<uint64_t> interval, std::optional<string> namespace_name, std::optional<string> instance_name) {
     setLuaSideEffect();
     auto newEndpoint = dnsdist::Carbon::newEndpoint(address,
                                                     (ourName ? *ourName : ""),
@@ -1089,7 +1089,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 
   using webserveropts_t = LuaAssociativeTable<boost::variant<bool, std::string, LuaAssociativeTable<std::string>>>;
 
-  luaCtx.writeFunction("setWebserverConfig", [](boost::optional<webserveropts_t> vars) {
+  luaCtx.writeFunction("setWebserverConfig", [](std::optional<webserveropts_t> vars) {
     setLuaSideEffect();
 
     if (!vars) {
@@ -1157,7 +1157,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     return dnsdist::webserver::getConfig();
   });
 
-  luaCtx.writeFunction("hashPassword", [](const std::string& password, boost::optional<uint64_t> workFactor) {
+  luaCtx.writeFunction("hashPassword", [](const std::string& password, std::optional<uint64_t> workFactor) {
     if (workFactor) {
       return hashPassword(password, *workFactor, CredentialsHolder::s_defaultParallelFactor, CredentialsHolder::s_defaultBlockSize);
     }
@@ -1256,7 +1256,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     g_outputBuffer = (fmt % size).str();
   });
 
-  luaCtx.writeFunction("getQueryCounters", [](boost::optional<uint64_t> optMax) {
+  luaCtx.writeFunction("getQueryCounters", [](std::optional<uint64_t> optMax) {
     setLuaNoSideEffect();
     auto records = dnsdist::QueryCount::g_queryCountRecords.read_lock();
     g_outputBuffer = "query counting is currently: ";
@@ -1307,7 +1307,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     dnsdist::console::clearHistory();
   });
 
-  luaCtx.writeFunction("testCrypto", []([[maybe_unused]] boost::optional<string> optTestMsg) {
+  luaCtx.writeFunction("testCrypto", []([[maybe_unused]] std::optional<string> optTestMsg) {
     setLuaNoSideEffect();
 #if defined(HAVE_LIBSODIUM) || defined(HAVE_LIBCRYPTO)
     try {
@@ -1444,7 +1444,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 
 #ifndef DISABLE_DEPRECATED_DYNBLOCK
   luaCtx.writeFunction("addDynBlocks",
-                       [](const std::unordered_map<ComboAddress, unsigned int, ComboAddress::addressOnlyHash, ComboAddress::addressOnlyEqual>& addrs, const std::string& msg, boost::optional<int> seconds, boost::optional<DNSAction::Action> action) {
+                       [](const std::unordered_map<ComboAddress, unsigned int, ComboAddress::addressOnlyHash, ComboAddress::addressOnlyEqual>& addrs, const std::string& msg, std::optional<int> seconds, std::optional<DNSAction::Action> action) {
                          if (addrs.empty()) {
                            return;
                          }
@@ -1500,7 +1500,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 #endif /* DISABLE_DYNBLOCKS */
 
 #ifdef HAVE_DNSCRYPT
-  luaCtx.writeFunction("addDNSCryptBind", [](const std::string& addr, const std::string& providerName, LuaTypeOrArrayOf<std::string> certFiles, LuaTypeOrArrayOf<std::string> keyFiles, boost::optional<localbind_t> vars) {
+  luaCtx.writeFunction("addDNSCryptBind", [](const std::string& addr, const std::string& providerName, LuaTypeOrArrayOf<std::string> certFiles, LuaTypeOrArrayOf<std::string> keyFiles, std::optional<localbind_t> vars) {
     if (!checkConfigurationTime("addDNSCryptBind")) {
       return;
     }
@@ -1599,7 +1599,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 
   luaCtx.writeFunction("getDNSCryptBind", [](uint64_t idx) {
     setLuaNoSideEffect();
-    boost::optional<std::shared_ptr<DNSCryptContext>> ret{boost::none};
+    std::optional<std::shared_ptr<DNSCryptContext>> ret{std::nullopt};
     /* we are only interested in distinct DNSCrypt binds,
        and we have two frontends (UDP and TCP) per bind
        sharing the same context so we need to retrieve
@@ -1705,7 +1705,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
       errlog("Error while opening the verbose logging destination file %s: %s", dest, e.what());
     }
   });
-  luaCtx.writeFunction("setStructuredLogging", [](bool enable, boost::optional<LuaAssociativeTable<std::string>> options) {
+  luaCtx.writeFunction("setStructuredLogging", [](bool enable, std::optional<LuaAssociativeTable<std::string>> options) {
     std::string levelPrefix;
     std::string timeFormat;
     if (options) {
@@ -1750,7 +1750,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 
   luaCtx.writeFunction("getBind", [](uint64_t num) {
     setLuaNoSideEffect();
-    boost::optional<ClientState*> ret{boost::none};
+    std::optional<ClientState*> ret{std::nullopt};
     auto frontends = dnsdist::getFrontends();
     if (num < frontends.size()) {
       ret = frontends[num].get();
@@ -1763,7 +1763,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     return dnsdist::getFrontends().size();
   });
 
-  luaCtx.writeFunction("help", [](boost::optional<std::string> command) {
+  luaCtx.writeFunction("help", [](std::optional<std::string> command) {
     setLuaNoSideEffect();
     g_outputBuffer = "";
 #ifndef DISABLE_COMPLETION
@@ -1814,7 +1814,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 
 #ifndef DISABLE_DYNBLOCKS
 #ifndef DISABLE_DEPRECATED_DYNBLOCK
-  luaCtx.writeFunction("addBPFFilterDynBlocks", [](const std::unordered_map<ComboAddress, unsigned int, ComboAddress::addressOnlyHash, ComboAddress::addressOnlyEqual>& addrs, const std::shared_ptr<DynBPFFilter>& dynbpf, boost::optional<int> seconds, boost::optional<std::string> msg) {
+  luaCtx.writeFunction("addBPFFilterDynBlocks", [](const std::unordered_map<ComboAddress, unsigned int, ComboAddress::addressOnlyHash, ComboAddress::addressOnlyEqual>& addrs, const std::shared_ptr<DynBPFFilter>& dynbpf, std::optional<int> seconds, std::optional<std::string> msg) {
     if (!dynbpf) {
       return;
     }
@@ -1924,7 +1924,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     s_included = false;
   });
 
-  luaCtx.writeFunction("setAPIWritable", [](bool writable, boost::optional<std::string> apiConfigDir) {
+  luaCtx.writeFunction("setAPIWritable", [](bool writable, std::optional<std::string> apiConfigDir) {
     if (apiConfigDir && apiConfigDir->empty()) {
       errlog("The API configuration directory value cannot be empty!");
       g_outputBuffer = "The API configuration directory value cannot be empty!";
@@ -1939,7 +1939,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     setLuaSideEffect();
   });
 
-  luaCtx.writeFunction("setRingBuffersSize", [client](uint64_t capacity, boost::optional<uint64_t> numberOfShards) {
+  luaCtx.writeFunction("setRingBuffersSize", [client](uint64_t capacity, std::optional<uint64_t> numberOfShards) {
     if (client) {
       return;
     }
@@ -1995,7 +1995,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
   });
 
 #ifdef HAVE_NET_SNMP
-  luaCtx.writeFunction("snmpAgent", [client, configCheck](bool enableTraps, boost::optional<std::string> daemonSocket) {
+  luaCtx.writeFunction("snmpAgent", [client, configCheck](bool enableTraps, std::optional<std::string> daemonSocket) {
     if (client || configCheck) {
       return;
     }
@@ -2128,7 +2128,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
   });
 
   typedef std::unordered_map<std::string, std::string> tlscertificateopts_t;
-  luaCtx.writeFunction("newTLSCertificate", [client]([[maybe_unused]] const std::string& cert, [[maybe_unused]] boost::optional<tlscertificateopts_t> opts) {
+  luaCtx.writeFunction("newTLSCertificate", [client]([[maybe_unused]] const std::string& cert, [[maybe_unused]] std::optional<tlscertificateopts_t> opts) {
     std::shared_ptr<TLSCertKeyPair> result = nullptr;
     if (client) {
       return result;
@@ -2149,7 +2149,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     return result;
   });
 
-  luaCtx.writeFunction("addDOHLocal", [client]([[maybe_unused]] const std::string& addr, [[maybe_unused]] boost::optional<boost::variant<std::string, std::shared_ptr<TLSCertKeyPair>, LuaArray<std::string>, LuaArray<std::shared_ptr<TLSCertKeyPair>>>> certFiles, [[maybe_unused]] boost::optional<LuaTypeOrArrayOf<std::string>> keyFiles, [[maybe_unused]] boost::optional<LuaTypeOrArrayOf<std::string>> urls, [[maybe_unused]] boost::optional<localbind_t> vars) {
+  luaCtx.writeFunction("addDOHLocal", [client]([[maybe_unused]] const std::string& addr, [[maybe_unused]] std::optional<boost::variant<std::string, std::shared_ptr<TLSCertKeyPair>, LuaArray<std::string>, LuaArray<std::shared_ptr<TLSCertKeyPair>>>> certFiles, [[maybe_unused]] std::optional<LuaTypeOrArrayOf<std::string>> keyFiles, [[maybe_unused]] std::optional<LuaTypeOrArrayOf<std::string>> urls, [[maybe_unused]] std::optional<localbind_t> vars) {
     if (client) {
       return;
     }
@@ -2318,7 +2318,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
   });
 
   // NOLINTNEXTLINE(performance-unnecessary-value-param): somehow clang-tidy gets confused about the fact vars could be const while it cannot
-  luaCtx.writeFunction("addDOH3Local", [client]([[maybe_unused]] const std::string& addr, [[maybe_unused]] const boost::variant<std::string, std::shared_ptr<TLSCertKeyPair>, LuaArray<std::string>, LuaArray<std::shared_ptr<TLSCertKeyPair>>>& certFiles, [[maybe_unused]] const LuaTypeOrArrayOf<std::string>& keyFiles, [[maybe_unused]] boost::optional<localbind_t> vars) {
+  luaCtx.writeFunction("addDOH3Local", [client]([[maybe_unused]] const std::string& addr, [[maybe_unused]] const boost::variant<std::string, std::shared_ptr<TLSCertKeyPair>, LuaArray<std::string>, LuaArray<std::shared_ptr<TLSCertKeyPair>>>& certFiles, [[maybe_unused]] const LuaTypeOrArrayOf<std::string>& keyFiles, [[maybe_unused]] std::optional<localbind_t> vars) {
     if (client) {
       return;
     }
@@ -2396,7 +2396,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
   });
 
   // NOLINTNEXTLINE(performance-unnecessary-value-param): somehow clang-tidy gets confused about the fact vars could be const while it cannot
-  luaCtx.writeFunction("addDOQLocal", [client]([[maybe_unused]] const std::string& addr, [[maybe_unused]] const boost::variant<std::string, std::shared_ptr<TLSCertKeyPair>, LuaArray<std::string>, LuaArray<std::shared_ptr<TLSCertKeyPair>>>& certFiles, [[maybe_unused]] const LuaTypeOrArrayOf<std::string>& keyFiles, [[maybe_unused]] boost::optional<localbind_t> vars) {
+  luaCtx.writeFunction("addDOQLocal", [client]([[maybe_unused]] const std::string& addr, [[maybe_unused]] const boost::variant<std::string, std::shared_ptr<TLSCertKeyPair>, LuaArray<std::string>, LuaArray<std::shared_ptr<TLSCertKeyPair>>>& certFiles, [[maybe_unused]] const LuaTypeOrArrayOf<std::string>& keyFiles, [[maybe_unused]] std::optional<localbind_t> vars) {
     if (client) {
       return;
     }
@@ -2497,8 +2497,8 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
   });
 
 #ifdef HAVE_DNS_OVER_QUIC
-  luaCtx.writeFunction("getDOQFrontend", [client](uint64_t index) -> boost::optional<std::shared_ptr<DOQFrontend>> {
-    boost::optional<std::shared_ptr<DOQFrontend>> result{boost::none};
+  luaCtx.writeFunction("getDOQFrontend", [client](uint64_t index) -> std::optional<std::shared_ptr<DOQFrontend>> {
+    std::optional<std::shared_ptr<DOQFrontend>> result{std::nullopt};
     if (client) {
       return std::shared_ptr<DOQFrontend>();
     }
@@ -2579,8 +2579,8 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
   });
 
 #ifdef HAVE_DNS_OVER_HTTP3
-  luaCtx.writeFunction("getDOH3Frontend", [client](uint64_t index) -> boost::optional<std::shared_ptr<DOH3Frontend>> {
-    boost::optional<std::shared_ptr<DOH3Frontend>> result{boost::none};
+  luaCtx.writeFunction("getDOH3Frontend", [client](uint64_t index) -> std::optional<std::shared_ptr<DOH3Frontend>> {
+    std::optional<std::shared_ptr<DOH3Frontend>> result{std::nullopt};
     if (client) {
       return std::shared_ptr<DOH3Frontend>();
     }
@@ -2648,8 +2648,8 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 #endif
   });
 
-  luaCtx.writeFunction("getDOHFrontend", [client]([[maybe_unused]] uint64_t index) -> boost::optional<std::shared_ptr<DOHFrontend>> {
-    boost::optional<std::shared_ptr<DOHFrontend>> result{boost::none};
+  luaCtx.writeFunction("getDOHFrontend", [client]([[maybe_unused]] uint64_t index) -> std::optional<std::shared_ptr<DOHFrontend>> {
+    std::optional<std::shared_ptr<DOHFrontend>> result{std::nullopt};
     if (client) {
       return std::shared_ptr<DOHFrontend>();
     }
@@ -2749,7 +2749,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     }
   });
 
-  luaCtx.writeFunction("addTLSLocal", [client]([[maybe_unused]] const std::string& addr, [[maybe_unused]] const boost::variant<std::string, std::shared_ptr<TLSCertKeyPair>, LuaArray<std::string>, LuaArray<std::shared_ptr<TLSCertKeyPair>>>& certFiles, [[maybe_unused]] const LuaTypeOrArrayOf<std::string>& keyFiles, [[maybe_unused]] boost::optional<localbind_t> vars) {
+  luaCtx.writeFunction("addTLSLocal", [client]([[maybe_unused]] const std::string& addr, [[maybe_unused]] const boost::variant<std::string, std::shared_ptr<TLSCertKeyPair>, LuaArray<std::string>, LuaArray<std::shared_ptr<TLSCertKeyPair>>>& certFiles, [[maybe_unused]] const LuaTypeOrArrayOf<std::string>& keyFiles, [[maybe_unused]] std::optional<localbind_t> vars) {
     if (client) {
       return;
     }
@@ -2878,8 +2878,8 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
 #endif
   });
 
-  luaCtx.writeFunction("getTLSFrontend", [client]([[maybe_unused]] uint64_t index) -> boost::optional<std::shared_ptr<TLSFrontend>> {
-    boost::optional<std::shared_ptr<TLSFrontend>> result{boost::none};
+  luaCtx.writeFunction("getTLSFrontend", [client]([[maybe_unused]] uint64_t index) -> std::optional<std::shared_ptr<TLSFrontend>> {
+    std::optional<std::shared_ptr<TLSFrontend>> result{std::nullopt};
     if (client) {
       return std::shared_ptr<TLSFrontend>();
     }
@@ -3051,7 +3051,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
   });
 
 #if defined(HAVE_LIBSSL) && !defined(HAVE_TLS_PROVIDERS)
-  luaCtx.writeFunction("loadTLSEngine", [client](const std::string& engineName, boost::optional<std::string> defaultString) {
+  luaCtx.writeFunction("loadTLSEngine", [client](const std::string& engineName, std::optional<std::string> defaultString) {
     if (client) {
       return;
     }
@@ -3087,16 +3087,16 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     newThread.detach();
   });
 
-  luaCtx.writeFunction("declareMetric", [](const std::string& name, const std::string& type, const std::string& description, boost::optional<boost::variant<std::string, declare_metric_opts_t>> opts) {
+  luaCtx.writeFunction("declareMetric", [](const std::string& name, const std::string& type, const std::string& description, std::optional<boost::variant<std::string, declare_metric_opts_t>> opts) {
     bool withLabels = false;
     std::optional<std::string> customName = std::nullopt;
     if (opts) {
-      auto* optCustomName = boost::get<std::string>(&opts.get());
+      auto* optCustomName = boost::get<std::string>(&opts.value());
       if (optCustomName != nullptr) {
         customName = std::optional(*optCustomName);
       }
       if (!customName) {
-        boost::optional<declare_metric_opts_t> vars = {boost::get<declare_metric_opts_t>(opts.get())};
+        std::optional<declare_metric_opts_t> vars = {boost::get<declare_metric_opts_t>(opts.value())};
         getOptionalValue<std::string>(vars, "customName", customName);
         getOptionalValue<bool>(vars, "withLabels", withLabels);
         checkAllParametersConsumed("declareMetric", vars);
@@ -3111,15 +3111,15 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     return true;
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param)
-  luaCtx.writeFunction("incMetric", [](const std::string& name, boost::optional<boost::variant<uint64_t, update_metric_opts_t>> opts) {
-    auto incOpts = opts.get_value_or(1);
+  luaCtx.writeFunction("incMetric", [](const std::string& name, std::optional<boost::variant<uint64_t, update_metric_opts_t>> opts) {
+    auto incOpts = opts.value_or(1);
     uint64_t step = 1;
     std::unordered_map<std::string, std::string> labels;
     if (auto* custom_step = boost::get<uint64_t>(&incOpts)) {
       step = *custom_step;
     }
     else {
-      boost::optional<update_metric_opts_t> vars = {boost::get<update_metric_opts_t>(incOpts)};
+      std::optional<update_metric_opts_t> vars = {boost::get<update_metric_opts_t>(incOpts)};
       getOptionalValue<uint64_t>(vars, "step", step);
       getOptionalValue<LuaAssociativeTable<std::string>>(vars, "labels", labels);
       checkAllParametersConsumed("incMetric", vars);
@@ -3133,15 +3133,15 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     return std::get<uint64_t>(result);
   });
   // NOLINTNEXTLINE(performance-unnecessary-value-param)
-  luaCtx.writeFunction("decMetric", [](const std::string& name, boost::optional<boost::variant<uint64_t, update_metric_opts_t>> opts) {
-    auto decOpts = opts.get_value_or(1);
+  luaCtx.writeFunction("decMetric", [](const std::string& name, std::optional<boost::variant<uint64_t, update_metric_opts_t>> opts) {
+    auto decOpts = opts.value_or(1);
     uint64_t step = 1;
     std::unordered_map<std::string, std::string> labels;
     if (auto* custom_step = boost::get<uint64_t>(&decOpts)) {
       step = *custom_step;
     }
     else {
-      boost::optional<update_metric_opts_t> vars = {boost::get<update_metric_opts_t>(decOpts)};
+      std::optional<update_metric_opts_t> vars = {boost::get<update_metric_opts_t>(decOpts)};
       getOptionalValue<uint64_t>(vars, "step", step);
       getOptionalValue<LuaAssociativeTable<std::string>>(vars, "labels", labels);
       checkAllParametersConsumed("decMetric", vars);
@@ -3154,7 +3154,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     }
     return std::get<uint64_t>(result);
   });
-  luaCtx.writeFunction("setMetric", [](const std::string& name, const double value, boost::optional<update_metric_opts_t> opts) -> double {
+  luaCtx.writeFunction("setMetric", [](const std::string& name, const double value, std::optional<update_metric_opts_t> opts) -> double {
     std::unordered_map<std::string, std::string> labels;
     if (opts) {
       getOptionalValue<LuaAssociativeTable<std::string>>(opts, "labels", labels);
@@ -3168,7 +3168,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
     }
     return std::get<double>(result);
   });
-  luaCtx.writeFunction("getMetric", [](const std::string& name, boost::optional<update_metric_opts_t> opts) {
+  luaCtx.writeFunction("getMetric", [](const std::string& name, std::optional<update_metric_opts_t> opts) {
     std::unordered_map<std::string, std::string> labels;
     if (opts) {
       getOptionalValue<LuaAssociativeTable<std::string>>(opts, "labels", labels);
index 47ab0b258ee3f67010da7738441a29f1f5129dfc..42d4f0ef9385429397d60284d49cbc8100715ba8 100644 (file)
@@ -41,7 +41,7 @@ using luaruleparams_t = LuaAssociativeTable<std::string>;
 using luadnsrule_t = boost::variant<string, LuaArray<std::string>, std::shared_ptr<DNSRule>, DNSName, LuaArray<DNSName>>;
 std::shared_ptr<DNSRule> makeRule(const luadnsrule_t& var, const std::string& calledFrom);
 
-void parseRuleParams(boost::optional<luaruleparams_t>& params, boost::uuids::uuid& uuid, std::string& name, uint64_t& creationOrder);
+void parseRuleParams(std::optional<luaruleparams_t>& params, boost::uuids::uuid& uuid, std::string& name, uint64_t& creationOrder);
 void checkParameterBound(const std::string& parameter, uint64_t value, uint64_t max = std::numeric_limits<uint16_t>::max());
 
 void setupLua(LuaContext& luaCtx, bool client, bool configCheck, const std::string& config);
@@ -112,7 +112,7 @@ void loadLuaConfigurationFile(LuaContext& luaCtx, const std::string& config, boo
  * returns: -1 if type wasn't compatible, 0 if not found or number of element(s) found
  */
 template <class G, class T, class V>
-static inline int getOptionalValue(boost::optional<V>& vars, const std::string& key, T& value, bool warnOnWrongType = true)
+static inline int getOptionalValue(std::optional<V>& vars, const std::string& key, T& value, bool warnOnWrongType = true)
 {
   /* nothing found, nothing to return */
   if (!vars) {
@@ -136,7 +136,7 @@ static inline int getOptionalValue(boost::optional<V>& vars, const std::string&
 }
 
 template <class T, class V>
-static inline int getOptionalIntegerValue(const std::string& func, boost::optional<V>& vars, const std::string& key, T& value)
+static inline int getOptionalIntegerValue(const std::string& func, std::optional<V>& vars, const std::string& key, T& value)
 {
   std::string valueStr;
   auto ret = getOptionalValue<std::string>(vars, key, valueStr, true);
@@ -153,7 +153,7 @@ static inline int getOptionalIntegerValue(const std::string& func, boost::option
 }
 
 template <class V>
-static inline void checkAllParametersConsumed(const std::string& func, const boost::optional<V>& vars)
+static inline void checkAllParametersConsumed(const std::string& func, const std::optional<V>& vars)
 {
   /* no vars */
   if (!vars) {
index 6161bbfa82ebc7f189746e42955a2d1522f59ebd..1c2b51bb051287d95b2586ae1d74835f3152d1b2 100644 (file)
@@ -1237,12 +1237,12 @@ uint32_t IncomingHTTP2Connection::getConcurrentStreamsCount() const
   return d_currentStreams.size() + d_killedStreams.size();
 }
 
-boost::optional<struct timeval> IncomingHTTP2Connection::getIdleClientReadTTD(struct timeval now) const
+std::optional<struct timeval> IncomingHTTP2Connection::getIdleClientReadTTD(struct timeval now) const
 {
   const auto& currentConfig = dnsdist::configuration::getCurrentRuntimeConfiguration();
   auto idleTimeout = d_ci.cs->dohFrontend->d_idleTimeout;
   if (currentConfig.d_maxTCPConnectionDuration == 0 && idleTimeout == 0) {
-    return boost::none;
+    return std::nullopt;
   }
 
   if (currentConfig.d_maxTCPConnectionDuration > 0) {
@@ -1269,7 +1269,7 @@ void IncomingHTTP2Connection::updateIO(IOState newState, const timeval& now)
 
 void IncomingHTTP2Connection::updateIO(IOState newState, const FDMultiplexer::callbackfunc_t& callback)
 {
-  boost::optional<struct timeval> ttd{boost::none};
+  std::optional<struct timeval> ttd{std::nullopt};
 
   if (newState == IOState::Async) {
     auto shared = shared_from_this();
index e14eee439522485b837194a5b643263b21d96530..82156f60c648dc1278cdd0a0028a3fcdc38865d0 100644 (file)
@@ -100,7 +100,7 @@ private:
   IOState handleHandshake(const struct timeval& now) override;
   bool hasPendingWrite() const;
   void writeToSocket(bool socketReady);
-  boost::optional<struct timeval> getIdleClientReadTTD(struct timeval now) const;
+  std::optional<struct timeval> getIdleClientReadTTD(struct timeval now) const;
 
   std::unique_ptr<nghttp2_session, decltype(&nghttp2_session_del)> d_session{nullptr, nghttp2_session_del};
   std::unordered_map<StreamID, PendingQuery> d_currentStreams;
index 071ae74a30bd0fc4eb39ba0a90faf40886456f19..87fe34aa599912eddb7a9f29a589e3cef628c40a 100644 (file)
@@ -496,7 +496,7 @@ void DoHConnectionToBackend::updateIO(IOState newState, const FDMultiplexer::cal
     .tv_sec = 0, .tv_usec = 0};
 
   gettimeofday(&now, nullptr);
-  boost::optional<struct timeval> ttd{boost::none};
+  std::optional<struct timeval> ttd{std::nullopt};
   if (!noTTD) {
     if (d_healthCheckQuery) {
       ttd = getBackendHealthCheckTTD(now);
index 9b1f56f5953845d3b2a45988be410a3cd572b3aa..d32fc9b961db8b29716a3c1442148ef44676acd6 100644 (file)
@@ -100,15 +100,15 @@ private:
   const DNSResponse* d_dr{nullptr};
   const std::string* d_ServerIdentityRef{nullptr};
 
-  boost::optional<PBQuestion> d_question{boost::none};
-  boost::optional<std::string> d_serverIdentity{boost::none};
-  boost::optional<ComboAddress> d_requestor{boost::none};
-  boost::optional<ComboAddress> d_responder{boost::none};
-  boost::optional<Netmask> d_ednsSubnet{boost::none};
-  boost::optional<std::pair<time_t, uint32_t>> d_time{boost::none};
-  boost::optional<std::pair<time_t, uint32_t>> d_queryTime{boost::none};
-  boost::optional<size_t> d_bytes{boost::none};
-  boost::optional<uint8_t> d_rcode{boost::none};
+  std::optional<PBQuestion> d_question{std::nullopt};
+  std::optional<std::string> d_serverIdentity{std::nullopt};
+  std::optional<ComboAddress> d_requestor{std::nullopt};
+  std::optional<ComboAddress> d_responder{std::nullopt};
+  std::optional<Netmask> d_ednsSubnet{std::nullopt};
+  std::optional<std::pair<time_t, uint32_t>> d_time{std::nullopt};
+  std::optional<std::pair<time_t, uint32_t>> d_queryTime{std::nullopt};
+  std::optional<size_t> d_bytes{std::nullopt};
+  std::optional<uint8_t> d_rcode{std::nullopt};
 
   pdns::ProtoZero::Message::MessageType d_type{pdns::ProtoZero::Message::MessageType::DNSQueryType};
   bool d_includeCNAME{false};
index 81cf10b99500f967b306b333d49cc8384188146b..e540c0207be3db0b0ea28d83da90242ac6fff7c6 100644 (file)
@@ -1140,7 +1140,7 @@ private:
 class TagRule : public DNSRule
 {
 public:
-  TagRule(const std::string& tag, boost::optional<std::string> value, bool emptyAsWildcard) :
+  TagRule(const std::string& tag, std::optional<std::string> value, bool emptyAsWildcard) :
     d_value(std::move(value)), d_tag(tag), d_emptyAsWildcard(emptyAsWildcard)
   {
   }
@@ -1168,7 +1168,7 @@ public:
   }
 
 private:
-  boost::optional<std::string> d_value;
+  std::optional<std::string> d_value;
   std::string d_tag;
   bool d_emptyAsWildcard;
 };
@@ -1403,7 +1403,7 @@ private:
 class ProxyProtocolValueRule : public DNSRule
 {
 public:
-  ProxyProtocolValueRule(uint8_t type, boost::optional<std::string> value) :
+  ProxyProtocolValueRule(uint8_t type, std::optional<std::string> value) :
     d_value(std::move(value)), d_type(type)
   {
   }
@@ -1432,7 +1432,7 @@ public:
   }
 
 private:
-  boost::optional<std::string> d_value;
+  std::optional<std::string> d_value;
   uint8_t d_type;
 };
 
index ddea1fa2ff4bc93658db8cba0784285c00a91f0c..f64d8573cd0d442dee24aa1bebb914d289f26ea0 100644 (file)
@@ -508,7 +508,7 @@ void TCPConnectionToBackend::handleIO(std::shared_ptr<TCPConnectionToBackend>& c
         conn->d_ioState->update(iostate, handleIOCallback, conn);
       }
       else {
-        boost::optional<struct timeval> ttd{boost::none};
+        std::optional<struct timeval> ttd{std::nullopt};
         if (iostate == IOState::NeedRead) {
           ttd = conn->getBackendReadTTD(now);
         }
index 308c073c8863bdc3aa8060c59340cb2892f89667..b6faa41aac93253ca67fa4ecb278b8ce184b8f0b 100644 (file)
@@ -145,13 +145,13 @@ public:
 protected:
   bool reconnect();
 
-  boost::optional<struct timeval> getBackendHealthCheckTTD(const struct timeval& now) const
+  std::optional<struct timeval> getBackendHealthCheckTTD(const struct timeval& now) const
   {
     if (d_ds == nullptr) {
       throw std::runtime_error("getBackendReadTTD() without any backend selected");
     }
     if (d_ds->d_config.checkTimeout == 0) {
-      return boost::none;
+      return std::nullopt;
     }
 
     struct timeval res = now;
@@ -162,13 +162,13 @@ protected:
     return res;
   }
 
-  boost::optional<struct timeval> getBackendReadTTD(const struct timeval& now) const
+  std::optional<struct timeval> getBackendReadTTD(const struct timeval& now) const
   {
     if (d_ds == nullptr) {
       throw std::runtime_error("getBackendReadTTD() without any backend selected");
     }
     if (d_ds->d_config.tcpRecvTimeout == 0) {
-      return boost::none;
+      return std::nullopt;
     }
 
     struct timeval res = now;
@@ -177,13 +177,13 @@ protected:
     return res;
   }
 
-  boost::optional<struct timeval> getBackendWriteTTD(const struct timeval& now) const
+  std::optional<struct timeval> getBackendWriteTTD(const struct timeval& now) const
   {
     if (d_ds == nullptr) {
       throw std::runtime_error("getBackendWriteTTD() called without any backend selected");
     }
     if (d_ds->d_config.tcpSendTimeout == 0) {
-      return boost::none;
+      return std::nullopt;
     }
 
     struct timeval res = now;
@@ -192,13 +192,13 @@ protected:
     return res;
   }
 
-  boost::optional<struct timeval> getBackendConnectTTD(const struct timeval& now) const
+  std::optional<struct timeval> getBackendConnectTTD(const struct timeval& now) const
   {
     if (d_ds == nullptr) {
       throw std::runtime_error("getBackendConnectTTD() called without any backend selected");
     }
     if (d_ds->d_config.tcpConnectTimeout == 0) {
-      return boost::none;
+      return std::nullopt;
     }
 
     struct timeval res = now;
index d592262fa2292cebc035251b344c526916d0ac12..c9dc5e5f4384970f4477a51e461062a1cf700df8 100644 (file)
@@ -51,8 +51,8 @@ public:
 
   void resetForNewQuery();
 
-  boost::optional<timeval> getClientReadTTD(timeval now) const;
-  boost::optional<timeval> getClientWriteTTD(const timeval& now) const;
+  std::optional<timeval> getClientReadTTD(timeval now) const;
+  std::optional<timeval> getClientWriteTTD(const timeval& now) const;
   bool maxConnectionDurationReached(unsigned int maxConnectionDuration, const timeval& now) const;
 
   std::shared_ptr<TCPConnectionToBackend> getDownstreamConnection(std::shared_ptr<DownstreamState>& backend, const std::unique_ptr<std::vector<ProxyProtocolValue>>& tlvs, const struct timeval& now);
index 26a49b19d1628d43a8e1f93266f850b44eff293b..689e5f7f6094889cd66a8e5ac6b5cca290aee223 100644 (file)
@@ -326,11 +326,11 @@ void IncomingTCPConnectionState::resetForNewQuery()
   d_readIOsCurrentQuery = 0;
 }
 
-boost::optional<timeval> IncomingTCPConnectionState::getClientReadTTD(timeval now) const
+std::optional<timeval> IncomingTCPConnectionState::getClientReadTTD(timeval now) const
 {
   const auto& runtimeConfiguration = dnsdist::configuration::getCurrentRuntimeConfiguration();
   if (!isNearTCPLimits() && runtimeConfiguration.d_maxTCPConnectionDuration == 0 && runtimeConfiguration.d_tcpRecvTimeout == 0) {
-    return boost::none;
+    return std::nullopt;
   }
 
   size_t maxTCPConnectionDuration = runtimeConfiguration.d_maxTCPConnectionDuration;
@@ -362,11 +362,11 @@ boost::optional<timeval> IncomingTCPConnectionState::getClientReadTTD(timeval no
   return now;
 }
 
-boost::optional<timeval> IncomingTCPConnectionState::getClientWriteTTD(const timeval& now) const
+std::optional<timeval> IncomingTCPConnectionState::getClientWriteTTD(const timeval& now) const
 {
   const auto& runtimeConfiguration = dnsdist::configuration::getCurrentRuntimeConfiguration();
   if (runtimeConfiguration.d_maxTCPConnectionDuration == 0 && runtimeConfiguration.d_tcpSendTimeout == 0) {
-    return boost::none;
+    return std::nullopt;
   }
 
   timeval res(now);
index eec766b434a951f9fc0cbb8546eac584ead102b2..4e85d911b029b1cd560e95b04932f6a8ab3873f2 100644 (file)
@@ -552,7 +552,7 @@ bool processResponseAfterRules(PacketBuffer& response, DNSResponse& dnsResponse,
     }
     {
       auto cacheInsertCloser = dnsResponse.ids.getCloser("packetCacheInsert", __func__); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay)
-      dnsResponse.ids.packetCache->insert(cacheKey, zeroScope ? boost::none : dnsResponse.ids.subnet, dnsResponse.ids.cacheFlags, dnsResponse.ids.dnssecOK ? *dnsResponse.ids.dnssecOK : false, dnsResponse.ids.qname, dnsResponse.ids.qtype, dnsResponse.ids.qclass, response, dnsResponse.ids.forwardedOverUDP, dnsResponse.getHeader()->rcode, dnsResponse.ids.tempFailureTTL);
+      dnsResponse.ids.packetCache->insert(cacheKey, zeroScope ? std::nullopt : dnsResponse.ids.subnet, dnsResponse.ids.cacheFlags, dnsResponse.ids.dnssecOK ? *dnsResponse.ids.dnssecOK : false, dnsResponse.ids.qname, dnsResponse.ids.qtype, dnsResponse.ids.qclass, response, dnsResponse.ids.forwardedOverUDP, dnsResponse.getHeader()->rcode, dnsResponse.ids.tempFailureTTL);
     }
     const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
     const auto& cacheInsertedRespRuleActions = dnsdist::rules::getResponseRuleChain(chains, dnsdist::rules::ResponseRuleChain::CacheInsertedResponseRules);
@@ -2396,7 +2396,7 @@ static void maintThread()
     {
       auto lua = g_lua.lock();
       try {
-        auto maintenanceCallback = lua->readVariable<boost::optional<std::function<void()>>>("maintenance");
+        auto maintenanceCallback = lua->readVariable<std::optional<std::function<void()>>>("maintenance");
         if (maintenanceCallback) {
           (*maintenanceCallback)();
         }
index 75c419c42fd2e5f37882d0724cd6819c77218a40..234ef0962e317516732a4000e0a521c7ef7e7508 100644 (file)
@@ -56,7 +56,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
     const DNSName qname(reinterpret_cast<const char*>(data), size, sizeof(dnsheader), false, &qtype, &qclass, &consumed);
     pcSkipCookies.getKey(qname.getStorage(), consumed, vect, false);
     pcHashCookies.getKey(qname.getStorage(), consumed, vect, false);
-    boost::optional<Netmask> subnet;
+    std::optional<Netmask> subnet;
     DNSDistPacketCache::getClientSubnet(vect, consumed, subnet);
   }
   catch (const std::exception& e) {
index a69c7c1cadd3be0c2baf34132f5b407204106427..33f46ed9c5526d58e0a8ed88628bd0d004c99314 100644 (file)
@@ -72,7 +72,7 @@ public:
     return result;
   }
 
-  void add(IOState iostate, FDMultiplexer::callbackfunc_t callback, FDMultiplexer::funcparam_t callbackData, boost::optional<struct timeval> ttd)
+  void add(IOState iostate, FDMultiplexer::callbackfunc_t callback, FDMultiplexer::funcparam_t callbackData, std::optional<struct timeval> ttd)
   {
     DEBUGLOG("in "<<__PRETTY_FUNCTION__<<" for fd "<<d_fd<<", last state was "<<getState()<<", adding "<<(int)iostate);
     if (iostate == IOState::NeedRead) {
@@ -103,7 +103,7 @@ public:
     }
   }
 
-  void update(IOState iostate, FDMultiplexer::callbackfunc_t callback = FDMultiplexer::callbackfunc_t(), FDMultiplexer::funcparam_t callbackData = boost::any(), boost::optional<struct timeval> ttd = boost::none)
+  void update(IOState iostate, FDMultiplexer::callbackfunc_t callback = FDMultiplexer::callbackfunc_t(), FDMultiplexer::funcparam_t callbackData = boost::any(), std::optional<struct timeval> ttd = std::nullopt)
   {
     DEBUGLOG("in "<<__PRETTY_FUNCTION__<<" for fd "<<d_fd<<", last state was "<<getState()<<" , new state is "<<(int)iostate);
     if (isWaitingForRead() && iostate == IOState::Done) {
index 96da5da06190cfd45e431ad9f6b3c0d0e43b906c..b7f110a40e5ead84c91d696e4316e6adcbdf0056 100644 (file)
@@ -498,11 +498,11 @@ BOOST_AUTO_TEST_CASE(test_PacketCache)
   bool dnssecOK = true;
   bool receivedOverUDP = true;
   uint32_t key = 0;
-  boost::optional<Netmask> subnet;
+  std::optional<Netmask> subnet;
   ids.queryRealTime.start();
   DNSQuestion dq(ids, query);
   packetCache->get(dq, 0, &key, subnet, dnssecOK, receivedOverUDP);
-  packetCache->insert(key, subnet, *(getFlagsFromDNSHeader(dq.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+  packetCache->insert(key, subnet, *(getFlagsFromDNSHeader(dq.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
 
   std::string poolName("test-pool");
   auto testPool = ServerPool();
index 58bf54894c33a0c7fc757ea96504e31923f2c728..bb01c3d871456f94606a87b044624acfa3635723 100644 (file)
@@ -24,7 +24,6 @@
 #ifndef DISABLE_PROTOBUF
 #ifndef BOOST_TEST_DYN_LINK
 #define BOOST_TEST_DYN_LINK
-#include <boost/optional/optional.hpp>
 #endif
 
 #include <boost/test/unit_test.hpp>
index 4038655e10acbce8eb17fdee8546bda7a42b9164..296bc9a81b25340b3cb45a1b2ba125e158edc9e2 100644 (file)
@@ -1298,9 +1298,9 @@ BOOST_FIXTURE_TEST_CASE(test_DynBlockRulesMetricsCache_GetTopN, TestFixture) {
         (void)node;
         (void)children;
         if (self.queries > 0) {
-          return std::tuple<bool, boost::optional<std::string>, boost::optional<int>>(true, boost::none, boost::none);
+          return std::tuple<bool, std::optional<std::string>, std::optional<int>>(true, std::nullopt, std::nullopt);
         }
-        return std::tuple<bool, boost::optional<std::string>, boost::optional<int>>(false, boost::none, boost::none);
+        return std::tuple<bool, std::optional<std::string>, std::optional<int>>(false, std::nullopt, std::nullopt);
       });
     }
 
@@ -1360,9 +1360,9 @@ BOOST_FIXTURE_TEST_CASE(test_DynBlockRulesMetricsCache_GetTopN, TestFixture) {
         (void)node;
         (void)children;
         if (self.queries > 0) {
-          return std::tuple<bool, boost::optional<std::string>, boost::optional<int>>(true, "blocked for a different reason", static_cast<int>(DNSAction::Action::Truncate));
+          return std::tuple<bool, std::optional<std::string>, std::optional<int>>(true, "blocked for a different reason", static_cast<int>(DNSAction::Action::Truncate));
         }
-        return std::tuple<bool, boost::optional<std::string>, boost::optional<int>>(false, boost::none, boost::none);
+        return std::tuple<bool, std::optional<std::string>, std::optional<int>>(false, std::nullopt, std::nullopt);
       });
     }
 
@@ -1421,9 +1421,9 @@ BOOST_FIXTURE_TEST_CASE(test_DynBlockRulesMetricsCache_GetTopN, TestFixture) {
       DynBlockRulesGroup::DynBlockRule rule(reason, blockDuration, 0, 0, numberOfSeconds, action);
       dbrg.setSuffixMatchRule(std::move(rule), [](const StatNode& node, const StatNode::Stat& self, const StatNode::Stat& children) {
         if (self.queries > 0) {
-          return std::tuple<bool, boost::optional<std::string>, boost::optional<int>>(true, boost::none, boost::none);
+          return std::tuple<bool, std::optional<std::string>, std::optional<int>>(true, std::nullopt, std::nullopt);
         }
-        return std::tuple<bool, boost::optional<std::string>, boost::optional<int>>(false, boost::none, boost::none);
+        return std::tuple<bool, std::optional<std::string>, std::optional<int>>(false, std::nullopt, std::nullopt);
       });
     }
 
index b45b33f01193120480471c3c3992a5c08633f919..8b96024450b4667ede79c4ba2afad9b95e1bbbdb 100644 (file)
@@ -1,5 +1,6 @@
 #ifndef BOOST_TEST_DYN_LINK
 #define BOOST_TEST_DYN_LINK
+#include <optional>
 #endif
 
 #define BOOST_TEST_NO_MAIN
@@ -59,13 +60,13 @@ static void test_packetcache_simple(bool shuffle)
       pwR.commit();
 
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+      localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
 
       found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
       if (found) {
@@ -90,7 +91,7 @@ static void test_packetcache_simple(bool shuffle)
       GenericDNSPacketWriter<PacketBuffer> pwQ(query, ids.qname, QType::A, QClass::IN, 0);
       pwQ.getHeader()->rd = 1;
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
       if (found) {
@@ -109,7 +110,7 @@ static void test_packetcache_simple(bool shuffle)
       GenericDNSPacketWriter<PacketBuffer> pwQ(query, ids.qname, QType::A, QClass::IN, 0);
       pwQ.getHeader()->rd = 1;
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       if (localCache.get(dnsQuestion, pwQ.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP)) {
         matches++;
@@ -186,13 +187,13 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheSharded)
       pwR.commit();
 
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::AAAA, QClass::IN, response, receivedOverUDP, 0, boost::none);
+      localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::AAAA, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
 
       found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
       if (found) {
@@ -217,7 +218,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheSharded)
       GenericDNSPacketWriter<PacketBuffer> pwQ(query, ids.qname, QType::AAAA, QClass::IN, 0);
       pwQ.getHeader()->rd = 1;
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       if (localCache.get(dnsQuestion, pwQ.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP)) {
         matches++;
@@ -287,13 +288,13 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheTCP)
     {
       /* UDP */
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, boost::none);
+      localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, std::nullopt);
       found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
       BOOST_CHECK_EQUAL(found, true);
       BOOST_CHECK(!subnet);
@@ -302,14 +303,14 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheTCP)
     {
       /* same but over TCP */
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       ids.protocol = dnsdist::Protocol::DoTCP;
       DNSQuestion dnsQuestion(ids, query);
       bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, !receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, !receivedOverUDP, RCode::NoError, boost::none);
+      localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, !receivedOverUDP, RCode::NoError, std::nullopt);
       found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, !receivedOverUDP, 0, true);
       BOOST_CHECK_EQUAL(found, true);
       BOOST_CHECK(!subnet);
@@ -353,20 +354,20 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheServFailTTL)
     pwR.commit();
 
     uint32_t key = 0;
-    boost::optional<Netmask> subnet;
+    std::optional<Netmask> subnet;
     DNSQuestion dnsQuestion(ids, query);
     bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
     BOOST_CHECK_EQUAL(found, false);
     BOOST_CHECK(!subnet);
 
     // Insert with failure-TTL of 0 (-> should not enter cache).
-    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::ServFail, boost::optional<uint32_t>(0));
+    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::ServFail, std::optional<uint32_t>(0));
     found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
     BOOST_CHECK_EQUAL(found, false);
     BOOST_CHECK(!subnet);
 
     // Insert with failure-TTL non-zero (-> should enter cache).
-    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::ServFail, boost::optional<uint32_t>(300));
+    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::ServFail, std::optional<uint32_t>(300));
     found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
     BOOST_CHECK_EQUAL(found, true);
     BOOST_CHECK(!subnet);
@@ -416,13 +417,13 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheNoDataTTL)
     pwR.commit();
 
     uint32_t key = 0;
-    boost::optional<Netmask> subnet;
+    std::optional<Netmask> subnet;
     DNSQuestion dnsQuestion(ids, query);
     bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
     BOOST_CHECK_EQUAL(found, false);
     BOOST_CHECK(!subnet);
 
-    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, name, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, boost::none);
+    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, name, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, std::nullopt);
     found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
     BOOST_CHECK_EQUAL(found, true);
     BOOST_CHECK(!subnet);
@@ -478,13 +479,13 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheNXDomainTTL)
     pwR.commit();
 
     uint32_t key = 0;
-    boost::optional<Netmask> subnet;
+    std::optional<Netmask> subnet;
     DNSQuestion dnsQuestion(ids, query);
     bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
     BOOST_CHECK_EQUAL(found, false);
     BOOST_CHECK(!subnet);
 
-    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, name, QType::A, QClass::IN, response, receivedOverUDP, RCode::NXDomain, boost::none);
+    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, name, QType::A, QClass::IN, response, receivedOverUDP, RCode::NXDomain, std::nullopt);
     found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
     BOOST_CHECK_EQUAL(found, true);
     BOOST_CHECK(!subnet);
@@ -525,7 +526,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheTruncated)
   pwR.commit();
 
   uint32_t key = 0;
-  boost::optional<Netmask> subnet;
+  std::optional<Netmask> subnet;
   DNSQuestion dnsQuestion(ids, query);
   bool allowTruncated = true;
 
@@ -545,7 +546,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheTruncated)
     BOOST_REQUIRE_EQUAL(found, false);
     BOOST_CHECK(!subnet);
 
-    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
 
     found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, false, allowTruncated);
     BOOST_REQUIRE_EQUAL(found, false);
@@ -566,7 +567,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheTruncated)
     BOOST_REQUIRE_EQUAL(found, false);
     BOOST_CHECK(!subnet);
 
-    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
 
     allowTruncated = false;
     found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, false, allowTruncated);
@@ -627,13 +628,13 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheMaximumSize)
     {
       /* UDP */
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       bool found = packetCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, boost::none);
+      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, std::nullopt);
       found = packetCache.get(dnsQuestion, queryID, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
       BOOST_CHECK_EQUAL(found, true);
       BOOST_CHECK(!subnet);
@@ -642,14 +643,14 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheMaximumSize)
     {
       /* same but over TCP */
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       ids.protocol = dnsdist::Protocol::DoTCP;
       DNSQuestion dnsQuestion(ids, query);
       bool found = packetCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, !receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, !receivedOverUDP, RCode::NoError, boost::none);
+      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, !receivedOverUDP, RCode::NoError, std::nullopt);
       found = packetCache.get(dnsQuestion, queryID, &key, subnet, dnssecOK, !receivedOverUDP, 0, true);
       BOOST_CHECK_EQUAL(found, true);
       BOOST_CHECK(!subnet);
@@ -669,13 +670,13 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheMaximumSize)
     {
       /* UDP */
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       bool found = packetCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, boost::none);
+      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, std::nullopt);
       found = packetCache.get(dnsQuestion, queryID, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
       BOOST_CHECK_EQUAL(found, false);
     }
@@ -683,14 +684,14 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheMaximumSize)
     {
       /* same but over TCP */
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       ids.protocol = dnsdist::Protocol::DoTCP;
       DNSQuestion dnsQuestion(ids, query);
       bool found = packetCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, !receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, !receivedOverUDP, RCode::NoError, boost::none);
+      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, !receivedOverUDP, RCode::NoError, std::nullopt);
       found = packetCache.get(dnsQuestion, queryID, &key, subnet, dnssecOK, !receivedOverUDP, 0, true);
       BOOST_CHECK_EQUAL(found, false);
     }
@@ -727,13 +728,13 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheMaximumSize)
     {
       /* UDP */
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       bool found = packetCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, boost::none);
+      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, RCode::NoError, std::nullopt);
       found = packetCache.get(dnsQuestion, queryID, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
       BOOST_CHECK_EQUAL(found, true);
     }
@@ -741,14 +742,14 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheMaximumSize)
     {
       /* same but over TCP */
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       ids.protocol = dnsdist::Protocol::DoTCP;
       DNSQuestion dnsQuestion(ids, query);
       bool found = packetCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, !receivedOverUDP);
       BOOST_CHECK_EQUAL(found, false);
       BOOST_CHECK(!subnet);
 
-      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, !receivedOverUDP, RCode::NoError, boost::none);
+      packetCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, !receivedOverUDP, RCode::NoError, std::nullopt);
       found = packetCache.get(dnsQuestion, queryID, &key, subnet, dnssecOK, !receivedOverUDP, 0, true);
       BOOST_CHECK_EQUAL(found, true);
     }
@@ -787,11 +788,11 @@ static void threadMangler(unsigned int offset)
       pwR.commit();
 
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       s_localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
 
-      s_localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+      s_localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
     }
   }
   catch (PDNSException& e) {
@@ -819,7 +820,7 @@ static void threadReader(unsigned int offset)
       pwQ.getHeader()->rd = 1;
 
       uint32_t key = 0;
-      boost::optional<Netmask> subnet;
+      std::optional<Netmask> subnet;
       DNSQuestion dnsQuestion(ids, query);
       bool found = s_localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
       if (!found) {
@@ -892,7 +893,7 @@ BOOST_AUTO_TEST_CASE(test_PCCollision)
   uint16_t qid = 0x42;
   uint32_t key{};
   uint32_t secondKey{};
-  boost::optional<Netmask> subnetOut;
+  std::optional<Netmask> subnetOut;
   bool dnssecOK = false;
 
   /* lookup for a query with a first ECS value,
@@ -928,7 +929,7 @@ BOOST_AUTO_TEST_CASE(test_PCCollision)
     pwR.addOpt(512, 0, 0, ednsOptions);
     pwR.commit();
 
-    localCache.insert(key, subnetOut, *(getFlagsFromDNSHeader(pwR.getHeader())), dnssecOK, ids.qname, ids.qtype, QClass::IN, response, receivedOverUDP, RCode::NoError, boost::none);
+    localCache.insert(key, subnetOut, *(getFlagsFromDNSHeader(pwR.getHeader())), dnssecOK, ids.qname, ids.qtype, QClass::IN, response, receivedOverUDP, RCode::NoError, std::nullopt);
     BOOST_CHECK_EQUAL(localCache.getSize(), 1U);
 
     found = localCache.get(dnsQuestion, 0, &key, subnetOut, dnssecOK, receivedOverUDP);
@@ -1031,7 +1032,7 @@ BOOST_AUTO_TEST_CASE(test_PCDNSSECCollision)
   ids.protocol = dnsdist::Protocol::DoUDP;
   uint16_t qid = 0x42;
   uint32_t key{};
-  boost::optional<Netmask> subnetOut;
+  std::optional<Netmask> subnetOut;
 
   /* lookup for a query with DNSSEC OK,
      insert a corresponding response with DO set,
@@ -1062,7 +1063,7 @@ BOOST_AUTO_TEST_CASE(test_PCDNSSECCollision)
     pwR.addOpt(512, 0, EDNS_HEADER_FLAG_DO);
     pwR.commit();
 
-    localCache.insert(key, subnetOut, *(getFlagsFromDNSHeader(pwR.getHeader())), /* DNSSEC OK is set */ true, ids.qname, ids.qtype, QClass::IN, response, receivedOverUDP, RCode::NoError, boost::none);
+    localCache.insert(key, subnetOut, *(getFlagsFromDNSHeader(pwR.getHeader())), /* DNSSEC OK is set */ true, ids.qname, ids.qtype, QClass::IN, response, receivedOverUDP, RCode::NoError, std::nullopt);
     BOOST_CHECK_EQUAL(localCache.getSize(), 1U);
 
     found = localCache.get(dnsQuestion, 0, &key, subnetOut, false, receivedOverUDP);
@@ -1114,7 +1115,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheInspection)
       pwR.commit();
     }
 
-    localCache.insert(key++, boost::none, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key++, std::nullopt, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
     BOOST_CHECK_EQUAL(localCache.getSize(), key);
   }
 
@@ -1156,7 +1157,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheInspection)
       pwR.commit();
     }
 
-    localCache.insert(key++, boost::none, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key++, std::nullopt, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
     BOOST_CHECK_EQUAL(localCache.getSize(), key);
   }
 
@@ -1179,7 +1180,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheInspection)
     pwR.addOpt(4096, 0, 0);
     pwR.commit();
 
-    localCache.insert(key++, boost::none, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key++, std::nullopt, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
     BOOST_CHECK_EQUAL(localCache.getSize(), key);
   }
 
@@ -1209,7 +1210,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheInspection)
       pwR.commit();
     }
 
-    localCache.insert(key++, boost::none, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key++, std::nullopt, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
     BOOST_CHECK_EQUAL(localCache.getSize(), key);
   }
 
@@ -1233,7 +1234,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheInspection)
       pwR.commit();
     }
 
-    localCache.insert(key++, boost::none, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key++, std::nullopt, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, qname, QType::A, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
     BOOST_CHECK_EQUAL(localCache.getSize(), key);
   }
 
@@ -1353,13 +1354,13 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheXFR)
     pwR.commit();
 
     uint32_t key = 0;
-    boost::optional<Netmask> subnet;
+    std::optional<Netmask> subnet;
     DNSQuestion dnsQuestion(ids, query);
     bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
     BOOST_CHECK_EQUAL(found, false);
     BOOST_CHECK(!subnet);
 
-    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, ids.qtype, ids.qclass, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key, subnet, *(getFlagsFromDNSHeader(dnsQuestion.getHeader().get())), dnssecOK, ids.qname, ids.qtype, ids.qclass, response, receivedOverUDP, 0, std::nullopt);
     found = localCache.get(dnsQuestion, pwR.getHeader()->id, &key, subnet, dnssecOK, receivedOverUDP, 0, true);
     BOOST_CHECK_EQUAL(found, false);
   }
@@ -1494,13 +1495,13 @@ static void test_packetcache_shuffle(
     PacketBuffer response;
     create_shuffle_response(addresses, ids.qname, response, testqtype, testtype);
 
-    boost::optional<Netmask> subnet;
+    std::optional<Netmask> subnet;
     uint32_t key = 0;
     DNSQuestion dnsQuestion(ids, query);
     bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
     BOOST_CHECK_EQUAL(found, false);
 
-    localCache.insert(key, boost::none, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, ids.qname, testqtype, QClass::IN, response, receivedOverUDP, 0, boost::none);
+    localCache.insert(key, std::nullopt, *getFlagsFromDNSHeader(pwQ.getHeader()), dnssecOK, ids.qname, testqtype, QClass::IN, response, receivedOverUDP, 0, std::nullopt);
   }
 
   // now prepare all the possible permutations and save them, to compare later
@@ -1558,7 +1559,7 @@ static void test_packetcache_shuffle(
     pwQ.getHeader()->rd = 1;
 
     uint32_t key = 0;
-    boost::optional<Netmask> subnet;
+    std::optional<Netmask> subnet;
     DNSQuestion dnsQuestion(ids, query);
     bool found = localCache.get(dnsQuestion, 0, &key, subnet, dnssecOK, receivedOverUDP);
     BOOST_CHECK_EQUAL(found, true);
index a20957513c52cf1fd4f0c901d2595a630349b024..e70f0b1b89cbcd484b9948cbf302a6af6ff676c7 100644 (file)
@@ -65,7 +65,7 @@ std::string&& DnstapMessage::getBuffer()
   return std::move(d_buffer);
 }
 
-DnstapMessage::DnstapMessage(std::string&& buffer, DnstapMessage::MessageType type, const std::string& identity, const ComboAddress* requestor, const ComboAddress* responder, DnstapMessage::ProtocolType protocol, const char* packet, const size_t len, const struct timespec* queryTime, const struct timespec* responseTime, const boost::optional<const DNSName&>& auth, const boost::optional<HttpProtocolType> httpProtocol) :
+DnstapMessage::DnstapMessage(std::string&& buffer, DnstapMessage::MessageType type, const std::string& identity, const ComboAddress* requestor, const ComboAddress* responder, DnstapMessage::ProtocolType protocol, const char* packet, const size_t len, const struct timespec* queryTime, const struct timespec* responseTime, const DNSName& auth, const std::optional<HttpProtocolType> httpProtocol) :
   d_buffer(std::move(buffer))
 {
   protozero::pbf_writer pbf{d_buffer};
@@ -136,8 +136,8 @@ DnstapMessage::DnstapMessage(std::string&& buffer, DnstapMessage::MessageType ty
     pbf_message.add_enum(DnstapMessageFields::http_protocol, static_cast<protozero::pbf_tag_type>(*httpProtocol));
   }
 
-  if (auth) {
-    pbf_message.add_bytes(DnstapMessageFields::query_zone, auth->toDNSString());
+  if (!auth.empty()) {
+    pbf_message.add_bytes(DnstapMessageFields::query_zone, auth.toDNSString());
   }
 
   pbf_message.commit();
index 070e2d03052e971e2e227f59b67ffa90e3d5493c..f634de9e8552881b9f7db7bef0ba7ca74594ec06 100644 (file)
@@ -67,7 +67,7 @@ public:
     HTTP3 = 3,
   };
 
-  DnstapMessage(std::string&& buffer, MessageType type, const std::string& identity, const ComboAddress* requestor, const ComboAddress* responder, ProtocolType protocol, const char* packet, size_t len, const struct timespec* queryTime, const struct timespec* responseTime, const boost::optional<const DNSName&>& auth = boost::none, const boost::optional<HttpProtocolType> httpProtocol = boost::none);
+  DnstapMessage(std::string&& buffer, MessageType type, const std::string& identity, const ComboAddress* requestor, const ComboAddress* responder, ProtocolType protocol, const char* packet, size_t len, const struct timespec* queryTime, const struct timespec* responseTime, const DNSName& auth, const std::optional<HttpProtocolType> httpProtocol = std::nullopt);
 
   void setExtra(const std::string& extra);
   std::string&& getBuffer();
index 6171aca9ab901e36c519ca6ebe8748f9c0d78d7e..6f5fe215a75f32199b825bcff0d5d189a65b1098 100644 (file)
@@ -191,7 +191,7 @@ static bool isEnabledForQueries(const std::shared_ptr<std::vector<std::unique_pt
   return false;
 }
 
-static void logFstreamQuery(const std::shared_ptr<std::vector<std::unique_ptr<FrameStreamLogger>>>& fstreamLoggers, const struct timeval& queryTime, const ComboAddress& localip, const ComboAddress& address, DnstapMessage::ProtocolType protocol, const boost::optional<const DNSName&>& auth, const vector<uint8_t>& packet)
+static void logFstreamQuery(const std::shared_ptr<std::vector<std::unique_ptr<FrameStreamLogger>>>& fstreamLoggers, const struct timeval& queryTime, const ComboAddress& localip, const ComboAddress& address, DnstapMessage::ProtocolType protocol, const DNSName& auth, const vector<uint8_t>& packet)
 {
   if (fstreamLoggers == nullptr)
     return;
@@ -221,7 +221,7 @@ static bool isEnabledForResponses(const std::shared_ptr<std::vector<std::unique_
   return false;
 }
 
-static void logFstreamResponse(const std::shared_ptr<std::vector<std::unique_ptr<FrameStreamLogger>>>& fstreamLoggers, const ComboAddress& localip, const ComboAddress& address, DnstapMessage::ProtocolType protocol, const boost::optional<const DNSName&>& auth, const PacketBuffer& packet, const struct timeval& queryTime, const struct timeval& replyTime)
+static void logFstreamResponse(const std::shared_ptr<std::vector<std::unique_ptr<FrameStreamLogger>>>& fstreamLoggers, const ComboAddress& localip, const ComboAddress& address, DnstapMessage::ProtocolType protocol, const DNSName& auth, const PacketBuffer& packet, const struct timeval& queryTime, const struct timeval& replyTime)
 {
   if (fstreamLoggers == nullptr)
     return;
@@ -731,7 +731,7 @@ static LWResult::Result asyncresolve(const OptLog& log, const ComboAddress& addr
       }
 #ifdef HAVE_FSTRM
       if (fstrmQEnabled) {
-        logFstreamQuery(fstrmLoggers, queryTime, localip, address, DnstapMessage::ProtocolType::DoUDP, context.d_auth ? context.d_auth : boost::none, vpacket);
+        logFstreamQuery(fstrmLoggers, queryTime, localip, address, DnstapMessage::ProtocolType::DoUDP, context.d_auth, vpacket);
       }
 #endif
     }
index ba16b8bad90113715bdc015185e1e0ea9867b906..354d81226a73deada7c09903f09f9a70bba79217 100644 (file)
@@ -32,8 +32,8 @@
 
 struct ResolveContext
 {
-  ResolveContext(const boost::optional<const boost::uuids::uuid&>& uuid, DNSName name) :
-    d_initialRequestId(uuid), d_nsName(std::move(name))
+  ResolveContext(const boost::optional<const boost::uuids::uuid&>& uuid, DNSName name, const DNSName& auth) :
+    d_initialRequestId(uuid), d_nsName(std::move(name)), d_auth(auth)
   {}
   ~ResolveContext() = default;
 
@@ -44,5 +44,5 @@ struct ResolveContext
 
   boost::optional<const boost::uuids::uuid&> d_initialRequestId;
   DNSName d_nsName;
-  boost::optional<const DNSName&> d_auth;
+  DNSName d_auth;
 };
index e9e47d04de9f5cd0d804367d1a56395e1ce117fb..d6c7b2ee2c95b8c58c7c9999d23283391b9e0f3d 100644 (file)
@@ -1459,8 +1459,7 @@ LWResult::Result SyncRes::asyncresolveWrapper(const OptLog& log, const ComboAddr
 
   int EDNSLevel = 0;
   auto luaconfsLocal = g_luaconfs.getLocal();
-  ResolveContext ctx(d_initialRequestId, nsName);
-  ctx.d_auth = auth;
+  ResolveContext ctx(d_initialRequestId, nsName, auth);
 
   LWResult::Result ret{};