@@ -350,6 +350,8 @@ pub struct NoiseSocket<S: AsyncRead + AsyncWrite + Unpin> {
350
350
read_buffer : Vec < u8 > ,
351
351
canonical_max_read : usize ,
352
352
decrypt_buffer : Option < Vec < u8 > > ,
353
+ peer : PeerId ,
354
+ ty : HandshakeTransport ,
353
355
}
354
356
355
357
impl < S : AsyncRead + AsyncWrite + Unpin > NoiseSocket < S > {
@@ -358,6 +360,8 @@ impl<S: AsyncRead + AsyncWrite + Unpin> NoiseSocket<S> {
358
360
noise : NoiseContext ,
359
361
max_read_ahead_factor : usize ,
360
362
max_write_buffer_size : usize ,
363
+ peer : PeerId ,
364
+ ty : HandshakeTransport ,
361
365
) -> Self {
362
366
Self {
363
367
io,
@@ -380,6 +384,8 @@ impl<S: AsyncRead + AsyncWrite + Unpin> NoiseSocket<S> {
380
384
max_read : max_read_ahead_factor * MAX_NOISE_MSG_LEN ,
381
385
} ,
382
386
canonical_max_read : max_read_ahead_factor * MAX_NOISE_MSG_LEN ,
387
+ peer,
388
+ ty,
383
389
}
384
390
}
385
391
@@ -424,7 +430,13 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for NoiseSocket<S> {
424
430
} ,
425
431
} ;
426
432
427
- tracing:: trace!( target: LOG_TARGET , ?nread, "read data from socket" ) ;
433
+ tracing:: trace!(
434
+ target: LOG_TARGET ,
435
+ ?nread,
436
+ ty = ?this. ty,
437
+ peer = ?this. peer,
438
+ "read data from socket"
439
+ ) ;
428
440
429
441
this. nread += nread;
430
442
this. read_state = ReadState :: ReadFrameLen ;
@@ -433,13 +445,25 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for NoiseSocket<S> {
433
445
let mut remaining = match this. nread . checked_sub ( this. offset ) {
434
446
Some ( remaining) => remaining,
435
447
None => {
436
- tracing:: error!( target: LOG_TARGET , "offset is larger than the number of bytes read" ) ;
448
+ tracing:: error!(
449
+ target: LOG_TARGET ,
450
+ ty = ?this. ty,
451
+ peer = ?this. peer,
452
+ nread = ?this. nread,
453
+ offset = ?this. offset,
454
+ "offset is larger than the number of bytes read"
455
+ ) ;
437
456
return Poll :: Ready ( Err ( io:: ErrorKind :: PermissionDenied . into ( ) ) ) ;
438
457
}
439
458
} ;
440
459
441
460
if remaining < 2 {
442
- tracing:: trace!( target: LOG_TARGET , "reset read buffer" ) ;
461
+ tracing:: trace!(
462
+ target: LOG_TARGET ,
463
+ ty = ?this. ty,
464
+ peer = ?this. peer,
465
+ "reset read buffer"
466
+ ) ;
443
467
this. reset_read_state ( remaining) ;
444
468
continue ;
445
469
}
@@ -456,13 +480,20 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for NoiseSocket<S> {
456
480
}
457
481
} ;
458
482
459
- tracing:: trace!( target: LOG_TARGET , "current frame size = {frame_size}" ) ;
483
+ tracing:: trace!(
484
+ target: LOG_TARGET ,
485
+ ty = ?this. ty,
486
+ peer = ?this. peer,
487
+ "current frame size = {frame_size}"
488
+ ) ;
460
489
461
490
if remaining < frame_size {
462
491
// `read_buffer` can fit the full frame size.
463
492
if this. nread + frame_size < this. canonical_max_read {
464
493
tracing:: trace!(
465
494
target: LOG_TARGET ,
495
+ ty = ?this. ty,
496
+ peer = ?this. peer,
466
497
max_size = ?this. canonical_max_read,
467
498
next_frame_size = ?( this. nread + frame_size) ,
468
499
"read buffer can fit the full frame" ,
@@ -475,7 +506,12 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for NoiseSocket<S> {
475
506
continue ;
476
507
}
477
508
478
- tracing:: trace!( target: LOG_TARGET , "use auxiliary buffer extension" ) ;
509
+ tracing:: trace!(
510
+ target: LOG_TARGET ,
511
+ ty = ?this. ty,
512
+ peer = ?this. peer,
513
+ "use auxiliary buffer extension"
514
+ ) ;
479
515
480
516
// use the auxiliary memory at the end of the read buffer for reading the
481
517
// frame
@@ -489,6 +525,8 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for NoiseSocket<S> {
489
525
if frame_size <= NOISE_EXTRA_ENCRYPT_SPACE {
490
526
tracing:: error!(
491
527
target: LOG_TARGET ,
528
+ ty = ?this. ty,
529
+ peer = ?this. peer,
492
530
?frame_size,
493
531
max_size = ?NOISE_EXTRA_ENCRYPT_SPACE ,
494
532
"invalid frame size" ,
@@ -542,7 +580,16 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for NoiseSocket<S> {
542
580
buf,
543
581
) {
544
582
Err ( error) => {
545
- tracing:: error!( target: LOG_TARGET , ?error, "failed to decrypt message" ) ;
583
+ tracing:: error!(
584
+ target: LOG_TARGET ,
585
+ ty = ?this. ty,
586
+ peer = ?this. peer,
587
+ buf_len = ?buf. len( ) ,
588
+ frame_size = ?frame_size,
589
+ ?error,
590
+ "failed to decrypt message"
591
+ ) ;
592
+
546
593
return Poll :: Ready ( Err ( io:: ErrorKind :: InvalidData . into ( ) ) ) ;
547
594
}
548
595
Ok ( nread) => {
@@ -560,7 +607,16 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for NoiseSocket<S> {
560
607
& mut buffer,
561
608
) {
562
609
Err ( error) => {
563
- tracing:: error!( target: LOG_TARGET , ?error, "failed to decrypt message" ) ;
610
+ tracing:: error!(
611
+ target: LOG_TARGET ,
612
+ ty = ?this. ty,
613
+ peer = ?this. peer,
614
+ buf_len = ?buf. len( ) ,
615
+ frame_size = ?frame_size,
616
+ ?error,
617
+ "failed to decrypt message for smaller buffer"
618
+ ) ;
619
+
564
620
return Poll :: Ready ( Err ( io:: ErrorKind :: InvalidData . into ( ) ) ) ;
565
621
}
566
622
Ok ( nread) => {
@@ -605,7 +661,14 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncWrite for NoiseSocket<S> {
605
661
606
662
match this. noise . write_message ( chunk, & mut this. encrypt_buffer [ offset + 2 ..] ) {
607
663
Err ( error) => {
608
- tracing:: error!( target: LOG_TARGET , ?error, "failed to encrypt message" ) ;
664
+ tracing:: error!(
665
+ target: LOG_TARGET ,
666
+ ?error,
667
+ ty = ?this. ty,
668
+ peer = ?this. peer,
669
+ "failed to encrypt message"
670
+ ) ;
671
+
609
672
return Poll :: Ready ( Err ( io:: ErrorKind :: InvalidData . into ( ) ) ) ;
610
673
}
611
674
Ok ( nwritten) => {
@@ -701,6 +764,15 @@ fn parse_and_verify_peer_id(
701
764
Ok ( peer_id)
702
765
}
703
766
767
+ /// The type of the transport used for the crypto/noise protocol.
768
+ ///
769
+ /// This is used for logging purposes.
770
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
771
+ pub enum HandshakeTransport {
772
+ Tcp ,
773
+ WebSocket ,
774
+ }
775
+
704
776
/// Perform Noise handshake.
705
777
pub async fn handshake < S : AsyncRead + AsyncWrite + Unpin > (
706
778
mut io : S ,
@@ -709,9 +781,10 @@ pub async fn handshake<S: AsyncRead + AsyncWrite + Unpin>(
709
781
max_read_ahead_factor : usize ,
710
782
max_write_buffer_size : usize ,
711
783
timeout : std:: time:: Duration ,
784
+ ty : HandshakeTransport ,
712
785
) -> Result < ( NoiseSocket < S > , PeerId ) , NegotiationError > {
713
786
let handle_handshake = async move {
714
- tracing:: debug!( target: LOG_TARGET , ?role, "start noise handshake" ) ;
787
+ tracing:: debug!( target: LOG_TARGET , ?role, ?ty , "start noise handshake" ) ;
715
788
716
789
let mut noise = NoiseContext :: new ( keypair, role) ?;
717
790
let payload = match role {
@@ -727,7 +800,7 @@ pub async fn handshake<S: AsyncRead + AsyncWrite + Unpin>(
727
800
let payload = handshake_schema:: NoiseHandshakePayload :: decode ( message)
728
801
. map_err ( ParseError :: from)
729
802
. map_err ( |err| {
730
- tracing:: error!( target: LOG_TARGET , ?err, "failed to decode remote identity message" ) ;
803
+ tracing:: error!( target: LOG_TARGET , ?err, ?ty , "failed to decode remote identity message" ) ;
731
804
err
732
805
} ) ?;
733
806
@@ -764,6 +837,8 @@ pub async fn handshake<S: AsyncRead + AsyncWrite + Unpin>(
764
837
noise. into_transport ( ) ?,
765
838
max_read_ahead_factor,
766
839
max_write_buffer_size,
840
+ peer,
841
+ ty,
767
842
) ,
768
843
peer,
769
844
) )
@@ -818,6 +893,7 @@ mod tests {
818
893
MAX_READ_AHEAD_FACTOR ,
819
894
MAX_WRITE_BUFFER_SIZE ,
820
895
std:: time:: Duration :: from_secs( 10 ) ,
896
+ HandshakeTransport :: Tcp ,
821
897
) ,
822
898
handshake(
823
899
io2,
@@ -826,6 +902,7 @@ mod tests {
826
902
MAX_READ_AHEAD_FACTOR ,
827
903
MAX_WRITE_BUFFER_SIZE ,
828
904
std:: time:: Duration :: from_secs( 10 ) ,
905
+ HandshakeTransport :: Tcp ,
829
906
)
830
907
) ;
831
908
let ( mut res1, mut res2) = ( res1. unwrap ( ) , res2. unwrap ( ) ) ;
0 commit comments