uint16_t cacheFlags{0}; // DNS flags as sent to the backend // 2
uint16_t udpPayloadSize{0}; // Max UDP payload size from the query // 2
dnsdist::Protocol protocol; // 1
+ uint8_t restartCount{0}; // 1
bool ednsAdded{false};
bool ecsAdded{false};
bool skipCache{false};
dnsResponse.asynchronous = true;
dnsResponse.getMutableData() = *dnsResponse.ids.d_packet;
dnsResponse.ids.d_proxyProtocolPayloadSize = 0;
+ dnsResponse.ids.restartCount++;
auto query = dnsdist::getInternalQueryFromDQ(dnsResponse, false);
return dnsdist::queueQueryResumptionEvent(std::move(query));
});
luaCtx.registerFunction<bool (DNSResponse::*)()>("getStaleCacheHit", [](DNSResponse& dnsResponse) {
return dnsResponse.ids.staleCacheHit;
});
+
+ luaCtx.registerFunction<uint8_t (DNSResponse::*)()>("getRestartCount", [](DNSResponse& dnsResponse) {
+ return dnsResponse.ids.restartCount;
+ });
#endif /* DISABLE_NON_FFI_DQ_BINDINGS */
}
void dnsdist_ffi_dnsresponse_clear_records_type(dnsdist_ffi_dnsresponse_t* dr, uint16_t qtype) __attribute__ ((visibility ("default")));
bool dnsdist_ffi_dnsresponse_rebase(dnsdist_ffi_dnsresponse_t* dr, const char* initialName, size_t initialNameSize) __attribute__ ((visibility ("default")));
bool dnsdist_ffi_dnsresponse_get_stale_cache_hit(const dnsdist_ffi_dnsresponse_t* dnsResponse) __attribute__ ((visibility ("default")));
+uint8_t dnsdist_ffi_dnsresponse_get_restart_count(const dnsdist_ffi_dnsresponse_t* dnsResponse) __attribute__ ((visibility ("default")));
bool dnsdist_ffi_dnsquestion_set_async(dnsdist_ffi_dnsquestion_t* dq, uint16_t asyncID, uint16_t queryID, uint32_t timeoutMs) __attribute__ ((visibility ("default")));
bool dnsdist_ffi_dnsresponse_set_async(dnsdist_ffi_dnsquestion_t* dq, uint16_t asyncID, uint16_t queryID, uint32_t timeoutMs) __attribute__ ((visibility ("default")));
return dnsResponse->dr->ids.staleCacheHit;
}
+uint8_t dnsdist_ffi_dnsresponse_get_restart_count(const dnsdist_ffi_dnsresponse_t* dnsResponse)
+{
+ return dnsResponse->dr->ids.restartCount;
+}
+
bool dnsdist_ffi_dnsquestion_set_async(dnsdist_ffi_dnsquestion_t* dq, uint16_t asyncID, uint16_t queryID, uint32_t timeoutMs)
{
try {
Get the indicator of whether the cache lookup hit a stale entry.
+ .. method:: DNSResponse:getRestartCount() -> uint8_t
+
+ .. versionadded:: 2.0.0
+
+ Get the current restart count, useful when the number of restart attempts is to be checked.
+
.. method:: DNSResponse:editTTLs(func)
The function ``func`` is invoked for every entry in the answer, authority and additional section.
{
BOOST_CHECK_EQUAL(dnsdist_ffi_dnsresponse_get_stale_cache_hit(&lightDR), false);
}
+
+ {
+ BOOST_CHECK_EQUAL(dnsdist_ffi_dnsresponse_get_restart_count(&lightDR), 0);
+ }
}
BOOST_AUTO_TEST_CASE(test_Server)