mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-03-10 13:35:38 +01:00
Define core::ops::BitOr for Features<T>
The `lightning-custom-message` crate will need access to Features::or in order combine features of a composite handler. Expose this via a core::ops::BitOr implementation.
This commit is contained in:
parent
818dbdf7ab
commit
687e587a73
3 changed files with 11 additions and 9 deletions
|
@ -422,8 +422,10 @@ pub struct Features<T: sealed::Context> {
|
||||||
mark: PhantomData<T>,
|
mark: PhantomData<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <T: sealed::Context> Features<T> {
|
impl<T: sealed::Context> core::ops::BitOr for Features<T> {
|
||||||
pub(crate) fn or(mut self, o: Self) -> Self {
|
type Output = Self;
|
||||||
|
|
||||||
|
fn bitor(mut self, o: Self) -> Self {
|
||||||
let total_feature_len = cmp::max(self.flags.len(), o.flags.len());
|
let total_feature_len = cmp::max(self.flags.len(), o.flags.len());
|
||||||
self.flags.resize(total_feature_len, 0u8);
|
self.flags.resize(total_feature_len, 0u8);
|
||||||
for (byte, o_byte) in self.flags.iter_mut().zip(o.flags.iter()) {
|
for (byte, o_byte) in self.flags.iter_mut().zip(o.flags.iter()) {
|
||||||
|
|
|
@ -1392,7 +1392,7 @@ impl Readable for Init {
|
||||||
(3, remote_network_address, option)
|
(3, remote_network_address, option)
|
||||||
});
|
});
|
||||||
Ok(Init {
|
Ok(Init {
|
||||||
features: features.or(global_features),
|
features: features | global_features,
|
||||||
remote_network_address,
|
remote_network_address,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1246,8 +1246,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
|
||||||
peer.set_their_node_id(their_node_id);
|
peer.set_their_node_id(their_node_id);
|
||||||
insert_node_id!();
|
insert_node_id!();
|
||||||
let features = self.message_handler.chan_handler.provided_init_features(&their_node_id)
|
let features = self.message_handler.chan_handler.provided_init_features(&their_node_id)
|
||||||
.or(self.message_handler.route_handler.provided_init_features(&their_node_id))
|
| self.message_handler.route_handler.provided_init_features(&their_node_id)
|
||||||
.or(self.message_handler.onion_message_handler.provided_init_features(&their_node_id));
|
| self.message_handler.onion_message_handler.provided_init_features(&their_node_id);
|
||||||
let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone()) };
|
let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone()) };
|
||||||
self.enqueue_message(peer, &resp);
|
self.enqueue_message(peer, &resp);
|
||||||
peer.awaiting_pong_timer_tick_intervals = 0;
|
peer.awaiting_pong_timer_tick_intervals = 0;
|
||||||
|
@ -1260,8 +1260,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
|
||||||
peer.set_their_node_id(their_node_id);
|
peer.set_their_node_id(their_node_id);
|
||||||
insert_node_id!();
|
insert_node_id!();
|
||||||
let features = self.message_handler.chan_handler.provided_init_features(&their_node_id)
|
let features = self.message_handler.chan_handler.provided_init_features(&their_node_id)
|
||||||
.or(self.message_handler.route_handler.provided_init_features(&their_node_id))
|
| self.message_handler.route_handler.provided_init_features(&their_node_id)
|
||||||
.or(self.message_handler.onion_message_handler.provided_init_features(&their_node_id));
|
| self.message_handler.onion_message_handler.provided_init_features(&their_node_id);
|
||||||
let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone()) };
|
let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone()) };
|
||||||
self.enqueue_message(peer, &resp);
|
self.enqueue_message(peer, &resp);
|
||||||
peer.awaiting_pong_timer_tick_intervals = 0;
|
peer.awaiting_pong_timer_tick_intervals = 0;
|
||||||
|
@ -2202,8 +2202,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
|
||||||
addresses.sort_by_key(|addr| addr.get_id());
|
addresses.sort_by_key(|addr| addr.get_id());
|
||||||
|
|
||||||
let features = self.message_handler.chan_handler.provided_node_features()
|
let features = self.message_handler.chan_handler.provided_node_features()
|
||||||
.or(self.message_handler.route_handler.provided_node_features())
|
| self.message_handler.route_handler.provided_node_features()
|
||||||
.or(self.message_handler.onion_message_handler.provided_node_features());
|
| self.message_handler.onion_message_handler.provided_node_features();
|
||||||
let announcement = msgs::UnsignedNodeAnnouncement {
|
let announcement = msgs::UnsignedNodeAnnouncement {
|
||||||
features,
|
features,
|
||||||
timestamp: self.last_node_announcement_serial.fetch_add(1, Ordering::AcqRel),
|
timestamp: self.last_node_announcement_serial.fetch_add(1, Ordering::AcqRel),
|
||||||
|
|
Loading…
Add table
Reference in a new issue