Deprecated
-* `table`
-* `aes-128-cfb`, `aes-128-cfb1`, `aes-128-cfb8`, `aes-128-cfb128`
-* `aes-192-cfb`, `aes-192-cfb1`, `aes-192-cfb8`, `aes-192-cfb128`
-* `aes-256-cfb`, `aes-256-cfb1`, `aes-256-cfb8`, `aes-256-cfb128`
-* `aes-128-ctr`
-* `aes-192-ctr`
-* `aes-256-ctr`
-* `camellia-128-cfb`, `camellia-128-cfb1`, `camellia-128-cfb8`, `camellia-128-cfb128`
-* `camellia-192-cfb`, `camellia-192-cfb1`, `camellia-192-cfb8`, `camellia-192-cfb128`
-* `camellia-256-cfb`, `camellia-256-cfb1`, `camellia-256-cfb8`, `camellia-256-cfb128`
-* `rc4-md5`
-* `chacha20-ietf`
+- `table`
+- `aes-128-cfb`, `aes-128-cfb1`, `aes-128-cfb8`, `aes-128-cfb128`
+- `aes-192-cfb`, `aes-192-cfb1`, `aes-192-cfb8`, `aes-192-cfb128`
+- `aes-256-cfb`, `aes-256-cfb1`, `aes-256-cfb8`, `aes-256-cfb128`
+- `aes-128-ctr`
+- `aes-192-ctr`
+- `aes-256-ctr`
+- `camellia-128-cfb`, `camellia-128-cfb1`, `camellia-128-cfb8`, `camellia-128-cfb128`
+- `camellia-192-cfb`, `camellia-192-cfb1`, `camellia-192-cfb8`, `camellia-192-cfb128`
+- `camellia-256-cfb`, `camellia-256-cfb1`, `camellia-256-cfb8`, `camellia-256-cfb128`
+- `rc4-md5`
+- `chacha20-ietf`
@@ -630,21 +632,21 @@ Example configuration:
### Available sections
-* For local servers (`sslocal`, `ssredir`, ...)
- * Modes:
- * `[bypass_all]` - ACL runs in `BlackList` mode. Bypasses all addresses that didn't match any rules.
- * `[proxy_all]` - ACL runs in `WhiteList` mode. Proxies all addresses that didn't match any rules.
- * Rules:
- * `[bypass_list]` - Rules for connecting directly
- * `[proxy_list]` - Rules for connecting through proxies
-* For remote servers (`ssserver`)
- * Modes:
- * `[reject_all]` - ACL runs in `BlackList` mode. Rejects all clients that didn't match any rules.
- * `[accept_all]` - ACL runs in `WhiteList` mode. Accepts all clients that didn't match any rules.
- * Rules:
- * `[white_list]` - Rules for accepted clients
- * `[black_list]` - Rules for rejected clients
- * `[outbound_block_list]` - Rules for blocking outbound addresses.
+- For local servers (`sslocal`, `ssredir`, ...)
+ - Modes:
+ - `[bypass_all]` - ACL runs in `BlackList` mode. Bypasses all addresses that didn't match any rules.
+ - `[proxy_all]` - ACL runs in `WhiteList` mode. Proxies all addresses that didn't match any rules.
+ - Rules:
+ - `[bypass_list]` - Rules for connecting directly
+ - `[proxy_list]` - Rules for connecting through proxies
+- For remote servers (`ssserver`)
+ - Modes:
+ - `[reject_all]` - ACL runs in `BlackList` mode. Rejects all clients that didn't match any rules.
+ - `[accept_all]` - ACL runs in `WhiteList` mode. Accepts all clients that didn't match any rules.
+ - Rules:
+ - `[white_list]` - Rules for accepted clients
+ - `[black_list]` - Rules for rejected clients
+ - `[outbound_block_list]` - Rules for blocking outbound addresses.
### Example
@@ -696,31 +698,31 @@ Example configuration:
It supports the following features:
-* [x] SOCKS5 CONNECT command
-* [x] SOCKS5 UDP ASSOCIATE command (partial)
-* [x] SOCKS4/4a CONNECT command
-* [x] Various crypto algorithms
-* [x] Load balancing (multiple servers) and server delay checking
-* [x] [SIP004](https://github.com/shadowsocks/shadowsocks-org/issues/30) AEAD ciphers
-* [x] [SIP003](https://github.com/shadowsocks/shadowsocks-org/issues/28) Plugins
-* [x] [SIP002](https://github.com/shadowsocks/shadowsocks-org/issues/27) Extension ss URLs
-* [x] HTTP Proxy Supports ([RFC 7230](http://tools.ietf.org/html/rfc7230) and [CONNECT](https://tools.ietf.org/html/draft-luotonen-web-proxy-tunneling-01))
-* [x] Defend against replay attacks, [shadowsocks/shadowsocks-org#44](https://github.com/shadowsocks/shadowsocks-org/issues/44)
-* [x] Manager APIs, supporting [Manage Multiple Users](https://github.com/shadowsocks/shadowsocks/wiki/Manage-Multiple-Users)
-* [x] ACL (Access Control List)
-* [x] Support HTTP/HTTPS Proxy protocol
+- [x] SOCKS5 CONNECT command
+- [x] SOCKS5 UDP ASSOCIATE command (partial)
+- [x] SOCKS4/4a CONNECT command
+- [x] Various crypto algorithms
+- [x] Load balancing (multiple servers) and server delay checking
+- [x] [SIP004](https://github.com/shadowsocks/shadowsocks-org/issues/30) AEAD ciphers
+- [x] [SIP003](https://github.com/shadowsocks/shadowsocks-org/issues/28) Plugins
+- [x] [SIP002](https://github.com/shadowsocks/shadowsocks-org/issues/27) Extension ss URLs
+- [x] HTTP Proxy Supports ([RFC 7230](http://tools.ietf.org/html/rfc7230) and [CONNECT](https://tools.ietf.org/html/draft-luotonen-web-proxy-tunneling-01))
+- [x] Defend against replay attacks, [shadowsocks/shadowsocks-org#44](https://github.com/shadowsocks/shadowsocks-org/issues/44)
+- [x] Manager APIs, supporting [Manage Multiple Users](https://github.com/shadowsocks/shadowsocks/wiki/Manage-Multiple-Users)
+- [x] ACL (Access Control List)
+- [x] Support HTTP/HTTPS Proxy protocol
## TODO
-* [x] Documentation
-* [x] Extend configuration format
-* [x] Improved logging format (waiting for the new official log crate)
-* [x] Support more ciphers without depending on `libcrypto` (waiting for an acceptable Rust crypto lib implementation)
-* [x] Windows support.
-* [ ] Build with stable `rustc` (blocking by `crypto2`).
-* [x] Support HTTP Proxy protocol
-* [x] AEAD ciphers. (proposed in [SIP004](https://github.com/shadowsocks/shadowsocks-org/issues/30), still under discussion)
-* [x] Choose server based on delay #152
+- [x] Documentation
+- [x] Extend configuration format
+- [x] Improved logging format (waiting for the new official log crate)
+- [x] Support more ciphers without depending on `libcrypto` (waiting for an acceptable Rust crypto lib implementation)
+- [x] Windows support.
+- [ ] Build with stable `rustc` (blocking by `crypto2`).
+- [x] Support HTTP Proxy protocol
+- [x] AEAD ciphers. (proposed in [SIP004](https://github.com/shadowsocks/shadowsocks-org/issues/30), still under discussion)
+- [x] Choose server based on delay #152
## License
diff --git a/crates/shadowsocks-service/Cargo.toml b/crates/shadowsocks-service/Cargo.toml
index 1ff19685..99de06c1 100644
--- a/crates/shadowsocks-service/Cargo.toml
+++ b/crates/shadowsocks-service/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "shadowsocks-service"
-version = "1.12.2"
+version = "1.12.3"
authors = ["Shadowsocks Contributors"]
description = "shadowsocks is a fast tunnel proxy that helps you bypass firewalls."
repository = "https://github.com/shadowsocks/shadowsocks-rust"
diff --git a/crates/shadowsocks-service/src/config.rs b/crates/shadowsocks-service/src/config.rs
index 0ec2f333..b38cfb24 100644
--- a/crates/shadowsocks-service/src/config.rs
+++ b/crates/shadowsocks-service/src/config.rs
@@ -110,53 +110,72 @@ struct SSConfig {
server: Option