1
2 #include "dnsdist.hh"
3
makeDNSResponseFromIDState(IDState & ids,PacketBuffer & data,bool isTCP)4 DNSResponse makeDNSResponseFromIDState(IDState& ids, PacketBuffer& data, bool isTCP)
5 {
6 DNSResponse dr(&ids.qname, ids.qtype, ids.qclass, &ids.origDest, &ids.origRemote, data, isTCP, &ids.sentTime.d_start);
7 dr.origFlags = ids.origFlags;
8 dr.cacheFlags = ids.cacheFlags;
9 dr.ecsAdded = ids.ecsAdded;
10 dr.ednsAdded = ids.ednsAdded;
11 dr.useZeroScope = ids.useZeroScope;
12 dr.packetCache = std::move(ids.packetCache);
13 dr.delayMsec = ids.delayMsec;
14 dr.skipCache = ids.skipCache;
15 dr.cacheKey = ids.cacheKey;
16 dr.cacheKeyNoECS = ids.cacheKeyNoECS;
17 dr.dnssecOK = ids.dnssecOK;
18 dr.tempFailureTTL = ids.tempFailureTTL;
19 dr.qTag = std::move(ids.qTag);
20 dr.subnet = std::move(ids.subnet);
21 dr.uniqueId = std::move(ids.uniqueId);
22
23 if (ids.dnsCryptQuery) {
24 dr.dnsCryptQuery = std::move(ids.dnsCryptQuery);
25 }
26
27 dr.hopRemote = &ids.hopRemote;
28 dr.hopLocal = &ids.hopLocal;
29
30 return dr;
31 }
32
setIDStateFromDNSQuestion(IDState & ids,DNSQuestion & dq,DNSName && qname)33 void setIDStateFromDNSQuestion(IDState& ids, DNSQuestion& dq, DNSName&& qname)
34 {
35 ids.origRemote = *dq.remote;
36 ids.origDest = *dq.local;
37 ids.sentTime.set(*dq.queryTime);
38 ids.qname = std::move(qname);
39 ids.qtype = dq.qtype;
40 ids.qclass = dq.qclass;
41 ids.delayMsec = dq.delayMsec;
42 ids.tempFailureTTL = dq.tempFailureTTL;
43 ids.origFlags = dq.origFlags;
44 ids.cacheFlags = dq.cacheFlags;
45 ids.cacheKey = dq.cacheKey;
46 ids.cacheKeyNoECS = dq.cacheKeyNoECS;
47 ids.subnet = dq.subnet;
48 ids.skipCache = dq.skipCache;
49 ids.packetCache = dq.packetCache;
50 ids.ednsAdded = dq.ednsAdded;
51 ids.ecsAdded = dq.ecsAdded;
52 ids.useZeroScope = dq.useZeroScope;
53 ids.qTag = dq.qTag;
54 ids.dnssecOK = dq.dnssecOK;
55 ids.uniqueId = std::move(dq.uniqueId);
56
57 if (dq.hopRemote) {
58 ids.hopRemote = *dq.hopRemote;
59 }
60 else {
61 ids.hopRemote.sin4.sin_family = 0;
62 }
63
64 if (dq.hopLocal) {
65 ids.hopLocal = *dq.hopLocal;
66 }
67 else {
68 ids.hopLocal.sin4.sin_family = 0;
69 }
70
71 ids.dnsCryptQuery = std::move(dq.dnsCryptQuery);
72 }
73