@@ -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,16 @@ 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 encoded_message: Vec < u8 > = vec ! [ ] ;
465
+ wire:: write ( message, & mut encoded_message) ;
466
+
467
+ log_trace ! ( self . logger, "Encoding and sending message of type {} to {}" , message. type_id( ) . to_string( ) , log_pubkey!( peer. their_node_id. unwrap( ) ) ) ;
468
+ peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encoded_message[ ..] ) ) ;
469
+ peers_needing_send. insert ( descriptor) ;
470
+ }
471
+
462
472
fn do_read_event ( & self , peer_descriptor : & mut Descriptor , data : & [ u8 ] ) -> Result < bool , PeerHandleError > {
463
473
let pause_read = {
464
474
let mut peers_lock = self . peers . lock ( ) . unwrap ( ) ;
@@ -481,16 +491,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
481
491
if peer. pending_read_buffer_pos == peer. pending_read_buffer . len ( ) {
482
492
peer. pending_read_buffer_pos = 0 ;
483
493
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
494
macro_rules! try_potential_handleerror {
495
495
( $thing: expr) => {
496
496
match $thing {
@@ -508,7 +508,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
508
508
} ,
509
509
msgs:: ErrorAction :: SendErrorMessage { msg } => {
510
510
log_trace!( self . logger, "Got Err handling message, sending Error message because {}" , e. err) ;
511
- encode_and_send_msg! ( msg) ;
511
+ self . enqueue_message ( & mut peers . peers_needing_send , peer , peer_descriptor . clone ( ) , & msg) ;
512
512
continue ;
513
513
} ,
514
514
}
@@ -554,7 +554,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
554
554
}
555
555
556
556
let resp = msgs:: Init { features } ;
557
- encode_and_send_msg ! ( resp) ;
557
+ self . enqueue_message ( & mut peers . peers_needing_send , peer , peer_descriptor . clone ( ) , & resp) ;
558
558
} ,
559
559
NextNoiseStep :: ActThree => {
560
560
let their_node_id = try_potential_handleerror ! ( peer. channel_encryptor. process_act_three( & peer. pending_read_buffer[ ..] ) ) ;
@@ -653,7 +653,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
653
653
}
654
654
655
655
let resp = msgs:: Init { features } ;
656
- encode_and_send_msg ! ( resp) ;
656
+ self . enqueue_message ( & mut peers . peers_needing_send , peer , peer_descriptor . clone ( ) , & resp) ;
657
657
}
658
658
659
659
self . message_handler . chan_handler . peer_connected ( & peer. their_node_id . unwrap ( ) , & msg) ;
@@ -682,7 +682,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
682
682
wire:: Message :: Ping ( msg) => {
683
683
if msg. ponglen < 65532 {
684
684
let resp = msgs:: Pong { byteslen : msg. ponglen } ;
685
- encode_and_send_msg ! ( resp) ;
685
+ self . enqueue_message ( & mut peers . peers_needing_send , peer , peer_descriptor . clone ( ) , & resp) ;
686
686
}
687
687
} ,
688
688
wire:: Message :: Pong ( _msg) => {
0 commit comments