feat: add sequence number

This commit is contained in:
kozabrada123 2023-12-17 13:47:11 +01:00
parent 4a364f3826
commit cf3c7e3c1b
2 changed files with 9 additions and 12 deletions

View File

@ -43,9 +43,10 @@ impl UdpHandle {
/// Constructs and sends encoded opus rtp data. /// Constructs and sends encoded opus rtp data.
/// ///
/// Automatically makes an [RtpPacket](discorrtp::rtp::RtpPacket), encrypts it and sends it. /// Automatically makes an [RtpPacket](discorrtp::rtp::RtpPacket), encrypts it and sends it.
pub async fn send_opus_data(&self, sequence: u16, timestamp: u32, payload: Vec<u8>) { pub async fn send_opus_data(&self, timestamp: u32, payload: Vec<u8>) {
let data_lock = self.data.read().await; let ssrc = self.data.read().await.ready_data.clone().unwrap().ssrc.clone();
let ssrc = data_lock.ready_data.clone().unwrap().ssrc; let sequence_number = self.data.read().await.last_sequence_number.clone().wrapping_add(1);
self.data.write().await.last_sequence_number = sequence_number;
let payload_len = payload.len(); let payload_len = payload.len();
@ -59,14 +60,12 @@ impl UdpHandle {
marker: 0, marker: 0,
payload_type: discortp::rtp::RtpType::Dynamic(120), payload_type: discortp::rtp::RtpType::Dynamic(120),
// Actually variable // Actually variable
sequence: sequence.into(), sequence: sequence_number.into(),
timestamp: timestamp.into(), timestamp: timestamp.into(),
ssrc, ssrc,
payload, payload,
}; };
debug!("VUDP: Constructed udp data: {:?}", rtp_data);
let mut buffer = Vec::new(); let mut buffer = Vec::new();
let buffer_size = payload_len + RTP_HEADER_SIZE as usize; let buffer_size = payload_len + RTP_HEADER_SIZE as usize;
@ -98,9 +97,7 @@ impl UdpHandle {
) -> Vec<u8> { ) -> Vec<u8> {
let payload = packet.payload(); let payload = packet.payload();
let data_lock = self.data.read().await; let session_description_result = self.data.read().await.session_description.clone();
let session_description_result = data_lock.session_description.clone();
if session_description_result.is_none() { if session_description_result.is_none() {
// FIXME: Make this function reutrn a result with a proper error type for these kinds // FIXME: Make this function reutrn a result with a proper error type for these kinds
@ -286,9 +283,7 @@ impl UdpHandler {
let ciphertext = buf[12..buf.len()].to_vec(); let ciphertext = buf[12..buf.len()].to_vec();
trace!("VUDP: Parsed packet as rtp!"); trace!("VUDP: Parsed packet as rtp!");
let data_lock = self.data.read().await; let session_description_result = self.data.read().await.session_description.clone();
let session_description_result = data_lock.session_description.clone();
if session_description_result.is_none() { if session_description_result.is_none() {
warn!("VUDP: Received encyrpted voice data, but no encryption key, CANNOT DECRYPT!"); warn!("VUDP: Received encyrpted voice data, but no encryption key, CANNOT DECRYPT!");

View File

@ -10,5 +10,7 @@ pub struct VoiceData {
pub session_description: Option<SessionDescription>, pub session_description: Option<SessionDescription>,
pub user_id: Snowflake, pub user_id: Snowflake,
pub session_id: String, pub session_id: String,
/// The last sequence number we used, has to be incremeted by one every time we send a message
pub last_sequence_number: u16,
pub ip_discovery: Option<IpDiscovery>, pub ip_discovery: Option<IpDiscovery>,
} }