Skip to content

Commit 63f2a3d

Browse files
Aditya SharmaAditya Sharma
Aditya Sharma
authored and
Aditya Sharma
committed
lightning: Add message types and their handlers for peer storage messages.
1 parent 399ae7b commit 63f2a3d

File tree

8 files changed

+129
-0
lines changed

8 files changed

+129
-0
lines changed

lightning-net-tokio/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,8 @@ mod tests {
632632
fn handle_tx_init_rbf(&self, _their_node_id: &PublicKey, _msg: &TxInitRbf) {}
633633
fn handle_tx_ack_rbf(&self, _their_node_id: &PublicKey, _msg: &TxAckRbf) {}
634634
fn handle_tx_abort(&self, _their_node_id: &PublicKey, _msg: &TxAbort) {}
635+
fn handle_peer_storage(&self, _their_node_id: &PublicKey, _msg: &PeerStorageMessage) {}
636+
fn handle_your_peer_storage(&self, _their_node_id: &PublicKey, _msg: &YourPeerStorageMessage) {}
635637
fn peer_disconnected(&self, their_node_id: &PublicKey) {
636638
if *their_node_id == self.expected_pubkey {
637639
self.disconnected_flag.store(true, Ordering::SeqCst);

lightning/src/events/mod.rs

+14
Original file line numberDiff line numberDiff line change
@@ -1959,6 +1959,20 @@ pub enum MessageSendEvent {
19591959
/// The gossip_timestamp_filter which should be sent.
19601960
msg: msgs::GossipTimestampFilter,
19611961
},
1962+
1963+
SendPeerStorageMessage {
1964+
/// The node_id of this message recipient
1965+
node_id: PublicKey,
1966+
/// The PeerStorageMessage which should be sent.
1967+
msg: msgs::PeerStorageMessage,
1968+
},
1969+
1970+
SendYourPeerStorageMessage {
1971+
/// The node_id of this message recipient
1972+
node_id: PublicKey,
1973+
/// The YourPeerStorageMessage which should be sent.
1974+
msg: msgs::YourPeerStorageMessage,
1975+
}
19621976
}
19631977

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

lightning/src/ln/channelmanager.rs

+11
Original file line numberDiff line numberDiff line change
@@ -8742,6 +8742,13 @@ where
87428742
let _ = handle_error!(self, self.internal_funding_signed(counterparty_node_id, msg), *counterparty_node_id);
87438743
}
87448744

8745+
fn handle_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::PeerStorageMessage) {
8746+
}
8747+
8748+
fn handle_your_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
8749+
//TODO
8750+
}
8751+
87458752
fn handle_channel_ready(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReady) {
87468753
// Note that we never need to persist the updated ChannelManager for an inbound
87478754
// channel_ready message - while the channel's state will change, any channel_ready message
@@ -8988,6 +8995,10 @@ where
89888995
&events::MessageSendEvent::SendShortIdsQuery { .. } => false,
89898996
&events::MessageSendEvent::SendReplyChannelRange { .. } => false,
89908997
&events::MessageSendEvent::SendGossipTimestampFilter { .. } => false,
8998+
8999+
// Peer Storage
9000+
&events::MessageSendEvent::SendPeerStorageMessage { .. } => false,
9001+
&events::MessageSendEvent::SendYourPeerStorageMessage { .. } => false,
89919002
}
89929003
});
89939004
debug_assert!(peer_state.is_connected, "A disconnected peer cannot disconnect");

lightning/src/ln/functional_test_utils.rs

