@@ -12,7 +12,7 @@ use ln::features::InitFeatures;
1212use ln:: msgs;
1313use ln:: msgs:: ChannelMessageHandler ;
1414use ln:: channelmanager:: { SimpleArcChannelManager , SimpleRefChannelManager } ;
15- use util:: ser:: VecWriter ;
15+ use util:: ser:: { VecWriter , Writeable } ;
1616use ln:: peer_channel_encryptor:: { PeerChannelEncryptor , NextNoiseStep } ;
1717use ln:: wire;
1818use ln:: wire:: Encode ;
@@ -459,6 +459,17 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
459459 }
460460 }
461461
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+
462473 fn do_read_event ( & self , peer_descriptor : & mut Descriptor , data : & [ u8 ] ) -> Result < bool , PeerHandleError > {
463474 let pause_read = {
464475 let mut peers_lock = self . peers . lock ( ) . unwrap ( ) ;
@@ -481,16 +492,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
481492 if peer. pending_read_buffer_pos == peer. pending_read_buffer . len ( ) {
482493 peer. pending_read_buffer_pos = 0 ;
483494
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-
494495 macro_rules! try_potential_handleerror {
495496 ( $thing: expr) => {
496497 match $thing {
@@ -508,7 +509,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
508509 } ,
509510 msgs:: ErrorAction :: SendErrorMessage { msg } => {
510511 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) ;
512513 continue ;
513514 } ,
514515 }
@@ -554,7 +555,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
554555 }
555556
556557 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) ;
558559 } ,
559560 NextNoiseStep :: ActThree => {
560561 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,
653654 }
654655
655656 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) ;
657658 }
658659
659660 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,
682683 wire:: Message :: Ping ( msg) => {
683684 if msg. ponglen < 65532 {
684685 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) ;
686687 }
687688 } ,
688689 wire:: Message :: Pong ( _msg) => {
0 commit comments