Skip to content

Commit fd71f8b

Browse files
authored
Merge pull request #624 from arik-so/encode_and_send_msg_method_refactor
Extract encode_and_send_msg into a method.
2 parents d4ad57b + dbdef7f commit fd71f8b

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 16 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,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

Comments
 (0)