close to final of fake ip resolving
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user