Skip to content

Commit f2e5bb0

Browse files
Aditya SharmaAditya Sharma
authored andcommitted
lightning: Add message types and their handlers for peer storage messages.
1 parent 21d3265 commit f2e5bb0

File tree

8 files changed

+128
-0
lines changed

8 files changed

+128
-0
lines changed

lightning-net-tokio/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,8 @@ mod tests {
639639
fn handle_tx_init_rbf(&self, _their_node_id: &PublicKey, _msg: &TxInitRbf) {}
640640
fn handle_tx_ack_rbf(&self, _their_node_id: &PublicKey, _msg: &TxAckRbf) {}
641641
fn handle_tx_abort(&self, _their_node_id: &PublicKey, _msg: &TxAbort) {}
642+
fn handle_peer_storage(&self, _their_node_id: &PublicKey, _msg: &PeerStorageMessage) {}
643+
fn handle_your_peer_storage(&self, _their_node_id: &PublicKey, _msg: &YourPeerStorageMessage) {}
642644
fn peer_disconnected(&self, their_node_id: &PublicKey) {
643645
if *their_node_id == self.expected_pubkey {
644646
self.disconnected_flag.store(true, Ordering::SeqCst);

lightning/src/events/mod.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2276,6 +2276,20 @@ pub enum MessageSendEvent {
22762276
/// The gossip_timestamp_filter which should be sent.
22772277
msg: msgs::GossipTimestampFilter,
22782278
},
2279+
2280+
SendPeerStorageMessage {
2281+
/// The node_id of this message recipient
2282+
node_id: PublicKey,
2283+
/// The PeerStorageMessage which should be sent.
2284+
msg: msgs::PeerStorageMessage,
2285+
},
2286+
2287+
SendYourPeerStorageMessage {
2288+
/// The node_id of this message recipient
2289+
node_id: PublicKey,
2290+
/// The YourPeerStorageMessage which should be sent.
2291+
msg: msgs::YourPeerStorageMessage,
2292+
}
22792293
}
22802294

22812295
/// A trait indicating an object may generate message send events

lightning/src/ln/channelmanager.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9671,6 +9671,12 @@ where
96719671
let _ = handle_error!(self, self.internal_funding_signed(counterparty_node_id, msg), *counterparty_node_id);
96729672
}
96739673

9674+
fn handle_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::PeerStorageMessage) {
9675+
}
9676+
9677+
fn handle_your_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
9678+
}
9679+
96749680
fn handle_channel_ready(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReady) {
96759681
// Note that we never need to persist the updated ChannelManager for an inbound
96769682
// channel_ready message - while the channel's state will change, any channel_ready message
@@ -9936,6 +9942,10 @@ where
99369942
&events::MessageSendEvent::SendShortIdsQuery { .. } => false,
99379943
&events::MessageSendEvent::SendReplyChannelRange { .. } => false,
99389944
&events::MessageSendEvent::SendGossipTimestampFilter { .. } => false,
9945+
9946+
// Peer Storage
9947+
&events::MessageSendEvent::SendPeerStorageMessage { .. } => false,
9948+
&events::MessageSendEvent::SendYourPeerStorageMessage { .. } => false,
99399949
}
99409950
});
99419951
debug_assert!(peer_state.is_connected, "A disconnected peer cannot disconnect");

