All notable changes to this project will be documented in this file. I will do my best to guarantee that this project adheres to Semantic Versioning after 1.0.0, but please do read change log before updating.
- Courageous adventurers are never satisfied with the status quo. They are not only always prepared, but also desired to explore something new, something never happened before. Some of the bravest tried to let the Internet know thay were here, ready to chanllenge the law and order and put an end to the old, antiquated and decayed speficications. Well, they have been acknowledged.
- A very tolerant parser will be used if the URL is illegal.
ota: trueis obsolete, use the configuration of ShadowsocksR (protocol: verify_sha1) instead.IPv4Addressis removed. Now both IPv4 and IPv6 are represented by one classIPAddress.IPPoolnow supports both IPv4 and IPv6 addresses.- Now there is an interval (see
Opt) between each read, this should reduce the number of total system calls.
- Add support for
simple_httpandtls1.2_ticket_authobfuscation for SSR. ota: trueis obsolete, use the configuration of ShadowsocksR (obfs: verify_sha1) instead.
- Fix that
RejectAdapteruses a wrong delay interval.
- Fix an error when parsing literal IP address.
- Fix that when the request is an IP address it will not be processed correctly.
- Now
internalStatusis changed to read and write status.
- Set DNS timeout to 1 second.
- SOCKS5 proxy will work correctly when dealing with socket sending data first.
- Now there is only one dispatch queue and it is guaranteed everything will be executed on that queue.
- Fix crash when OTA data block is too large.
stateinSocketProtocolis changed tostatus.- All interfaces relating to adapter, proxy and tunnel are refined according to the new Swift 3 convention.
- All data tags are removed, now information is saved in
internalStatus. SpeedAdapternow signals observer with partial information.
- Fix versions of dependecies.
ConnectRequestis renamed toConnectSession,ConnectResponseis removed.
- Updated to Swift 3.
typeinSocketProtocolis changed totypeName.
- Now http header with empty value will be handled.
- Correctly generate key for shadowsocks.
- Correctly encrypt with chacha20 and salsa20.
- Now all tunnel can be run in the same serial dispatch queue, this means there is no need to limit the number of active tunnels anymore on iOS. Check out
Opt.
DirectAdapterSocketandSpeedAdapterwill disconnect when the request host is IPv6 address.- GeoIP now also supports IPv6 address.
- It's possible to match to a domain exactly now in
DomainRuleList.
NWTCPSocketwill not crash ifdisconnectis called beforeconnectTo.- Hashing of
IPv4Addressmight overflow on 32bit machines. - Error when parsing HTTP header with ":" in the value.
- HTTP server now gets host information from request url instead of Host field in header.
- Correctly handle empty line in list files.
DomainRuleListcan match domain based on prefix, suffix and keyword.
- Parse error when HTTP header contains non-ascii characters.
- You can limit the number of active sockets in
GCDProxyServerby settingOpt.ProxyActiveSocketLimit. But DO USE WITH CAUTION.
- Fixed a bug when the http request has no header fields the parsing of the header fails.
- Updated to Swift 2.3.
- Fixed a very edge case where
inet_ntoadoes not support multi-thread.
- SOCKS5 proxy now can correctly process IPv6 requests. Thx yarshure.
- SOCKS5 proxy correctly handles connections with IP address.
- Now one can initailize a
Portby an integer directly.
- The interface of
Portis refined. - Now SOCKS5 proxy response with
BND.ADDR = 0x00, 0x00, 0x00, 0x00andBND.PORT = 0.
- SOCKS5 proxy now handles client which supports more than one method.
- Added test.
- Support for SOCKS5 adapter.
- Fixed a bug when
IPRangehandling IP range with/32.
- GeoIP now returns
nilif input is not a valid IP address, so it is distinguishable from a failed search.
ShadowsocksAdapterworks correctly with IP-based request now.HTTPHeaderparses header incorrectly when the header is non-CONNECT with a non default(80) port.
- Now all encryption methods are represented in uppercase.
- Many things are now exposed as
public. - Some meta-parameters can be set in
Opt.
- Support to reject request.
- A potential memory leakage if DNS response is lost in transmission.
- Proxy server can listen on port without specific IP address.
- IPv4Address will return
nilwhen initialize with an invalid IP address string. ListRuleis renamed toDomainListRule.
- DNS server will only process A queries and return others intact.
- Support for IP range list matching rule.
- Many things in
HTTPHeaderandConnectSessionbecomepublic. - Refined
descriptionof many classes.
- The
RuleManagernow triggers events.
- The
ProxyServer.mainProxyis removed and instead you should set theproxyServerin the implementation ofIPStackProtocol(TCPStackas of now) which requires a proxy server to function. - Many things are now
publicinstead ofinternal.
- The proxy server, adapter socket, proxy socket and tunnel now trigger events.
- A build-in debug observer to help with debugging.
- Chacha20 and Salsa20 encryption are fixed.