Skip to content

Commit fcb76ee

Browse files
committed
f dry up internal_tx_(add/remove)_(input/output)
1 parent f3876b3 commit fcb76ee

File tree

1 file changed

+58
-104
lines changed

1 file changed

+58
-104
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 58 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -7545,140 +7545,94 @@ where
75457545
}
75467546
}
75477547

7548-
fn internal_tx_add_input(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAddInput) -> Result<(), MsgHandleErrInternal> {
7548+
fn internal_tx_msg<HandleTxMsgFn: Fn(&mut ChannelPhase<SP>) -> Result<MessageSendEvent, &'static str>>(
7549+
&self, counterparty_node_id: &PublicKey, channel_id: ChannelId, tx_msg_handler: HandleTxMsgFn
7550+
) -> Result<(), MsgHandleErrInternal> {
75497551
let per_peer_state = self.per_peer_state.read().unwrap();
75507552
let peer_state_mutex = per_peer_state.get(counterparty_node_id)
75517553
.ok_or_else(|| {
75527554
debug_assert!(false);
75537555
MsgHandleErrInternal::send_err_msg_no_close(
75547556
format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
7555-
msg.channel_id)
7557+
channel_id)
75567558
})?;
75577559
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
75587560
let peer_state = &mut *peer_state_lock;
7559-
match peer_state.channel_by_id.entry(msg.channel_id) {
7561+
match peer_state.channel_by_id.entry(channel_id) {
75607562
hash_map::Entry::Occupied(mut chan_phase_entry) => {
75617563
let channel_phase = chan_phase_entry.get_mut();
7562-
let msg_send_event = match channel_phase {
7563-
ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7564-
channel.tx_add_input(msg).into_msg_send_event(counterparty_node_id)
7565-
},
7566-
ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7567-
channel.tx_add_input(msg).into_msg_send_event(counterparty_node_id)
7568-
},
7569-
_ => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7570-
"Got a tx_add_input message with no interactive transaction construction expected or in-progress"
7571-
.into())), chan_phase_entry)
7564+
let msg_send_event = match tx_msg_handler(channel_phase) {
7565+
Ok(msg_send_event) => msg_send_event,
7566+
Err(tx_msg_str) => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7567+
format!("Got a {tx_msg_str} message with no interactive transaction construction expected or in-progress")
7568+
)), chan_phase_entry)
75727569
};
75737570
peer_state.pending_msg_events.push(msg_send_event);
75747571
Ok(())
75757572
},
75767573
hash_map::Entry::Vacant(_) => {
7577-
Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
7574+
Err(MsgHandleErrInternal::send_err_msg_no_close(format!(
7575+
"Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}",
7576+
counterparty_node_id), channel_id)
7577+
)
75787578
}
75797579
}
75807580
}
75817581

7582+
fn internal_tx_add_input(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAddInput) -> Result<(), MsgHandleErrInternal> {
7583+
self.internal_tx_msg(counterparty_node_id, msg.channel_id, |channel_phase: &mut ChannelPhase<SP>| {
7584+
match channel_phase {
7585+
ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7586+
Ok(channel.tx_add_input(msg).into_msg_send_event(counterparty_node_id))
7587+
},
7588+
ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7589+
Ok(channel.tx_add_input(msg).into_msg_send_event(counterparty_node_id))
7590+
},
7591+
_ => Err("tx_add_input"),
7592+
}
7593+
})
7594+
}
7595+
75827596
fn internal_tx_add_output(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAddOutput) -> Result<(), MsgHandleErrInternal> {
7583-
let per_peer_state = self.per_peer_state.read().unwrap();
7584-
let peer_state_mutex = per_peer_state.get(counterparty_node_id)
7585-
.ok_or_else(|| {
7586-
debug_assert!(false);
7587-
MsgHandleErrInternal::send_err_msg_no_close(
7588-
format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
7589-
msg.channel_id)
7590-
})?;
7591-
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7592-
let peer_state = &mut *peer_state_lock;
7593-
match peer_state.channel_by_id.entry(msg.channel_id) {
7594-
hash_map::Entry::Occupied(mut chan_phase_entry) => {
7595-
let channel_phase = chan_phase_entry.get_mut();
7596-
let msg_send_event = match channel_phase {
7597-
ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7598-
channel.tx_add_output(msg).into_msg_send_event(counterparty_node_id)
7599-
},
7600-
ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7601-
channel.tx_add_output(msg).into_msg_send_event(counterparty_node_id)
7602-
},
7603-
_ => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7604-
"Got a tx_add_output message with no interactive transaction construction expected or in-progress"
7605-
.into())), chan_phase_entry)
7606-
};
7607-
peer_state.pending_msg_events.push(msg_send_event);
7608-
Ok(())
7609-
},
7610-
hash_map::Entry::Vacant(_) => {
7611-
Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
7597+
self.internal_tx_msg(counterparty_node_id, msg.channel_id, |channel_phase: &mut ChannelPhase<SP>| {
7598+
match channel_phase {
7599+
ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7600+
Ok(channel.tx_add_output(msg).into_msg_send_event(counterparty_node_id))
7601+
},
7602+
ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7603+
Ok(channel.tx_add_output(msg).into_msg_send_event(counterparty_node_id))
7604+
},
7605+
_ => Err("tx_add_output"),
76127606
}
7613-
}
7607+
})
76147608
}
76157609

