From 9460219d14591c5bd902466bef8cd22c1a4b9260 Mon Sep 17 00:00:00 2001 From: kozabrada123 <59031733+kozabrada123@users.noreply.github.com> Date: Sun, 12 Nov 2023 14:59:28 +0100 Subject: [PATCH] feat: packet parsing! --- Cargo.toml | 2 +- src/voice/udp.rs | 29 ++++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3106f1e..d824218 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,7 +51,7 @@ jsonwebtoken = "8.3.0" log = "0.4.20" async-trait = "0.1.73" chorus-macros = "0.2.0" -discortp = { version = "0.5.0", optional = true, features = ["rtp", "discord"] } +discortp = { version = "0.5.0", optional = true, features = ["rtp", "discord", "demux"] } [dev-dependencies] tokio = { version = "1.32.0", features = ["full"] } diff --git a/src/voice/udp.rs b/src/voice/udp.rs index 7543f71..44dee7a 100644 --- a/src/voice/udp.rs +++ b/src/voice/udp.rs @@ -6,7 +6,9 @@ use log::{info, warn}; use tokio::net::UdpSocket; use discortp::{ + demux::{demux, Demuxed}, discord::{IpDiscovery, IpDiscoveryPacket}, + rtp::RtpPacket, MutablePacket, Packet, }; @@ -98,15 +100,12 @@ impl UdpHandler { loop { let mut buf: Vec = Vec::new(); - let size = IpDiscoveryPacket::minimum_packet_size() + 64; - // wtf - for _i in 0..size { + for _i in 0..1_000 { buf.push(0); } let msg = self.socket.recv(&mut buf).await; if let Ok(size) = msg { - info!("VUDP: Receiving messsage: {:?} - {}", buf.clone(), size); self.handle_message(&buf[0..size]).await; continue; } @@ -118,6 +117,26 @@ impl UdpHandler { /// Handles a message buf async fn handle_message(&self, buf: &[u8]) { - info!("VUDP: Received messsage {:?}", buf); + info!("VUDP: Received messsage"); + + let parsed = demux(buf); + + match parsed { + Demuxed::Rtp(rtp) => { + let data = buf[11..buf.len()].to_vec(); + info!("VUDP: Parsed packet as rtp! {:?}; data: {:?}", rtp, data); + } + Demuxed::Rtcp(rtcp) => { + info!("VUDP: Parsed packet as rtcp! {:?}", rtcp); + } + Demuxed::FailedParse(e) => { + warn!("VUDP: Failed to parse packet: {:?}", e); + } + Demuxed::TooSmall => { + unreachable!() + } + } + + return; } }