From d2b6d783168f45e22473742f1104ba8552aebd18 Mon Sep 17 00:00:00 2001 From: Maple Nebel Date: Fri, 26 Jun 2026 20:10:00 +0200 Subject: [PATCH] respond to data packets immediately even if they are out of order --- prudpv1/src/prudp/socket.rs | 16 ++++++++-------- rnex-core/src/kerberos/mod.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/prudpv1/src/prudp/socket.rs b/prudpv1/src/prudp/socket.rs index 7ba0034..57f4ce4 100644 --- a/prudpv1/src/prudp/socket.rs +++ b/prudpv1/src/prudp/socket.rs @@ -558,6 +558,14 @@ impl InternalSocket { let mut conn = conn.lock().await; + let mut response = packet.base_acknowledgement_packet(); + response.header.types_and_flags.set_flag(HAS_SIZE | ACK); + response.header.session_id = conn.session_id; + + conn.crypto_handler_instance.sign_packet(&mut response); + + self.send_packet_unbuffered(address, &response).await; + conn.packet_queue.insert(packet.header.sequence_id, packet); let mut counter = conn.reliable_client_counter; @@ -566,14 +574,6 @@ impl InternalSocket { conn.crypto_handler_instance .decrypt_incoming(packet.header.substream_id, &mut packet.payload[..]); - let mut response = packet.base_acknowledgement_packet(); - response.header.types_and_flags.set_flag(HAS_SIZE | ACK); - response.header.session_id = conn.session_id; - - conn.crypto_handler_instance.sign_packet(&mut response); - - self.send_packet_unbuffered(address, &response).await; - conn.data_sender.send(packet.payload).await.ok(); conn.reliable_client_counter = conn.reliable_client_counter.overflowing_add(1).0; diff --git a/rnex-core/src/kerberos/mod.rs b/rnex-core/src/kerberos/mod.rs index 1ca0576..d83b2d1 100644 --- a/rnex-core/src/kerberos/mod.rs +++ b/rnex-core/src/kerberos/mod.rs @@ -232,3 +232,31 @@ mod test { assert_eq!(KerberosDateTime::PRACTICALLY_NEVER, time) } } + +#[test] +fn test() { + let key = *b"my password"; + let nkey = hex::decode("c3ef03044c6937d30e6b179f610ea190").unwrap(); + + let mut key: [u8; 16] = { + let mut md5 = Md5::new(); + md5.update(key); + md5.finalize().try_into().unwrap() + }; + + loop { + if &nkey[..] == &key[..] { + println!("success"); + return; + } + let mut md5 = Md5::new(); + md5.update(key); + key = md5.finalize().try_into().unwrap(); + } +} + +struct NexToken { + pub pid: u32, + pub time: u64, + pub pw_hash: [u8; 4], +}