add necessary improvements

This commit is contained in:
Y. T. Chung
2016-10-21 02:19:36 +08:00
parent 5462e5ba28
commit 05d3dc2f87
4 changed files with 16 additions and 13 deletions

View File

@@ -55,8 +55,8 @@ Create a shadowsocks' configuration file. Example
"timeout": 300,
"method": "aes-256-cfb",
"http_local_port": 10240,
"http_local_address": "127.0.0.1",
"local_http_port": 10240,
"local_http_address": "127.0.0.1"
}
```
@@ -84,8 +84,8 @@ In shadowsocks-rust, we also have an extended configuration file format, which i
"local_port": 8388,
"local_address": "127.0.0.1",
"http_local_port": 10240,
"http_local_address": "127.0.0.1",
"local_http_port": 10240,
"local_http_address": "127.0.0.1"
}
```

View File

@@ -23,6 +23,7 @@
use std::io::{self, Read, Write};
use std::net::SocketAddr;
use std::mem;
pub use self::local::RelayLocal;
pub use self::server::RelayServer;
@@ -42,7 +43,7 @@ pub trait Relay {
}
fn copy_once<R: Read, W: Write>(r: &mut R, w: &mut W) -> io::Result<usize> {
let mut buf = [0u8; 2048];
let mut buf: [u8; 4096] = unsafe { mem::uninitialized() };
let len = match r.read(&mut buf) {
Ok(0) => return Ok(0),
Ok(len) => len,
@@ -52,11 +53,15 @@ fn copy_once<R: Read, W: Write>(r: &mut R, w: &mut W) -> io::Result<usize> {
}
fn copy_exact<R: Read, W: Write>(r: &mut R, w: &mut W, len: usize) -> io::Result<()> {
let mut buf = [0u8; 2048];
let mut buf: [u8; 4096] = unsafe { mem::uninitialized() };
let mut remain = len;
while remain > 0 {
let bufl = if remain > buf.len() { buf.len() } else { remain };
let bufl = if remain > buf.len() {
buf.len()
} else {
remain
};
let len = match r.read(&mut buf[..bufl]) {
Ok(0) => break,
Ok(len) => {

View File

@@ -264,7 +264,7 @@ impl TcpRelayLocal {
const HANDSHAKE: &'static [u8] = b"HTTP/1.1 200 Connection Established\r\n\r\n";
if let Err(err) = local_writer.write_all(HANDSHAKE) {
if let Err(err) = local_writer.write_all(HANDSHAKE).and_then(|_| local_writer.flush()) {
error!("Failed to send handshake: {:?}", err);
return Err(err);
}
@@ -282,7 +282,7 @@ impl TcpRelayLocal {
trace!("HTTP Connect: Connected remote server");
try!(encrypt_stream.write_all(remain));
try!(encrypt_stream.write_all(remain).and_then(|_| encrypt_stream.flush()));
let addr_cloned = addr.clone();

View File

@@ -47,7 +47,6 @@ fn connect_proxy_server(server_addr: &SocketAddr,
// Encrypt data to remote server
// Send initialize vector to remote and create encryptor
let mut encrypt_stream = {
let local_iv = encrypt_method.gen_init_vec();
@@ -73,13 +72,12 @@ fn connect_proxy_server(server_addr: &SocketAddr,
// Send relay address to remote
let mut addr_buf = Vec::new();
relay_addr.write_to(&mut addr_buf).unwrap();
if let Err(err) = encrypt_stream.write_all(&addr_buf) {
try!(relay_addr.write_to(&mut addr_buf));
if let Err(err) = encrypt_stream.write_all(&addr_buf).and_then(|_| encrypt_stream.flush()) {
error!("Error occurs while writing address: {}", err);
return Err(err);
}
// Decrypt data from remote server
let remote_iv = {