17#include <promeki/config.h>
18#if PROMEKI_ENABLE_CORE
22PROMEKI_NAMESPACE_BEGIN
61class DnsRecordType :
public TypedEnum<DnsRecordType> {
63 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"DnsRecordType",
"DNS Record Type", 1,
64 {
"Unknown", 0,
"Unknown"},
65 {
"A", 1,
"IPv4 Host Address"},
66 {
"Ns", 2,
"Authoritative Name Server"},
67 {
"Cname", 5,
"Canonical Name Alias"},
68 {
"Soa", 6,
"Start of Authority"},
69 {
"Ptr", 12,
"Domain Name Pointer"},
70 {
"Mx", 15,
"Mail Exchange"},
71 {
"Txt", 16,
"Text / DNS-SD Attributes"},
72 {
"Aaaa", 28,
"IPv6 Host Address"},
73 {
"Srv", 33,
"Service Locator"},
74 {
"Naptr", 35,
"Naming Authority Pointer"},
75 {
"Opt", 41,
"EDNS0 Pseudo-Record"},
76 {
"Ds", 43,
"DNSSEC Delegation Signer"},
77 {
"Rrsig", 46,
"DNSSEC RRSIG Signature"},
78 {
"Nsec", 47,
"DNSSEC Next Secure"},
79 {
"Dnskey", 48,
"DNSSEC Public Key"},
80 {
"Tlsa", 52,
"DANE TLS Anchor"},
81 {
"Svcb", 64,
"Service Binding"},
82 {
"Https", 65,
"HTTPS Service Binding"},
83 {
"Axfr", 252,
"Zone Transfer (Query Only)"},
84 {
"Any", 255,
"Wildcard / ANY (Query Only)"},
85 {
"Caa", 257,
"Cert. Authority Authorization"});
87 using TypedEnum<DnsRecordType>::TypedEnum;
89 static const DnsRecordType Unknown;
90 static const DnsRecordType A;
91 static const DnsRecordType Ns;
92 static const DnsRecordType Cname;
93 static const DnsRecordType Soa;
94 static const DnsRecordType Ptr;
95 static const DnsRecordType Mx;
96 static const DnsRecordType Txt;
97 static const DnsRecordType Aaaa;
98 static const DnsRecordType Srv;
99 static const DnsRecordType Naptr;
100 static const DnsRecordType Opt;
101 static const DnsRecordType Ds;
102 static const DnsRecordType Rrsig;
103 static const DnsRecordType Nsec;
104 static const DnsRecordType Dnskey;
105 static const DnsRecordType Tlsa;
106 static const DnsRecordType Svcb;
107 static const DnsRecordType Https;
108 static const DnsRecordType Axfr;
109 static const DnsRecordType Any;
110 static const DnsRecordType Caa;
113inline const DnsRecordType DnsRecordType::Unknown{0};
114inline const DnsRecordType DnsRecordType::A{1};
115inline const DnsRecordType DnsRecordType::Ns{2};
116inline const DnsRecordType DnsRecordType::Cname{5};
117inline const DnsRecordType DnsRecordType::Soa{6};
118inline const DnsRecordType DnsRecordType::Ptr{12};
119inline const DnsRecordType DnsRecordType::Mx{15};
120inline const DnsRecordType DnsRecordType::Txt{16};
121inline const DnsRecordType DnsRecordType::Aaaa{28};
122inline const DnsRecordType DnsRecordType::Srv{33};
123inline const DnsRecordType DnsRecordType::Naptr{35};
124inline const DnsRecordType DnsRecordType::Opt{41};
125inline const DnsRecordType DnsRecordType::Ds{43};
126inline const DnsRecordType DnsRecordType::Rrsig{46};
127inline const DnsRecordType DnsRecordType::Nsec{47};
128inline const DnsRecordType DnsRecordType::Dnskey{48};
129inline const DnsRecordType DnsRecordType::Tlsa{52};
130inline const DnsRecordType DnsRecordType::Svcb{64};
131inline const DnsRecordType DnsRecordType::Https{65};
132inline const DnsRecordType DnsRecordType::Axfr{252};
133inline const DnsRecordType DnsRecordType::Any{255};
134inline const DnsRecordType DnsRecordType::Caa{257};
150class DnsRecordClass :
public TypedEnum<DnsRecordClass> {
152 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"DnsRecordClass",
"DNS Record Class", 1,
153 {
"In", 1,
"Internet"},
154 {
"Cs", 2,
"CSNET (obsolete)"},
157 {
"None", 254,
"None (RFC 2136 update)"},
158 {
"Any", 255,
"Wildcard / ANY"});
160 using TypedEnum<DnsRecordClass>::TypedEnum;
162 static const DnsRecordClass In;
163 static const DnsRecordClass Cs;
164 static const DnsRecordClass Ch;
165 static const DnsRecordClass Hs;
166 static const DnsRecordClass None;
167 static const DnsRecordClass Any;
170inline const DnsRecordClass DnsRecordClass::In{1};
171inline const DnsRecordClass DnsRecordClass::Cs{2};
172inline const DnsRecordClass DnsRecordClass::Ch{3};
173inline const DnsRecordClass DnsRecordClass::Hs{4};
174inline const DnsRecordClass DnsRecordClass::None{254};
175inline const DnsRecordClass DnsRecordClass::Any{255};
184class DnsRecordSection :
public TypedEnum<DnsRecordSection> {
186 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"DnsRecordSection",
"DNS Record Section", 1,
187 {
"Question", 0,
"Question"},
188 {
"Answer", 1,
"Answer"},
189 {
"Authority", 2,
"Authority"},
190 {
"Additional", 3,
"Additional"});
192 using TypedEnum<DnsRecordSection>::TypedEnum;
194 static const DnsRecordSection Question;
195 static const DnsRecordSection Answer;
196 static const DnsRecordSection Authority;
197 static const DnsRecordSection Additional;
200inline const DnsRecordSection DnsRecordSection::Question{0};
201inline const DnsRecordSection DnsRecordSection::Answer{1};
202inline const DnsRecordSection DnsRecordSection::Authority{2};
203inline const DnsRecordSection DnsRecordSection::Additional{3};
214class DnsOpcode :
public TypedEnum<DnsOpcode> {
216 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"DnsOpcode",
"DNS Opcode", 0,
217 {
"Query", 0,
"Standard Query"},
218 {
"IQuery", 1,
"Inverse Query (Obsolete)"},
219 {
"Status", 2,
"Server Status"},
220 {
"Notify", 4,
"Zone Notify"},
221 {
"Update", 5,
"Dynamic Update"});
223 using TypedEnum<DnsOpcode>::TypedEnum;
225 static const DnsOpcode Query;
226 static const DnsOpcode IQuery;
227 static const DnsOpcode Status;
228 static const DnsOpcode Notify;
229 static const DnsOpcode Update;
232inline const DnsOpcode DnsOpcode::Query{0};
233inline const DnsOpcode DnsOpcode::IQuery{1};
234inline const DnsOpcode DnsOpcode::Status{2};
235inline const DnsOpcode DnsOpcode::Notify{4};
236inline const DnsOpcode DnsOpcode::Update{5};
270class DnsRcode :
public TypedEnum<DnsRcode> {
272 PROMEKI_REGISTER_ENUM_TYPE_DISPLAY(
"DnsRcode",
"DNS Response Code", 0,
273 {
"NoError", 0,
"No Error"},
274 {
"FormErr", 1,
"Format Error"},
275 {
"ServFail", 2,
"Server Failure"},
276 {
"NxDomain", 3,
"Name Does Not Exist"},
277 {
"NotImp", 4,
"Not Implemented"},
278 {
"Refused", 5,
"Refused"},
279 {
"YxDomain", 6,
"YXDOMAIN (Update Prereq)"},
280 {
"YxRrSet", 7,
"YXRRSET (Update Prereq)"},
281 {
"NxRrSet", 8,
"NXRRSET (Update Prereq)"},
282 {
"NotAuth", 9,
"Not Authoritative"},
283 {
"NotZone", 10,
"Name Not In Zone"},
284 {
"BadVers", 16,
"Bad EDNS Version"},
285 {
"BadKey", 17,
"Bad TSIG Key"},
286 {
"BadTime", 18,
"Bad TSIG Time"},
287 {
"BadMode", 19,
"Bad TKEY Mode"},
288 {
"BadName", 20,
"Duplicate TKEY Name"},
289 {
"BadAlg", 21,
"Bad TKEY Algorithm"},
290 {
"BadTrunc", 22,
"TSIG Truncation"},
291 {
"BadCookie", 23,
"Bad DNS Cookie"});
293 using TypedEnum<DnsRcode>::TypedEnum;
295 static const DnsRcode NoError;
296 static const DnsRcode FormErr;
297 static const DnsRcode ServFail;
298 static const DnsRcode NxDomain;
299 static const DnsRcode NotImp;
300 static const DnsRcode Refused;
301 static const DnsRcode YxDomain;
302 static const DnsRcode YxRrSet;
303 static const DnsRcode NxRrSet;
304 static const DnsRcode NotAuth;
305 static const DnsRcode NotZone;
306 static const DnsRcode BadVers;
307 static const DnsRcode BadKey;
308 static const DnsRcode BadTime;
309 static const DnsRcode BadMode;
310 static const DnsRcode BadName;
311 static const DnsRcode BadAlg;
312 static const DnsRcode BadTrunc;
313 static const DnsRcode BadCookie;
316inline const DnsRcode DnsRcode::NoError{0};
317inline const DnsRcode DnsRcode::FormErr{1};
318inline const DnsRcode DnsRcode::ServFail{2};
319inline const DnsRcode DnsRcode::NxDomain{3};
320inline const DnsRcode DnsRcode::NotImp{4};
321inline const DnsRcode DnsRcode::Refused{5};
322inline const DnsRcode DnsRcode::YxDomain{6};
323inline const DnsRcode DnsRcode::YxRrSet{7};
324inline const DnsRcode DnsRcode::NxRrSet{8};
325inline const DnsRcode DnsRcode::NotAuth{9};
326inline const DnsRcode DnsRcode::NotZone{10};
327inline const DnsRcode DnsRcode::BadVers{16};
328inline const DnsRcode DnsRcode::BadKey{17};
329inline const DnsRcode DnsRcode::BadTime{18};
330inline const DnsRcode DnsRcode::BadMode{19};
331inline const DnsRcode DnsRcode::BadName{20};
332inline const DnsRcode DnsRcode::BadAlg{21};
333inline const DnsRcode DnsRcode::BadTrunc{22};
334inline const DnsRcode DnsRcode::BadCookie{23};