//! used to send information to a newborn mthread
struct DNSComboWriter {
- DNSComboWriter(const char* data, uint16_t len, const struct timeval& now) : d_mdp(true, data, len), d_now(now),
- d_tcp(false), d_socket(-1)
+ DNSComboWriter(const char* data, uint16_t len, const struct timeval& now): d_mdp(true, data, len), d_now(now)
{}
+ DNSComboWriter(const std::string& query, const struct timeval& now, std::vector<std::string>&& policyTags, LuaContext::LuaObject&& data): d_mdp(true, query.c_str(), query.size()), d_now(now), d_policyTags(std::move(policyTags)), d_data(std::move(data))
+ {
+ }
+
void setRemote(const ComboAddress& sa)
{
d_remote=sa;
string d_requestorId;
string d_deviceId;
#endif
+ std::vector<std::string> d_policyTags;
+ LuaContext::LuaObject d_data;
EDNSSubnetOpts d_ednssubnet;
- bool d_ecsFound{false};
- bool d_ecsParsed{false};
- bool d_tcp;
+ shared_ptr<TCPConnection> d_tcpConnection;
int d_socket;
unsigned int d_tag{0};
uint32_t d_qhash{0};
- string d_query;
- shared_ptr<TCPConnection> d_tcpConnection;
- vector<pair<uint16_t, string> > d_ednsOpts;
- std::vector<std::string> d_policyTags;
- LuaContext::LuaObject d_data;
uint32_t d_ttlCap{std::numeric_limits<uint32_t>::max()};
bool d_variable{false};
+ bool d_ecsFound{false};
+ bool d_ecsParsed{false};
+ bool d_tcp;
};
MT_t* getMT()
}
}
-static string makeLoginfo(DNSComboWriter* dc)
+static string makeLoginfo(const DNSComboWriter* dc)
try
{
return "("+dc->d_mdp.d_qname.toLogString()+"/"+DNSRecordContent::NumberToType(dc->d_mdp.d_qtype)+" from "+(dc->getRemote())+")";
uint16_t maxanswersize = dc->d_tcp ? 65535 : min(static_cast<uint16_t>(512), g_udpTruncationThreshold);
EDNSOpts edo;
+ std::vector<pair<uint16_t, string> > ednsOpts;
bool haveEDNS=false;
if(getEDNSOpts(dc->d_mdp, &edo)) {
if(!dc->d_tcp) {
*/
maxanswersize = min(static_cast<uint16_t>(edo.d_packetsize >= 512 ? edo.d_packetsize : 512), g_udpTruncationThreshold);
}
- dc->d_ednsOpts = edo.d_options;
+ ednsOpts = edo.d_options;
haveEDNS=true;
if (g_useIncomingECS && !dc->d_ecsParsed) {
DNSRecord spoofed;
RecursorLua4::DNSQuestion dq(dc->d_source, dc->d_destination, dc->d_mdp.d_qname, dc->d_mdp.d_qtype, dc->d_tcp, variableAnswer, wantsRPZ);
dq.ednsFlags = &edo.d_Z;
- dq.ednsOptions = &dc->d_ednsOpts;
+ dq.ednsOptions = &ednsOpts;
dq.tag = dc->d_tag;
dq.discardedPolicies = &sr.d_discardedPolicies;
dq.policyTags = &dc->d_policyTags;
return 0;
}
- DNSComboWriter* dc = new DNSComboWriter(question.c_str(), question.size(), g_now);
+ DNSComboWriter* dc = new DNSComboWriter(question, g_now, std::move(policyTags), std::move(data));
dc->setSocket(fd);
dc->d_tag=ctag;
dc->d_qhash=qhash;
- dc->d_query = question;
dc->setRemote(fromaddr);
dc->setSource(source);
dc->setLocal(destaddr);
dc->setDestination(destination);
dc->d_tcp=false;
- dc->d_policyTags = policyTags;
- dc->d_data = data;
dc->d_ecsFound = ecsFound;
dc->d_ecsParsed = ecsParsed;
dc->d_ednssubnet = ednssubnet;
dc->d_variable = variable;
#ifdef HAVE_PROTOBUF
if (t_protobufServer || t_outgoingProtobufServer) {
- dc->d_uuid = uniqueId;
+ dc->d_uuid = std::move(uniqueId);
}
dc->d_requestorId = requestorId;
dc->d_deviceId = deviceId;