diff --git a/lib/modules/ws2p-v1-legacy/src/ws_connections/mod.rs b/lib/modules/ws2p-v1-legacy/src/ws_connections/mod.rs index 4e262554575605bfd865850dc9516cede71a51f6..d7fb34e72b0d1fc79eb0e71f0c905b8a9a0cfb05 100644 --- a/lib/modules/ws2p-v1-legacy/src/ws_connections/mod.rs +++ b/lib/modules/ws2p-v1-legacy/src/ws_connections/mod.rs @@ -28,6 +28,7 @@ use durs_network::documents::BlockchainDocument; use durs_network_documents::network_endpoint::EndpointV1; use rand::Rng; use states::WS2PConnectionState; +use std::cmp::Ordering; use std::collections::HashSet; #[allow(deprecated)] use ws::Sender; @@ -64,7 +65,9 @@ pub fn connect_to_know_endpoints(ws2p_module: &mut WS2PModule) { | WS2PConnectionState::Close | WS2PConnectionState::Denial => { pubkeys.insert(ep.issuer); - reachable_endpoints.push(ep); + if ws2p_module.ssl || ep.port != 443 { + reachable_endpoints.push(ep); + } } _ => { pubkeys.insert(ep.issuer); @@ -73,6 +76,19 @@ pub fn connect_to_know_endpoints(ws2p_module: &mut WS2PModule) { } } } + if !ws2p_module.conf.prefered_pubkeys.is_empty() { + reachable_endpoints.sort_unstable_by(|ep1, ep2| { + if ws2p_module.conf.prefered_pubkeys.contains(&ep1.issuer) { + if ws2p_module.conf.prefered_pubkeys.contains(&ep2.issuer) { + Ordering::Equal + } else { + Ordering::Greater + } + } else { + Ordering::Less + } + }); + } let mut free_outcoming_rooms = ws2p_module.conf.clone().outcoming_quota - count_established_connections; while free_outcoming_rooms > 0 { @@ -87,9 +103,6 @@ pub fn connect_to_know_endpoints(ws2p_module: &mut WS2PModule) { } else { break; }; - if !ws2p_module.ssl && ep.port == 443 { - continue; - } connect_to_without_checking_quotas(ws2p_module, unwrap!(ep.node_full_id())); free_outcoming_rooms -= 1; }