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.
- MMDB no longer ships GeoLite2 database with the framework. Developer must set
database
in theGeoIP
before using it. - Update all dependencies to latest.
- Migrate to Swift 5.
- Update all dependencies to latest.
- URL parser can parse domain with hyphen.
- Build on Xcode 10
- Make sure modification accesses are exclusive. Latest compiler (or swift runtime) enforces that.
- Update MMDB-Swift which fixes a potential error when downloading GeoIP database.
- Fix wrong access control level for
GCDProxyServer
.
- Fix that HTTPS adapter crash when using with
NWTCPSocket
.
- Unset delegate when deinit
NWTCPSocket
. - Sending proper SNI information in SSL negotiation.
- Keep reference of observer in
Tunnel
.
- Updated for Swift 4
- Update MMDB to fix that the database is not downloaded correcly.
- The build-in GeoIP database will be updated automatically with every new release.
- Fix that the SOCKS adapter will send IP bytes in wrong order.
- 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: true
is obsolete, use the configuration of ShadowsocksR (protocol: verify_sha1
) instead.IPv4Address
is removed. Now both IPv4 and IPv6 are represented by one classIPAddress
.IPPool
now 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_http
andtls1.2_ticket_auth
obfuscation for SSR. ota: true
is obsolete, use the configuration of ShadowsocksR (obfs: verify_sha1
) instead.
- Fix that
RejectAdapter
uses 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
internalStatus
is 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.
state
inSocketProtocol
is 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
. SpeedAdapter
now signals observer with partial information.
- Fix versions of dependecies.
ConnectRequest
is renamed toConnectSession
,ConnectResponse
is removed.
- Updated to Swift 3.
type
inSocketProtocol
is 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
.
DirectAdapterSocket
andSpeedAdapter
will 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
.
NWTCPSocket
will not crash ifdisconnect
is called beforeconnectTo
.- Hashing of
IPv4Address
might 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.
DomainRuleList
can 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
GCDProxyServer
by 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_ntoa
does 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
Port
by an integer directly.
- The interface of
Port
is refined. - Now SOCKS5 proxy response with
BND.ADDR = 0x00, 0x00, 0x00, 0x00
andBND.PORT = 0
.
- SOCKS5 proxy now handles client which supports more than one method.
- Added test.
- Support for SOCKS5 adapter.
- Fixed a bug when
IPRange
handling IP range with/32
.
- GeoIP now returns
nil
if input is not a valid IP address, so it is distinguishable from a failed search.
ShadowsocksAdapter
works correctly with IP-based request now.HTTPHeader
parses 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
nil
when initialize with an invalid IP address string. ListRule
is renamed toDomainListRule
.
- DNS server will only process A queries and return others intact.
- Support for IP range list matching rule.
- Many things in
HTTPHeader
andConnectSession
becomepublic
. - Refined
description
of many classes.
- The
RuleManager
now triggers events.
- The
ProxyServer.mainProxy
is removed and instead you should set theproxyServer
in the implementation ofIPStackProtocol
(TCPStack
as of now) which requires a proxy server to function. - Many things are now
public
instead 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.