Skip to content

Commit 203dc1e

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 e7956e4 commit 203dc1e

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
@@ -1963,6 +1963,20 @@ pub enum MessageSendEvent {
19631963
/// The gossip_timestamp_filter which should be sent.
19641964
msg: msgs::GossipTimestampFilter,
19651965
},
1966+
1967+
SendPeerStorageMessage {
1968+
/// The node_id of this message recipient
1969+
node_id: PublicKey,
1970+
/// The PeerStorageMessage which should be sent.
1971+
msg: msgs::PeerStorageMessage,
1972+
},
1973+
1974+
SendYourPeerStorageMessage {
1975+
/// The node_id of this message recipient
1976+
node_id: PublicKey,
1977+
/// The YourPeerStorageMessage which should be sent.
1978+
msg: msgs::YourPeerStorageMessage,
1979+
}
19661980
}
19671981

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

lightning/src/ln/channelmanager.rs

+11
Original file line numberDiff line numberDiff line change
@@ -8856,6 +8856,13 @@ where
88568856
let _ = handle_error!(self, self.internal_funding_signed(counterparty_node_id, msg), *counterparty_node_id);
88578857
}
88588858

8859+
fn handle_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::PeerStorageMessage) {
8860+
}
8861+
8862+
fn handle_your_peer_storage(&self, counterparty_node_id: &PublicKey, msg: &msgs::YourPeerStorageMessage) {
8863+
//TODO
8864+
}
8865+
88598866
fn handle_channel_ready(&self, counterparty_node_id: &PublicKey, msg: &msgs::ChannelReady) {
88608867
// Note that we never need to persist the updated ChannelManager for an inbound
88618868
// channel_ready message - while the channel's state will change, any channel_ready message
@@ -9110,6 +9117,10 @@ where
91109117
&events::MessageSendEvent::SendShortIdsQuery { .. } => false,
91119118
&events::MessageSendEvent::SendReplyChannelRange { .. } => false,
91129119
&events::MessageSendEvent::SendGossipTimestampFilter { .. } => false,
9120+
9121+
// Peer Storage
9122+
&events::MessageSendEvent::SendPeerStorageMessage { .. } => false,
9123+
&events::MessageSendEvent::SendYourPeerStorageMessage { .. } => false,
91139124
}
91149125
});
91159126
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
@@ -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

+52
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,24 @@ pub struct UpdateFulfillHTLC {
666666
pub payment_preimage: PaymentPreimage,
667667
}
668668

669+
/// A [`PeerStorage`] message to be sent to or received from a peer.
670+
///
671+
/// [`PeerStorage`]: https://github.com/lightning/bolts/pull/1110
672+
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
673+
pub struct PeerStorageMessage {
674+
/// Data included in the msg
675+
pub data: Vec<u8>,
676+
}
677+
678+
/// An [`YourPeerStorage`] message to be sent to or received from a peer.
679+
///
680+
/// [`YourPeerStorage`]: https://github.com/lightning/bolts/pull/1110
681+
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
682+
pub struct YourPeerStorageMessage {
683+
/// Data included in the msg
684+
pub data: Vec<u8>,
685+
}
686+
669687
/// An [`update_fail_htlc`] message to be sent to or received from a peer.
670688
///
671689
/// [`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
@@ -1426,6 +1444,12 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider {
14261444
/// Handle an incoming `channel_ready` message from the given peer.
14271445
fn handle_channel_ready(&self, their_node_id: &PublicKey, msg: &ChannelReady);
14281446

1447+
// Peer Storage
1448+
/// Handle an incoming `peer_storage` message from the given peer.
1449+
fn handle_peer_storage(&self, their_node_id: &PublicKey, msg: &PeerStorageMessage);
1450+
/// Handle an incoming `your_peer_storage` message from the given peer.
1451+
fn handle_your_peer_storage(&self, their_node_id: &PublicKey, msg: &YourPeerStorageMessage);
1452+
14291453
// Channel close:
14301454
/// Handle an incoming `shutdown` message from the given peer.
14311455
fn handle_shutdown(&self, their_node_id: &PublicKey, msg: &Shutdown);
@@ -2379,6 +2403,14 @@ impl_writeable_msg!(UpdateFulfillHTLC, {
23792403
payment_preimage
23802404
}, {});
23812405

2406+
impl_writeable_msg!(PeerStorageMessage, {
2407+
data
2408+
}, {});
2409+
2410+
impl_writeable_msg!(YourPeerStorageMessage, {
2411+
data
2412+
}, {});
2413+
23822414
// Note that this is written as a part of ChannelManager objects, and thus cannot change its
23832415
// serialization format in a way which assumes we know the total serialized length/message end
23842416
// position.
@@ -4177,6 +4209,26 @@ mod tests {
41774209
assert_eq!(encoded_value, target_value);
41784210
}
41794211

4212+
#[test]
4213+
fn encoding_peer_storage() {
4214+
let peerstorage = msgs::PeerStorageMessage {
4215+
data: <Vec<u8>>::from_hex("01020304050607080910").unwrap()
4216+
};
4217+
let encoded_value = peerstorage.encode();
4218+
let target_value = <Vec<u8>>::from_hex("000a01020304050607080910").unwrap();
4219+
assert_eq!(encoded_value, target_value);
4220+
}
4221+
4222+
#[test]
4223+
fn encoding_your_peer_storage() {
4224+
let yourpeerstorage = msgs::YourPeerStorageMessage {
4225+
data: <Vec<u8>>::from_hex("01020304050607080910").unwrap()
4226+
};
4227+
let encoded_value = yourpeerstorage.encode();
4228+
let target_value = <Vec<u8>>::from_hex("000a01020304050607080910").unwrap();
4229+
assert_eq!(encoded_value, target_value);
4230+
}
4231+
41804232
#[test]
41814233
fn encoding_pong() {
41824234
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) {}
@@ -1741,6 +1743,12 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
17411743
wire::Message::ChannelReady(msg) => {
17421744
self.message_handler.chan_handler.handle_channel_ready(&their_node_id, &msg);
17431745
},
1746+
wire::Message::PeerStorageMessage(msg) => {
1747+
self.message_handler.chan_handler.handle_peer_storage(&their_node_id, &msg);
1748+
},
1749+
wire::Message::YourPeerStorageMessage(msg) => {
1750+
self.message_handler.chan_handler.handle_your_peer_storage(&their_node_id, &msg);
1751+
},
17441752

17451753
// Quiescence messages:
17461754
wire::Message::Stfu(msg) => {
@@ -2033,6 +2041,14 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
20332041
}
20342042
for event in events_generated.drain(..) {
20352043
match event {
2044+
MessageSendEvent::SendPeerStorageMessage { ref node_id, ref msg } => {
2045+
log_debug!(self.logger, "Handling SendPeerStorageMessage event in peer_handler for {}", log_pubkey!(node_id));
2046+
self.enqueue_message(&mut *get_peer_for_forwarding!(node_id), msg);
2047+
},
2048+
MessageSendEvent::SendYourPeerStorageMessage { ref node_id, ref msg } => {
2049+
log_debug!(self.logger, "Handling SendYourPeerStorageMessage event in peer_handler for {}", log_pubkey!(node_id));
2050+
self.enqueue_message(&mut *get_peer_for_forwarding!(node_id), msg);
2051+
},
20362052
MessageSendEvent::SendAcceptChannel { ref node_id, ref msg } => {
20372053
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 {}",
20382054
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
@@ -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)