@@ -5,14 +5,14 @@ use std::os::fd::{AsFd, AsRawFd};
55use std:: { io, mem, ops} ;
66
77use rustls:: client:: ClientConnectionData ;
8+ use rustls:: internal:: msgs:: codec:: Reader ;
89use rustls:: internal:: msgs:: enums:: AlertLevel ;
910use rustls:: kernel:: KernelConnection ;
1011use rustls:: server:: ServerConnectionData ;
1112use rustls:: {
1213 AlertDescription , ConnectionTrafficSecrets , ContentType , HandshakeType , InvalidMessage ,
1314 PeerMisbehaved , ProtocolVersion , SupportedCipherSuite ,
1415} ;
15- use slicur:: Reader ;
1616
1717use crate :: protocol:: { KeyUpdateRequest , KEY_UPDATE_NOT_REQUESTED , KEY_UPDATE_REQUESTED } ;
1818use crate :: setup:: { setup_tls_params_rx, setup_tls_params_tx} ;
@@ -411,21 +411,24 @@ impl Context {
411411 stream : & IO ,
412412 payload : & [ u8 ] ,
413413 ) -> io:: Result < ( ) > {
414- fn read_message < ' a > (
415- reader : & mut Reader < ' a > ,
416- ) -> Result < ( HandshakeType , & ' a [ u8 ] ) , slicur:: error:: InsufficientData > {
417- let handshake_type = HandshakeType :: from ( reader. read_u8 ( ) ?) ;
418- let length = reader. read_u24 ( ) ?;
419- let payload = reader. take ( length. to_usize ( ) ) ?;
420-
421- Ok ( ( handshake_type, payload) )
414+ fn read_message < ' a > ( reader : & mut Reader < ' a > ) -> Option < ( HandshakeType , & ' a [ u8 ] ) > {
415+ let & [ typ, a, b, c] = reader. take ( 4 ) ? else {
416+ unreachable ! ( )
417+ } ;
418+
419+ let handshake_type = HandshakeType :: from ( typ) ;
420+ let length = u32:: from_be_bytes ( [ 0 , a, b, c] ) as usize ;
421+
422+ let payload = reader. take ( length) ?;
423+
424+ Some ( ( handshake_type, payload) )
422425 }
423426
424427 let mut reader = Reader :: init ( payload) ;
425428 let mut sub_message_count = 0 ;
426429
427430 loop {
428- let Ok ( ( handshake_type, payload) ) = read_message ( & mut reader) else {
431+ let Some ( ( handshake_type, payload) ) = read_message ( & mut reader) else {
429432 abort_and_return_error ! (
430433 self ,
431434 stream,
0 commit comments