Skip to content

Commit da6d7cf

Browse files
committed
Clean codes.
1 parent 35eba4d commit da6d7cf

File tree

3 files changed

+51
-53
lines changed

3 files changed

+51
-53
lines changed

readme.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
## Introduction
2+
3+
realm is a simple, high performance relay server written in rust.
4+
5+
## Features
6+
- Zero configuration. Setup and run in one command.
7+
- Concurrency. Bidirectional concurrent traffic leads to high performance.
8+
- Low resources cost.

src/main.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
use std::thread;
22
// use std::io::Read;
33
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
4-
use std::net::{TcpListener, TcpStream, Shutdown};
4+
use std::net::{Shutdown, TcpListener, TcpStream};
55
use structopt::StructOpt;
66

77
mod relay;
88

9-
10-
119
/// Search for a pattern in a file and display the lines that contain it.
1210
#[derive(StructOpt)]
1311
#[structopt(name = "example", about = "An example of StructOpt usage.")]
@@ -20,8 +18,6 @@ struct Cli {
2018
remote: String,
2119
}
2220

23-
24-
2521
fn main() {
2622
let cli = Cli::from_args();
2723
let client_socket: SocketAddr = cli.client.parse().expect("Unable to parse client address");

src/relay.rs

+42-48
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
use std::thread;
2-
use std::sync::mpsc;
3-
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
4-
use std::net::{TcpListener, TcpStream, Shutdown};
51
use std::io::prelude::*;
2+
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
3+
use std::net::{Shutdown, TcpListener, TcpStream};
4+
use std::sync::mpsc;
5+
use std::thread;
66
use std::time::Duration;
77

88
const BUFFER_SIZE: usize = 1024 * 2;
99

10-
1110
pub fn start(client_socket: SocketAddr, remote_socket: SocketAddr) {
1211
let listener = TcpListener::bind(client_socket).unwrap_or_else(|err| {
1312
println!("Failed to start listener.");
@@ -20,83 +19,83 @@ pub fn start(client_socket: SocketAddr, remote_socket: SocketAddr) {
2019
Ok(stream) => {
2120
thread::spawn(move || handle_client(stream, remote_socket));
2221
}
23-
2422
}
2523
}
2624
}
2725

2826
fn handle_client(mut stream: TcpStream, remote_socket: SocketAddr) {
29-
3027
let (forward_tx, forward_rx) = mpsc::channel();
3128
let (backward_tx, backward_rx) = mpsc::channel();
3229

33-
// stream.set_read_timeout(None).expect("set_read_timeout call failed");
34-
// stream.set_write_timeout(None).expect("set_read_timeout call failed");
3530
let mut cl_stream = stream;
36-
let mut lc_stream = cl_stream.try_clone().expect("Failed to clone client stream");
31+
let mut lc_stream = cl_stream
32+
.try_clone()
33+
.expect("Failed to clone client stream");
3734

38-
let mut lr_stream = TcpStream::connect(remote_socket).expect("Failed to connect to remote host");
39-
// lr_stream.set_read_timeout(None).expect("set_read_timeout call failed");
40-
// lr_stream.set_write_timeout(None).expect("set_read_timeout call failed");
41-
let mut rl_stream = lr_stream.try_clone().expect("Failed to clone remote stream");
35+
let mut lr_stream =
36+
TcpStream::connect(remote_socket).expect("Failed to connect to remote host");
37+
let mut rl_stream = lr_stream
38+
.try_clone()
39+
.expect("Failed to clone remote stream");
4240

43-
44-
thread::spawn(move || { // client -> local
45-
let mut data = [0 as u8; BUFFER_SIZE]; // using 2048 byte buffer
41+
thread::spawn(move || {
42+
// client -> local
43+
let mut data = [0 as u8; BUFFER_SIZE]; // using 2048 byte buffer
4644
loop {
4745
match cl_stream.read(&mut data) {
4846
Ok(size) => {
49-
if let Err(_) = forward_tx.send((data, size)) {break}
47+
if let Err(_) = forward_tx.send((data, size)) {
48+
break;
49+
}
5050
if size == 0 {
51-
// thread::sleep(Duration::from_millis(1));
52-
break
51+
break;
5352
}
54-
},
53+
}
5554
Err(e) => {
5655
forward_tx.send((data, 0)).unwrap();
57-
// println!("Failed to read from client, {}", e);
58-
break
56+
break;
5957
}
6058
}
6159
}
62-
cl_stream.shutdown(Shutdown::Read);
60+
cl_stream.shutdown(Shutdown::Read);
6361
});
6462

65-
thread::spawn(move || { // local -> remote
63+
thread::spawn(move || {
64+
// local -> remote
6665
loop {
6766
if let Ok((mut data, size)) = forward_rx.recv() {
6867
if size == 0 {
69-
break
68+
break;
7069
}
7170
if let Err(_) = lr_stream.write(&mut data[..size]) {
72-
break
71+
break;
7372
}
7473
} else {
75-
break
74+
break;
7675
}
77-
7876
}
7977
lr_stream.shutdown(Shutdown::Write);
80-
return
78+
return;
8179
});
8280

83-
thread::spawn(move || { // remote -> local
81+
thread::spawn(move || {
82+
// remote -> local
8483
let mut data = [0 as u8; BUFFER_SIZE];
8584
loop {
8685
match rl_stream.read(&mut data) {
8786
Ok(size) => {
88-
if let Err(_) = backward_tx.send((data, size)) {break}
87+
if let Err(_) = backward_tx.send((data, size)) {
88+
break;
89+
}
8990
if size == 0 {
90-
// thread::sleep(Duration::from_millis(1));
91-
break
91+
break;
9292
}
93-
},
93+
}
9494
Err(e) => {
9595
backward_tx.send((data, 0)).unwrap();
96-
// println!("Failed to read from remote, {}", e);
97-
break
96+
break;
9897
}
99-
}
98+
}
10099
}
101100
rl_stream.shutdown(Shutdown::Read);
102101
});
@@ -105,20 +104,15 @@ fn handle_client(mut stream: TcpStream, remote_socket: SocketAddr) {
105104
loop {
106105
if let Ok((mut data, size)) = backward_rx.recv() {
107106
if size == 0 {
108-
break
107+
break;
109108
}
110109
if let Err(_) = lc_stream.write(&mut data[..size]) {
111-
break
110+
break;
112111
}
113112
} else {
114-
break
113+
break;
115114
}
116-
117115
}
118-
lc_stream.shutdown(Shutdown::Write);
119-
return
116+
lc_stream.shutdown(Shutdown::Write);
117+
return;
120118
}
121-
122-
123-
124-

0 commit comments

Comments
 (0)