Skip to content

Commit 95a91c2

Browse files
committed
Extract encode_and_send_msg into a method.
This is a response to splitting #585 into smaller components. This extraction will permit a future extraction of all message handling into a separate method, and then later even into a separate trait that will be accessible through language bindings.
1 parent d4ad57b commit 95a91c2

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use ln::features::InitFeatures;
1212
use ln::msgs;
1313
use ln::msgs::ChannelMessageHandler;
1414
use ln::channelmanager::{SimpleArcChannelManager, SimpleRefChannelManager};
15-
use util::ser::VecWriter;
15+
use util::ser::{VecWriter, Writeable};
1616
use ln::peer_channel_encryptor::{PeerChannelEncryptor,NextNoiseStep};
1717
use ln::wire;
1818
use ln::wire::Encode;
@@ -459,6 +459,16 @@ 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 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+
462472
fn do_read_event(&self, peer_descriptor: &mut Descriptor, data: &[u8]) -> Result<bool, PeerHandleError> {
463473
let pause_read = {
464474
let mut peers_lock = self.peers.lock().unwrap();
@@ -481,16 +491,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
481491
if peer.pending_read_buffer_pos == peer.pending_read_buffer.len() {
482492
peer.pending_read_buffer_pos = 0;
483493

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-
494494
macro_rules! try_potential_handleerror {
495495
($thing: expr) => {
496496
match $thing {
@@ -508,7 +508,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
508508
},
509509
msgs::ErrorAction::SendErrorMessage { msg } => {
510510
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);
512512
continue;
513513
},
514514
}
@@ -554,7 +554,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, L: Deref> PeerManager<Descriptor,
554554
}
555555

556556
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);
558558
},
559559
NextNoiseStep::ActThree => {
560560
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,
653653
}
654654

655655
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);
657657
}
658658

659659
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,
682682
wire::Message::Ping(msg) => {
683683
if msg.ponglen < 65532 {
684684
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);
686686
}
687687
},
688688
wire::Message::Pong(_msg) => {

0 commit comments

Comments
 (0)