From b7676d06363f71b4a856c5f5815f75e2bf7ca8ec Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Wed, 1 Mar 2023 01:13:25 -0500 Subject: inital working dns --- packet/src/question.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 packet/src/question.rs (limited to 'packet/src/question.rs') diff --git a/packet/src/question.rs b/packet/src/question.rs new file mode 100644 index 0000000..ccb5c92 --- /dev/null +++ b/packet/src/question.rs @@ -0,0 +1,31 @@ +use super::{buffer::PacketBuffer, query::QueryType, Result}; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct DnsQuestion { + pub name: String, + pub qtype: QueryType, +} + +impl DnsQuestion { + pub fn new(name: String, qtype: QueryType) -> DnsQuestion { + DnsQuestion { name, qtype } + } + + pub fn read(&mut self, buffer: &mut PacketBuffer) -> Result<()> { + buffer.read_qname(&mut self.name)?; + self.qtype = QueryType::from_num(buffer.read_u16()?); // qtype + let _ = buffer.read_u16()?; // class + + Ok(()) + } + + pub fn write(&self, buffer: &mut PacketBuffer) -> Result<()> { + buffer.write_qname(&self.name)?; + + let typenum = self.qtype.to_num(); + buffer.write_u16(typenum)?; + buffer.write_u16(1)?; + + Ok(()) + } +} \ No newline at end of file -- cgit v1.2.3-freya