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
use std::rc::Rc;
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;
pub fn run(config: Config) -> io::Result<()> {
let mut lp = try!(Core::new());
let handle = lp.handle();
let config = Rc::new(config);
let tcp_fut = run_tcp(config.clone(), handle.clone());
if config.enable_udp {
lp.run(tcp_fut.join(run_udp(config, handle)).map(|_| ()))
} else {
lp.run(tcp_fut)
}
}