+6
Original file line numberDiff line numberDiff line change
@@ -787,6 +787,12 @@ macro_rules! get_htlc_update_msgs {
787787
/// such messages are intended to all peers.
788788
pub fn remove_first_msg_event_to_node(msg_node_id: &PublicKey, msg_events: &mut Vec<MessageSendEvent>) -> MessageSendEvent {
789789
let ev_index = msg_events.iter().position(|e| { match e {
790+
MessageSendEvent::SendPeerStorageMessage { node_id, .. } => {
791+
node_id == msg_node_id
792+
},
793+
MessageSendEvent::SendYourPeerStorageMessage { node_id, .. } => {
794+
node_id == msg_node_id
795+
},
790796
MessageSendEvent::SendAcceptChannel { node_id, .. } => {
791797
node_id == msg_node_id
792798
},

lightning/src/ln/msgs.rs

+52
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,24 @@ pub struct UpdateFulfillHTLC {
711711
pub payment_preimage: PaymentPreimage,
712712
}
713713

714+
/// A [`PeerStorage`] message to be sent to or received from a peer.
715+
///
716+
/// [`PeerStorage`]: https://github.com/lightning/bolts/pull/1110
717+
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
718+
pub struct PeerStorageMessage {
719+
/// Data included in the msg
720+
pub data: Vec<u8>,
721+
}
722+
723+
/// An [`YourPeerStorage`] message to be sent to or received from a peer.
724+
///
725+
/// [`YourPeerStorage`]: https://github.com/lightning/bolts/pull/1110
726+
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
727+
pub struct YourPeerStorageMessage {
728+
/// Data included in the msg
729+
pub data: Vec<u8>,
730+
}
731+
714732
/// An [`update_fail_htlc`] message to be sent to or received from a peer.
715733
///
716734
/// [`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
@@ -1461,6 +1479,12 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider {
14611479
/// Handle an incoming `channel_ready` message from the given peer.
14621480
fn handle_channel_ready(&self, their_node_id: &PublicKey, msg: &ChannelReady);
14631481

1482+
// Peer Storage
1483+
/// Handle an incoming `peer_storage` message from the given peer.
1484+
fn handle_peer_storage(&self, their_node_id: &PublicKey, msg: &PeerStorageMessage);
1485+
/// Handle an incoming `your_peer_storage` message from the given peer.
1486+
fn handle_your_peer_storage(&self, their_node_id: &PublicKey, msg: &YourPeerStorageMessage);
1487+
14641488
// Channel close:
14651489
/// Handle an incoming `shutdown` message from the given peer.
14661490
fn handle_shutdown(&self, their_node_id: &PublicKey, msg: &Shutdown);
@@ -2190,6 +2214,14 @@ impl_writeable_msg!(UpdateFulfillHTLC, {
21902214
payment_preimage
21912215
}, {});
21922216

2217+
impl_writeable_msg!(PeerStorageMessage, {
2218+
data
2219+
}, {});
2220+
2221+
impl_writeable_msg!(YourPeerStorageMessage, {
2222+
data
2223+
}, {});
2224+
21932225
// Note that this is written as a part of ChannelManager objects, and thus cannot change its
21942226
// serialization format in a way which assumes we know the total serialized length/message end
21952227
// position.
@@ -3982,6 +4014,26 @@ mod tests {
39824014
assert_eq!(encoded_value, target_value);
39834015
}
39844016

4017+
#[test]
4018+
fn encoding_peer_storage() {
4019+
let peerstorage = msgs::PeerStorageMessage {
4020+
data: <Vec<u8>>::from_hex("01020304050607080910").unwrap()
4021+
};
4022+
let encoded_value = peerstorage.encode();
4023+
let target_value = <Vec<u8>>::from_hex("000a01020304050607080910").unwrap();
4024+
assert_eq!(encoded_value, target_value);
4025+
}
4026+
4027+
#[test]
4028+
fn encoding_your_peer_storage() {
4029+
let yourpeerstorage = msgs::YourPeerStorageMessage {
4030+
data: <Vec<u8>>::from_hex("01020304050607080910").unwrap()
4031+
};
4032+
let encoded_value = yourpeerstorage.encode();
4033+
let target_value = <Vec<u8>>::from_hex("000a01020304050607080910").unwrap();
4034+
assert_eq!(encoded_value, target_value);
4035+
}
4036+
39854037
#[test]
39864038
fn encoding_pong() {
39874039
let pong = msgs::Pong {

lightning/src/ln/peer_handler.rs

+16
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,8 @@ impl ChannelMessageHandler for ErroringMessageHandler {
283283
}
284284
// msgs::ChannelUpdate does not contain the channel_id field, so we just drop them.
285285
fn handle_channel_update(&self, _their_node_id: &PublicKey, _msg: &msgs::ChannelUpdate) {}
286+
fn handle_peer_storage(&self, _their_node_id: &PublicKey, _msg: &msgs::PeerStorageMessage) {}
287+
fn handle_your_peer_storage(&self, _their_node_id: &PublicKey, _msg: &msgs::YourPeerStorageMessage) {}
286288
fn peer_disconnected(&self, _their_node_id: &PublicKey) {}
287289
fn peer_connected(&self, _their_node_id: &PublicKey, _init: &msgs::Init, _inbound: bool) -> Result<(), ()> { Ok(()) }
288290
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &msgs::ErrorMessage) {}
@@ -1686,6 +1688,12 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
16861688
wire::Message::ChannelReady(msg) => {
16871689
self.message_handler.chan_handler.handle_channel_ready(&their_node_id, &msg);
16881690
},
1691+
wire::Message::PeerStorageMessage(msg) => {
1692+
self.message_handler.chan_handler.handle_peer_storage(&their_node_id, &msg);
1693+
},
1694+
wire::Message::YourPeerStorageMessage(msg) => {
1695+
self.message_handler.chan_handler.handle_your_peer_storage(&their_node_id, &msg);
1696+
},
16891697

16901698
// Quiescence messages:
16911699
wire::Message::Stfu(msg) => {
@@ -1978,6 +1986,14 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
19781986
}
19791987
for event in events_generated.drain(..) {
19801988
match event {
1989+
MessageSendEvent::SendPeerStorageMessage { ref node_id, ref msg } => {
1990+
log_debug!(self.logger, "Handling SendPeerStorageMessage event in peer_handler for {}", log_pubkey!(node_id));
1991+
self.enqueue_message(&mut *get_peer_for_forwarding!(node_id), msg);
1992+
},
1993+
MessageSendEvent::SendYourPeerStorageMessage { ref node_id, ref msg } => {
1994+
log_debug!(self.logger, "Handling SendYourPeerStorageMessage event in peer_handler for {}", log_pubkey!(node_id));
1995+
self.enqueue_message(&mut *get_peer_for_forwarding!(node_id), msg);
1996+
},
19811997
MessageSendEvent::SendAcceptChannel { ref node_id, ref msg } => {
19821998
log_debug!(WithContext::from(&self.logger, Some(*node_id), Some(msg.temporary_channel_id)), "Handling SendAcceptChannel event in peer_handler for node {} for channel {}",
19831999
log_pubkey!(node_id),

lightning/src/ln/wire.rs

+20
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),
@@ -108,6 +110,8 @@ impl<T> Writeable for Message<T> where T: core::fmt::Debug + Type + TestEq {
108110
&Message::Warning(ref msg) => msg.write(writer),
109111
&Message::Ping(ref msg) => msg.write(writer),
110112
&Message::Pong(ref msg) => msg.write(writer),
113+
&Message::PeerStorageMessage(ref msg) => msg.write(writer),
114+
&Message::YourPeerStorageMessage(ref msg) => msg.write(writer),
111115
&Message::OpenChannel(ref msg) => msg.write(writer),
112116
&Message::OpenChannelV2(ref msg) => msg.write(writer),
113117
&Message::AcceptChannel(ref msg) => msg.write(writer),
@@ -163,6 +167,8 @@ impl<T> Type for Message<T> where T: core::fmt::Debug + Type + TestEq {
163167
&Message::Warning(ref msg) => msg.type_id(),
164168
&Message::Ping(ref msg) => msg.type_id(),
165169
&Message::Pong(ref msg) => msg.type_id(),
170+
&Message::PeerStorageMessage(ref msg) => msg.type_id(),
171+
&Message::YourPeerStorageMessage(ref msg) => msg.type_id(),
166172
&Message::OpenChannel(ref msg) => msg.type_id(),
167173
&Message::OpenChannelV2(ref msg) => msg.type_id(),
168174
&Message::AcceptChannel(ref msg) => msg.type_id(),
@@ -252,6 +258,12 @@ fn do_read<R: io::Read, T, H: core::ops::Deref>(buffer: &mut R, message_type: u1
252258
msgs::Pong::TYPE => {
253259
Ok(Message::Pong(Readable::read(buffer)?))
254260
},
261+
msgs::PeerStorageMessage::TYPE => {
262+
Ok(Message::PeerStorageMessage(Readable::read(buffer)?))
263+
},
264+
msgs::YourPeerStorageMessage::TYPE => {
265+
Ok(Message::YourPeerStorageMessage(Readable::read(buffer)?))
266+
},
255267
msgs::OpenChannel::TYPE => {
256268
Ok(Message::OpenChannel(Readable::read(buffer)?))
257269
},
@@ -613,6 +625,14 @@ impl Encode for msgs::GossipTimestampFilter {
613625
const TYPE: u16 = 265;
614626
}
615627

628+
impl Encode for msgs::PeerStorageMessage {
629+
const TYPE: u16 = 7;
630+
}
631+
632+
impl Encode for msgs::YourPeerStorageMessage {
633+
const TYPE: u16 = 9;
634+
}
635+
616636
#[cfg(test)]
617637
mod tests {
618638
use super::*;

lightning/src/util/test_utils.rs

+8
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,14 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
857857
fn handle_tx_abort(&self, _their_node_id: &PublicKey, msg: &msgs::TxAbort) {
858858
self.received_msg(wire::Message::TxAbort(msg.clone()));
859859
}
860+
861+
fn handle_peer_storage(&self, _their_node_id: &PublicKey, msg: &msgs::PeerStorageMessage) {
862+
self.received_msg(wire::Message::PeerStorageMessage(msg.clone()));
863+
}
864+
865+
fn handle_your_peer_storage(&self, _their_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
866+
self.received_msg(wire::Message::YourPeerStorageMessage(msg.clone()));
867+
}
860868
}
861869

862870
impl events::MessageSendEventsProvider for TestChannelMessageHandler {

0 commit comments

Comments
 (0)