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;
}