Skip to content

Commit

Permalink
Merge pull request #682 in ADGUARD-IOS/adguard-ios from bug/tunnel_cr…
Browse files Browse the repository at this point in the history
…ash_fix to master

* commit '46e8d035cac4f9c848307bfc2d7cd1ef7e8cdba8':
  fixed crash in tunnel with disabled user filters
  • Loading branch information
IvanIin committed Feb 4, 2020
2 parents 67a372d + 46e8d03 commit 882f818
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 18 deletions.
4 changes: 2 additions & 2 deletions AdguardExtension/AdguardTests/DnsProxyTest.swift
Expand Up @@ -22,7 +22,7 @@ class DnsProxyTest: XCTestCase {
let request = Data(base64Encoded: "RQAAQkGPAAD/ETb1rBDRAsYSAAHOlAA1AC47HU+xAQAAAQAAAAAAAAdjbGllbnRzAWwGZ29vZ2xlA2NvbQAAAQAB")

override func setUp() {
XCTAssert(proxyService.start(upstreams: ["1.1.1.1"], bootstrapDns: "8.8.8.8", fallback: "8.8.8.8", serverName: "cloudflare", filtersJson: "", ipv6Available: true))
XCTAssert(proxyService.start(upstreams: ["1.1.1.1"], bootstrapDns: "8.8.8.8", fallback: "8.8.8.8", serverName: "cloudflare", filtersJson: "", userFilterId: 1, whitelistFilterId: 2, ipv6Available: true))
}

override func tearDown() {
Expand Down Expand Up @@ -54,7 +54,7 @@ class DnsProxyTest: XCTestCase {
wait(for: [expectation], timeout: 15)

proxyService.stop() {}
XCTAssert(proxyService.start(upstreams: ["1.1.1.1"], bootstrapDns: "8.8.8.8", fallback: "8.8.8.8", serverName: "cloudflare", filtersJson: "", ipv6Available: true))
XCTAssert(proxyService.start(upstreams: ["1.1.1.1"], bootstrapDns: "8.8.8.8", fallback: "8.8.8.8", serverName: "cloudflare", filtersJson: "", userFilterId: 1, whitelistFilterId: 2, ipv6Available: true))

let expectation2 = XCTestExpectation(description: "expectation2")

Expand Down
17 changes: 4 additions & 13 deletions AdguardExtension/Tunnel/DnsProxyService.swift
Expand Up @@ -21,7 +21,7 @@ import Foundation
@objc
protocol DnsProxyServiceProtocol : NSObjectProtocol {

func start(upstreams: [String], bootstrapDns: String, fallback: String, serverName: String, filtersJson: String, ipv6Available: Bool) -> Bool
func start(upstreams: [String], bootstrapDns: String, fallback: String, serverName: String, filtersJson: String, userFilterId:Int, whitelistFilterId:Int, ipv6Available: Bool) -> Bool
func stop(callback:@escaping ()->Void)
func resolve(dnsRequest:Data, callback: @escaping (_ dnsResponse: Data?)->Void);
}
Expand Down Expand Up @@ -54,7 +54,7 @@ class DnsProxyService : NSObject, DnsProxyServiceProtocol {

var agproxy: AGDnsProxy?

@objc func start(upstreams: [String], bootstrapDns: String, fallback: String, serverName: String, filtersJson: String, ipv6Available: Bool) -> Bool {
@objc func start(upstreams: [String], bootstrapDns: String, fallback: String, serverName: String, filtersJson: String, userFilterId:Int, whitelistFilterId:Int, ipv6Available: Bool) -> Bool {

let bootstrapDnsArray = bootstrapDns.components(separatedBy: .whitespacesAndNewlines)

Expand All @@ -65,24 +65,15 @@ class DnsProxyService : NSObject, DnsProxyServiceProtocol {
let filterFiles = (try? JSONSerialization.jsonObject(with: filtersJson.data(using: .utf8)! , options: []) as? Array<[String:Any]>) ?? Array<Dictionary<String, Any>>()

var filters = [NSNumber:String]()
var userFilterId: Int?
var whitelistFilterId: Int?

var otherFilterIds = [Int]()

for filter in filterFiles {

let identifier = filter["id"] as! Int
let path = filter["path"] as! String
let userFilter = (filter["user_filter"] as? Bool) ?? false
let whitelist = (filter["whitelist"] as? Bool) ?? false

if userFilter {
userFilterId = identifier
}
else if whitelist {
whitelistFilterId = identifier
}
else {
if identifier != userFilterId && identifier != whitelistFilterId {
otherFilterIds.append(identifier)
}

Expand Down
10 changes: 7 additions & 3 deletions AdguardExtension/Tunnel/PacketTunnelProvider.m
Expand Up @@ -680,10 +680,14 @@ - (BOOL) startDnsProxyWithSystemDnsIps: (NSArray<NSString*>*)systemDnsServers {

BOOL ipv6Available = [ACNIPUtils isIpv6Available];
SimpleConfigurationSwift* configuration = [[SimpleConfigurationSwift alloc] initWithResources:_resources systemAppearenceIsDark:false];
NSString* filtersJson = [[[DnsFiltersService alloc] initWithResources:_resources vpnManager:nil configuration: configuration] filtersJson];


DnsFiltersService *dnsFiltersService = [[DnsFiltersService alloc] initWithResources:_resources vpnManager:nil configuration: configuration];
NSString* filtersJson = [dnsFiltersService filtersJson];
long userFilterId = dnsFiltersService.userFilterId;
long whitelistFilterId = dnsFiltersService.whitelistFilterId;

NSString* serverName = _currentServer.name ?: ACLocalizedString(@"default_dns_server_name", nil);
return [_dnsProxy startWithUpstreams:upstreams bootstrapDns: systemDns fallback: systemDns serverName: serverName filtersJson: filtersJson ipv6Available:ipv6Available];
return [_dnsProxy startWithUpstreams:upstreams bootstrapDns: systemDns fallback: systemDns serverName: serverName filtersJson: filtersJson userFilterId: userFilterId whitelistFilterId: whitelistFilterId ipv6Available:ipv6Available];
}

-(NSString *)getCurrentWifiName {
Expand Down

0 comments on commit 882f818

Please sign in to comment.