Bump version v7.9.1

This commit is contained in:
Σrebe - Romain GERARD 2023-11-02 09:26:31 +01:00
parent d8747443d6
commit 0a9cb00342
No known key found for this signature in database
GPG key ID: 7A42B4B97E0332F4
4 changed files with 22 additions and 21 deletions

3
Cargo.lock generated
View file

@ -1608,7 +1608,7 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]] [[package]]
name = "wstunnel" name = "wstunnel"
version = "7.9.0" version = "7.9.1"
dependencies = [ dependencies = [
"ahash", "ahash",
"anyhow", "anyhow",
@ -1631,6 +1631,7 @@ dependencies = [
"rustls-pemfile", "rustls-pemfile",
"scopeguard", "scopeguard",
"serde", "serde",
"socket2 0.5.5",
"testcontainers", "testcontainers",
"tokio", "tokio",
"tokio-fd", "tokio-fd",

View file

@ -1,6 +1,6 @@
[package] [package]
name = "wstunnel" name = "wstunnel"
version = "7.9.0" version = "7.9.1"
edition = "2021" edition = "2021"
repository = "https://github.com/erebe/wstunnel.git" repository = "https://github.com/erebe/wstunnel.git"
@ -39,6 +39,7 @@ log = "0.4.20"
bb8 = { version = "0.8", features = [] } bb8 = { version = "0.8", features = [] }
async-trait = "0.1.74" async-trait = "0.1.74"
socket2 = { version = "0.5.5", features = [] }
[target.'cfg(target_family = "unix")'.dependencies] [target.'cfg(target_family = "unix")'.dependencies]
tokio-fd = "0.3.0" tokio-fd = "0.3.0"

View file

@ -6,6 +6,7 @@ use std::time::Duration;
use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, ReadHalf, WriteHalf}; use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, ReadHalf, WriteHalf};
use tokio::select; use tokio::select;
use tokio::sync::oneshot; use tokio::sync::oneshot;
use tokio::time::Instant;
use tracing::log::debug; use tracing::log::debug;
use tracing::{error, info, trace, warn}; use tracing::{error, info, trace, warn};
@ -24,7 +25,10 @@ pub(super) async fn propagate_read(
// We do our own pin_mut! to avoid shadowing timeout and be able to reset it, on next loop iteration // We do our own pin_mut! to avoid shadowing timeout and be able to reset it, on next loop iteration
// We reuse the future to avoid creating a timer in the tight loop // We reuse the future to avoid creating a timer in the tight loop
let timeout = tokio::time::interval_at(tokio::time::Instant::now() + ping_frequency, ping_frequency); let start_at = Instant::now()
.checked_add(ping_frequency)
.unwrap_or(Instant::now() + Duration::from_secs(3600 * 24));
let timeout = tokio::time::interval_at(start_at, ping_frequency);
pin_mut!(timeout); pin_mut!(timeout);
pin_mut!(local_rx); pin_mut!(local_rx);

View file

@ -8,7 +8,6 @@ use std::future::Future;
use std::io; use std::io;
use std::io::{Error, ErrorKind}; use std::io::{Error, ErrorKind};
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}; use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
use std::os::fd::AsRawFd;
use log::warn; use log::warn;
use std::pin::{pin, Pin}; use std::pin::{pin, Pin};
@ -36,24 +35,20 @@ struct UdpServer {
} }
impl UdpServer { impl UdpServer {
pub fn new(listener: Arc<UdpSocket>, timeout: Option<Duration>) -> Self { pub fn new(listener: UdpSocket, timeout: Option<Duration>) -> Self {
unsafe { let socket = socket2::Socket::from(listener.into_std().unwrap());
// Increase socket buffer length to 64MB
let buf_len: libc::c_int = 64 * 1024 * 1024; // Increase receive buffer
let ret = libc::setsockopt( if let Err(err) = socket.set_recv_buffer_size(64 * 1024 * 1024) {
listener.as_raw_fd(), warn!("Cannot set UDP server recv buffer: {}", err);
libc::SOL_SOCKET, }
libc::SO_RCVBUF,
&buf_len as *const _ as *const libc::c_void, if let Err(err) = socket.set_send_buffer_size(64 * 1024 * 1024) {
std::mem::size_of_val(&buf_len) as libc::socklen_t, warn!("Cannot set UDP server recv buffer: {}", err);
);
if ret != 0 {
warn!("Cannot set UDP server recv buffer: {}", io::Error::last_os_error());
} }
};
Self { Self {
listener, listener: Arc::new(UdpSocket::from_std(socket.into()).unwrap()),
peers: HashMap::with_hasher(ahash::RandomState::new()), peers: HashMap::with_hasher(ahash::RandomState::new()),
keys_to_delete: Default::default(), keys_to_delete: Default::default(),
cnx_timeout: timeout, cnx_timeout: timeout,
@ -210,7 +205,7 @@ pub async fn run_server(
.await .await
.with_context(|| format!("Cannot create UDP server {:?}", bind))?; .with_context(|| format!("Cannot create UDP server {:?}", bind))?;
let udp_server = UdpServer::new(Arc::new(listener), timeout); let udp_server = UdpServer::new(listener, timeout);
let stream = stream::unfold((udp_server, None), |(mut server, peer_with_data)| async move { let stream = stream::unfold((udp_server, None), |(mut server, peer_with_data)| async move {
// New returned peer hasn't read its data yet, await for it. // New returned peer hasn't read its data yet, await for it.
if let Some(await_peer) = peer_with_data { if let Some(await_peer) = peer_with_data {