diff --git a/src/crypto/table.rs b/src/crypto/table.rs index f7db8416..c8708a07 100644 --- a/src/crypto/table.rs +++ b/src/crypto/table.rs @@ -50,7 +50,7 @@ impl TableCipher { for i in range(1, 1024) { table.as_mut_slice().sort_by(|x, y| { - let sub = (a % (x + i) - a % (y + i)) as i64; + let sub = (a % (*x + i) - a % (*y + i)) as i64; sub.partial_cmp(&0i64).unwrap() }) diff --git a/src/relay/tcprelay/local.rs b/src/relay/tcprelay/local.rs index 36b23dab..044086a9 100644 --- a/src/relay/tcprelay/local.rs +++ b/src/relay/tcprelay/local.rs @@ -106,20 +106,21 @@ impl TcpRelayLocal { socks5::TcpConnect => { info!("CONNECT {}", addr); - let mut remote_stream = TcpStream::connect(server_addr.ip.to_string().as_slice(), - server_addr.port).unwrap_or_else(|err| { - match err.kind { - ConnectionAborted | ConnectionReset | ConnectionRefused | ConnectionFailed => { - socks5::TcpResponseHeader::new(socks5::HostUnreachable, addr.clone()) - .write_to(&mut stream).unwrap(); - }, - _ => { - socks5::TcpResponseHeader::new(socks5::NetworkUnreachable, addr.clone()) - .write_to(&mut stream).unwrap(); + let mut remote_stream = TcpStream::connect( + format!("{}:{}", server_addr.ip, server_addr.port).as_slice()) + .unwrap_or_else(|err| { + match err.kind { + ConnectionAborted | ConnectionReset | ConnectionRefused | ConnectionFailed => { + socks5::TcpResponseHeader::new(socks5::HostUnreachable, addr.clone()) + .write_to(&mut stream).unwrap(); + }, + _ => { + socks5::TcpResponseHeader::new(socks5::NetworkUnreachable, addr.clone()) + .write_to(&mut stream).unwrap(); + } } - } - panic!("Failed to connect remote server: {}", err); - }); + panic!("Failed to connect remote server: {}", err); + }); let mut cipher = cipher::with_name(encrypt_method.as_slice(), password.as_slice().as_bytes()) @@ -208,7 +209,8 @@ impl Relay for TcpRelayLocal { let local_conf = self.config.local.unwrap(); - let mut acceptor = match TcpListener::bind(local_conf.ip.to_string().as_slice(), local_conf.port).listen() { + let mut acceptor = match TcpListener::bind( + format!("{}:{}", local_conf.ip, local_conf.port).as_slice()).listen() { Ok(acpt) => acpt, Err(e) => { panic!("Error occurs while listening local address: {}", e.to_string()); diff --git a/src/relay/tcprelay/server.rs b/src/relay/tcprelay/server.rs index 800693a0..1c68ac60 100644 --- a/src/relay/tcprelay/server.rs +++ b/src/relay/tcprelay/server.rs @@ -60,8 +60,8 @@ impl TcpRelayServer { s.timeout, s.dns_cache_capacity); - let mut acceptor = TcpListener::bind(server_addr.ip.to_string().as_slice(), - server_addr.port).listen().unwrap(); + let mut acceptor = TcpListener::bind(format!("{}:{}", server_addr.ip, + server_addr.port).as_slice()).listen().unwrap(); info!("Shadowsocks listening on {}", server_addr);