1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use std::io;
use tokio_core::reactor::Core;
use futures::Future;
use relay::udprelay::server::run as run_udp;
use relay::tcprelay::server::run as run_tcp;
use config::Config;
use relay::Context;
pub fn run(config: Config) -> io::Result<()> {
let mut lp = try!(Core::new());
let handle = lp.handle();
let enable_udp = config.enable_udp;
let context = Context::new(handle, config);
Context::set(&context, move || if enable_udp {
let tcp_fut = run_tcp();
let udp_fut = run_udp();
lp.run(tcp_fut.join(udp_fut).map(|_| ()))
} else {
let tcp_fut = run_tcp();
lp.run(tcp_fut)
})
}