76167610
fn internal_tx_remove_input(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxRemoveInput) -> Result<(), MsgHandleErrInternal> {
7617-
let per_peer_state = self.per_peer_state.read().unwrap();
7618-
let peer_state_mutex = per_peer_state.get(counterparty_node_id)
7619-
.ok_or_else(|| {
7620-
debug_assert!(false);
7621-
MsgHandleErrInternal::send_err_msg_no_close(
7622-
format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
7623-
msg.channel_id)
7624-
})?;
7625-
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7626-
let peer_state = &mut *peer_state_lock;
7627-
match peer_state.channel_by_id.entry(msg.channel_id) {
7628-
hash_map::Entry::Occupied(mut chan_phase_entry) => {
7629-
let channel_phase = chan_phase_entry.get_mut();
7630-
let msg_send_event = match channel_phase {
7631-
ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7632-
channel.tx_remove_input(msg).into_msg_send_event(counterparty_node_id)
7633-
},
7634-
ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7635-
channel.tx_remove_input(msg).into_msg_send_event(counterparty_node_id)
7636-
},
7637-
_ => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7638-
"Got a tx_remove_input message with no interactive transaction construction expected or in-progress"
7639-
.into())), chan_phase_entry)
7640-
};
7641-
peer_state.pending_msg_events.push(msg_send_event);
7642-
Ok(())
7643-
},
7644-
hash_map::Entry::Vacant(_) => {
7645-
Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
7611+
self.internal_tx_msg(counterparty_node_id, msg.channel_id, |channel_phase: &mut ChannelPhase<SP>| {
7612+
match channel_phase {
7613+
ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7614+
Ok(channel.tx_remove_input(msg).into_msg_send_event(counterparty_node_id))
7615+
},
7616+
ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7617+
Ok(channel.tx_remove_input(msg).into_msg_send_event(counterparty_node_id))
7618+
},
7619+
_ => Err("tx_remove_input"),
76467620
}
7647-
}
7621+
})
76487622
}
76497623

76507624
fn internal_tx_remove_output(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxRemoveOutput) -> Result<(), MsgHandleErrInternal> {
7651-
let per_peer_state = self.per_peer_state.read().unwrap();
7652-
let peer_state_mutex = per_peer_state.get(counterparty_node_id)
7653-
.ok_or_else(|| {
7654-
debug_assert!(false);
7655-
MsgHandleErrInternal::send_err_msg_no_close(
7656-
format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
7657-
msg.channel_id)
7658-
})?;
7659-
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7660-
let peer_state = &mut *peer_state_lock;
7661-
match peer_state.channel_by_id.entry(msg.channel_id) {
7662-
hash_map::Entry::Occupied(mut chan_phase_entry) => {
7663-
let channel_phase = chan_phase_entry.get_mut();
7664-
let msg_send_event = match channel_phase {
7665-
ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7666-
channel.tx_remove_output(msg).into_msg_send_event(counterparty_node_id)
7667-
},
7668-
ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7669-
channel.tx_remove_output(msg).into_msg_send_event(counterparty_node_id)
7670-
},
7671-
_ => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7672-
"Got a tx_remove_output message with no interactive transaction construction expected or in-progress"
7673-
.into())), chan_phase_entry)
7674-
};
7675-
peer_state.pending_msg_events.push(msg_send_event);
7676-
Ok(())
7677-
},
7678-
hash_map::Entry::Vacant(_) => {
7679-
Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
7625+
self.internal_tx_msg(counterparty_node_id, msg.channel_id, |channel_phase: &mut ChannelPhase<SP>| {
7626+
match channel_phase {
7627+
ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7628+
Ok(channel.tx_remove_output(msg).into_msg_send_event(counterparty_node_id))
7629+
},
7630+
ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7631+
Ok(channel.tx_remove_output(msg).into_msg_send_event(counterparty_node_id))
7632+
},
7633+
_ => Err("tx_remove_output"),
76807634
}
7681-
}
7635+
})
76827636
}
76837637

76847638
fn internal_tx_complete(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxComplete) -> Result<(), MsgHandleErrInternal> {

0 commit comments

Comments
 (0)