mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 12:47:35 +00:00
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:
parent
c160c6b035
commit
3304d675e1
3 changed files with 16 additions and 2 deletions
|
@ -40,13 +40,14 @@ ByteBuffer DNSPacket::to_byte_buffer() const
|
||||||
header.set_is_query();
|
header.set_is_query();
|
||||||
else
|
else
|
||||||
header.set_is_response();
|
header.set_is_response();
|
||||||
|
header.set_authoritative_answer(m_authoritative_answer);
|
||||||
// FIXME: What should this be?
|
// FIXME: What should this be?
|
||||||
header.set_opcode(0);
|
header.set_opcode(0);
|
||||||
header.set_response_code(m_code);
|
header.set_response_code(m_code);
|
||||||
header.set_truncated(false); // hopefully...
|
header.set_truncated(false); // hopefully...
|
||||||
header.set_recursion_desired(true);
|
header.set_recursion_desired(m_recursion_desired);
|
||||||
// FIXME: what should the be for requests?
|
// 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_question_count(m_questions.size());
|
||||||
header.set_answer_count(m_answers.size());
|
header.set_answer_count(m_answers.size());
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,14 @@ public:
|
||||||
|
|
||||||
bool is_query() const { return !m_query_or_response; }
|
bool is_query() const { return !m_query_or_response; }
|
||||||
bool is_response() 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_query() { m_query_or_response = false; }
|
||||||
void set_is_response() { m_query_or_response = true; }
|
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; }
|
u16 id() const { return m_id; }
|
||||||
void set_id(u16 id) { m_id = id; }
|
void set_id(u16 id) { m_id = id; }
|
||||||
|
@ -72,7 +78,10 @@ public:
|
||||||
private:
|
private:
|
||||||
u16 m_id { 0 };
|
u16 m_id { 0 };
|
||||||
u8 m_code { 0 };
|
u8 m_code { 0 };
|
||||||
|
bool m_authoritative_answer { false };
|
||||||
bool m_query_or_response { false };
|
bool m_query_or_response { false };
|
||||||
|
bool m_recursion_desired { true };
|
||||||
|
bool m_recursion_available { true };
|
||||||
Vector<DNSQuestion> m_questions;
|
Vector<DNSQuestion> m_questions;
|
||||||
Vector<DNSAnswer> m_answers;
|
Vector<DNSAnswer> m_answers;
|
||||||
};
|
};
|
||||||
|
|
|
@ -82,6 +82,9 @@ void MulticastDNS::announce()
|
||||||
DNSPacket response;
|
DNSPacket response;
|
||||||
response.set_is_response();
|
response.set_is_response();
|
||||||
response.set_code(DNSPacket::Code::NOERROR);
|
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()) {
|
for (auto& address : local_addresses()) {
|
||||||
auto raw_addr = address.to_in_addr_t();
|
auto raw_addr = address.to_in_addr_t();
|
||||||
|
@ -142,6 +145,7 @@ Vector<DNSAnswer> MulticastDNS::lookup(const DNSName& name, DNSRecordType record
|
||||||
{
|
{
|
||||||
DNSPacket request;
|
DNSPacket request;
|
||||||
request.set_is_query();
|
request.set_is_query();
|
||||||
|
request.set_recursion_desired(false);
|
||||||
request.add_question({ name, record_type, DNSRecordClass::IN, false });
|
request.add_question({ name, record_type, DNSRecordClass::IN, false });
|
||||||
|
|
||||||
if (emit_packet(request) < 0) {
|
if (emit_packet(request) < 0) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue