moved network requester into gateway

This commit is contained in:
Jędrzej Stuczyński
2025-09-01 15:58:35 +01:00
parent 0c51e6537d
commit d90eda116f
29 changed files with 84 additions and 285 deletions
Generated
+4 -31
View File
@@ -5745,6 +5745,7 @@ dependencies = [
"nym-credentials",
"nym-credentials-interface",
"nym-crypto",
"nym-exit-policy",
"nym-gateway-requests",
"nym-gateway-stats-storage",
"nym-gateway-storage",
@@ -5752,10 +5753,12 @@ dependencies = [
"nym-ip-packet-router",
"nym-mixnet-client",
"nym-network-defaults",
"nym-network-requester",
"nym-node-metrics",
"nym-sdk",
"nym-service-provider-requests-common",
"nym-service-providers-common",
"nym-socks5-proxy-helpers",
"nym-socks5-requests",
"nym-sphinx",
"nym-statistics-common",
"nym-task",
@@ -6032,7 +6035,6 @@ dependencies = [
"nym-id",
"nym-ip-packet-requests",
"nym-network-defaults",
"nym-network-requester",
"nym-sdk",
"nym-service-provider-requests-common",
"nym-service-providers-common",
@@ -6204,34 +6206,6 @@ dependencies = [
"utoipa-swagger-ui",
]
[[package]]
name = "nym-network-requester"
version = "1.1.62"
dependencies = [
"anyhow",
"async-trait",
"futures",
"humantime-serde",
"nym-bin-common",
"nym-client-core",
"nym-config",
"nym-exit-policy",
"nym-id",
"nym-network-defaults",
"nym-sdk",
"nym-service-providers-common",
"nym-socks5-proxy-helpers",
"nym-socks5-requests",
"nym-sphinx",
"nym-task",
"reqwest 0.12.22",
"serde",
"thiserror 2.0.12",
"tokio",
"tracing",
"url",
]
[[package]]
name = "nym-node"
version = "1.17.0"
@@ -6273,7 +6247,6 @@ dependencies = [
"nym-ip-packet-router",
"nym-metrics",
"nym-mixnet-client",
"nym-network-requester",
"nym-node-metrics",
"nym-node-requests",
"nym-noise",
-2
View File
@@ -133,7 +133,6 @@ members = [
"sdk/rust/nym-sdk",
"service-providers/common",
"service-providers/ip-packet-router",
"service-providers/network-requester",
"sqlx-pool-guard",
"tools/echo-server",
"tools/internal/contract-state-importer/importer-cli",
@@ -169,7 +168,6 @@ default-members = [
"nym-validator-rewarder",
"nyx-chain-watcher",
"service-providers/ip-packet-router",
"service-providers/network-requester",
"tools/nymvisor",
]
+10 -3
View File
@@ -57,7 +57,6 @@ nym-gateway-stats-storage = { path = "../common/gateway-stats-storage" }
nym-gateway-requests = { path = "../common/gateway-requests" }
nym-mixnet-client = { path = "../common/client-libs/mixnet-client" }
nym-network-defaults = { path = "../common/network-defaults" }
nym-network-requester = { path = "../service-providers/network-requester" }
nym-sdk = { path = "../sdk/rust/nym-sdk" }
nym-sphinx = { path = "../common/nymsphinx" }
nym-statistics-common = { path = "../common/statistics" }
@@ -71,14 +70,22 @@ nym-wireguard = { path = "../common/wireguard" }
nym-wireguard-private-metadata-server = { path = "../common/wireguard-private-metadata/server" }
nym-wireguard-types = { path = "../common/wireguard-types", default-features = false }
nym-authenticator-requests = { path = "../common/authenticator-requests" }
nym-client-core = { path = "../common/client-core", features = ["cli"] }
nym-id = { path = "../common/nym-id" }
nym-service-provider-requests-common = { path = "../common/service-provider-requests-common" }
defguard_wireguard_rs = { workspace = true }
nym-service-providers-common = { path = "../service-providers/common" }
# authenticator specific
nym-authenticator-requests = { path = "../common/authenticator-requests" }
# network-requester specific
nym-socks5-proxy-helpers = { path = "../common/socks5/proxy-helpers" }
nym-socks5-requests = { path = "../common/socks5/requests" }
nym-exit-policy = { path = "../common/exit-policy", features = ["client"] }
[dev-dependencies]
nym-gateway-storage = { path = "../common/gateway-storage", features = ["mock"] }
nym-wireguard = { path = "../common/wireguard", features = ["mock"] }
+3 -3
View File
@@ -1,19 +1,19 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
pub use crate::node::client_handling::websocket::connection_handler::authenticated::RequestHandlingError;
use crate::node::internal_service_providers::authenticator::error::AuthenticatorError;
use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError;
use nym_client_core::error::ClientCoreError;
use nym_gateway_stats_storage::error::StatsStorageError;
use nym_gateway_storage::error::GatewayStorageError;
use nym_ip_packet_router::error::IpPacketRouterError;
use nym_network_requester::error::{ClientCoreError, NetworkRequesterError};
use nym_validator_client::nyxd::error::NyxdError;
use nym_validator_client::nyxd::{AccountId, Coin};
use nym_validator_client::ValidatorClientError;
use std::net::IpAddr;
use thiserror::Error;
pub use crate::node::client_handling::websocket::connection_handler::authenticated::RequestHandlingError;
#[derive(Debug, Error)]
pub enum GatewayError {
#[error("the configured version of the gateway ({config_version}) is incompatible with the binary version ({binary_version})")]
+2
View File
@@ -11,4 +11,6 @@ pub mod node;
pub use error::GatewayError;
pub use node::GatewayTasksBuilder;
pub use node::internal_service_providers as service_providers;
pub use node::internal_service_providers::authenticator as nym_authenticator;
pub use node::internal_service_providers::network_requester as nym_network_requester;
@@ -5,7 +5,7 @@ use crate::node::client_handling::websocket::message_receiver::{
MixMessageReceiver, MixMessageSender,
};
use futures::StreamExt;
use nym_network_requester::{GatewayPacketRouter, PacketRouter};
use nym_client_core::client::mix_traffic::transceiver::{GatewayPacketRouter, PacketRouter};
use nym_sphinx::addressing::clients::Recipient;
use nym_sphinx::DestinationAddressBytes;
use nym_task::TaskClient;
@@ -6,6 +6,9 @@ use crate::node::client_handling::websocket::message_receiver::{
MixMessageReceiver, MixMessageSender,
};
use crate::node::internal_service_providers::authenticator::Authenticator;
use crate::node::internal_service_providers::network_requester::{
error::NetworkRequesterError, NRServiceProviderBuilder,
};
use crate::GatewayError;
use async_trait::async_trait;
use futures::channel::{mpsc, oneshot};
@@ -13,23 +16,35 @@ use nym_crypto::asymmetric::ed25519;
use nym_ip_packet_router::error::IpPacketRouterError;
use nym_ip_packet_router::IpPacketRouter;
use nym_mixnet_client::forwarder::MixForwardingSender;
use nym_network_requester::error::NetworkRequesterError;
use nym_network_requester::NRServiceProviderBuilder;
use nym_sdk::mixnet::Recipient;
use nym_sdk::{GatewayTransceiver, LocalGateway, PacketRouter};
use nym_task::TaskClient;
use std::fmt::Display;
use tokio::task::JoinHandle;
use tracing::error;
pub use nym_client_core::client::{
base_client::{
non_wasm_helpers::{setup_fs_gateways_storage, setup_fs_reply_surb_backend},
storage::{
gateways_storage::{
CustomGatewayDetails, GatewayDetails, GatewayRegistration, RemoteGatewayDetails,
},
helpers::{set_active_gateway, store_gateway_details},
GatewaysDetailsStore, OnDiskGatewaysDetails, OnDiskPersistent,
},
},
key_manager::persistence::OnDiskKeys,
mix_traffic::transceiver::*,
};
pub mod authenticator;
mod network_requester;
pub mod network_requester;
pub trait LocalRecipient {
fn address(&self) -> Recipient;
}
impl LocalRecipient for nym_network_requester::core::OnStartData {
impl LocalRecipient for network_requester::OnStartData {
fn address(&self) -> Recipient {
self.address
}
@@ -59,7 +74,7 @@ pub trait RunnableServiceProvider {
#[async_trait]
impl RunnableServiceProvider for NRServiceProviderBuilder {
const NAME: &'static str = "network requester";
type OnStartData = nym_network_requester::core::OnStartData;
type OnStartData = network_requester::OnStartData;
type Error = NetworkRequesterError;
async fn run_service_provider(self) -> Result<(), Self::Error> {
@@ -1,32 +1,26 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
use nym_config::serde_helpers::de_maybe_stringified;
use nym_network_defaults::mainnet;
use serde::{Deserialize, Serialize};
use std::path::Path;
use std::time::Duration;
use url::Url;
pub use crate::config::persistence::NetworkRequesterPaths;
pub use nym_client_core::config::Config as BaseClientConfig;
pub use persistence::NetworkRequesterPaths;
mod persistence;
pub const DEFAULT_STANDARD_LIST_UPDATE_INTERVAL: Duration = Duration::from_secs(30 * 60);
#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
#[derive(Debug, Clone, PartialEq)]
pub struct Config {
#[serde(flatten)]
pub base: BaseClientConfig,
#[serde(default)]
pub network_requester: NetworkRequester,
pub storage_paths: NetworkRequesterPaths,
#[serde(default)]
pub network_requester_debug: Debug,
}
@@ -51,8 +45,7 @@ impl Config {
}
}
#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)]
#[serde(default)]
#[derive(Debug, Clone, PartialEq)]
pub struct NetworkRequester {
/// specifies whether this network requester should run in 'open-proxy' mode
/// and thus would attempt to resolve **ANY** request it receives.
@@ -63,7 +56,6 @@ pub struct NetworkRequester {
pub disable_poisson_rate: bool,
/// Specifies the url for an upstream source of the exit policy used by this node.
#[serde(deserialize_with = "de_maybe_stringified")]
pub upstream_exit_policy_url: Option<Url>,
}
@@ -81,12 +73,10 @@ impl Default for NetworkRequester {
}
}
#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Serialize)]
#[serde(default, deny_unknown_fields)]
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Debug {
/// Defines how often the standard allow list should get updated
/// Deprecated
#[serde(with = "humantime_serde")]
pub standard_list_update_interval: Duration,
}
@@ -1,11 +1,13 @@
// Copyright 2020-2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
use crate::config::{BaseClientConfig, Config};
use crate::error::NetworkRequesterError;
use crate::reply::MixnetMessage;
use crate::request_filter::RequestFilter;
use crate::{reply, socks5};
use crate::node::internal_service_providers::network_requester::config::{
BaseClientConfig, Config,
};
use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError;
use crate::node::internal_service_providers::network_requester::reply::MixnetMessage;
use crate::node::internal_service_providers::network_requester::request_filter::RequestFilter;
use crate::node::internal_service_providers::network_requester::{reply, socks5};
use async_trait::async_trait;
use futures::channel::{mpsc, oneshot};
use futures::stream::StreamExt;
@@ -58,12 +58,6 @@ pub enum NetworkRequesterError {
source: PolicyError,
},
#[error("the url provided for the upstream exit policy source is malformed: {source}")]
MalformedExitPolicyUpstreamUrl {
#[source]
source: reqwest::Error,
},
#[error("can't setup an exit policy without any upstream urls")]
NoUpstreamExitPolicy,
@@ -1,2 +1,13 @@
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
pub mod config;
pub mod core;
pub mod error;
mod reply;
pub mod request_filter;
mod socks5;
pub use config::Config;
pub use core::{NRServiceProvider, NRServiceProviderBuilder, OnStartData};
pub use request_filter::RequestFilter;
@@ -1,12 +1,11 @@
// Copyright 2023-2024 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
use crate::config::Config;
use crate::error::NetworkRequesterError;
use crate::node::internal_service_providers::network_requester::config::Config;
use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError;
use nym_exit_policy::client::get_exit_policy;
use nym_exit_policy::ExitPolicy;
use nym_socks5_requests::RemoteAddress;
use reqwest::IntoUrl;
use tokio::net::lookup_host;
use tracing::trace;
use url::Url;
@@ -23,11 +22,7 @@ impl From<ExitPolicy> for ExitPolicyRequestFilter {
}
impl ExitPolicyRequestFilter {
pub(crate) async fn new_upstream(url: impl IntoUrl) -> Result<Self, NetworkRequesterError> {
let url = url
.into_url()
.map_err(|source| NetworkRequesterError::MalformedExitPolicyUpstreamUrl { source })?;
pub(crate) async fn new_upstream(url: Url) -> Result<Self, NetworkRequesterError> {
Ok(ExitPolicyRequestFilter {
upstream: Some(url.clone()),
policy: get_exit_policy(url).await?,
@@ -1,8 +1,8 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
use crate::config::Config;
use crate::error::NetworkRequesterError;
use crate::node::internal_service_providers::network_requester::config::Config;
use crate::node::internal_service_providers::network_requester::error::NetworkRequesterError;
use nym_socks5_requests::RemoteAddress;
use std::sync::Arc;
use tracing::warn;
@@ -1,8 +1,8 @@
// Copyright 2020 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
use crate::reply;
use crate::reply::MixnetMessage;
use crate::node::internal_service_providers::network_requester::reply;
use crate::node::internal_service_providers::network_requester::reply::MixnetMessage;
use nym_service_providers_common::interface::RequestVersion;
use nym_socks5_proxy_helpers::connection_controller::ConnectionReceiver;
use nym_socks5_proxy_helpers::proxy_runner::{MixProxySender, ProxyRunner};
+6 -5
View File
@@ -4,8 +4,11 @@
use crate::config::Config;
use crate::error::GatewayError;
use crate::node::client_handling::websocket;
use crate::node::internal_service_providers::authenticator::Authenticator;
use crate::node::internal_service_providers::authenticator::{self};
use crate::node::internal_service_providers::network_requester::{self, NRServiceProviderBuilder};
use crate::node::internal_service_providers::{
authenticator, ExitServiceProviders, ServiceProviderBeingBuilt, SpMessageRouterBuilder,
ExitServiceProviders, ServiceProviderBeingBuilt, SpMessageRouterBuilder,
};
use crate::node::stale_data_cleaner::StaleMessagesCleaner;
use futures::channel::oneshot;
@@ -17,7 +20,6 @@ use nym_crypto::asymmetric::ed25519;
use nym_ip_packet_router::IpPacketRouter;
use nym_mixnet_client::forwarder::MixForwardingSender;
use nym_network_defaults::NymNetworkDetails;
use nym_network_requester::NRServiceProviderBuilder;
use nym_node_metrics::events::MetricEventsSender;
use nym_node_metrics::NymNodeMetrics;
use nym_task::{ShutdownToken, TaskClient};
@@ -33,10 +35,9 @@ use tracing::*;
use zeroize::Zeroizing;
pub(crate) mod client_handling;
pub(crate) mod internal_service_providers;
pub mod internal_service_providers;
mod stale_data_cleaner;
use crate::node::internal_service_providers::authenticator::Authenticator;
pub use client_handling::active_clients::ActiveClientsStore;
pub use nym_gateway_stats_storage::PersistentStatsStorage;
pub use nym_gateway_storage::{
@@ -48,7 +49,7 @@ pub use nym_sdk::{NymApiTopologyProvider, NymApiTopologyProviderConfig, UserAgen
#[derive(Debug, Clone)]
pub struct LocalNetworkRequesterOpts {
pub config: nym_network_requester::Config,
pub config: network_requester::Config,
pub custom_mixnet_path: Option<PathBuf>,
}
-1
View File
@@ -102,7 +102,6 @@ nym-node-metrics = { path = "nym-node-metrics" }
# nodes:
nym-gateway = { path = "../gateway" }
nym-network-requester = { path = "../service-providers/network-requester" }
nym-ip-packet-router = { path = "../service-providers/ip-packet-router" }
@@ -5,7 +5,7 @@ use crate::cli::helpers::ConfigArgs;
use crate::config::upgrade_helpers::try_load_current_config;
use crate::node::helpers::load_ed25519_identity_public_key;
use crate::node::ServiceProvidersData;
use nym_network_requester::{CustomGatewayDetails, GatewayDetails, GatewayRegistration};
use nym_gateway::service_providers::{CustomGatewayDetails, GatewayDetails, GatewayRegistration};
use std::fs;
#[derive(Debug, clap::Args)]
+1
View File
@@ -8,6 +8,7 @@ use nym_gateway::node::{
LocalAuthenticatorOpts, LocalIpPacketRouterOpts, LocalNetworkRequesterOpts,
};
use nym_gateway::nym_authenticator;
use nym_gateway::nym_network_requester;
// a temporary solution until further refactoring is made
fn ephemeral_gateway_config(config: &Config) -> nym_gateway::config::Config {
@@ -7,7 +7,7 @@ use crate::{config::*, error::KeyIOFailure};
use nym_client_core_config_types::DebugConfig as ClientDebugConfig;
use nym_config::serde_helpers::de_maybe_port;
use nym_crypto::asymmetric::{ed25519, x25519};
use nym_network_requester::{
use nym_gateway::service_providers::{
set_active_gateway, setup_fs_gateways_storage, store_gateway_details, CustomGatewayDetails,
GatewayDetails,
};
+3 -3
View File
@@ -41,12 +41,12 @@ use crate::node::shared_network::{
use nym_bin_common::bin_info;
use nym_crypto::asymmetric::{ed25519, x25519};
use nym_gateway::node::{ActiveClientsStore, GatewayTasksBuilder};
use nym_mixnet_client::client::ActiveConnections;
use nym_mixnet_client::forwarder::MixForwardingSender;
use nym_network_requester::{
use nym_gateway::service_providers::{
set_active_gateway, setup_fs_gateways_storage, store_gateway_details, CustomGatewayDetails,
GatewayDetails, GatewayRegistration,
};
use nym_mixnet_client::client::ActiveConnections;
use nym_mixnet_client::forwarder::MixForwardingSender;
use nym_node_metrics::events::MetricEventsSender;
use nym_node_metrics::NymNodeMetrics;
use nym_node_requests::api::v1::node::models::{AnnouncePorts, NodeDescription};
@@ -25,7 +25,6 @@ nym-exit-policy = { path = "../../common/exit-policy" }
nym-id = { path = "../../common/nym-id" }
nym-ip-packet-requests = { path = "../../common/ip-packet-requests" }
nym-network-defaults = { path = "../../common/network-defaults" }
nym-network-requester = { path = "../network-requester" }
nym-sdk = { path = "../../sdk/rust/nym-sdk" }
nym-service-provider-requests-common = { path = "../../common/service-provider-requests-common" }
nym-service-providers-common = { path = "../common" }
@@ -1,39 +0,0 @@
# Copyright 2020 - Nym Technologies SA <contact@nymtech.net>
# SPDX-License-Identifier: GPL-3.0-only
[package]
name = "nym-network-requester"
license = "GPL-3.0"
version = "1.1.62"
authors.workspace = true
edition.workspace = true
rust-version = "1.70"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = { workspace = true }
async-trait = { workspace = true }
futures = { workspace = true }
humantime-serde = { workspace = true }
tracing = { workspace = true }
reqwest = { workspace = true, features = ["json"] }
serde = { workspace = true, features = ["derive"] }
thiserror = { workspace = true }
tokio = { workspace = true, features = ["net", "rt-multi-thread", "macros"] }
url = { workspace = true }
# internal
nym-bin-common = { path = "../../common/bin-common" }
nym-client-core = { path = "../../common/client-core", features = ["fs-gateways-storage", "fs-surb-storage"] }
nym-config = { path = "../../common/config" }
nym-network-defaults = { path = "../../common/network-defaults" }
nym-sdk = { path = "../../sdk/rust/nym-sdk" }
nym-service-providers-common = { path = "../common" }
nym-socks5-proxy-helpers = { path = "../../common/socks5/proxy-helpers" }
nym-socks5-requests = { path = "../../common/socks5/requests" }
nym-sphinx = { path = "../../common/nymsphinx" }
nym-task = { path = "../../common/task" }
nym-exit-policy = { path = "../../common/exit-policy", features = ["client"] }
nym-id = { path = "../../common/nym-id" }
@@ -1,42 +0,0 @@
Copyright 2022 - Nym Technologies SA <contact@nymtech.net>
SPDX-License-Identifier: GPL-3.0-only
-->
## License
Copyright (C) 2022 Nym Technologies SA <contact@nymtech.net>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
## Network requester
The network requester is used to interpret socks5 client messages that need to
be proxied to a running service i.e. a host and a port.
If you have a service that you want to expose to the mixnet, you'd need to
first run the native client and provide the client address to your users that
will use it in their socks5 configuration.
After starting the native client, start the network requester and configure it,
setting your service's endpoint in
`${HOME}/.nym/service-providers/network-requester/allowed.list`
Running in `open-proxy` mode allows any traffic to be proxied by the network
requester.
### Statistics service
The network requester can be ran as a gatherer of statistics for all
the services it proxies. For that, run the binary with the
`enable-statistics` flag enabled. Anonymized statistics are then sent to
a central server, through the mixnet.
@@ -1,74 +0,0 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
use nym_sdk::mixnet::{
IncludedSurbs, MixnetClient, MixnetMessageSender, Recipient, ReconstructedMessage,
};
use nym_service_providers_common::interface::{
ProviderInterfaceVersion, Request, Response, ResponseContent,
};
use nym_socks5_requests::{QueryRequest, Socks5ProtocolVersion, Socks5Request, Socks5Response};
fn parse_response(received: Vec<ReconstructedMessage>) -> Socks5Response {
assert_eq!(received.len(), 1);
let response: Response<Socks5Request> = Response::try_from_bytes(&received[0].message).unwrap();
match response.content {
ResponseContent::Control(control) => panic!("unexpected control response: {control:?}"),
ResponseContent::ProviderData(data) => data,
}
}
async fn wait_for_response(client: &mut MixnetClient) -> Socks5Response {
loop {
let next = client.wait_for_messages().await.unwrap();
if !next.is_empty() {
return parse_response(next);
}
}
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
//nym_bin_common::logging::setup_logging();
let mut client = MixnetClient::connect_new().await.unwrap();
let provider: Recipient = "AN8eLxYWFitCkMn92zim3PrPszxJZDYyFFKP7qnnAAew.8UAxL3LwQBis6WpM3GGXaqKGaVdnLCpGJWumHT6KNdTH@77TSuVU8d1oXKbPzjec2xh4i3Wj5WwUyy9Lr36sm8gZm".parse().unwrap();
let open_proxy_request = Request::new_provider_data(
ProviderInterfaceVersion::new_current(),
Socks5Request::new_query(
Socks5ProtocolVersion::new_current(),
QueryRequest::OpenProxy,
),
);
let description_request = Request::new_provider_data(
ProviderInterfaceVersion::new_current(),
Socks5Request::new_query(
Socks5ProtocolVersion::new_current(),
QueryRequest::Description,
),
);
println!("Sending 'OpenProxy' query...");
client
.send_message(
provider,
open_proxy_request.into_bytes(),
IncludedSurbs::new(10),
)
.await?;
let response = wait_for_response(&mut client).await;
println!("response to 'OpenProxy' query: {response:#?}");
println!("Sending 'Description' query...");
client
.send_message(
provider,
description_request.into_bytes(),
IncludedSurbs::none(),
)
.await?;
let response = wait_for_response(&mut client).await;
println!("response to 'Description' query: {response:#?}");
client.disconnect().await;
Ok(())
}
@@ -1,33 +0,0 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
pub mod config;
pub mod core;
pub mod error;
mod reply;
pub mod request_filter;
mod socks5;
pub use crate::core::{NRServiceProvider, NRServiceProviderBuilder};
pub use config::Config;
pub use nym_client_core::{
client::{
base_client::{
non_wasm_helpers::{setup_fs_gateways_storage, setup_fs_reply_surb_backend},
storage::{
gateways_storage::{
CustomGatewayDetails, GatewayDetails, GatewayRegistration, RemoteGatewayDetails,
},
helpers::{set_active_gateway, store_gateway_details},
GatewaysDetailsStore, OnDiskGatewaysDetails, OnDiskPersistent,
},
},
key_manager::persistence::OnDiskKeys,
mix_traffic::transceiver::*,
},
init::{
generate_new_client_keys, setup_gateway,
types::{GatewaySelectionSpecification, GatewaySetup, InitResults, InitialisationResult},
},
};
pub use request_filter::RequestFilter;