close to final of fake ip resolving

This commit is contained in:
2026-03-08 00:11:52 +07:00
parent b1cc4c14f4
commit 8bad1b0162
8 changed files with 91 additions and 42 deletions
+6 -15
View File
@@ -1,32 +1,23 @@
use crate::connections::dns::handle_dns_query;
use crate::connections::ip_store::FakeIpStore;
use smoltcp::socket::udp;
use tracing::{debug, trace};
pub struct UdpConnection;
impl UdpConnection {
pub fn process_incoming(socket: &mut udp::Socket, store: &mut FakeIpStore) {
// Мы используем peek или recv, чтобы понять, куда идти дальше
while socket.can_recv() {
let (data, metadata) = match socket.recv() {
Ok(res) => res,
Err(_) => break,
};
// Диспетчер: определяем тип трафика по порту
match metadata.endpoint.port {
53 => {
// Это DNS
if let Some(response) = handle_dns_query(&data, store) {
let _ = socket.send_slice(&response, metadata);
}
}
// Тут в будущем можно добавить обработку других протоколов
// 443 => process_quic(...),
_ => {
// Можно логировать неизвестный трафик или просто дропать
// trace!("Received UDP on unknown port: {}", endpoint.port);
}
let endpoint = metadata.endpoint;
if let Some(response) = handle_dns_query(&data, store) {
debug!(to = %endpoint, "Sending DNS response");
let _ = socket.send_slice(&response, metadata);
}
}
}