@@ -6,7 +6,7 @@ use serde::Serialize;
66use crate :: utils:: ascii_converter:: AsciiConverter ;
77
88use crate :: protocol:: types:: * ;
9- use crate :: protocol:: message:: trace:: { trace_start, trace_stop, trace_annotate, trace_lock, trace_unlock, MessageTrace , TraceValue , ToTraceValue } ;
9+ use crate :: protocol:: message:: trace:: { trace_start, trace_stop, trace_annotate, trace_abort , trace_lock, trace_unlock, MessageTrace , TraceValue , ToTraceValue } ;
1010
1111pub mod errors;
1212pub mod trace;
@@ -72,7 +72,13 @@ macro_rules! endian_read {
7272 pub fn [ < read_$ty >] ( & mut self , readahead: bool ) -> Result <$ty, MessageError > {
7373 const TYPE_SIZE : usize = std:: mem:: size_of:: <$ty>( ) ;
7474 trace_start!( self , readahead) ;
75- self . check_read_size( TYPE_SIZE ) ?;
75+ match self . check_read_size( TYPE_SIZE ) {
76+ Ok ( ( ) ) => { } ,
77+ Err ( e) => {
78+ trace_abort!( self ) ;
79+ return Err ( e) ;
80+ } ,
81+ }
7682 let mut a: [ u8 ; TYPE_SIZE ] = [ 0 ; TYPE_SIZE ] ;
7783 for n in 0 ..TYPE_SIZE {
7884 a[ n] = self . buffer[ self . start + self . position + n ] ;
@@ -297,7 +303,6 @@ impl Message {
297303 } else if b == 0 {
298304 break
299305 }
300-
301306 buf. push ( b) ;
302307 }
303308 trace_unlock ! ( self ) ;
@@ -497,16 +502,25 @@ impl Message {
497502 Ok ( t) => t,
498503 Err ( e) => {
499504 match e {
500- MessageError :: ReadBeyondSize ( _, _, _) => break ,
501- _ => return Err ( e) ,
505+ MessageError :: ReadBeyondSize ( _, _, _) => {
506+ break
507+ } ,
508+ _ => {
509+ let p = Packet :: Connected ( Connected {
510+ sequence,
511+ sequence_ack,
512+ messages,
513+ } ) ;
514+ trace_stop ! ( self , p) ;
515+ return Err ( e)
516+ } ,
502517 }
503518 } ,
504519 } ;
505520
506521 let cmd = match ServerClient :: try_from ( t) {
507522 Ok ( cmd) => cmd,
508523 Err ( _) => {
509-
510524 let p = Packet :: Connected ( Connected {
511525 sequence,
512526 sequence_ack,
@@ -516,7 +530,19 @@ impl Message {
516530 return Err ( MessageError :: UnknownType ( t) ) ;
517531 }
518532 } ;
519- let ret = cmd. read_message ( self ) ?;
533+
534+ let ret = match cmd. read_message ( self ) {
535+ Ok ( ret) => ret,
536+ Err ( e) => {
537+ let p = Packet :: Connected ( Connected {
538+ sequence,
539+ sequence_ack,
540+ messages,
541+ } ) ;
542+ trace_stop ! ( self , p) ;
543+ return Err ( e) ;
544+ }
545+ } ;
520546 messages. push ( ret) ;
521547 }
522548 let p = Packet :: Connected ( Connected {
@@ -539,8 +565,7 @@ impl Message {
539565 trace_stop ! ( self , _packet_type, U8 ) ;
540566 match packet_type {
541567 CommandCode :: S2cChallenge => {
542- let p = self . read_packet_s2c_challenge ( ) ;
543- return p;
568+ self . read_packet_s2c_challenge ( )
544569 }
545570 CommandCode :: S2cConnection => {
546571 Ok ( Packet :: ConnectionLessServerConnection )
0 commit comments