Skip to content

Commit 8a70cb4

Browse files
committed
Bump version 0.5.11
1 parent 0ec2abb commit 8a70cb4

File tree

3 files changed

+98
-4
lines changed

3 files changed

+98
-4
lines changed

.github/workflows/release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ jobs:
6060
cargo build --all-features --release --examples --target ${{ matrix.target }}
6161
fi
6262
if [[ "${{ matrix.host_os }}" == "windows-latest" ]]; then
63-
powershell Compress-Archive -Path target/${{ matrix.target }}/release/examples/dns2socks.exe, target/${{ matrix.target }}/release/examples/s5-server.exe, target/${{ matrix.target }}/release/examples/udp-client.exe, target/${{ matrix.target }}/release/examples/dns-query.exe -DestinationPath release/socks5-utilities-${{ matrix.target }}.zip
63+
powershell Compress-Archive -Path target/${{ matrix.target }}/release/examples/dns2socks.exe, target/${{ matrix.target }}/release/examples/s5-server.exe, target/${{ matrix.target }}/release/examples/udp-client.exe, target/${{ matrix.target }}/release/examples/dns-query.exe, target/${{ matrix.target }}/release/examples/echo-server.exe -DestinationPath release/socks5-utilities-${{ matrix.target }}.zip
6464
elif [[ "${{ matrix.host_os }}" == "macos-latest" ]]; then
65-
zip -j release/socks5-utilities-${{ matrix.target }}.zip target/${{ matrix.target }}/release/examples/dns2socks target/${{ matrix.target }}/release/examples/s5-server target/${{ matrix.target }}/release/examples/udp-client target/${{ matrix.target }}/release/examples/dns-query
65+
zip -j release/socks5-utilities-${{ matrix.target }}.zip target/${{ matrix.target }}/release/examples/dns2socks target/${{ matrix.target }}/release/examples/s5-server target/${{ matrix.target }}/release/examples/udp-client target/${{ matrix.target }}/release/examples/dns-query target/${{ matrix.target }}/release/examples/echo-server
6666
elif [[ "${{ matrix.host_os }}" == "ubuntu-latest" ]]; then
67-
zip -j release/socks5-utilities-${{ matrix.target }}.zip target/${{ matrix.target }}/release/examples/dns2socks target/${{ matrix.target }}/release/examples/s5-server target/${{ matrix.target }}/release/examples/udp-client target/${{ matrix.target }}/release/examples/dns-query
67+
zip -j release/socks5-utilities-${{ matrix.target }}.zip target/${{ matrix.target }}/release/examples/dns2socks target/${{ matrix.target }}/release/examples/s5-server target/${{ matrix.target }}/release/examples/udp-client target/${{ matrix.target }}/release/examples/dns-query target/${{ matrix.target }}/release/examples/echo-server
6868
fi
6969
7070
- name: Upload

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "socks5-impl"
3-
version = "0.5.10"
3+
version = "0.5.11"
44
authors = ["ssrlive <[email protected]>"]
55
description = "Fundamental abstractions and async read / write functions for SOCKS5 protocol and Relatively low-level asynchronized SOCKS5 server implementation based on tokio"
66
categories = ["network-programming", "asynchronous"]

examples/echo-server.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
use std::{error::Error, net::SocketAddr};
2+
use tokio::{
3+
io::{AsyncReadExt, AsyncWriteExt},
4+
net::{TcpListener, ToSocketAddrs, UdpSocket},
5+
};
6+
7+
/// Simple echo server.
8+
#[derive(clap::Parser, Debug, Clone, PartialEq, Eq)]
9+
#[command(author, version, about = "Simple echo server.", long_about = None)]
10+
pub struct CmdOpt {
11+
/// Echo server listen address.
12+
#[clap(short, long, value_name = "address:port", default_value = "127.0.0.1:8080")]
13+
listen_addr: SocketAddr,
14+
15+
/// timeout for TCP connection
16+
#[clap(short, long, value_name = "seconds", default_value = "10")]
17+
tcp_timeout: u64,
18+
}
19+
20+
async fn tcp_main<A: ToSocketAddrs>(addr: A, tcp_timeout: u64) -> std::io::Result<()> {
21+
let listener = TcpListener::bind(addr).await?;
22+
log::info!("[TCP] listening on: {}", listener.local_addr()?);
23+
loop {
24+
let (mut socket, peer) = listener.accept().await?;
25+
tokio::spawn(async move {
26+
let block = async move {
27+
let mut buf = vec![0; 1024];
28+
log::info!("[TCP] incoming peer {}", peer);
29+
loop {
30+
let duration = std::time::Duration::from_secs(tcp_timeout);
31+
let n = tokio::time::timeout(duration, socket.read(&mut buf)).await??;
32+
if n == 0 {
33+
log::info!("[TCP] {} exit", peer);
34+
break;
35+
}
36+
let amt = socket.write(&buf[0..n]).await?;
37+
log::info!("[TCP] Echoed {}/{} bytes to {}", amt, n, peer);
38+
}
39+
Ok::<(), std::io::Error>(())
40+
};
41+
if let Err(err) = block.await {
42+
log::info!("[TCP] {}", err);
43+
}
44+
});
45+
}
46+
}
47+
48+
async fn udp_main<A: ToSocketAddrs>(addr: A) -> std::io::Result<()> {
49+
let socket = UdpSocket::bind(&addr).await?;
50+
log::info!("[UDP] Listening on: {}", socket.local_addr()?);
51+
52+
let mut buf = vec![0; 1024];
53+
let mut to_send = None;
54+
55+
loop {
56+
if let Some((size, peer)) = to_send {
57+
let amt = socket.send_to(&buf[..size], &peer).await?;
58+
log::info!("[UDP] Echoed {}/{} bytes to {}", amt, size, peer);
59+
}
60+
61+
to_send = Some(socket.recv_from(&mut buf).await?);
62+
}
63+
}
64+
65+
#[tokio::main]
66+
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
67+
let opt: CmdOpt = clap::Parser::parse();
68+
69+
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("trace")).init();
70+
71+
let addr = opt.listen_addr;
72+
let _tcp = tokio::spawn(async move {
73+
tcp_main(&addr, opt.tcp_timeout).await?;
74+
Ok::<(), std::io::Error>(())
75+
});
76+
77+
let _udp = tokio::spawn(async move {
78+
udp_main(&addr).await?;
79+
Ok::<(), std::io::Error>(())
80+
});
81+
82+
let (tx, mut rx) = tokio::sync::mpsc::channel::<()>(1);
83+
84+
ctrlc2::set_async_handler(async move {
85+
tx.send(()).await.unwrap();
86+
log::info!("Ctrl-C received, shutting down...");
87+
})
88+
.await;
89+
90+
rx.recv().await.unwrap();
91+
log::info!("Exiting...");
92+
93+
Ok(())
94+
}

0 commit comments

Comments
 (0)