/
akmitrich
/
udith
Обзор
Документация
Войти
/
akmitrich
/
udith
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/lib.rs
40 строк
1 KB
akmitrich
refactor: Migrate to nom version 8
17 май 2025, 14:16
17 май 2025, 14:16
5db0512
Код
Авторство
О чём код?
mod error; pub mod message; pub mod parse_utils; pub use error::{Error, Result}; use std::{net::SocketAddr, sync::Arc}; use tokio::net::UdpSocket; pub async fn run(socket: UdpSocket) { let sock = Arc::new(socket); listen(sock).await.unwrap(); } async fn listen(sock: Arc<UdpSocket>) -> crate::Result<()> { let mut buf = [0; 65535]; loop { let (len, addr) = sock.recv_from(&mut buf).await?; println!("{:?} bytes received from {:?}", len, addr); let packet_handler = handle(Arc::clone(&sock), message::Raw::new(&buf[..len]), addr); tokio::spawn(async move { packet_handler .await .inspect_err(|e| eprintln!("Handle error: {:?}", e)) }); } } async fn handle(sock: Arc<UdpSocket>, packet: message::Raw, from: SocketAddr) -> crate::Result<()> { if let Ok((rest, msg)) = message::Message::parse(&packet) { println!( "The message is {:#?}\n{:#?}", msg, msg.headers.sip_sweet_six() ); println!("Message parsed until: {:?}", std::str::from_utf8(rest)); } sock.send_to(b"OK", from).await?; Ok(()) }