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