Skip to content

Commit ef21d75

Browse files
authored
Merge pull request #299 from sxci/config_dns
Config dns
2 parents 28f7bff + e87e1d3 commit ef21d75

File tree

4 files changed

+67
-28
lines changed

4 files changed

+67
-28
lines changed

library/src/androidTest/java/com/qiniu/android/DnsTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@
22

33
import android.test.AndroidTestCase;
44

5+
import com.qiniu.android.storage.Configuration;
56
import com.qiniu.android.utils.Dns;
67

78
import junit.framework.Assert;
89

10+
import java.net.InetAddress;
11+
import java.net.UnknownHostException;
12+
import java.util.List;
13+
914
/**
1015
* Created by bailong on 15/1/5.
1116
*/
@@ -16,4 +21,14 @@ public void testDns() {
1621
ip = Dns.getAddressesString("nodns.qiniu.com");
1722
Assert.assertEquals("", ip);
1823
}
24+
25+
26+
public void testDnsConfig() throws UnknownHostException {
27+
Configuration config = new Configuration.Builder().build();
28+
Assert.assertTrue(" 默认使用 happlyDns ", config.dns != null);
29+
List<InetAddress> inetAddress = config.dns.lookup("www.baidu.com");
30+
// System.out.println(inetAddress.get(0).getHostAddress());
31+
Assert.assertFalse(" 解析不能为空 ", inetAddress.isEmpty());
32+
Assert.assertTrue(" 禁用 happlyDns ", new Configuration.Builder().dns(null).build().dns == null);
33+
}
1934
}

library/src/main/java/com/qiniu/android/http/Client.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.qiniu.android.http;
22

33
import com.qiniu.android.common.Constants;
4-
import com.qiniu.android.dns.DnsManager;
5-
import com.qiniu.android.dns.Domain;
64
import com.qiniu.android.storage.UpCancellationSignal;
75
import com.qiniu.android.storage.UpToken;
86
import com.qiniu.android.utils.AsyncRun;
@@ -15,14 +13,11 @@
1513
import java.net.InetAddress;
1614
import java.net.SocketTimeoutException;
1715
import java.net.UnknownHostException;
18-
import java.util.ArrayList;
19-
import java.util.Collections;
2016
import java.util.List;
2117
import java.util.concurrent.TimeUnit;
2218

2319
import okhttp3.Call;
2420
import okhttp3.Callback;
25-
import okhttp3.Dns;
2621
import okhttp3.HttpUrl;
2722
import okhttp3.Interceptor;
2823
import okhttp3.MediaType;
@@ -48,7 +43,7 @@ public Client() {
4843
this(null, 10, 30, null, null);
4944
}
5045

