Skip to content

Commit 028f1fb

Browse files
Drop Deref indirection for message handler traits
Reduces generics and verbosity across the codebase, should provide equivalent behavior. This could be split into multiple commits (e.g. one for OnionMessenger message handler types, one for PeerManager message handler types) but it would require adding a new IgnoringOnionMessageHandler type for the messenger handlers, due to the IgnoringMessageHandler's Deref implementation conflicting otherwise.
1 parent e3f5361 commit 028f1fb

8 files changed

Lines changed: 432 additions & 210 deletions

File tree

lightning-background-processor/src/lib.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -417,14 +417,10 @@ pub const NO_ONION_MESSENGER: Option<
417417
Logger = &'static (dyn Logger + Send + Sync),
418418
NL = &'static DynChannelManager,
419419
MessageRouter = &'static DynMessageRouter,
420-
OffersMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
421-
OMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
422-
AsyncPaymentsMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
423-
APH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
424-
DNSResolverMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
425-
DRH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
426-
CustomOnionMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
427-
CMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
420+
OMH = lightning::ln::peer_handler::IgnoringMessageHandler,
421+
APH = lightning::ln::peer_handler::IgnoringMessageHandler,
422+
DRH = lightning::ln::peer_handler::IgnoringMessageHandler,
423+
CMH = lightning::ln::peer_handler::IgnoringMessageHandler,
428424
> + Send
429425
+ Sync,
430426
>,

lightning-dns-resolver/src/lib.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#![deny(rustdoc::private_intra_doc_links)]
77

88
use std::net::SocketAddr;
9-
use std::ops::Deref;
109
use std::sync::atomic::{AtomicUsize, Ordering};
1110
use std::sync::{Arc, Mutex};
1211

@@ -30,10 +29,7 @@ const WE_REQUIRE_32_OR_64_BIT_USIZE: u8 = 424242;
3029

