@@ -12,7 +12,7 @@ use ln::features::InitFeatures;
12
12
use ln:: msgs;
13
13
use ln:: msgs:: ChannelMessageHandler ;
14
14
use ln:: channelmanager:: { SimpleArcChannelManager , SimpleRefChannelManager } ;
15
- use util:: ser:: VecWriter ;
15
+ use util:: ser:: { VecWriter , Writeable } ;
16
16
use ln:: peer_channel_encryptor:: { PeerChannelEncryptor , NextNoiseStep } ;
17
17
use ln:: wire;
18
18
use ln:: wire:: Encode ;
@@ -459,6 +459,17 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
459
459
}
460
460
}
461
461
462
+ /// Append a message to a peer's pending outbound/write buffer, and update the map of peers needing sends accordingly.
463
+ fn enqueue_message < M : Encode + Writeable > ( & self , peers_needing_send : & mut HashSet < Descriptor > , peer : & mut Peer , descriptor : Descriptor , message : & M ) {
464
+ let mut buffer = VecWriter ( Vec :: new ( ) ) ;
465
+ wire:: write ( message, & mut buffer) . unwrap ( ) ; // crash if the write failed
466
+ let encoded_message = buffer. 0 ;
467
+
468
+ log_trace ! ( self . logger, "Enqueueing message of type {} to {}" , message. type_id( ) , log_pubkey!( peer. their_node_id. unwrap( ) ) ) ;
469
+ peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encoded_message[ ..] ) ) ;
470
+ peers_needing_send. insert ( descriptor) ;
471
+ }
472
+
462
473
fn do_read_event ( & self , peer_descriptor : & mut Descriptor , data : & [ u8 ] ) -> Result < bool , PeerHandleError > {
463
474
let pause_read = {
464
475
let mut peers_lock = self . peers . lock ( ) . unwrap ( ) ;
@@ -481,16 +492,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
481
492
if peer. pending_read_buffer_pos == peer. pending_read_buffer . len ( ) {
482
493
peer. pending_read_buffer_pos = 0 ;
483
494
484
- macro_rules! encode_and_send_msg {
485
- ( $msg: expr) => {
486
- {
487
- log_trace!( self . logger, "Encoding and sending message of type {} to {}" , $msg. type_id( ) , log_pubkey!( peer. their_node_id. unwrap( ) ) ) ;
488
- peer. pending_outbound_buffer. push_back( peer. channel_encryptor. encrypt_message( & encode_msg!( & $msg) [ ..] ) ) ;
489
- peers. peers_needing_send. insert( peer_descriptor. clone( ) ) ;
490
- }
491
- }
492
- }
493
-
494
495
macro_rules! try_potential_handleerror {
495
496
( $thing: expr) => {
496
497
match $thing {
@@ -508,7 +509,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
508
509
} ,
509
510
msgs:: ErrorAction :: SendErrorMessage { msg } => {
510
511
log_trace!( self . logger, "Got Err handling message, sending Error message because {}" , e. err) ;
511
- encode_and_send_msg! ( msg) ;
512
+ self . enqueue_message ( & mut peers . peers_needing_send , peer , peer_descriptor . clone ( ) , & msg) ;
512
513
continue ;
513
514
} ,
514
515
}
@@ -554,7 +555,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
554
555
}
555
556
556
557
let resp = msgs:: Init { features } ;
557
- encode_and_send_msg ! ( resp) ;
558
+ self . enqueue_message ( & mut peers . peers_needing_send , peer , peer_descriptor . clone ( ) , & resp) ;
558
559
} ,
559
560
NextNoiseStep :: ActThree => {
560
561
let their_node_id = try_potential_handleerror ! ( peer. channel_encryptor. process_act_three( & peer. pending_read_buffer[ ..] ) ) ;
@@ -653,7 +654,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
653
654
}
654
655
655
656
let resp = msgs:: Init { features } ;
656
- encode_and_send_msg ! ( resp) ;
657
+ self . enqueue_message ( & mut peers . peers_needing_send , peer , peer_descriptor . clone ( ) , & resp) ;
657
658
}
658
659
659
660
self . message_handler . chan_handler . peer_connected ( & peer. their_node_id . unwrap ( ) , & msg) ;
@@ -682,7 +683,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
682
683
wire:: Message :: Ping ( msg) => {
683
684
if msg. ponglen < 65532 {
684
685
let resp = msgs:: Pong { byteslen : msg. ponglen } ;
685
- encode_and_send_msg ! ( resp) ;
686
+ self . enqueue_message ( & mut peers . peers_needing_send , peer , peer_descriptor . clone ( ) , & resp) ;
686
687
}
687
688
} ,
688
689
wire:: Message :: Pong ( _msg) => {
0 commit comments