Keep DNS_FLAGS_CD and DNS_FLAGS_RD

pull/5/head
Frank Denis 5 years ago
parent ffce25e96a
commit e4df83410f

@ -10,9 +10,11 @@ pub const DNS_OFFSET_FLAGS: usize = 2;
pub const DNS_MAX_PACKET_SIZE: usize = 0x1600;
const DNS_MAX_INDIRECTIONS: usize = 16;
const DNS_FLAGS_TC: u16 = 2u16 << 8;
const DNS_FLAGS_QR: u16 = 128u16 << 8;
const DNS_FLAGS_RA: u16 = 128;
const DNS_FLAGS_TC: u16 = 1u16 << 9;
const DNS_FLAGS_QR: u16 = 1u16 << 15;
const DNS_FLAGS_RA: u16 = 1u16 << 7;
const DNS_FLAGS_RD: u16 = 1u16 << 8;
const DNS_FLAGS_CD: u16 = 1u16 << 4;
const DNS_OFFSET_QUESTION: usize = DNS_HEADER_SIZE;
const DNS_TYPE_OPT: u16 = 41;
const DNS_TYPE_TXT: u16 = 16;
@ -108,13 +110,16 @@ pub fn set_tid(packet: &mut [u8], tid: u16) {
BigEndian::write_u16(&mut packet[0..], tid);
}
#[inline]
pub fn set_flags(packet: &mut [u8], flags: u16) {
BigEndian::write_u16(&mut packet[DNS_OFFSET_FLAGS..], flags);
}
#[inline]
pub fn authoritative_response(packet: &mut [u8]) {
let current_flags = BigEndian::read_u16(&packet[DNS_OFFSET_FLAGS..]);
BigEndian::write_u16(
&mut packet[DNS_OFFSET_FLAGS..],
current_flags | DNS_FLAGS_QR | DNS_FLAGS_RA,
);
let current_rd_cd_flags =
BigEndian::read_u16(&packet[DNS_OFFSET_FLAGS..]) & (DNS_FLAGS_CD | DNS_FLAGS_RD);
set_flags(packet, current_rd_cd_flags | DNS_FLAGS_QR | DNS_FLAGS_RA);
}
#[inline]

Loading…
Cancel
Save