51-
public Client(ProxyConfiguration proxy, int connectTimeout, int responseTimeout, UrlConverter converter, final DnsManager dns) {
46+
public Client(ProxyConfiguration proxy, int connectTimeout, int responseTimeout, UrlConverter converter, final Dns dns) {
5247
this.converter = converter;
5348
OkHttpClient.Builder builder = new OkHttpClient.Builder();
5449

@@ -59,22 +54,15 @@ public Client(ProxyConfiguration proxy, int connectTimeout, int responseTimeout,
5954
}
6055
}
6156
if (dns != null) {
62-
builder.dns(new Dns() {
57+
builder.dns(new okhttp3.Dns() {
6358
@Override
6459
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
65-
InetAddress[] ips;
6660
try {
67-
ips = dns.queryInetAdress(new Domain(hostname));
68-
} catch (IOException e) {
61+
return dns.lookup(hostname);
62+
} catch (Exception e) {
6963
e.printStackTrace();
70-
throw new UnknownHostException(e.getMessage());
7164
}
72-
if (ips == null) {
73-
throw new UnknownHostException(hostname + " resolve failed");
74-
}
75-
List<InetAddress> l = new ArrayList<>();
76-
Collections.addAll(l, ips);
77-
return l;
65+
return okhttp3.Dns.SYSTEM.lookup(hostname);
7866
}
7967
});
8068
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.qiniu.android.http;
2+
3+
import java.net.InetAddress;
4+
import java.net.UnknownHostException;
5+
import java.util.List;
6+
7+
/**
8+
* Created by sxci on 03/04/2018.
9+
*/
10+
11+
public interface Dns {
12+
List<InetAddress> lookup(String hostname) throws UnknownHostException;
13+
}

library/src/main/java/com/qiniu/android/storage/Configuration.java

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
package com.qiniu.android.storage;
22

3-
43
import com.qiniu.android.common.AutoZone;
54
import com.qiniu.android.common.Zone;
65
import com.qiniu.android.dns.DnsManager;
6+
import com.qiniu.android.dns.Domain;
77
import com.qiniu.android.dns.IResolver;
88
import com.qiniu.android.dns.NetworkInfo;
99
import com.qiniu.android.dns.local.AndroidDnsServer;
1010
import com.qiniu.android.dns.local.Resolver;
11+
import com.qiniu.android.http.Dns;
1112
import com.qiniu.android.http.ProxyConfiguration;
1213
import com.qiniu.android.http.UrlConverter;
1314

1415
import java.io.File;
1516
import java.io.IOException;
1617
import java.net.InetAddress;
18+
import java.net.UnknownHostException;
19+
import java.util.ArrayList;
20+
import java.util.Collections;
21+
import java.util.List;
1722

1823
public final class Configuration {
1924

@@ -60,7 +65,7 @@ public final class Configuration {
6065
/**
6166
* dns 解析客户端
6267
*/
63-
public DnsManager dns;
68+
public Dns dns;
6469

6570
/**
6671
* 上传区域
@@ -92,12 +97,7 @@ private Configuration(Builder builder) {
9297
urlConverter = builder.urlConverter;
9398

9499
zone = builder.zone == null ? AutoZone.autoZone : builder.zone;
95-
dns = initDns(builder);
96-
}
97-
98-
private static DnsManager initDns(Builder builder) {
99-
DnsManager d = builder.dns;
100-
return d;
100+
dns = builder.dns;
101101
}
102102

103103
private KeyGenerator getKeyGen(KeyGenerator keyGen) {
@@ -125,17 +125,40 @@ public static class Builder {
125125
private int responseTimeout = 60;
126126
private int retryMax = 3;
127127
private UrlConverter urlConverter = null;
128-
private DnsManager dns = null;
128+
private Dns dns = null;
129129

130130
public Builder() {
131+
buildDefaultDns();
132+
}
133+
134+
private void buildDefaultDns() {
131135
IResolver r1 = AndroidDnsServer.defaultResolver();
132136
IResolver r2 = null;
133137
try {
134138
r2 = new Resolver(InetAddress.getByName("119.29.29.29"));
135139
} catch (IOException ex) {
136140
ex.printStackTrace();
137141
}
138-
dns = new DnsManager(NetworkInfo.normal, new IResolver[]{r1, r2});
142+
final DnsManager happlyDns = new DnsManager(NetworkInfo.normal, new IResolver[]{r1, r2});
143+
144+
dns = new Dns() {
145+
@Override
146+
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
147+
InetAddress[] ips;
148+
try {
149+
ips = happlyDns.queryInetAdress(new Domain(hostname));
150+
} catch (IOException e) {
151+
e.printStackTrace();
152+
throw new UnknownHostException(e.getMessage());
153+
}
154+
if (ips == null) {
155+
throw new UnknownHostException(hostname + " resolve failed.");
156+
}
157+
List<InetAddress> l = new ArrayList<>();
158+
Collections.addAll(l, ips);
159+
return l;
160+
}
161+
};
139162
}
140163

141164
public Builder zone(Zone zone) {
@@ -189,7 +212,7 @@ public Builder urlConverter(UrlConverter converter) {
189212
return this;
190213
}
191214

192-
public Builder dns(DnsManager dns) {
215+
public Builder dns(Dns dns) {
193216
this.dns = dns;
194217
return this;
195218
}

0 commit comments

Comments
 (0)