Skip to content

Commit 29667af

Browse files
committed
更改 dns 接口,更通用
1 parent 28f7bff commit 29667af

File tree

4 files changed

+67
-27
lines changed

4 files changed

+67
-27
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 & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,22 @@
44
import com.qiniu.android.common.AutoZone;
55
import com.qiniu.android.common.Zone;
66
import com.qiniu.android.dns.DnsManager;
7+
import com.qiniu.android.dns.Domain;
78
import com.qiniu.android.dns.IResolver;
89
import com.qiniu.android.dns.NetworkInfo;
910
import com.qiniu.android.dns.local.AndroidDnsServer;
1011
import com.qiniu.android.dns.local.Resolver;
12+
import com.qiniu.android.http.Dns;
1113
import com.qiniu.android.http.ProxyConfiguration;
1214
import com.qiniu.android.http.UrlConverter;
1315

1416
import java.io.File;
1517
import java.io.IOException;
1618
import java.net.InetAddress;
19+
import java.net.UnknownHostException;
20+
import java.util.ArrayList;
21+
import java.util.Collections;
22+
import java.util.List;
1723

1824
public final class Configuration {
1925

@@ -60,7 +66,7 @@ public final class Configuration {
6066
/**
6167
* dns 解析客户端
6268
*/
63-
public DnsManager dns;
69+
public Dns dns;
6470

6571
/**
6672
* 上传区域
@@ -92,12 +98,7 @@ private Configuration(Builder builder) {
9298
urlConverter = builder.urlConverter;
9399

94100
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;
101+
dns = builder.dns;
101102
}
102103

103104
private KeyGenerator getKeyGen(KeyGenerator keyGen) {
@@ -125,17 +126,40 @@ public static class Builder {
125126
private int responseTimeout = 60;
126127
private int retryMax = 3;
127128
private UrlConverter urlConverter = null;
128-
private DnsManager dns = null;
129+
private Dns dns = null;
129130

130131
public Builder() {
132+
buildDefaultDns();
133+
}
134+
135+
private void buildDefaultDns() {
131136
IResolver r1 = AndroidDnsServer.defaultResolver();
132137
IResolver r2 = null;
133138
try {
134139
r2 = new Resolver(InetAddress.getByName("119.29.29.29"));
135140
} catch (IOException ex) {
136141
ex.printStackTrace();
137142
}
138-
dns = new DnsManager(NetworkInfo.normal, new IResolver[]{r1, r2});
143+
final DnsManager happlyDns = new DnsManager(NetworkInfo.normal, new IResolver[]{r1, r2});
144+
145+
dns = new Dns() {
146+
@Override
147+
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
148+
InetAddress[] ips;
149+
try {
150+
ips = happlyDns.queryInetAdress(new Domain(hostname));
151+
} catch (IOException e) {
152+
e.printStackTrace();
153+
throw new UnknownHostException(e.getMessage());
154+
}
155+
if (ips == null) {
156+
throw new UnknownHostException(hostname + " resolve failed.");
157+
}
158+
List<InetAddress> l = new ArrayList<>();
159+
Collections.addAll(l, ips);
160+
return l;
161+
}
162+
};
139163
}
140164

141165
public Builder zone(Zone zone) {
@@ -189,7 +213,7 @@ public Builder urlConverter(UrlConverter converter) {
189213
return this;
190214
}
191215

192-
public Builder dns(DnsManager dns) {
216+
public Builder dns(Dns dns) {
193217
this.dns = dns;
194218
return this;
195219
}

0 commit comments

Comments
 (0)