dns/src/main.rs

42 lines
953 B
Rust
Raw Normal View History

2022-03-13 21:56:17 +01:00
use flume::{Receiver, Sender};
use std::net::UdpSocket;
use std::thread::{self, JoinHandle};
mod proto;
use proto::DNSHeader;
2022-03-13 21:56:17 +01:00
fn listen() -> (JoinHandle<()>, Sender<Vec<u8>>, Receiver<Vec<u8>>) {
let (tx, rx) = flume::unbounded();
let tx_clone = tx.clone();
let rx_clone = rx.clone();
(
thread::spawn(move || {
let socket = UdpSocket::bind("127.0.0.1:13337").unwrap();
let mut buf = [0; 512];
loop {
let (len, _src) = socket.recv_from(&mut buf).unwrap();
let buf = &mut buf[..len];
tx.send(Vec::from(buf)).unwrap();
}
}),
tx_clone,
rx_clone,
)
}
fn main() {
let (thread_udp, _thread_udp_tx, thread_udp_rx) = listen();
for msg in thread_udp_rx.iter() {
let hdr_struct = DNSHeader::from_udp_datagram(&msg).unwrap();
2022-03-13 21:56:17 +01:00
dbg!(hdr_struct);
}
let _ = thread_udp.join();
}