Skip to content

Commit 6242c30

Browse files
committed
f - use Features::requires_unknown_bits_from
1 parent 7c28b72 commit 6242c30

File tree

1 file changed

+39
-30
lines changed

1 file changed

+39
-30
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,11 +1346,17 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
13461346

13471347
// Need an Init as first message
13481348
if let wire::Message::Init(msg) = message {
1349-
let additional_features = msg.features.clone() - self.init_features(&their_node_id);
1350-
if additional_features.requires_unknown_bits() {
1351-
log_debug!(self.logger, "Peer features required unknown version bits");
1349+
let our_features = self.init_features(&their_node_id);
1350+
if msg.features.requires_unknown_bits_from(&our_features) {
1351+
log_debug!(self.logger, "Peer requires features unknown to us");
13521352
return Err(PeerHandleError { }.into());
13531353
}
1354+
1355+
if our_features.requires_unknown_bits_from(&msg.features) {
1356+
log_debug!(self.logger, "We require features unknown to our peer");
1357+
return Err(PeerHandleError { }.into());
1358+
}
1359+
13541360
if peer_lock.their_features.is_some() {
13551361
return Err(PeerHandleError { }.into());
13561362
}
@@ -2325,8 +2331,8 @@ mod tests {
23252331
for i in 0..peer_count {
23262332
let node_secret = SecretKey::from_slice(&[42 + i as u8; 32]).unwrap();
23272333
let features = {
2328-
let mut feature_bits = vec![0u8; 32 + i + 1];
2329-
feature_bits[32 + i] = 0b00000001;
2334+
let mut feature_bits = vec![0u8; 33 + i + 1];
2335+
feature_bits[33 + i] = 0b00000001;
23302336
InitFeatures::from_le_bytes(feature_bits)
23312337
};
23322338
cfgs.push(
@@ -2472,35 +2478,38 @@ mod tests {
24722478

24732479
#[test]
24742480
fn test_incompatible_peers() {
2475-
let cfgs = create_incompatible_peermgr_cfgs(2);
2476-
let peers = create_network(2, &cfgs);
2477-
let peer_a = &peers[0];
2478-
let peer_b = &peers[1];
2481+
let cfgs = create_peermgr_cfgs(2);
2482+
let incompatible_cfgs = create_incompatible_peermgr_cfgs(2);
24792483

2480-
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
2481-
let mut fd_a = FileDescriptor {
2482-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
2483-
disconnect: Arc::new(AtomicBool::new(false)),
2484-
};
2485-
let addr_a = NetAddress::IPv4{addr: [127, 0, 0, 1], port: 1000};
2486-
let mut fd_b = FileDescriptor {
2487-
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
2488-
disconnect: Arc::new(AtomicBool::new(false)),
2489-
};
2490-
let addr_b = NetAddress::IPv4{addr: [127, 0, 0, 1], port: 1001};
2491-
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
2492-
peer_a.new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
2493-
assert_eq!(peer_a.read_event(&mut fd_a, &initial_data).unwrap(), false);
2494-
peer_a.process_events();
2484+
let peers = create_network(2, &cfgs);
2485+
let incompatible_peers = create_network(2, &incompatible_cfgs);
2486+
let peer_pairs = [(&peers[0], &incompatible_peers[0]), (&incompatible_peers[1], &peers[1])];
2487+
for (peer_a, peer_b) in peer_pairs {
2488+
let id_a = peer_a.node_signer.get_node_id(Recipient::Node).unwrap();
2489+
let mut fd_a = FileDescriptor {
2490+
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
2491+
disconnect: Arc::new(AtomicBool::new(false)),
2492+
};
2493+
let addr_a = NetAddress::IPv4{addr: [127, 0, 0, 1], port: 1000};
2494+
let mut fd_b = FileDescriptor {
2495+
fd: 1, outbound_data: Arc::new(Mutex::new(Vec::new())),
2496+
disconnect: Arc::new(AtomicBool::new(false)),
2497+
};
2498+
let addr_b = NetAddress::IPv4{addr: [127, 0, 0, 1], port: 1001};
2499+
let initial_data = peer_b.new_outbound_connection(id_a, fd_b.clone(), Some(addr_a.clone())).unwrap();
2500+
peer_a.new_inbound_connection(fd_a.clone(), Some(addr_b.clone())).unwrap();
2501+
assert_eq!(peer_a.read_event(&mut fd_a, &initial_data).unwrap(), false);
2502+
peer_a.process_events();
24952503

2496-
let a_data = fd_a.outbound_data.lock().unwrap().split_off(0);
2497-
assert_eq!(peer_b.read_event(&mut fd_b, &a_data).unwrap(), false);
2504+
let a_data = fd_a.outbound_data.lock().unwrap().split_off(0);
2505+
assert_eq!(peer_b.read_event(&mut fd_b, &a_data).unwrap(), false);
24982506

2499-
peer_b.process_events();
2500-
let b_data = fd_b.outbound_data.lock().unwrap().split_off(0);
2507+
peer_b.process_events();
2508+
let b_data = fd_b.outbound_data.lock().unwrap().split_off(0);
25012509

2502-
// Should fail because of unknown required features
2503-
assert!(peer_a.read_event(&mut fd_a, &b_data).is_err());
2510+
// Should fail because of unknown required features
2511+
assert!(peer_a.read_event(&mut fd_a, &b_data).is_err());
2512+
}
25042513
}
25052514

25062515
#[test]

0 commit comments

Comments
 (0)