feat: separate `noise` as a crate feature

This commit is contained in:
Yujia Qiao 2021-12-25 19:01:01 +08:00 committed by Yujia Qiao
parent a927d0001e
commit 48f0514b6c
5 changed files with 36 additions and 12 deletions

View File

@ -9,10 +9,11 @@ repository = "https://github.com/rapiz1/rathole"
readme = "README.md"
[features]
default = ["tls", "server", "client"]
tls = ["tokio-native-tls"]
default = ["tls", "server", "client", "noise"]
server = []
client = []
tls = ["tokio-native-tls"]
noise = ["snowstorm", "base64"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[profile.bench]
@ -41,5 +42,5 @@ socket2 = "0.4"
fdlimit = "0.2.1"
tokio-native-tls = { version = "0.3.0", optional = true }
async-trait = "0.1.52"
snowstorm = "0.1.3"
base64 = "0.13.0"
snowstorm = { version = "0.1.3", optional = true }
base64 = { version = "0.13.0", optional = true }

View File

@ -5,7 +5,7 @@ use crate::protocol::{
self, read_ack, read_control_cmd, read_data_cmd, read_hello, Ack, Auth, ControlChannelCmd,
DataChannelCmd, UdpTraffic, CURRENT_PROTO_VRESION, HASH_WIDTH_IN_BYTES,
};
use crate::transport::{NoiseTransport, TcpTransport, Transport};
use crate::transport::{TcpTransport, Transport};
use anyhow::{anyhow, bail, Context, Result};
use backoff::ExponentialBackoff;
use bytes::{Bytes, BytesMut};
@ -18,6 +18,8 @@ use tokio::sync::{broadcast, mpsc, oneshot, RwLock};
use tokio::time::{self, Duration};
use tracing::{debug, error, info, instrument, Instrument, Span};
#[cfg(feature = "noise")]
use crate::transport::NoiseTransport;
#[cfg(feature = "tls")]
use crate::transport::TlsTransport;
@ -47,8 +49,13 @@ pub async fn run_client(config: &Config, shutdown_rx: broadcast::Receiver<bool>)
crate::helper::feature_not_compile("tls")
}
TransportType::Noise => {
let mut client = Client::<NoiseTransport>::from(config).await?;
client.run(shutdown_rx).await
#[cfg(feature = "noise")]
{
let mut client = Client::<NoiseTransport>::from(config).await?;
client.run(shutdown_rx).await
}
#[cfg(not(feature = "noise"))]
crate::helper::feature_not_compile("noise")
}
}
}

View File

@ -34,6 +34,7 @@ fn get_str_from_keypair_type(curve: KeypairType) -> &'static str {
}
}
#[cfg(feature = "noise")]
fn genkey(curve: Option<KeypairType>) -> Result<()> {
let curve = curve.unwrap_or(DEFAULT_CURVE);
let builder = snowstorm::Builder::new(
@ -50,6 +51,11 @@ fn genkey(curve: Option<KeypairType>) -> Result<()> {
Ok(())
}
#[cfg(not(feature = "noise"))]
fn genkey(curve: Option<KeypairType>) -> Result<()> {
crate::helper::feature_not_compile("nosie")
}
pub async fn run(args: &Cli, shutdown_rx: broadcast::Receiver<bool>) -> Result<()> {
if args.genkey.is_some() {
return genkey(args.genkey.unwrap());

View File

@ -6,9 +6,7 @@ use crate::protocol::{
self, read_auth, read_hello, Ack, ControlChannelCmd, DataChannelCmd, Hello, UdpTraffic,
HASH_WIDTH_IN_BYTES,
};
#[cfg(feature = "tls")]
use crate::transport::TlsTransport;
use crate::transport::{NoiseTransport, TcpTransport, Transport};
use crate::transport::{TcpTransport, Transport};
use anyhow::{anyhow, bail, Context, Result};
use backoff::backoff::Backoff;
use backoff::ExponentialBackoff;
@ -24,6 +22,11 @@ use tokio::sync::{broadcast, mpsc, RwLock};
use tokio::time;
use tracing::{debug, error, info, info_span, instrument, warn, Instrument, Span};
#[cfg(feature = "noise")]
use crate::transport::NoiseTransport;
#[cfg(feature = "tls")]
use crate::transport::TlsTransport;
type ServiceDigest = protocol::Digest; // SHA256 of a service name
type Nonce = protocol::Digest; // Also called `session_key`
@ -56,8 +59,13 @@ pub async fn run_server(config: &Config, shutdown_rx: broadcast::Receiver<bool>)
crate::helper::feature_not_compile("tls")
}
TransportType::Noise => {
let mut server = Server::<NoiseTransport>::from(config).await?;
server.run(shutdown_rx).await?;
#[cfg(feature = "noise")]
{
let mut server = Server::<NoiseTransport>::from(config).await?;
server.run(shutdown_rx).await?;
}
#[cfg(not(feature = "noise"))]
crate::helper::feature_not_compile("noise")
}
}

View File

@ -27,5 +27,7 @@ mod tls;
#[cfg(feature = "tls")]
pub use tls::TlsTransport;
#[cfg(feature = "noise")]
mod noise;
#[cfg(feature = "noise")]
pub use noise::NoiseTransport;