respond to data packets immediately even if they are out of order

This commit is contained in:
Maple Nebel 2026-06-26 20:10:00 +02:00
commit d2b6d78316
2 changed files with 36 additions and 8 deletions

View file

@ -558,14 +558,6 @@ impl<T: CryptoHandler> InternalSocket<T> {
let mut conn = conn.lock().await;
conn.packet_queue.insert(packet.header.sequence_id, packet);
let mut counter = conn.reliable_client_counter;
while let Some(mut packet) = conn.packet_queue.remove(&counter) {
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;
@ -574,6 +566,14 @@ impl<T: CryptoHandler> InternalSocket<T> {
self.send_packet_unbuffered(address, &response).await;
conn.packet_queue.insert(packet.header.sequence_id, packet);
let mut counter = conn.reliable_client_counter;
while let Some(mut packet) = conn.packet_queue.remove(&counter) {
conn.crypto_handler_instance
.decrypt_incoming(packet.header.substream_id, &mut packet.payload[..]);
conn.data_sender.send(packet.payload).await.ok();
conn.reliable_client_counter = conn.reliable_client_counter.overflowing_add(1).0;

View file

@ -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],
}