mirror of
https://github.com/shadowsocks/shadowsocks-rust.git
synced 2026-02-09 01:59:16 +08:00
695
Cargo.lock
generated
695
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
20
Cargo.toml
20
Cargo.toml
@@ -31,34 +31,34 @@ default = ["sodium"]
|
||||
sodium = ["libsodium-ffi"]
|
||||
|
||||
[dependencies]
|
||||
log = "0.3"
|
||||
log = "0.4"
|
||||
byteorder = "1.1"
|
||||
rand = "0.3"
|
||||
rand = "0.4"
|
||||
time = "0.1"
|
||||
clap = "2"
|
||||
env_logger = "0.4"
|
||||
env_logger = "0.5.0-rc.1"
|
||||
openssl = "0.9"
|
||||
libc = "0.2"
|
||||
futures = "0.1"
|
||||
tokio-core = "0.1"
|
||||
tokio-io = "0.1"
|
||||
lazy_static = "0.2"
|
||||
lazy_static = "1.0"
|
||||
serde_json = "1.0"
|
||||
base64 = "0.6"
|
||||
base64 = "0.9"
|
||||
bytes = "0.4"
|
||||
scoped-tls = "0.1"
|
||||
ring = "0.11"
|
||||
md-5 = "0.5"
|
||||
digest = "0.6"
|
||||
ring = "0.13.0-alpha"
|
||||
md-5 = "0.7"
|
||||
digest = "0.7"
|
||||
typenum = "1.9"
|
||||
qrcode = { version = "0.4", default-features = false }
|
||||
qrcode = { version = "0.5", default-features = false }
|
||||
subprocess = "0.1"
|
||||
serde_urlencoded = "0.5"
|
||||
url = "1.5"
|
||||
byte_string = "1.0"
|
||||
libsodium-ffi = { version = "0.1", optional = true }
|
||||
futures-cpupool = "0.1"
|
||||
miscreant = { version = "0.2", optional = true }
|
||||
miscreant = { version = "0.3", optional = true }
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
tokio-signal = "0.1"
|
||||
|
||||
@@ -15,30 +15,32 @@ extern crate time;
|
||||
use clap::{App, Arg};
|
||||
|
||||
use std::env;
|
||||
use std::io::{self, Write};
|
||||
use std::net::SocketAddr;
|
||||
|
||||
use env_logger::LogBuilder;
|
||||
use log::{LogLevelFilter, LogRecord};
|
||||
use env_logger::Builder;
|
||||
use env_logger::fmt::Formatter;
|
||||
use log::{LevelFilter, Record};
|
||||
|
||||
use shadowsocks::{Config, ConfigType, ServerAddr, ServerConfig, run_local};
|
||||
use shadowsocks::plugin::PluginConfig;
|
||||
|
||||
fn log_time(without_time: bool, record: &LogRecord) -> String {
|
||||
fn log_time(fmt: &mut Formatter, without_time: bool, record: &Record) -> io::Result<()> {
|
||||
if without_time {
|
||||
format!("[{}] {}", record.level(), record.args())
|
||||
writeln!(fmt, "[{}] {}", record.level(), record.args())
|
||||
} else {
|
||||
format!("[{}][{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S.%f").unwrap(), record.level(), record.args())
|
||||
writeln!(fmt, "[{}][{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S.%f").unwrap(), record.level(), record.args())
|
||||
}
|
||||
}
|
||||
|
||||
fn log_time_module(without_time: bool, record: &LogRecord) -> String {
|
||||
fn log_time_module(fmt: &mut Formatter, without_time: bool, record: &Record) -> io::Result<()> {
|
||||
if without_time {
|
||||
format!("[{}] [{}] {}", record.level(), record.location().module_path(), record.args())
|
||||
writeln!(fmt, "[{}] [{}] {}", record.level(), record.module_path().unwrap_or("*"), record.args())
|
||||
} else {
|
||||
format!("[{}][{}] [{}] {}",
|
||||
writeln!(fmt, "[{}][{}] [{}] {}",
|
||||
time::now().strftime("%Y-%m-%d][%H:%M:%S.%f").unwrap(),
|
||||
record.level(),
|
||||
record.location().module_path(),
|
||||
record.module_path().unwrap_or("*"),
|
||||
record.args())
|
||||
}
|
||||
}
|
||||
@@ -97,8 +99,8 @@ fn main() {
|
||||
.help("Server address in SIP002 URL"))
|
||||
.get_matches();
|
||||
|
||||
let mut log_builder = LogBuilder::new();
|
||||
log_builder.filter(None, LogLevelFilter::Info);
|
||||
let mut log_builder = Builder::new();
|
||||
log_builder.filter(None, LevelFilter::Info);
|
||||
|
||||
let without_time = matches.is_present("LOG_WITHOUT_TIME");
|
||||
|
||||
@@ -106,25 +108,25 @@ fn main() {
|
||||
match debug_level {
|
||||
0 => {
|
||||
// Default filter
|
||||
log_builder.format(move |r| log_time(without_time, r));
|
||||
log_builder.format(move |fmt, r| log_time(fmt, without_time, r));
|
||||
}
|
||||
1 => {
|
||||
let log_builder = log_builder.format(move |r| log_time_module(without_time, r));
|
||||
log_builder.filter(Some("sslocal"), LogLevelFilter::Debug);
|
||||
let log_builder = log_builder.format(move |fmt, r| log_time_module(fmt, without_time, r));
|
||||
log_builder.filter(Some("sslocal"), LevelFilter::Debug);
|
||||
}
|
||||
2 => {
|
||||
let log_builder = log_builder.format(move |r| log_time_module(without_time, r));
|
||||
log_builder.filter(Some("sslocal"), LogLevelFilter::Debug)
|
||||
.filter(Some("shadowsocks"), LogLevelFilter::Debug);
|
||||
let log_builder = log_builder.format(move |fmt, r| log_time_module(fmt, without_time, r));
|
||||
log_builder.filter(Some("sslocal"), LevelFilter::Debug)
|
||||
.filter(Some("shadowsocks"), LevelFilter::Debug);
|
||||
}
|
||||
3 => {
|
||||
let log_builder = log_builder.format(move |r| log_time_module(without_time, r));
|
||||
log_builder.filter(Some("sslocal"), LogLevelFilter::Trace)
|
||||
.filter(Some("shadowsocks"), LogLevelFilter::Trace);
|
||||
let log_builder = log_builder.format(move |fmt, r| log_time_module(fmt, without_time, r));
|
||||
log_builder.filter(Some("sslocal"), LevelFilter::Trace)
|
||||
.filter(Some("shadowsocks"), LevelFilter::Trace);
|
||||
}
|
||||
_ => {
|
||||
let log_builder = log_builder.format(move |r| log_time_module(without_time, r));
|
||||
log_builder.filter(None, LogLevelFilter::Trace);
|
||||
let log_builder = log_builder.format(move |fmt, r| log_time_module(fmt, without_time, r));
|
||||
log_builder.filter(None, LevelFilter::Trace);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +134,7 @@ fn main() {
|
||||
log_builder.parse(&env_conf);
|
||||
}
|
||||
|
||||
log_builder.init().unwrap();
|
||||
log_builder.init();
|
||||
|
||||
let mut has_provided_config = false;
|
||||
|
||||
|
||||
@@ -15,31 +15,33 @@ extern crate shadowsocks;
|
||||
extern crate time;
|
||||
|
||||
use std::env;
|
||||
use std::io::{self, Write};
|
||||
|
||||
use clap::{App, Arg};
|
||||
|
||||
use env_logger::LogBuilder;
|
||||
use log::{LogLevelFilter, LogRecord};
|
||||
use env_logger::Builder;
|
||||
use env_logger::fmt::Formatter;
|
||||
use log::{LevelFilter, Record};
|
||||
|
||||
use shadowsocks::{Config, ConfigType, ServerAddr, ServerConfig, run_server};
|
||||
use shadowsocks::plugin::PluginConfig;
|
||||
|
||||
fn log_time(without_time: bool, record: &LogRecord) -> String {
|
||||
fn log_time(fmt: &mut Formatter, without_time: bool, record: &Record) -> io::Result<()> {
|
||||
if without_time {
|
||||
format!("[{}] {}", record.level(), record.args())
|
||||
writeln!(fmt, "[{}] {}", record.level(), record.args())
|
||||
} else {
|
||||
format!("[{}][{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S.%f").unwrap(), record.level(), record.args())
|
||||
writeln!(fmt, "[{}][{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S.%f").unwrap(), record.level(), record.args())
|
||||
}
|
||||
}
|
||||
|
||||
fn log_time_module(without_time: bool, record: &LogRecord) -> String {
|
||||
fn log_time_module(fmt: &mut Formatter, without_time: bool, record: &Record) -> io::Result<()> {
|
||||
if without_time {
|
||||
format!("[{}] [{}] {}", record.level(), record.location().module_path(), record.args())
|
||||
writeln!(fmt, "[{}] [{}] {}", record.level(), record.module_path().unwrap_or("*"), record.args())
|
||||
} else {
|
||||
format!("[{}][{}] [{}] {}",
|
||||
writeln!(fmt, "[{}][{}] [{}] {}",
|
||||
time::now().strftime("%Y-%m-%d][%H:%M:%S.%f").unwrap(),
|
||||
record.level(),
|
||||
record.location().module_path(),
|
||||
record.module_path().unwrap_or("*"),
|
||||
record.args())
|
||||
}
|
||||
}
|
||||
@@ -89,8 +91,8 @@ fn main() {
|
||||
.help("Disable time in log"))
|
||||
.get_matches();
|
||||
|
||||
let mut log_builder = LogBuilder::new();
|
||||
log_builder.filter(None, LogLevelFilter::Info);
|
||||
let mut log_builder = Builder::new();
|
||||
log_builder.filter(None, LevelFilter::Info);
|
||||
|
||||
let without_time = matches.is_present("LOG_WITHOUT_TIME");
|
||||
|
||||
@@ -98,25 +100,25 @@ fn main() {
|
||||
match debug_level {
|
||||
0 => {
|
||||
// Default filter
|
||||
log_builder.format(move |r| log_time(without_time, r));
|
||||
log_builder.format(move |fmt, r| log_time(fmt, without_time, r));
|
||||
}
|
||||
1 => {
|
||||
let log_builder = log_builder.format(move |r| log_time_module(without_time, r));
|
||||
log_builder.filter(Some("ssserver"), LogLevelFilter::Debug);
|
||||
let log_builder = log_builder.format(move |fmt, r| log_time_module(fmt, without_time, r));
|
||||
log_builder.filter(Some("ssserver"), LevelFilter::Debug);
|
||||
}
|
||||
2 => {
|
||||
let log_builder = log_builder.format(move |r| log_time_module(without_time, r));
|
||||
log_builder.filter(Some("ssserver"), LogLevelFilter::Debug)
|
||||
.filter(Some("shadowsocks"), LogLevelFilter::Debug);
|
||||
let log_builder = log_builder.format(move |fmt, r| log_time_module(fmt, without_time, r));
|
||||
log_builder.filter(Some("ssserver"), LevelFilter::Debug)
|
||||
.filter(Some("shadowsocks"), LevelFilter::Debug);
|
||||
}
|
||||
3 => {
|
||||
let log_builder = log_builder.format(move |r| log_time_module(without_time, r));
|
||||
log_builder.filter(Some("ssserver"), LogLevelFilter::Trace)
|
||||
.filter(Some("shadowsocks"), LogLevelFilter::Trace);
|
||||
let log_builder = log_builder.format(move |fmt, r| log_time_module(fmt, without_time, r));
|
||||
log_builder.filter(Some("ssserver"), LevelFilter::Trace)
|
||||
.filter(Some("shadowsocks"), LevelFilter::Trace);
|
||||
}
|
||||
_ => {
|
||||
let log_builder = log_builder.format(move |r| log_time_module(without_time, r));
|
||||
log_builder.filter(None, LogLevelFilter::Trace);
|
||||
let log_builder = log_builder.format(move |fmt, r| log_time_module(fmt, without_time, r));
|
||||
log_builder.filter(None, LevelFilter::Trace);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +126,7 @@ fn main() {
|
||||
log_builder.parse(&env_conf);
|
||||
}
|
||||
|
||||
log_builder.init().unwrap();
|
||||
log_builder.init();
|
||||
|
||||
let mut has_provided_config = false;
|
||||
let mut config = match matches.value_of("CONFIG") {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//! Cipher defined with Miscreant
|
||||
|
||||
use std::{iter, ptr};
|
||||
use std::ptr;
|
||||
|
||||
use miscreant::{Aes128PmacSiv, Aes256PmacSiv};
|
||||
use miscreant::aead::{Algorithm, Aes128PmacSiv, Aes256PmacSiv};
|
||||
|
||||
use crypto::{AeadDecryptor, AeadEncryptor};
|
||||
use crypto::{CipherResult, CipherType};
|
||||
@@ -78,12 +78,12 @@ impl AeadEncryptor for MiscreantCipher {
|
||||
|
||||
match self.cipher {
|
||||
MiscreantCryptoVariant::Aes128(ref mut cipher) => {
|
||||
cipher.seal_in_place(iter::once(&self.nonce), &mut buf);
|
||||
cipher.seal_in_place(&self.nonce, b"", &mut buf);
|
||||
tag.copy_from_slice(&buf[..tag_len]);
|
||||
output.copy_from_slice(&buf[tag_len..]);
|
||||
}
|
||||
MiscreantCryptoVariant::Aes256(ref mut cipher) => {
|
||||
cipher.seal_in_place(iter::once(&self.nonce), &mut buf);
|
||||
cipher.seal_in_place(&self.nonce, b"", &mut buf);
|
||||
tag.copy_from_slice(&buf[..tag_len]);
|
||||
output.copy_from_slice(&buf[tag_len..]);
|
||||
}
|
||||
@@ -100,8 +100,8 @@ impl AeadDecryptor for MiscreantCipher {
|
||||
buf.put_slice(input);
|
||||
|
||||
let result = match self.cipher {
|
||||
MiscreantCryptoVariant::Aes128(ref mut cipher) => cipher.open_in_place(iter::once(&self.nonce), &mut buf),
|
||||
MiscreantCryptoVariant::Aes256(ref mut cipher) => cipher.open_in_place(iter::once(&self.nonce), &mut buf),
|
||||
MiscreantCryptoVariant::Aes128(ref mut cipher) => cipher.open_in_place(&self.nonce, b"", &mut buf),
|
||||
MiscreantCryptoVariant::Aes256(ref mut cipher) => cipher.open_in_place(&self.nonce, b"", &mut buf),
|
||||
};
|
||||
|
||||
result.map(|buf| {
|
||||
|
||||
@@ -83,7 +83,7 @@ extern crate digest;
|
||||
extern crate miscreant;
|
||||
#[cfg(feature = "sodium")]
|
||||
extern crate libsodium_ffi;
|
||||
extern crate md_5 as md5;
|
||||
extern crate md5;
|
||||
extern crate openssl;
|
||||
extern crate ring;
|
||||
extern crate bytes;
|
||||
|
||||
@@ -54,17 +54,13 @@ impl Socks5TestServer {
|
||||
}
|
||||
|
||||
pub fn run(&self) {
|
||||
drop(env_logger::init());
|
||||
|
||||
let svr_cfg = self.config.clone();
|
||||
thread::spawn(move || {
|
||||
drop(env_logger::init());
|
||||
run_server(svr_cfg).unwrap();
|
||||
});
|
||||
|
||||
let client_cfg = self.config.clone();
|
||||
thread::spawn(move || {
|
||||
drop(env_logger::init());
|
||||
run_local(client_cfg).unwrap();
|
||||
});
|
||||
|
||||
|
||||
@@ -49,7 +49,6 @@ fn get_client_addr() -> SocketAddr {
|
||||
|
||||
fn start_server(bar: Arc<Barrier>) {
|
||||
thread::spawn(move || {
|
||||
drop(env_logger::init());
|
||||
bar.wait();
|
||||
run_server(get_config()).unwrap();
|
||||
});
|
||||
@@ -57,7 +56,6 @@ fn start_server(bar: Arc<Barrier>) {
|
||||
|
||||
fn start_local(bar: Arc<Barrier>) {
|
||||
thread::spawn(move || {
|
||||
drop(env_logger::init());
|
||||
bar.wait();
|
||||
run_local(get_config()).unwrap();
|
||||
});
|
||||
@@ -67,8 +65,6 @@ fn start_udp_echo_server(bar: Arc<Barrier>) {
|
||||
use std::net::UdpSocket;
|
||||
|
||||
thread::spawn(move || {
|
||||
drop(env_logger::init());
|
||||
|
||||
let l = UdpSocket::bind(UDP_ECHO_SERVER_ADDR).unwrap();
|
||||
|
||||
bar.wait();
|
||||
|
||||
Reference in New Issue
Block a user