optional uint32 class = 3;
optional uint32 ttl = 4;
optional bytes rdata = 5;
+ optional bool udr = 6; // True if this is the first time this RR has been seen for this question
}
optional uint32 rcode = 1;
repeated DNSRR rrs = 2;
optional string requestorId = 15; // Username of the requestor
optional bytes initialRequestId = 16; // UUID of the incoming query that initiated this outgoing query or incoming response
optional bytes deviceId = 17; // Device ID of the requestor (could be mac address IP address or e.g. IMEI)
+ optional bool newlyObservedDomain = 18; // True if the domain has not been seen before
}
#include "config.h"
#include "rec-protobuf.hh"
+#ifdef NOD_ENABLED
+void RecProtoBufMessage::setNOD(bool nod)
+{
+#ifdef HAVE_PROTOBUF
+ d_message.set_newlyobserveddomain(nod);
+#endif /* HAVE_PROTOBUF */
+}
+
+void RecProtoBufMessage::clearUDR()
+{
+#ifdef HAVE_PROTOBUF
+ auto response = d_message.mutable_response();
+ const int count = response->rrs_size();
+ for (int idx = 0; idx < count; idx++) {
+ auto rr = response->mutable_rrs(idx);
+ rr->set_udr(false);
+ }
+#endif /* HAVE_PROTOBUF */
+}
+#endif /* NOD_ENABLED */
+
+#ifdef NOD_ENABLED
+void RecProtoBufMessage::addRR(const DNSRecord& record, const std::set<uint16_t>& exportTypes, bool udr)
+#else
void RecProtoBufMessage::addRR(const DNSRecord& record, const std::set<uint16_t>& exportTypes)
+#endif /* NOD_ENABLED */
{
#ifdef HAVE_PROTOBUF
PBDNSMessage_DNSResponse* response = d_message.mutable_response();
pbRR->set_type(record.d_type);
pbRR->set_class_(record.d_class);
pbRR->set_ttl(record.d_ttl);
+#ifdef NOD_ENABLED
+ pbRR->set_udr(udr);
+#endif
switch(record.d_type) {
case QType::A:
#endif /* HAVE_PROTOBUF */
void addRRs(const std::vector<DNSRecord>& records, const std::set<uint16_t>& exportTypes);
+#ifdef NOD_ENABLED
+ void setNOD(bool nod);
+ void addRR(const DNSRecord& record, const std::set<uint16_t>& exportTypes, bool udr=false);
+ void clearUDR();
+#else
void addRR(const DNSRecord& record, const std::set<uint16_t>& exportTypes);
+#endif /* NOD_ENABLED */
void setAppliedPolicy(const std::string& policy);
void setAppliedPolicyType(const DNSFilterEngine::PolicyType& policyType);
void setPolicyTags(const std::vector<std::string>& policyTags);