lightning/src/ln/functional_test_utils.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,12 @@ macro_rules! get_htlc_update_msgs {
843843
/// such messages are intended to all peers.
844844
pub fn remove_first_msg_event_to_node(msg_node_id: &PublicKey, msg_events: &mut Vec<MessageSendEvent>) -> MessageSendEvent {
845845
let ev_index = msg_events.iter().position(|e| { match e {
846+
MessageSendEvent::SendPeerStorageMessage { node_id, .. } => {
847+
node_id == msg_node_id
848+
},
849+
MessageSendEvent::SendYourPeerStorageMessage { node_id, .. } => {
850+
node_id == msg_node_id
851+
},
846852
MessageSendEvent::SendAcceptChannel { node_id, .. } => {
847853
node_id == msg_node_id
848854
},

lightning/src/ln/msgs.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,24 @@ pub struct UpdateFulfillHTLC {
688688
pub payment_preimage: PaymentPreimage,
689689
}
690690

691+
/// A [`PeerStorage`] message to be sent to or received from a peer.
692+
///
693+
/// [`PeerStorage`]: https://github.com/lightning/bolts/pull/1110
694+
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
695+
pub struct PeerStorageMessage {
696+
/// Data included in the msg
697+
pub data: Vec<u8>,
698+
}
699+
700+
/// An [`YourPeerStorage`] message to be sent to or received from a peer.
701+
///
702+
/// [`YourPeerStorage`]: https://github.com/lightning/bolts/pull/1110
703+
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
704+
pub struct YourPeerStorageMessage {
705+
/// Data included in the msg
706+
pub data: Vec<u8>,
707+
}
708+
691709
/// An [`update_fail_htlc`] message to be sent to or received from a peer.
692710
///
693711
/// [`update_fail_htlc`]: https://github.com/lightning/bolts/blob/master/02-peer-protocol.md#removing-an-htlc-update_fulfill_htlc-update_fail_htlc-and-update_fail_malformed_htlc
@@ -1470,6 +1488,12 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider {
14701488
/// Handle an incoming `channel_ready` message from the given peer.
14711489
fn handle_channel_ready(&self, their_node_id: &PublicKey, msg: &ChannelReady);
14721490

1491+
// Peer Storage
1492+
/// Handle an incoming `peer_storage` message from the given peer.
1493+
fn handle_peer_storage(&self, their_node_id: &PublicKey, msg: &PeerStorageMessage);
1494+
/// Handle an incoming `your_peer_storage` message from the given peer.
1495+
fn handle_your_peer_storage(&self, their_node_id: &PublicKey, msg: &YourPeerStorageMessage);
1496+
14731497
// Channel close:
14741498
/// Handle an incoming `shutdown` message from the given peer.
14751499
fn handle_shutdown(&self, their_node_id: &PublicKey, msg: &Shutdown);
@@ -2533,6 +2557,14 @@ impl_writeable_msg!(UpdateFulfillHTLC, {
25332557
payment_preimage
25342558
}, {});
25352559

2560+
impl_writeable_msg!(PeerStorageMessage, {
2561+
data
2562+
}, {});
2563+
2564+
impl_writeable_msg!(YourPeerStorageMessage, {
2565+
data
2566+
}, {});
2567+
25362568
// Note that this is written as a part of ChannelManager objects, and thus cannot change its
25372569
// serialization format in a way which assumes we know the total serialized length/message end
25382570
// position.
@@ -4382,6 +4414,26 @@ mod tests {
43824414
assert_eq!(encoded_value, target_value);
43834415
}
43844416

4417+
#[test]
4418+
fn encoding_peer_storage() {
4419+
let peerstorage = msgs::PeerStorageMessage {
4420+
data: <Vec<u8>>::from_hex("01020304050607080910").unwrap()
4421+
};
4422+
let encoded_value = peerstorage.encode();
4423+
let target_value = <Vec<u8>>::from_hex("000a01020304050607080910").unwrap();
4424+
assert_eq!(encoded_value, target_value);
4425+
}
4426+
4427+
#[test]
4428+
fn encoding_your_peer_storage() {
4429+
let yourpeerstorage = msgs::YourPeerStorageMessage {
4430+
data: <Vec<u8>>::from_hex("01020304050607080910").unwrap()
4431+
};
4432+
let encoded_value = yourpeerstorage.encode();
4433+
let target_value = <Vec<u8>>::from_hex("000a01020304050607080910").unwrap();
4434+
assert_eq!(encoded_value, target_value);
4435+
}
4436+
43854437
#[test]
43864438
fn encoding_pong() {
43874439
let pong = msgs::Pong {

lightning/src/ln/peer_handler.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ impl ChannelMessageHandler for ErroringMessageHandler {
314314
}
315315
// msgs::ChannelUpdate does not contain the channel_id field, so we just drop them.
316316
fn handle_channel_update(&self, _their_node_id: &PublicKey, _msg: &msgs::ChannelUpdate) {}
317+
fn handle_peer_storage(&self, _their_node_id: &PublicKey, _msg: &msgs::PeerStorageMessage) {}
318+
fn handle_your_peer_storage(&self, _their_node_id: &PublicKey, _msg: &msgs::YourPeerStorageMessage) {}
317319
fn peer_disconnected(&self, _their_node_id: &PublicKey) {}
318320
fn peer_connected(&self, _their_node_id: &PublicKey, _init: &msgs::Init, _inbound: bool) -> Result<(), ()> { Ok(()) }
319321
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &msgs::ErrorMessage) {}
@@ -1807,6 +1809,12 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
18071809
wire::Message::ChannelReady(msg) => {
18081810
self.message_handler.chan_handler.handle_channel_ready(&their_node_id, &msg);
18091811
},
1812+
wire::Message::PeerStorageMessage(msg) => {
1813+
self.message_handler.chan_handler.handle_peer_storage(&their_node_id, &msg);
1814+
},
1815+
wire::Message::YourPeerStorageMessage(msg) => {
1816+
self.message_handler.chan_handler.handle_your_peer_storage(&their_node_id, &msg);
1817+
},
18101818

18111819
// Quiescence messages:
18121820
wire::Message::Stfu(msg) => {
@@ -2102,6 +2110,14 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
21022110
}
21032111
for event in events_generated.drain(..) {
21042112
match event {
2113+
MessageSendEvent::SendPeerStorageMessage { ref node_id, ref msg } => {
2114+
log_debug!(self.logger, "Handling SendPeerStorageMessage event in peer_handler for {}", log_pubkey!(node_id));
2115+
self.enqueue_message(&mut *get_peer_for_forwarding!(node_id), msg);
2116+
},
2117+
MessageSendEvent::SendYourPeerStorageMessage { ref node_id, ref msg } => {
2118+
log_debug!(self.logger, "Handling SendYourPeerStorageMessage event in peer_handler for {}", log_pubkey!(node_id));
2119+
self.enqueue_message(&mut *get_peer_for_forwarding!(node_id), msg);
2120+
},
21052121
MessageSendEvent::SendAcceptChannel { ref node_id, ref msg } => {
21062122
log_debug!(WithContext::from(&self.logger, Some(*node_id), Some(msg.common_fields.temporary_channel_id), None), "Handling SendAcceptChannel event in peer_handler for node {} for channel {}",
21072123
log_pubkey!(node_id),

lightning/src/ln/wire.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ pub(crate) enum Message<T> where T: core::fmt::Debug + Type + TestEq {
5353
Warning(msgs::WarningMessage),
5454
Ping(msgs::Ping),
5555
Pong(msgs::Pong),
56+
PeerStorageMessage(msgs::PeerStorageMessage),
57+
YourPeerStorageMessage(msgs::YourPeerStorageMessage),
5658
OpenChannel(msgs::OpenChannel),
5759
OpenChannelV2(msgs::OpenChannelV2),
5860
AcceptChannel(msgs::AcceptChannel),
@@ -111,6 +113,8 @@ impl<T> Writeable for Message<T> where T: core::fmt::Debug + Type + TestEq {
111113
&Message::Warning(ref msg) => msg.write(writer),
112114
&Message::Ping(ref msg) => msg.write(writer),
113115
&Message::Pong(ref msg) => msg.write(writer),
116+
&Message::PeerStorageMessage(ref msg) => msg.write(writer),
117+
&Message::YourPeerStorageMessage(ref msg) => msg.write(writer),
114118
&Message::OpenChannel(ref msg) => msg.write(writer),
115119
&Message::OpenChannelV2(ref msg) => msg.write(writer),
116120
&Message::AcceptChannel(ref msg) => msg.write(writer),
@@ -169,6 +173,8 @@ impl<T> Type for Message<T> where T: core::fmt::Debug + Type + TestEq {
169173
&Message::Warning(ref msg) => msg.type_id(),
170174
&Message::Ping(ref msg) => msg.type_id(),
171175
&Message::Pong(ref msg) => msg.type_id(),
176+
&Message::PeerStorageMessage(ref msg) => msg.type_id(),
177+
&Message::YourPeerStorageMessage(ref msg) => msg.type_id(),
172178
&Message::OpenChannel(ref msg) => msg.type_id(),
173179
&Message::OpenChannelV2(ref msg) => msg.type_id(),
174180
&Message::AcceptChannel(ref msg) => msg.type_id(),
@@ -261,6 +267,12 @@ fn do_read<R: io::Read, T, H: core::ops::Deref>(buffer: &mut R, message_type: u1
261267
msgs::Pong::TYPE => {
262268
Ok(Message::Pong(Readable::read(buffer)?))
263269
},
270+
msgs::PeerStorageMessage::TYPE => {
271+
Ok(Message::PeerStorageMessage(Readable::read(buffer)?))
272+
},
273+
msgs::YourPeerStorageMessage::TYPE => {
274+
Ok(Message::YourPeerStorageMessage(Readable::read(buffer)?))
275+
},
264276
msgs::OpenChannel::TYPE => {
265277
Ok(Message::OpenChannel(Readable::read(buffer)?))
266278
},
@@ -625,6 +637,14 @@ impl Encode for msgs::GossipTimestampFilter {
625637
const TYPE: u16 = 265;
626638
}
627639

640+
impl Encode for msgs::PeerStorageMessage {
641+
const TYPE: u16 = 7;
642+
}
643+
644+
impl Encode for msgs::YourPeerStorageMessage {
645+
const TYPE: u16 = 9;
646+
}
647+
628648
#[cfg(test)]
629649
mod tests {
630650
use super::*;

lightning/src/util/test_utils.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,14 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
916916
fn handle_tx_abort(&self, _their_node_id: &PublicKey, msg: &msgs::TxAbort) {
917917
self.received_msg(wire::Message::TxAbort(msg.clone()));
918918
}
919+
920+
fn handle_peer_storage(&self, _their_node_id: &PublicKey, msg: &msgs::PeerStorageMessage) {
921+
self.received_msg(wire::Message::PeerStorageMessage(msg.clone()));
922+
}
923+
924+
fn handle_your_peer_storage(&self, _their_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
925+
self.received_msg(wire::Message::YourPeerStorageMessage(msg.clone()));
926+
}
919927
}
920928

921929
impl events::MessageSendEventsProvider for TestChannelMessageHandler {

0 commit comments

Comments
 (0)