Mixnet client address config

This commit is contained in:
Gusto 2023-10-18 16:14:24 +03:00
parent 56b2830d5a
commit 8f442005a5
4 changed files with 17 additions and 5 deletions

View File

@ -1,4 +1,4 @@
use std::{net::SocketAddr, time::Duration}; use std::{net::ToSocketAddrs, time::Duration};
use futures::{stream, StreamExt}; use futures::{stream, StreamExt};
use mixnet_topology::MixnetTopology; use mixnet_topology::MixnetTopology;
@ -46,7 +46,7 @@ impl MixnetClientConfig {
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum MixnetClientMode { pub enum MixnetClientMode {
Sender, Sender,
SenderReceiver(SocketAddr), SenderReceiver(String),
} }
impl MixnetClientMode { impl MixnetClientMode {
@ -54,7 +54,15 @@ impl MixnetClientMode {
match self { match self {
Self::Sender => Ok(stream::empty().boxed()), Self::Sender => Ok(stream::empty().boxed()),
Self::SenderReceiver(node_address) => { Self::SenderReceiver(node_address) => {
Ok(Receiver::new(*node_address).run().await?.boxed()) let mut addrs = node_address
.to_socket_addrs()
.map_err(|e| MixnetClientError::MixnetNodeAddressError(e.to_string()))?;
let socket_addr = addrs
.next()
.ok_or(MixnetClientError::MixnetNodeAddressError(
"No address provided".into(),
))?;
Ok(Receiver::new(socket_addr).run().await?.boxed())
} }
} }
} }

View File

@ -3,6 +3,8 @@ use nym_sphinx::addressing::nodes::NymNodeRoutingAddressError;
#[derive(thiserror::Error, Debug)] #[derive(thiserror::Error, Debug)]
pub enum MixnetClientError { pub enum MixnetClientError {
#[error("invalid node address: {0}")]
MixnetNodeAddressError(String),
#[error("mixnet node connect error")] #[error("mixnet node connect error")]
MixnetNodeConnectError, MixnetNodeConnectError,
#[error("mixnode stream has been closed")] #[error("mixnode stream has been closed")]

View File

@ -248,7 +248,9 @@ fn create_node_config(
mixnet_topology: MixnetTopology, mixnet_topology: MixnetTopology,
) -> Config { ) -> Config {
let mixnet_client_mode = match mixnet_node_config { let mixnet_client_mode = match mixnet_node_config {
Some(node_config) => MixnetClientMode::SenderReceiver(node_config.client_listen_address), Some(node_config) => {
MixnetClientMode::SenderReceiver(node_config.client_listen_address.to_string())
}
None => MixnetClientMode::Sender, None => MixnetClientMode::Sender,
}; };

View File

@ -125,7 +125,7 @@ async fn run_nodes_and_destination_client() -> (
// one of mixnodes the exit layer always will be selected as a destination. // one of mixnodes the exit layer always will be selected as a destination.
let client = MixnetClient::new( let client = MixnetClient::new(
MixnetClientConfig { MixnetClientConfig {
mode: MixnetClientMode::SenderReceiver(config3.client_listen_address), mode: MixnetClientMode::SenderReceiver(config3.client_listen_address.to_string()),
topology: topology.clone(), topology: topology.clone(),
connection_pool_size: 255, connection_pool_size: 255,
max_retries: 3, max_retries: 3,