LookupServer: Correct some flags for DNS packets

This corrects some of the flags in the DNS packets to match
what I saw on my local network.
This commit is contained in:
Gunnar Beutner 2021-05-07 23:55:18 +02:00 committed by Andreas Kling
parent c160c6b035
commit 3304d675e1
Notes: sideshowbarker 2024-07-18 18:22:07 +09:00
3 changed files with 16 additions and 2 deletions

View file

@ -40,13 +40,14 @@ ByteBuffer DNSPacket::to_byte_buffer() const
header.set_is_query();
else
header.set_is_response();
header.set_authoritative_answer(m_authoritative_answer);
// FIXME: What should this be?
header.set_opcode(0);
header.set_response_code(m_code);
header.set_truncated(false); // hopefully...
header.set_recursion_desired(true);
header.set_recursion_desired(m_recursion_desired);
// FIXME: what should the be for requests?
header.set_recursion_available(true);
header.set_recursion_available(m_recursion_available);
header.set_question_count(m_questions.size());
header.set_answer_count(m_answers.size());

View file

@ -29,8 +29,14 @@ public:
bool is_query() const { return !m_query_or_response; }
bool is_response() const { return m_query_or_response; }
bool is_authoritative_answer() const { return m_authoritative_answer; }
bool recursion_desired() const { return m_recursion_desired; }
bool recursion_available() const { return m_recursion_available; }
void set_is_query() { m_query_or_response = false; }
void set_is_response() { m_query_or_response = true; }
void set_authoritative_answer(bool authoritative_answer) { m_authoritative_answer = authoritative_answer; }
void set_recursion_desired(bool recursion_desired) { m_recursion_desired = recursion_desired; }
void set_recursion_available(bool recursion_available) { m_recursion_available = recursion_available; }
u16 id() const { return m_id; }
void set_id(u16 id) { m_id = id; }
@ -72,7 +78,10 @@ public:
private:
u16 m_id { 0 };
u8 m_code { 0 };
bool m_authoritative_answer { false };
bool m_query_or_response { false };
bool m_recursion_desired { true };
bool m_recursion_available { true };
Vector<DNSQuestion> m_questions;
Vector<DNSAnswer> m_answers;
};

View file

@ -82,6 +82,9 @@ void MulticastDNS::announce()
DNSPacket response;
response.set_is_response();
response.set_code(DNSPacket::Code::NOERROR);
response.set_authoritative_answer(true);
response.set_recursion_desired(false);
response.set_recursion_available(false);
for (auto& address : local_addresses()) {
auto raw_addr = address.to_in_addr_t();
@ -142,6 +145,7 @@ Vector<DNSAnswer> MulticastDNS::lookup(const DNSName& name, DNSRecordType record
{
DNSPacket request;
request.set_is_query();
request.set_recursion_desired(false);
request.add_question({ name, record_type, DNSRecordClass::IN, false });
if (emit_packet(request) < 0) {