Removed client list from topology (#301)
* Removed client list from topology * Formatting
This commit is contained in:
committed by
GitHub
parent
50805a9b0e
commit
eb266f59f1
@@ -256,18 +256,13 @@ impl NymClient {
|
||||
|
||||
fn start_websocket_listener(
|
||||
&self,
|
||||
topology_accessor: TopologyAccessor,
|
||||
buffer_requester: ReceivedBufferRequestSender,
|
||||
msg_input: InputMessageSender,
|
||||
) {
|
||||
info!("Starting websocket listener...");
|
||||
|
||||
let websocket_handler = websocket::Handler::new(
|
||||
msg_input,
|
||||
buffer_requester,
|
||||
self.as_mix_recipient(),
|
||||
topology_accessor,
|
||||
);
|
||||
let websocket_handler =
|
||||
websocket::Handler::new(msg_input, buffer_requester, self.as_mix_recipient());
|
||||
|
||||
websocket::Listener::new(self.config.get_listening_port())
|
||||
.start(self.runtime.handle(), websocket_handler);
|
||||
@@ -362,18 +357,12 @@ impl NymClient {
|
||||
sphinx_message_sender.clone(),
|
||||
);
|
||||
|
||||
self.start_cover_traffic_stream(
|
||||
ack_key,
|
||||
shared_topology_accessor.clone(),
|
||||
sphinx_message_sender,
|
||||
);
|
||||
self.start_cover_traffic_stream(ack_key, shared_topology_accessor, sphinx_message_sender);
|
||||
|
||||
match self.config.get_socket_type() {
|
||||
SocketType::WebSocket => self.start_websocket_listener(
|
||||
shared_topology_accessor,
|
||||
received_buffer_request_sender,
|
||||
input_sender,
|
||||
),
|
||||
SocketType::WebSocket => {
|
||||
self.start_websocket_listener(received_buffer_request_sender, input_sender)
|
||||
}
|
||||
SocketType::None => {
|
||||
// if we did not start the socket, it means we're running (supposedly) in the native mode
|
||||
// and hence we should announce 'ourselves' to the buffer
|
||||
|
||||
@@ -25,7 +25,7 @@ use std::time::Duration;
|
||||
use tokio::runtime::Handle;
|
||||
use tokio::sync::{RwLock, RwLockReadGuard};
|
||||
use tokio::task::JoinHandle;
|
||||
use topology::{gateway, NymTopology};
|
||||
use topology::NymTopology;
|
||||
|
||||
// I'm extremely curious why compiler NEVER complained about lack of Debug here before
|
||||
#[derive(Debug)]
|
||||
@@ -118,17 +118,6 @@ impl TopologyAccessor {
|
||||
self.inner.write().await.update(new_topology);
|
||||
}
|
||||
|
||||
// pub(crate) async fn get_gateway_socket_url(&self, id: &str) -> Option<String> {
|
||||
// match &self.inner.read().await.0 {
|
||||
// None => None,
|
||||
// Some(ref topology) => topology
|
||||
// .gateways()
|
||||
// .iter()
|
||||
// .find(|gateway| gateway.identity_key == id)
|
||||
// .map(|gateway| gateway.client_listener.clone()),
|
||||
// }
|
||||
// }
|
||||
|
||||
// only used by the client at startup to get a slightly more reasonable error message
|
||||
// (currently displays as unused because healthchecker is disabled due to required changes)
|
||||
pub(crate) async fn is_routable(&self) -> bool {
|
||||
@@ -137,21 +126,6 @@ impl TopologyAccessor {
|
||||
Some(ref topology) => topology.can_construct_path_through(DEFAULT_NUM_MIX_HOPS),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) async fn get_all_clients(&self) -> Option<Vec<gateway::Client>> {
|
||||
// TODO: this will need to be modified to instead return pairs (provider, client)
|
||||
match &self.inner.read().await.0 {
|
||||
None => None,
|
||||
Some(ref topology) => Some(
|
||||
topology
|
||||
.gateways()
|
||||
.iter()
|
||||
.flat_map(|gateway| gateway.registered_clients.iter())
|
||||
.cloned()
|
||||
.collect::<Vec<_>>(),
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) struct TopologyRefresherConfig {
|
||||
|
||||
@@ -18,7 +18,6 @@ use crate::client::{
|
||||
received_buffer::{
|
||||
ReceivedBufferMessage, ReceivedBufferRequestSender, ReconstructedMessagesReceiver,
|
||||
},
|
||||
topology_control::TopologyAccessor,
|
||||
};
|
||||
use futures::channel::mpsc;
|
||||
use futures::{SinkExt, StreamExt};
|
||||
@@ -47,7 +46,6 @@ pub(crate) struct Handler {
|
||||
msg_input: InputMessageSender,
|
||||
buffer_requester: ReceivedBufferRequestSender,
|
||||
self_full_address: Recipient,
|
||||
topology_accessor: TopologyAccessor,
|
||||
socket: Option<WebSocketStream<TcpStream>>,
|
||||
received_response_type: ReceivedResponseType,
|
||||
}
|
||||
@@ -59,7 +57,6 @@ impl Clone for Handler {
|
||||
msg_input: self.msg_input.clone(),
|
||||
buffer_requester: self.buffer_requester.clone(),
|
||||
self_full_address: self.self_full_address.clone(),
|
||||
topology_accessor: self.topology_accessor.clone(),
|
||||
socket: None,
|
||||
received_response_type: Default::default(),
|
||||
}
|
||||
@@ -79,13 +76,11 @@ impl Handler {
|
||||
msg_input: InputMessageSender,
|
||||
buffer_requester: ReceivedBufferRequestSender,
|
||||
self_full_address: Recipient,
|
||||
topology_accessor: TopologyAccessor,
|
||||
) -> Self {
|
||||
Handler {
|
||||
msg_input,
|
||||
buffer_requester,
|
||||
self_full_address,
|
||||
topology_accessor,
|
||||
socket: None,
|
||||
received_response_type: Default::default(),
|
||||
}
|
||||
@@ -114,18 +109,6 @@ impl Handler {
|
||||
None
|
||||
}
|
||||
|
||||
async fn handle_text_get_clients(&mut self) -> ServerResponse {
|
||||
match self.topology_accessor.get_all_clients().await {
|
||||
Some(clients) => {
|
||||
let client_keys = clients.into_iter().map(|client| client.pub_key).collect();
|
||||
ServerResponse::GetClients {
|
||||
clients: client_keys,
|
||||
}
|
||||
}
|
||||
None => ServerResponse::new_error("invalid network topology"),
|
||||
}
|
||||
}
|
||||
|
||||
fn handle_text_self_address(&self) -> ServerResponse {
|
||||
ServerResponse::SelfAddress {
|
||||
address: self.self_full_address.to_string(),
|
||||
@@ -147,7 +130,6 @@ impl Handler {
|
||||
ClientRequest::Send { message, recipient } => self
|
||||
.handle_text_send(message, recipient)
|
||||
.map(|resp| resp.into()),
|
||||
ClientRequest::GetClients => Some(self.handle_text_get_clients().await.into()),
|
||||
ClientRequest::SelfAddress => Some(self.handle_text_self_address().into()),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ use tokio_tungstenite::tungstenite::protocol::Message;
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub enum ClientRequest {
|
||||
Send { message: String, recipient: String },
|
||||
GetClients,
|
||||
SelfAddress,
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,6 @@ pub struct GatewayPresence {
|
||||
pub mixnet_listener: String,
|
||||
pub identity_key: String,
|
||||
pub sphinx_key: String,
|
||||
pub registered_clients: Vec<GatewayClient>,
|
||||
pub last_seen: u64,
|
||||
pub version: String,
|
||||
}
|
||||
@@ -73,27 +72,8 @@ impl TryInto<topology::gateway::Node> for GatewayPresence {
|
||||
mixnet_listener: resolved_mix_hostname.unwrap(),
|
||||
identity_key: identity::PublicKey::from_base58_string(self.identity_key)?,
|
||||
sphinx_key: encryption::PublicKey::from_base58_string(self.sphinx_key)?,
|
||||
registered_clients: self
|
||||
.registered_clients
|
||||
.into_iter()
|
||||
.map(|c| c.into())
|
||||
.collect(),
|
||||
last_seen: self.last_seen,
|
||||
version: self.version,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct GatewayClient {
|
||||
pub pub_key: String,
|
||||
}
|
||||
|
||||
impl Into<topology::gateway::Client> for GatewayClient {
|
||||
fn into(self) -> topology::gateway::Client {
|
||||
topology::gateway::Client {
|
||||
pub_key: self.pub_key,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,6 @@ mod presence_gateways_post_request {
|
||||
mixnet_listener: "foo.com".to_string(),
|
||||
identity_key: "def".to_string(),
|
||||
sphinx_key: "abc".to_string(),
|
||||
registered_clients: vec![],
|
||||
last_seen: 0,
|
||||
version: "0.1.0".to_string(),
|
||||
}
|
||||
|
||||
@@ -31,20 +31,10 @@ pub struct Node {
|
||||
pub mixnet_listener: SocketAddr,
|
||||
pub identity_key: identity::PublicKey,
|
||||
pub sphinx_key: encryption::PublicKey, // TODO: or nymsphinx::PublicKey? both are x25519
|
||||
pub registered_clients: Vec<Client>,
|
||||
pub last_seen: u64,
|
||||
pub version: String,
|
||||
}
|
||||
|
||||
impl Node {
|
||||
pub fn has_client(&self, client_pub_key: String) -> bool {
|
||||
self.registered_clients
|
||||
.iter()
|
||||
.find(|client| client.pub_key == client_pub_key)
|
||||
.is_some()
|
||||
}
|
||||
}
|
||||
|
||||
impl filter::Versioned for Node {
|
||||
fn version(&self) -> String {
|
||||
self.version.clone()
|
||||
|
||||
@@ -127,7 +127,7 @@ impl Gateway {
|
||||
self.encryption_keys.public_key().to_base58_string(),
|
||||
self.config.get_presence_sending_delay(),
|
||||
);
|
||||
presence::Notifier::new(notifier_config, self.registered_clients_ledger.clone()).start();
|
||||
presence::Notifier::new(notifier_config).start();
|
||||
}
|
||||
|
||||
async fn wait_for_interrupt(&self) {
|
||||
|
||||
@@ -13,8 +13,7 @@
|
||||
// limitations under the License.
|
||||
|
||||
use crate::built_info;
|
||||
use crate::node::storage::ClientLedger;
|
||||
use directory_client::presence::gateways::{GatewayClient, GatewayPresence};
|
||||
use directory_client::presence::gateways::GatewayPresence;
|
||||
use directory_client::DirectoryClient;
|
||||
use log::{error, trace};
|
||||
use std::time::Duration;
|
||||
@@ -55,7 +54,6 @@ impl NotifierConfig {
|
||||
pub(crate) struct Notifier {
|
||||
location: String,
|
||||
net_client: directory_client::Client,
|
||||
client_ledger: ClientLedger,
|
||||
sending_delay: Duration,
|
||||
client_listener: String,
|
||||
mixnet_listener: String,
|
||||
@@ -64,14 +62,13 @@ pub(crate) struct Notifier {
|
||||
}
|
||||
|
||||
impl Notifier {
|
||||
pub(crate) fn new(config: NotifierConfig, client_ledger: ClientLedger) -> Notifier {
|
||||
pub(crate) fn new(config: NotifierConfig) -> Notifier {
|
||||
let directory_client_cfg = directory_client::Config {
|
||||
base_url: config.directory_server,
|
||||
};
|
||||
let net_client = directory_client::Client::new(directory_client_cfg);
|
||||
|
||||
Notifier {
|
||||
client_ledger,
|
||||
net_client,
|
||||
location: config.location,
|
||||
client_listener: config.clients_announce_host,
|
||||
@@ -83,21 +80,12 @@ impl Notifier {
|
||||
}
|
||||
|
||||
async fn make_presence(&self) -> GatewayPresence {
|
||||
let client_keys = self.client_ledger.current_clients().unwrap();
|
||||
let registered_clients = client_keys
|
||||
.into_iter()
|
||||
.map(|key_bytes| GatewayClient {
|
||||
pub_key: key_bytes.to_base58_string(),
|
||||
})
|
||||
.collect();
|
||||
|
||||
GatewayPresence {
|
||||
location: self.location.clone(),
|
||||
client_listener: self.client_listener.clone(),
|
||||
mixnet_listener: self.mixnet_listener.clone(),
|
||||
identity_key: self.identity.clone(),
|
||||
sphinx_key: self.sphinx_key.clone(),
|
||||
registered_clients,
|
||||
last_seen: 0,
|
||||
version: built_info::PKG_VERSION.to_string(),
|
||||
}
|
||||
|
||||
@@ -155,22 +155,4 @@ impl ClientLedger {
|
||||
self.db.flush().unwrap();
|
||||
removal_result
|
||||
}
|
||||
|
||||
pub(crate) fn current_clients(
|
||||
&self,
|
||||
) -> Result<Vec<DestinationAddressBytes>, ClientLedgerError> {
|
||||
let clients = self.db.iter().keys();
|
||||
|
||||
let mut client_vec = Vec::new();
|
||||
for client in clients {
|
||||
match client {
|
||||
Err(e) => return Err(ClientLedgerError::DbWriteError(e)),
|
||||
Ok(client_entry) => {
|
||||
client_vec.push(self.read_destination_address_bytes(client_entry))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(client_vec)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user