Skip to content

Commit 8c6854a

Browse files
Aditya SharmaAditya Sharma
authored andcommitted
lightning: Add message types and their handlers for peer storage messages.
1 parent 14a78e5 commit 8c6854a

File tree

8 files changed

+129
-0
lines changed

8 files changed

+129
-0
lines changed

lightning-net-tokio/src/lib.rs

Lines changed: 2 additions & 0 deletions
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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1990,6 +1990,20 @@ pub enum MessageSendEvent {
19901990
/// The gossip_timestamp_filter which should be sent.
19911991
msg: msgs::GossipTimestampFilter,
19921992
},
1993+
1994+
SendPeerStorageMessage {
1995+
/// The node_id of this message recipient
1996+
node_id: PublicKey,
1997+
/// The PeerStorageMessage which should be sent.
1998+
msg: msgs::PeerStorageMessage,
1999+
},
2000+
2001+
SendYourPeerStorageMessage {
2002+
/// The node_id of this message recipient
2003+
node_id: PublicKey,
2004+
/// The YourPeerStorageMessage which should be sent.
2005+
msg: msgs::YourPeerStorageMessage,
2006+
}
19932007
}
19942008

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

lightning/src/ln/channelmanager.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9068,6 +9068,13 @@ where
90689068
let _ = handle_error!(self, self.internal_funding_signed(counterparty_node_id, msg), *counterparty_node_id);
90699069
}
90709070

