::handleResponseSent(ids, udiff, state->d_ci.remote, ds->d_config.remote, static_cast<unsigned int>(currentResponse.d_buffer.size()), currentResponse.d_cleartextDH, backendProtocol);
} else {
const auto& ids = currentResponse.d_idstate;
- double udiff = ids.sentTime.udiff();
- ::handleResponseSent(ids, udiff, state->d_ci.remote, ComboAddress(), static_cast<unsigned int>(currentResponse.d_buffer.size()), currentResponse.d_cleartextDH, ids.protocol);
+ ::handleResponseSent(ids, 0., state->d_ci.remote, ComboAddress(), static_cast<unsigned int>(currentResponse.d_buffer.size()), currentResponse.d_cleartextDH, ids.protocol);
}
}
if (result == ProcessQueryResult::SendAnswer) {
TCPResponse response;
response.d_selfGenerated = true;
- response.d_buffer = std::move(state->d_buffer);
- setIDStateFromDNSQuestion(response.d_idstate, dq, std::move(qname));
response.d_idstate.origID = dh->id;
response.d_idstate.cs = state->d_ci.cs;
+ setIDStateFromDNSQuestion(response.d_idstate, dq, std::move(qname));
- DNSResponse dr = makeDNSResponseFromIDState(response.d_idstate, response.d_buffer);
- memcpy(&response.d_cleartextDH, dr.getHeader(), sizeof(response.d_cleartextDH));
+ memcpy(&response.d_cleartextDH, dh, sizeof(response.d_cleartextDH));
+ response.d_buffer = std::move(state->d_buffer);
state->d_state = IncomingTCPConnectionState::State::idle;
++state->d_currentQueriesCount;
}
auto dh = const_cast<struct dnsheader*>(reinterpret_cast<const struct dnsheader*>(du->response.data()));
- handleResponseSent(qname, QType(qtype), 0., du->downstream->d_config.remote, ComboAddress(), du->response.size(), *dh, du->downstream->getProtocol());
+ handleResponseSent(qname, QType(qtype), 0., du->ids.origDest, ComboAddress(), du->response.size(), *dh, dnsdist::Protocol::DoH);
sendDoHUnitToTheMainThread(std::move(du), "DoH self-answered response");
return;
}