trying to fix udp telegram

This commit is contained in:
2026-03-26 19:55:56 +07:00
parent 3eb2df3a34
commit b9364e3e19
4 changed files with 43 additions and 20 deletions
+8 -2
View File
@@ -9,7 +9,7 @@ use smoltcp::{
use std::time::Duration;
use tokio::sync::{mpsc, oneshot};
// Добавили trace для частых логов (попакетно) и debug для состояний
use netrunner_logger::{debug, info, trace, warn};
use netrunner_logger::{debug, error, info, trace, warn};
// ============================================================================
// 1. БАЗОВАЯ СТРУКТУРА (ConnectionCore)
@@ -302,10 +302,16 @@ impl UdpConnection {
match self.core.rx.try_recv() {
Ok(data) => match socket.send_slice(&data, client_endpoint) {
Ok(_) => {
info!(
%self.core.handle,
bytes = data.len(),
target = %client_endpoint,
"🟢 SUCCESS: Received UDP from tunnel, pushed to smoltcp!"
);
self.last_activity = smoltcp::time::Instant::now();
}
Err(e) => {
debug!(%self.core.handle, "Failed to send UDP datagram: {:?}", e);
error!(%self.core.handle, "Failed to send UDP datagram: {:?}", e);
break;
}
},
+16 -6
View File
@@ -161,7 +161,7 @@ impl SocketFactory {
fn create_udp<'a>(port: u16) -> udp::Socket<'a> {
let config = NetworkConfig::global();
let max_buf = config.udp_buffer_size;
let max_buf = config.smoltcp_socket_buf;
let payload_size = config.safe_payload_size.max(1); // Защита от деления на 0
// Вычисляем размер буфера и количество пакетов
@@ -170,9 +170,7 @@ impl SocketFactory {
53 => (64 * 1024, (64 * 1024) / payload_size), // DNS
_ => (max_buf, max_buf / payload_size),
};
// Гарантируем, что метаданных хватит хотя бы на 10 пакетов
let packet_count = packet_count.max(10);
let packet_count = packet_count.max(32);
udp::Socket::new(
udp::PacketBuffer::new(
@@ -226,13 +224,25 @@ impl ConnectionManager {
match tx.try_send(frame.payload.clone()) {
Ok(_) => Ok(()),
Err(tokio::sync::mpsc::error::TrySendError::Full(_)) => {
Err(frame) // Возвращаем кадр, чтобы Engine затормозил чтение туннеля
error!(
"🟡 WARNING: Inbound channel FULL for stream {}",
frame.socket_id
);
Err(frame)
}
Err(tokio::sync::mpsc::error::TrySendError::Closed(_)) => {
Ok(()) // Сокет уже закрыт браузером, дропаем пакет
error!(
"🔴 WARNING: Inbound channel CLOSED for stream {}",
frame.socket_id
);
Ok(())
}
}
} else {
error!(
"👻 ORPHAN PACKET: No local socket for stream {}",
frame.socket_id
);
Ok(())
}
}