3130
/// A resolver which implements [`DNSResolverMessageHandler`] and replies to [`DNSSECQuery`]
3231
/// messages with with [`DNSSECProof`]s.
33-
pub struct OMDomainResolver<PH: Deref>
34-
where
35-
PH::Target: DNSResolverMessageHandler,
36-
{
32+
pub struct OMDomainResolver<PH: DNSResolverMessageHandler> {
3733
state: Arc<OMResolverState>,
3834
proof_handler: Option<PH>,
3935
runtime_handle: Mutex<Option<Handle>>,
@@ -56,10 +52,7 @@ impl OMDomainResolver<IgnoringMessageHandler> {
5652
}
5753
}
5854

59-
impl<PH: Deref> OMDomainResolver<PH>
60-
where
61-
PH::Target: DNSResolverMessageHandler,
62-
{
55+
impl<PH: DNSResolverMessageHandler> OMDomainResolver<PH> {
6356
/// Creates a new [`OMDomainResolver`] given the [`SocketAddr`] of a DNS resolver listening on
6457
/// TCP (e.g. 8.8.8.8:53, 1.1.1.1:53 or your local DNS resolver).
6558
///
@@ -103,10 +96,7 @@ where
10396
}
10497
}
10598

106-
impl<PH: Deref> DNSResolverMessageHandler for OMDomainResolver<PH>
107-
where
108-
PH::Target: DNSResolverMessageHandler,
109-
{
99+
impl<PH: DNSResolverMessageHandler> DNSResolverMessageHandler for OMDomainResolver<PH> {
110100
fn handle_dnssec_proof(&self, proof: DNSSECProof, context: DNSResolverContext) {
111101
if let Some(proof_handler) = &self.proof_handler {
112102
proof_handler.handle_dnssec_proof(proof, context);
@@ -169,7 +159,6 @@ mod test {
169159
use lightning::ln::msgs::{
170160
BaseMessageHandler, ChannelMessageHandler, Init, OnionMessageHandler,
171161
};
172-
use lightning::ln::peer_handler::IgnoringMessageHandler;
173162
use lightning::offers::offer::Offer;
174163
use lightning::onion_message::dns_resolution::{HumanReadableName, OMNameResolver};
175164
use lightning::onion_message::messenger::{

lightning/src/ln/msgs.rs

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ use crate::io_extras::read_to_end;
5050
use core::fmt;
5151
use core::fmt::Debug;
5252
use core::fmt::Display;
53+
use core::ops::Deref;
5354
#[cfg(feature = "std")]
5455
use core::str::FromStr;
5556
#[cfg(feature = "std")]
@@ -2074,6 +2075,26 @@ pub trait BaseMessageHandler {
20742075
-> Result<(), ()>;
20752076
}
20762077

2078+
impl<T: BaseMessageHandler + ?Sized, B: Deref<Target = T>> BaseMessageHandler for B {
2079+
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {
2080+
self.deref().get_and_clear_pending_msg_events()
2081+
}
2082+
fn peer_disconnected(&self, their_node_id: PublicKey) {
2083+
self.deref().peer_disconnected(their_node_id)
2084+
}
2085+
fn provided_node_features(&self) -> NodeFeatures {
2086+
self.deref().provided_node_features()
2087+
}
2088+
fn provided_init_features(&self, their_node_id: PublicKey) -> InitFeatures {
2089+
self.deref().provided_init_features(their_node_id)
2090+
}
2091+
fn peer_connected(
2092+
&self, their_node_id: PublicKey, msg: &Init, inbound: bool,
2093+
) -> Result<(), ()> {
2094+
self.deref().peer_connected(their_node_id, msg, inbound)
2095+
}
2096+
}
2097+
20772098
/// A trait to describe an object which can receive channel messages.
20782099
///
20792100
/// Messages MAY be called in parallel when they originate from different `their_node_ids`, however
@@ -2214,6 +2235,137 @@ pub trait ChannelMessageHandler: BaseMessageHandler {
22142235
fn message_received(&self);
22152236
}
22162237

2238+
impl<T: ChannelMessageHandler + ?Sized, C: Deref<Target = T>> ChannelMessageHandler for C {
2239+
fn handle_open_channel(&self, their_node_id: PublicKey, msg: &OpenChannel) {
2240+
self.deref().handle_open_channel(their_node_id, msg)
2241+
}
2242+
fn handle_open_channel_v2(&self, their_node_id: PublicKey, msg: &OpenChannelV2) {
2243+
self.deref().handle_open_channel_v2(their_node_id, msg)
2244+
}
2245+
fn handle_accept_channel(&self, their_node_id: PublicKey, msg: &AcceptChannel) {
2246+
self.deref().handle_accept_channel(their_node_id, msg)
2247+
}
2248+
fn handle_accept_channel_v2(&self, their_node_id: PublicKey, msg: &AcceptChannelV2) {
2249+
self.deref().handle_accept_channel_v2(their_node_id, msg)
2250+
}
2251+
fn handle_funding_created(&self, their_node_id: PublicKey, msg: &FundingCreated) {
2252+
self.deref().handle_funding_created(their_node_id, msg)
2253+
}
2254+
fn handle_funding_signed(&self, their_node_id: PublicKey, msg: &FundingSigned) {
2255+
self.deref().handle_funding_signed(their_node_id, msg)
2256+
}
2257+
fn handle_channel_ready(&self, their_node_id: PublicKey, msg: &ChannelReady) {
2258+
self.deref().handle_channel_ready(their_node_id, msg)
2259+
}
2260+
fn handle_peer_storage(&self, their_node_id: PublicKey, msg: PeerStorage) {
2261+
self.deref().handle_peer_storage(their_node_id, msg)
2262+
}
2263+
fn handle_peer_storage_retrieval(&self, their_node_id: PublicKey, msg: PeerStorageRetrieval) {
2264+
self.deref().handle_peer_storage_retrieval(their_node_id, msg)
2265+
}
2266+
fn handle_shutdown(&self, their_node_id: PublicKey, msg: &Shutdown) {
2267+
self.deref().handle_shutdown(their_node_id, msg)
2268+
}
2269+
fn handle_closing_signed(&self, their_node_id: PublicKey, msg: &ClosingSigned) {
2270+
self.deref().handle_closing_signed(their_node_id, msg)
2271+
}
2272+
#[cfg(simple_close)]
2273+
fn handle_closing_complete(&self, their_node_id: PublicKey, msg: ClosingComplete) {
2274+
self.deref().handle_closing_complete(their_node_id, msg)
2275+
}
2276+
#[cfg(simple_close)]
2277+
fn handle_closing_sig(&self, their_node_id: PublicKey, msg: ClosingSig) {
2278+
self.deref().handle_closing_sig(their_node_id, msg)
2279+
}
2280+
fn handle_stfu(&self, their_node_id: PublicKey, msg: &Stfu) {
2281+
self.deref().handle_stfu(their_node_id, msg)
2282+
}
2283+
fn handle_splice_init(&self, their_node_id: PublicKey, msg: &SpliceInit) {
2284+
self.deref().handle_splice_init(their_node_id, msg)
2285+
}
2286+
fn handle_splice_ack(&self, their_node_id: PublicKey, msg: &SpliceAck) {
2287+
self.deref().handle_splice_ack(their_node_id, msg)
2288+
}
2289+
fn handle_splice_locked(&self, their_node_id: PublicKey, msg: &SpliceLocked) {
2290+
self.deref().handle_splice_locked(their_node_id, msg)
2291+
}
2292+
fn handle_tx_add_input(&self, their_node_id: PublicKey, msg: &TxAddInput) {
2293+
self.deref().handle_tx_add_input(their_node_id, msg)
2294+
}
2295+
fn handle_tx_add_output(&self, their_node_id: PublicKey, msg: &TxAddOutput) {
2296+
self.deref().handle_tx_add_output(their_node_id, msg)
2297+
}
2298+
fn handle_tx_remove_input(&self, their_node_id: PublicKey, msg: &TxRemoveInput) {
2299+
self.deref().handle_tx_remove_input(their_node_id, msg)
2300+
}
2301+
fn handle_tx_remove_output(&self, their_node_id: PublicKey, msg: &TxRemoveOutput) {
2302+
self.deref().handle_tx_remove_output(their_node_id, msg)
2303+
}
2304+
fn handle_tx_complete(&self, their_node_id: PublicKey, msg: &TxComplete) {
2305+
self.deref().handle_tx_complete(their_node_id, msg)
2306+
}
2307+
fn handle_tx_signatures(&self, their_node_id: PublicKey, msg: &TxSignatures) {
2308+
self.deref().handle_tx_signatures(their_node_id, msg)
2309+
}
2310+
fn handle_tx_init_rbf(&self, their_node_id: PublicKey, msg: &TxInitRbf) {
2311+
self.deref().handle_tx_init_rbf(their_node_id, msg)
2312+
}
2313+
fn handle_tx_ack_rbf(&self, their_node_id: PublicKey, msg: &TxAckRbf) {
2314+
self.deref().handle_tx_ack_rbf(their_node_id, msg)
2315+
}
2316+
fn handle_tx_abort(&self, their_node_id: PublicKey, msg: &TxAbort) {
2317+
self.deref().handle_tx_abort(their_node_id, msg)
2318+
}
2319+
fn handle_update_add_htlc(&self, their_node_id: PublicKey, msg: &UpdateAddHTLC) {
2320+
self.deref().handle_update_add_htlc(their_node_id, msg)
2321+
}
2322+
fn handle_update_fulfill_htlc(&self, their_node_id: PublicKey, msg: UpdateFulfillHTLC) {
2323+
self.deref().handle_update_fulfill_htlc(their_node_id, msg)
2324+
}
2325+
fn handle_update_fail_htlc(&self, their_node_id: PublicKey, msg: &UpdateFailHTLC) {
2326+
self.deref().handle_update_fail_htlc(their_node_id, msg)
2327+
}
2328+
fn handle_update_fail_malformed_htlc(
2329+
&self, their_node_id: PublicKey, msg: &UpdateFailMalformedHTLC,
2330+
) {
2331+
self.deref().handle_update_fail_malformed_htlc(their_node_id, msg)
2332+
}
2333+
fn handle_commitment_signed(&self, their_node_id: PublicKey, msg: &CommitmentSigned) {
2334+
self.deref().handle_commitment_signed(their_node_id, msg)
2335+
}
2336+
fn handle_commitment_signed_batch(
2337+
&self, their_node_id: PublicKey, channel_id: ChannelId, batch: Vec<CommitmentSigned>,
2338+
) {
2339+
self.deref().handle_commitment_signed_batch(their_node_id, channel_id, batch)
2340+
}
2341+
fn handle_revoke_and_ack(&self, their_node_id: PublicKey, msg: &RevokeAndACK) {
2342+
self.deref().handle_revoke_and_ack(their_node_id, msg)
2343+
}
2344+
fn handle_update_fee(&self, their_node_id: PublicKey, msg: &UpdateFee) {
2345+
self.deref().handle_update_fee(their_node_id, msg)
2346+
}
2347+
fn handle_announcement_signatures(
2348+
&self, their_node_id: PublicKey, msg: &AnnouncementSignatures,
2349+
) {
2350+
self.deref().handle_announcement_signatures(their_node_id, msg)
2351+
}
2352+
fn handle_channel_reestablish(&self, their_node_id: PublicKey, msg: &ChannelReestablish) {
2353+
self.deref().handle_channel_reestablish(their_node_id, msg)
2354+
}
2355+
fn handle_channel_update(&self, their_node_id: PublicKey, msg: &ChannelUpdate) {
2356+
self.deref().handle_channel_update(their_node_id, msg)
2357+
}
2358+
fn handle_error(&self, their_node_id: PublicKey, msg: &ErrorMessage) {
2359+
self.deref().handle_error(their_node_id, msg)
2360+
}
2361+
fn get_chain_hashes(&self) -> Option<Vec<ChainHash>> {
2362+
self.deref().get_chain_hashes()
2363+
}
2364+
fn message_received(&self) {
2365+
self.deref().message_received()
2366+
}
2367+
}
2368+
22172369
/// A trait to describe an object which can receive routing messages.
22182370
///
22192371
/// # Implementor DoS Warnings
@@ -2288,6 +2440,57 @@ pub trait RoutingMessageHandler: BaseMessageHandler {
22882440
fn processing_queue_high(&self) -> bool;
22892441
}
22902442

2443+
impl<T: RoutingMessageHandler + ?Sized, R: Deref<Target = T>> RoutingMessageHandler for R {
2444+
fn handle_node_announcement(
2445+
&self, their_node_id: Option<PublicKey>, msg: &NodeAnnouncement,
2446+
) -> Result<bool, LightningError> {
2447+
self.deref().handle_node_announcement(their_node_id, msg)
2448+
}
2449+
fn handle_channel_announcement(
2450+
&self, their_node_id: Option<PublicKey>, msg: &ChannelAnnouncement,
2451+
) -> Result<bool, LightningError> {
2452+
self.deref().handle_channel_announcement(their_node_id, msg)
2453+
}
2454+
fn handle_channel_update(
2455+
&self, their_node_id: Option<PublicKey>, msg: &ChannelUpdate,
2456+
) -> Result<Option<(NodeId, NodeId)>, LightningError> {
2457+
self.deref().handle_channel_update(their_node_id, msg)
2458+
}
2459+
fn get_next_channel_announcement(
2460+
&self, starting_point: u64,
2461+
) -> Option<(ChannelAnnouncement, Option<ChannelUpdate>, Option<ChannelUpdate>)> {
2462+
self.deref().get_next_channel_announcement(starting_point)
2463+
}
2464+
fn get_next_node_announcement(
2465+
&self, starting_point: Option<&NodeId>,
2466+
) -> Option<NodeAnnouncement> {
2467+
self.deref().get_next_node_announcement(starting_point)
2468+
}
2469+
fn handle_reply_channel_range(
2470+
&self, their_node_id: PublicKey, msg: ReplyChannelRange,
2471+
) -> Result<(), LightningError> {
2472+
self.deref().handle_reply_channel_range(their_node_id, msg)
2473+
}
2474+
fn handle_reply_short_channel_ids_end(
2475+
&self, their_node_id: PublicKey, msg: ReplyShortChannelIdsEnd,
2476+
) -> Result<(), LightningError> {
2477+
self.deref().handle_reply_short_channel_ids_end(their_node_id, msg)
2478+
}
2479+
fn handle_query_channel_range(
2480+
&self, their_node_id: PublicKey, msg: QueryChannelRange,
2481+
) -> Result<(), LightningError> {
2482+
self.deref().handle_query_channel_range(their_node_id, msg)
2483+
}
2484+
fn handle_query_short_channel_ids(
2485+
&self, their_node_id: PublicKey, msg: QueryShortChannelIds,
2486+
) -> Result<(), LightningError> {
2487+
self.deref().handle_query_short_channel_ids(their_node_id, msg)
2488+
}
2489+
fn processing_queue_high(&self) -> bool {
2490+
self.deref().processing_queue_high()
2491+
}
2492+
}
2493+
22912494
/// A handler for received [`OnionMessage`]s and for providing generated ones to send.
22922495
pub trait OnionMessageHandler: BaseMessageHandler {
22932496
/// Handle an incoming `onion_message` message from the given peer.
@@ -2304,13 +2507,27 @@ pub trait OnionMessageHandler: BaseMessageHandler {
23042507
fn timer_tick_occurred(&self);
23052508
}
23062509

2510+
impl<T: OnionMessageHandler + ?Sized, O: Deref<Target = T>> OnionMessageHandler for O {
2511+
fn handle_onion_message(&self, peer_node_id: PublicKey, msg: &OnionMessage) {
2512+
self.deref().handle_onion_message(peer_node_id, msg)
2513+
}
2514+
fn next_onion_message_for_peer(&self, peer_node_id: PublicKey) -> Option<OnionMessage> {
2515+
self.deref().next_onion_message_for_peer(peer_node_id)
2516+
}
2517+
fn timer_tick_occurred(&self) {
2518+
self.deref().timer_tick_occurred()
2519+
}
2520+
}
2521+
23072522
/// A handler which can only be used to send messages.
23082523
///
23092524
/// This is implemented by [`ChainMonitor`].
23102525
///
23112526
/// [`ChainMonitor`]: crate::chain::chainmonitor::ChainMonitor
23122527
pub trait SendOnlyMessageHandler: BaseMessageHandler {}
23132528

2529+
impl<T: SendOnlyMessageHandler + ?Sized, S: Deref<Target = T>> SendOnlyMessageHandler for S {}
2530+
23142531
#[derive(Clone, Debug, PartialEq, Eq)]
23152532
/// Information communicated in the onion to the recipient for multi-part tracking and proof that
23162533
/// the payment is associated with an invoice.

0 commit comments

Comments
 (0)