return haveSomething;
}
-DNSName PacketHandler::doAdditionalServiceProcessing(const DNSName &firstTarget, const uint16_t &qtype, std::unique_ptr<DNSPacket>& r) {
+DNSName PacketHandler::doAdditionalServiceProcessing(const DNSName &firstTarget, const uint16_t &qtype, std::unique_ptr<DNSPacket>& r, vector<DNSZoneRecord>& extraRecords) {
DNSName ret = firstTarget;
size_t ctr = 5; // Max 5 SVCB Aliasforms per query
bool done = false;
case QType::SVCB: /* fall-through */
case QType::HTTPS: {
auto rrc = getRR<SVCBBaseRecordContent>(rr.dr);
- r->addRecord(std::move(rr));
+ extraRecords.push_back(std::move(rr));
ret = rrc->getTarget().isRoot() ? ret : rrc->getTarget();
if (rrc->getPriority() == 0) {
done = false;
{
DNSName content;
std::unordered_set<DNSName> lookup;
+ vector<DNSZoneRecord> extraRecords;
const auto& rrs = r->getRRS();
lookup.reserve(rrs.size());
if (content.isRoot()) {
content = rr.dr.d_name;
}
- content = doAdditionalServiceProcessing(content, rr.dr.d_type, r);
+ content = doAdditionalServiceProcessing(content, rr.dr.d_type, r, extraRecords);
break;
}
default:
}
}
}
+
+ for(auto& rr : extraRecords) {
+ r->addRecord(std::move(rr));
+ }
+ extraRecords.clear();
// TODO should we have a setting to do this?
for (auto &rec : r->getServiceRecords()) {
// Process auto hints
bool addCDS(DNSPacket& p, std::unique_ptr<DNSPacket>& r);
bool addNSEC3PARAM(const DNSPacket& p, std::unique_ptr<DNSPacket>& r);
void doAdditionalProcessing(DNSPacket& p, std::unique_ptr<DNSPacket>& r);
- DNSName doAdditionalServiceProcessing(const DNSName &firstTarget, const uint16_t &qtype, std::unique_ptr<DNSPacket>& r);
+ DNSName doAdditionalServiceProcessing(const DNSName &firstTarget, const uint16_t &qtype, std::unique_ptr<DNSPacket>& r, vector<DNSZoneRecord>& extraRecords);
+
//! Get all IPv4 or IPv6 addresses (based on |qtype|) for |target|.
vector<ComboAddress> getIPAddressFor(const DNSName &target, const uint16_t qtype);
void addNSECX(DNSPacket& p, std::unique_ptr<DNSPacket>& r, const DNSName &target, const DNSName &wildcard, int mode);