mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-10-27 16:00:49 +08:00
71 lines
2.5 KiB
Rust
71 lines
2.5 KiB
Rust
use std::io::{BufReader, BufWriter};
|
|
use std::time::{Duration, SystemTime};
|
|
|
|
use super::*;
|
|
use crate::compression_methods::*;
|
|
use crate::handshake::handshake_message_client_hello::*;
|
|
use crate::handshake::handshake_random::HandshakeRandom;
|
|
use crate::record_layer::record_layer_header::ProtocolVersion;
|
|
|
|
#[test]
|
|
fn test_handshake_message() -> Result<()> {
|
|
let raw_handshake_message = vec![
|
|
0x01, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xfe, 0xfd, 0xb6,
|
|
0x2f, 0xce, 0x5c, 0x42, 0x54, 0xff, 0x86, 0xe1, 0x24, 0x41, 0x91, 0x42, 0x62, 0x15, 0xad,
|
|
0x16, 0xc9, 0x15, 0x8d, 0x95, 0x71, 0x8a, 0xbb, 0x22, 0xd7, 0x47, 0xec, 0xd8, 0x3d, 0xdc,
|
|
0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
];
|
|
let parsed_handshake = Handshake {
|
|
handshake_header: HandshakeHeader {
|
|
handshake_type: HandshakeType::ClientHello,
|
|
length: 0x29,
|
|
message_sequence: 0,
|
|
fragment_offset: 0,
|
|
fragment_length: 0x29,
|
|
},
|
|
handshake_message: HandshakeMessage::ClientHello(HandshakeMessageClientHello {
|
|
version: ProtocolVersion {
|
|
major: 0xFE,
|
|
minor: 0xFD,
|
|
},
|
|
random: HandshakeRandom {
|
|
gmt_unix_time: if let Some(unix_time) =
|
|
SystemTime::UNIX_EPOCH.checked_add(Duration::new(3056586332u64, 0))
|
|
{
|
|
unix_time
|
|
} else {
|
|
SystemTime::UNIX_EPOCH
|
|
},
|
|
random_bytes: [
|
|
0x42, 0x54, 0xff, 0x86, 0xe1, 0x24, 0x41, 0x91, 0x42, 0x62, 0x15, 0xad, 0x16,
|
|
0xc9, 0x15, 0x8d, 0x95, 0x71, 0x8a, 0xbb, 0x22, 0xd7, 0x47, 0xec, 0xd8, 0x3d,
|
|
0xdc, 0x4b,
|
|
],
|
|
},
|
|
cookie: vec![],
|
|
cipher_suites: vec![],
|
|
compression_methods: CompressionMethods { ids: vec![] },
|
|
extensions: vec![],
|
|
}),
|
|
};
|
|
|
|
let mut reader = BufReader::new(raw_handshake_message.as_slice());
|
|
let h = Handshake::unmarshal(&mut reader)?;
|
|
assert_eq!(
|
|
h, parsed_handshake,
|
|
"handshakeMessageClientHello unmarshal: got {h:?}, want {parsed_handshake:?}"
|
|
);
|
|
|
|
let mut raw = vec![];
|
|
{
|
|
let mut writer = BufWriter::<&mut Vec<u8>>::new(raw.as_mut());
|
|
h.marshal(&mut writer)?;
|
|
}
|
|
assert_eq!(
|
|
raw, raw_handshake_message,
|
|
"handshakeMessageClientHello marshal: got {raw:?}, want {raw_handshake_message:?}"
|
|
);
|
|
|
|
Ok(())
|
|
}
|