summaryrefslogtreecommitdiff
path: root/packet/src/question.rs
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2023-03-01 01:13:25 -0500
committerTyler Murphy <tylermurphy534@gmail.com>2023-03-01 01:13:25 -0500
commitb7676d06363f71b4a856c5f5815f75e2bf7ca8ec (patch)
treeb7e188aa4e1abaa69b1b9ee4fb6cd5a0ad60637d /packet/src/question.rs
parentgpl (diff)
downloadwrapper-b7676d06363f71b4a856c5f5815f75e2bf7ca8ec.tar.gz
wrapper-b7676d06363f71b4a856c5f5815f75e2bf7ca8ec.tar.bz2
wrapper-b7676d06363f71b4a856c5f5815f75e2bf7ca8ec.zip
inital working dns
Diffstat (limited to 'packet/src/question.rs')
-rw-r--r--packet/src/question.rs31
1 files changed, 31 insertions, 0 deletions
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