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>,
|
||||
}
|
||||
|
||||
impl <T: sealed::Context> Features<T> {
|
||||
pub(crate) fn or(mut self, o: Self) -> Self {
|
||||
impl<T: sealed::Context> core::ops::BitOr for Features<T> {
|
||||
type Output = Self;
|
||||
|
||||
fn bitor(mut self, o: Self) -> Self {
|
||||
let total_feature_len = cmp::max(self.flags.len(), o.flags.len());
|
||||
self.flags.resize(total_feature_len, 0u8);
|
||||
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)
|
||||
});
|
||||
Ok(Init {
|
||||
features: features.or(global_features),
|
||||
features: features | global_features,
|
||||
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);
|
||||
insert_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))
|
||||
.or(self.message_handler.onion_message_handler.provided_init_features(&their_node_id));
|
||||
| self.message_handler.route_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()) };
|
||||
self.enqueue_message(peer, &resp);
|
||||
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);
|
||||
insert_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))
|
||||
.or(self.message_handler.onion_message_handler.provided_init_features(&their_node_id));
|
||||
| self.message_handler.route_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()) };
|
||||
self.enqueue_message(peer, &resp);
|
||||
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());
|
||||
|
||||
let features = self.message_handler.chan_handler.provided_node_features()
|
||||
.or(self.message_handler.route_handler.provided_node_features())
|
||||
.or(self.message_handler.onion_message_handler.provided_node_features());
|
||||
| self.message_handler.route_handler.provided_node_features()
|
||||
| self.message_handler.onion_message_handler.provided_node_features();
|
||||
let announcement = msgs::UnsignedNodeAnnouncement {
|
||||
features,
|
||||
timestamp: self.last_node_announcement_serial.fetch_add(1, Ordering::AcqRel),
|
||||
|
|
Loading…
Add table
Reference in a new issue