enum class MessageType : int32_t { DNSQueryType = 1, DNSResponseType = 2, DNSOutgoingQueryType = 3, DNSIncomingResponseType = 4 };
enum class Field : protozero::pbf_tag_type { type = 1, messageId = 2, serverIdentity = 3, socketFamily = 4, socketProtocol = 5, from = 6, to = 7, inBytes = 8, timeSec = 9, timeUsec = 10, id = 11, question = 12, response = 13, originalRequestorSubnet = 14, requestorId = 15, initialRequestId = 16, deviceId = 17, newlyObservedDomain = 18, deviceName = 19, fromPort = 20, toPort = 21 };
enum class QuestionField : protozero::pbf_tag_type { qName = 1, qType = 2, qClass = 3};
- enum class ResponseField : protozero::pbf_tag_type { rcode = 1, rrs = 2, appliedPolicy = 3, tags = 4, queryTimeSec = 5, queryTimeUsec = 6, appliedPolicyType = 7, appliedPolicyTrigger = 8, appliedPolicyHit = 9 };
+ enum class ResponseField : protozero::pbf_tag_type { rcode = 1, rrs = 2, appliedPolicy = 3, tags = 4, queryTimeSec = 5, queryTimeUsec = 6, appliedPolicyType = 7, appliedPolicyTrigger = 8, appliedPolicyHit = 9, appliedPolicyKind = 10 };
enum class RRField : protozero::pbf_tag_type { name = 1, type = 2, class_ = 3, ttl = 4, rdata = 5, udr = 6 };
Message(std::string& buffer): d_buffer(buffer), d_message{d_buffer}
writer.add_uint64(static_cast<protozero::pbf_tag_type>(type), value);
}
- void setAppliedPolicyKind(const DNSFilterEngine::PolicyKind& kind)
- {
- uint32_t k;
-
- switch(kind) {
- case DNSFilterEngine::PolicyKind::NoAction:
- k = 1;
- break;
- case DNSFilterEngine::PolicyKind::Drop:
- k = 2;
- break;
- case DNSFilterEngine::PolicyKind::NXDOMAIN:
- k = 3;
- break;
- case DNSFilterEngine::PolicyKind::NODATA:
- k = 4;
- break;
- case DNSFilterEngine::PolicyKind::Truncate:
- k = 5;
- break;
- case DNSFilterEngine::PolicyKind::Custom:
- k = 6;
- break;
- default:
- throw std::runtime_error("Unsupported protobuf policy kind");
- }
- d_response.add_uint32(10, k);
+ static void add_bytes(protozero::pbf_writer& writer, Field type, const char* data, size_t len)
+ {
+ writer.add_bytes(static_cast<protozero::pbf_tag_type>(type), data, len);
}
static void add_string(protozero::pbf_writer& writer, Field type, const std::string& str)
d_response.add_string(static_cast<protozero::pbf_tag_type>(ResponseField::appliedPolicyHit), hit);
}
+ void setAppliedPolicyKind(const DNSFilterEngine::PolicyKind& kind)
+ {
+ uint32_t k;
+
+ switch(kind) {
+ case DNSFilterEngine::PolicyKind::NoAction:
+ k = 1;
+ break;
+ case DNSFilterEngine::PolicyKind::Drop:
+ k = 2;
+ break;
+ case DNSFilterEngine::PolicyKind::NXDOMAIN:
+ k = 3;
+ break;
+ case DNSFilterEngine::PolicyKind::NODATA:
+ k = 4;
+ break;
+ case DNSFilterEngine::PolicyKind::Truncate:
+ k = 5;
+ break;
+ case DNSFilterEngine::PolicyKind::Custom:
+ k = 6;
+ break;
+ default:
+ throw std::runtime_error("Unsupported protobuf policy kind");
+ }
+ d_response.add_uint32(static_cast<protozero::pbf_tag_type>(ResponseField::appliedPolicyKind), k);
+ }
+
#ifdef NOD_ENABLED
void clearUDR(std::string&);
#endif