9071+
fn handle_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::PeerStorageMessage) {
9072+
}
9073+
9074+
fn handle_your_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
9075+
//TODO
9076+
}
9077+
90719078
fn handle_channel_ready(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReady) {
90729079
// Note that we never need to persist the updated ChannelManager for an inbound
90739080
// channel_ready message - while the channel's state will change, any channel_ready message
@@ -9322,6 +9329,10 @@ where
93229329
&events::MessageSendEvent::SendShortIdsQuery { .. } => false,
93239330
&events::MessageSendEvent::SendReplyChannelRange { .. } => false,
93249331
&events::MessageSendEvent::SendGossipTimestampFilter { .. } => false,
9332+
9333+
// Peer Storage
9334+
&events::MessageSendEvent::SendPeerStorageMessage { .. } => false,
9335+
&events::MessageSendEvent::SendYourPeerStorageMessage { .. } => false,
93259336
}
93269337
});
93279338
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
@@ -809,6 +809,12 @@ macro_rules! get_htlc_update_msgs {
809809
/// such messages are intended to all peers.
810810
pub fn remove_first_msg_event_to_node(msg_node_id: &PublicKey, msg_events: &mut Vec<MessageSendEvent>) -> MessageSendEvent {
811811
let ev_index = msg_events.iter().position(|e| { match e {
812+
MessageSendEvent::SendPeerStorageMessage { node_id, .. } => {
813+
node_id == msg_node_id
814+
},
815+
MessageSendEvent::SendYourPeerStorageMessage { node_id, .. } => {
816+
node_id == msg_node_id
817+
},
812818
MessageSendEvent::SendAcceptChannel { node_id, .. } => {
813819
node_id == msg_node_id
814820
},

lightning/src/ln/msgs.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,24 @@ pub struct UpdateFulfillHTLC {
680680
pub payment_preimage: PaymentPreimage,
681681
}
682682

683+
/// A [`PeerStorage`] message to be sent to or received from a peer.
684+
///
685+
/// [`PeerStorage`]: https://github.com/lightning/bolts/pull/1110
686+
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
687+
pub struct PeerStorageMessage {
688+
/// Data included in the msg
689+
pub data: Vec<u8>,
690+
}
691+
692+
/// An [`YourPeerStorage`] message to be sent to or received from a peer.
693+
///
694+
/// [`YourPeerStorage`]: https://github.com/lightning/bolts/pull/1110
695+
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
696+
pub struct YourPeerStorageMessage {
697+
/// Data included in the msg
698+
pub data: Vec<u8>,
699+
}
700+
683701
/// An [`update_fail_htlc`] message to be sent to or received from a peer.
684702
///
685703
/// [`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
@@ -1448,6 +1466,12 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider {
14481466
/// Handle an incoming `channel_ready` message from the given peer.
14491467
fn handle_channel_ready(&self, their_node_id: &PublicKey, msg: &ChannelReady);
14501468

1469+
// Peer Storage
1470+
/// Handle an incoming `peer_storage` message from the given peer.
1471+
fn handle_peer_storage(&self, their_node_id: &PublicKey, msg: &PeerStorageMessage);
1472+
/// Handle an incoming `your_peer_storage` message from the given peer.
1473+
fn handle_your_peer_storage(&self, their_node_id: &PublicKey, msg: &YourPeerStorageMessage);
1474+
14511475
// Channel close:
14521476
/// Handle an incoming `shutdown` message from the given peer.
14531477
fn handle_shutdown(&self, their_node_id: &PublicKey, msg: &Shutdown);
@@ -2470,6 +2494,14 @@ impl_writeable_msg!(UpdateFulfillHTLC, {
24702494
payment_preimage
24712495
}, {});
24722496

2497+
impl_writeable_msg!(PeerStorageMessage, {
2498+
data
2499+
}, {});
2500+
2501+
impl_writeable_msg!(YourPeerStorageMessage, {
2502+
data
2503+
}, {});
2504+
24732505
// Note that this is written as a part of ChannelManager objects, and thus cannot change its
24742506
// serialization format in a way which assumes we know the total serialized length/message end
24752507
// position.
@@ -4303,6 +4335,26 @@ mod tests {
43034335
assert_eq!(encoded_value, target_value);
43044336
}
43054337

4338+
#[test]
4339+
fn encoding_peer_storage() {
4340+
let peerstorage = msgs::PeerStorageMessage {
4341+
data: <Vec<u8>>::from_hex("01020304050607080910").unwrap()
4342+
};
4343+
let encoded_value = peerstorage.encode();
4344+
let target_value = <Vec<u8>>::from_hex("000a01020304050607080910").unwrap();
4345+
assert_eq!(encoded_value, target_value);
4346+
}
4347+
4348+
#[test]
4349+
fn encoding_your_peer_storage() {
4350+
let yourpeerstorage = msgs::YourPeerStorageMessage {
4351+
data: <Vec<u8>>::from_hex("01020304050607080910").unwrap()
4352+
};
4353+
let encoded_value = yourpeerstorage.encode();
4354+
let target_value = <Vec<u8>>::from_hex("000a01020304050607080910").unwrap();
4355+
assert_eq!(encoded_value, target_value);
4356+
}
4357+
43064358
#[test]
43074359
fn encoding_pong() {
43084360
let pong = msgs::Pong {

lightning/src/ln/peer_handler.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,8 @@ impl ChannelMessageHandler for ErroringMessageHandler {
285285
}
286286
// msgs::ChannelUpdate does not contain the channel_id field, so we just drop them.
287287
fn handle_channel_update(&self, _their_node_id: &PublicKey, _msg: &msgs::ChannelUpdate) {}
288+
fn handle_peer_storage(&self, _their_node_id: &PublicKey, _msg: &msgs::PeerStorageMessage) {}
289+
fn handle_your_peer_storage(&self, _their_node_id: &PublicKey, _msg: &msgs::YourPeerStorageMessage) {}
288290
fn peer_disconnected(&self, _their_node_id: &PublicKey) {}
289291
fn peer_connected(&self, _their_node_id: &PublicKey, _init: &msgs::Init, _inbound: bool) -> Result<(), ()> { Ok(()) }
290292
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &msgs::ErrorMessage) {}
@@ -1744,6 +1746,12 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
17441746
wire::Message::ChannelReady(msg) => {
17451747
self.message_handler.chan_handler.handle_channel_ready(&their_node_id, &msg);
17461748
},
1749+
wire::Message::PeerStorageMessage(msg) => {
1750+
self.message_handler.chan_handler.handle_peer_storage(&their_node_id, &msg);
1751+
},
1752+
wire::Message::YourPeerStorageMessage(msg) => {
1753+
self.message_handler.chan_handler.handle_your_peer_storage(&their_node_id, &msg);
1754+
},
17471755

17481756
// Quiescence messages:
17491757
wire::Message::Stfu(msg) => {
@@ -2036,6 +2044,14 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
20362044
}
20372045
for event in events_generated.drain(..) {
20382046
match event {
2047+
MessageSendEvent::SendPeerStorageMessage { ref node_id, ref msg } => {
2048+
log_debug!(self.logger, "Handling SendPeerStorageMessage event in peer_handler for {}", log_pubkey!(node_id));
2049+
self.enqueue_message(&mut *get_peer_for_forwarding!(node_id), msg);
2050+
},
2051+
MessageSendEvent::SendYourPeerStorageMessage { ref node_id, ref msg } => {
2052+
log_debug!(self.logger, "Handling SendYourPeerStorageMessage event in peer_handler for {}", log_pubkey!(node_id));
2053+
self.enqueue_message(&mut *get_peer_for_forwarding!(node_id), msg);
2054+
},
20392055
MessageSendEvent::SendAcceptChannel { ref node_id, ref msg } => {
20402056
log_debug!(WithContext::from(&self.logger, Some(*node_id), Some(msg.common_fields.temporary_channel_id)), "Handling SendAcceptChannel event in peer_handler for node {} for channel {}",
20412057
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),
@@ -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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,14 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
870870
fn handle_tx_abort(&self, _their_node_id: &PublicKey, msg: &msgs::TxAbort) {
871871
self.received_msg(wire::Message::TxAbort(msg.clone()));
872872
}
873+
874+
fn handle_peer_storage(&self, _their_node_id: &PublicKey, msg: &msgs::PeerStorageMessage) {
875+
self.received_msg(wire::Message::PeerStorageMessage(msg.clone()));
876+
}
877+
878+
fn handle_your_peer_storage(&self, _their_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
879+
self.received_msg(wire::Message::YourPeerStorageMessage(msg.clone()));
880+
}
873881
}
874882

875883
impl events::MessageSendEventsProvider for TestChannelMessageHandler {

0 commit comments

Comments
 (0)