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);
+ DnstapMessagemessage(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);
{
if (d_alterFunc) {
auto lock = g_lua.lock();
const auto traceIDSize = span.trace_id.size();
if (const auto& option = map.find(EDNSOptionCode::OTTRACEIDS); option != map.end()) {
+ // 1 byte version, then tracid then optinal spanid
if (option->second.values.size() > 0) {
- if (option->second.values.at(0).size >= traceIDSize) {
+ if (option->second.values.at(0).size >= 1 + traceIDSize) {
traceidset = true;
- pdns::trace::fill(span.trace_id, option->second.values.at(0).content, traceIDSize);
+ pdns::trace::fill(span.trace_id, &option->second.values.at(0).content[1], traceIDSize); // NOLINT(cppcoreguidelines-pro-bounds-pointer-arithmetic) it's the API
}
- if (option->second.values.at(0).size == traceIDSize + span.parent_span_id.size()) {
- pdns::trace::fill(span.parent_span_id, &option->second.values.at(0).content[traceIDSize], span.parent_span_id.size()); // NOLINT(cppcoreguidelines-pro-bounds-pointer-arithmetic) it's the API
+ if (option->second.values.at(0).size == 1 + traceIDSize + span.parent_span_id.size()) {
+ pdns::trace::fill(span.parent_span_id, &option->second.values.at(0).content[traceIDSize + 1], span.parent_span_id.size()); // NOLINT(cppcoreguidelines-pro-bounds-pointer-arithmetic) it's the API
}
}
}
if (otids) {
const auto traceid = otids->first;
const auto spanid = otids->second;
- std::array<uint8_t, traceid.size() + spanid.size()> data{};
- std::copy(traceid.begin(), traceid.end(), data.begin());
- std::copy(spanid.begin(), spanid.end(), data.begin() + traceid.size());
+ std::array<uint8_t, 1 + traceid.size() + spanid.size()> data{};
+ data.at(0) = 0; // version
+ std::copy(traceid.begin(), traceid.end(), &data.at(1));
+ std::copy(spanid.begin(), spanid.end(), &data.at(1 + traceid.size()));
opts.emplace_back(EDNSOptionCode::OTTRACEIDS, std::string_view(reinterpret_cast<const char*>(data.data()), data.size())); // NOLINT
}
pw.addOpt(bufsize, 0, dnssec ? EDNSOpts::DNSSECOK : 0, opts);