1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
crate::ix!();
impl PeerManager {
pub fn process_sendcmpct_message(
self: Arc<Self>,
peer: &Option<Peer>,
mut pfrom: &mut AmoWriteGuard<Box<dyn NodeInterface>>,
msg_type: &str,
recv: &mut DataStream,
time_received: &OffsetDateTime ,
interrupt_msg_proc: &AtomicBool) {
let mut announce_usingcmpctblock: bool = false;
let mut n_cmpctblock_version: u64 = 0;
recv.stream_into(&mut announce_usingcmpctblock);
recv.stream_into(&mut n_cmpctblock_version);
if n_cmpctblock_version == 1 || n_cmpctblock_version == 2 {
let mut guard = CS_MAIN.lock();
if !create_state(pfrom.get_id()).get().provides_header_and_ids.load(atomic::Ordering::Relaxed) {
create_state(pfrom.get_id()).get().provides_header_and_ids.store(true, atomic::Ordering::Relaxed);
create_state(pfrom.get_id()).get().wants_cmpct_witness.store(n_cmpctblock_version == 2, atomic::Ordering::Relaxed);
}
if create_state(pfrom.get_id()).get().wants_cmpct_witness.load(atomic::Ordering::Relaxed) == (n_cmpctblock_version == 2) {
let created_state = create_state(pfrom.get_id());
let state = created_state.get();
state.prefer_header_and_ids.store(announce_usingcmpctblock,atomic::Ordering::Relaxed);
pfrom.set_bip152_highbandwidth_from(announce_usingcmpctblock);
}
if !create_state(pfrom.get_id()).get().supports_desired_cmpct_version.load(atomic::Ordering::Relaxed) {
create_state(pfrom.get_id()).get().supports_desired_cmpct_version.store(n_cmpctblock_version == 2, atomic::Ordering::Relaxed);
}
}
}
}