forked from spacebar/rust-nex
respond to data packets immediately even if they are out of order
This commit is contained in:
parent
0615e3e663
commit
d2b6d78316
2 changed files with 36 additions and 8 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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],
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue