Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
#Changelog
## 8.2.0(2021-02-20)
## 增加
* 增加网络监控功能,选择最优 Host 进行上传
* 优化日志统计

## 8.1.2(2021-01-18)
* 区域查询采用SingleFlight模式
* 增加网络链接状态检测
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ https://github.com/qiniudemo/qiniu-lab-android

| Qiniu SDK 版本 | 最低 Android版本 | 依赖库版本 |
|------------ |-----------------|------------------------|
| 8.2.x | Android 5.0+ | okhttp 4+ |
| 8.1.x | Android 5.0+ | okhttp 4+ |
| 8.0.x | Android 5.0+ | okhttp 4+ |
| 7.7.x | Android 5.0+ | okhttp 4+ |
Expand All @@ -28,7 +29,7 @@ https://github.com/qiniudemo/qiniu-lab-android
| 7.0.7 | Android 2.2+ | android-async-http 1.4.8 |

### 注意
* 推荐使用最新版:8.1.2
* 推荐使用最新版:8.2.0
* AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效)
```
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public void testCheck() {
int maxCount = 100;
int successCount = 0;
for (int i = 0; i < maxCount; i++) {
if (ConnectChecker.check()) {
if (ConnectChecker.isConnected(ConnectChecker.check())) {
successCount += 1;
}
}
Expand All @@ -23,7 +23,7 @@ public void testCustomCheckHosts() {
int maxCount = 100;
int successCount = 0;
for (int i = 0; i < maxCount; i++) {
if (ConnectChecker.check()) {
if (ConnectChecker.isConnected(ConnectChecker.check())) {
successCount += 1;
}
}
Expand All @@ -36,7 +36,7 @@ public void testNotConnected() {
int maxCount = 100;
int successCount = 0;
for (int i = 0; i < maxCount; i++) {
if (ConnectChecker.check()) {
if (ConnectChecker.isConnected(ConnectChecker.check())) {
successCount += 1;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,12 @@ public void test_CheckAndPrefetch(){
public void run() {

boolean isSuccess = DnsPrefetchTransaction.addDnsCheckAndPrefetchTransaction(zone, UpToken.parse(TestConfig.token_z0));
if (isSuccess){
successCount += 1;
synchronized (this) {
if (isSuccess) {
successCount += 1;
}
completeCount += 1;
}
completeCount += 1;
}
}).start();
}
Expand All @@ -80,7 +82,7 @@ public boolean shouldWait() {
}
}, 60);

assertTrue("successCount:" + successCount, successCount < 2);
assertTrue("successCount:" + successCount, successCount < 3);
}


Expand Down
12 changes: 6 additions & 6 deletions library/src/androidTest/java/com/qiniu/android/TestConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@ public final class TestConfig {
// TODO: 2020-05-09 bad token for testPutBytesWithFixedZoneUseBackupDomains
// 华东上传凭证
public static final String bucket_z0 = "kodo-phone-zone0-space";
public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Tq8MZRIC2hc1hxWxH3RqLcdFuQw=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:m1kHxpdaFH3NK120iAkHlSwBpio=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
// 华北上传凭证
public static final String bucket_z1 = "kodo-phone-zone1-space";
public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:FZiNMb3SKDFpdat2q9wpG6zbn_w=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:1vkQkb72ANFiAftABJAF2dhbXd0=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
// 华南上传凭证
public static final String bucket_z2 = "kodo-phone-zone2-space";
public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:cP9NhEWUWhPrxlfAxaemVj6uIKI=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:ZTqDdbvHJuP3hJFckpadCyW08Cs=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
// 北美上传凭证
public static final String bucket_na0 = "kodo-phone-zone-na0-space";
public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:V9zBCBaNWrKZvqLu4b5Dem0hOrQ=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:I8Q0E32hEelHH4xWBH2p17SxhdA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
// 东南亚上传凭证
public static final String bucket_as0 = "kodo-phone-zone-as0-space";
public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PaaKXdrwQgI4J7Fw5nhtbwQ_bu8=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:k9olgJ5rgs-SvzirMtdU_ASmArY=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjEzMTg0ODQ4LCAicmV0dXJuQm9keSI6IntcImNhbGxiYWNrVXJsXCI6XCJodHRwOlwvXC9jYWxsYmFjay5kZXYucWluaXUuaW9cIiwgXCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:DDXIo7KzUj3ceh5LveRXyNfsiZU=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Kpi_0B6gZSf7nF5UgdZtvHx0h8M=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjE4ODE0MzkwLCAicmV0dXJuQm9keSI6IntcImNhbGxiYWNrVXJsXCI6XCJodHRwOlwvXC9jYWxsYmFjay5kZXYucWluaXUuaW9cIiwgXCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";

// -----------
public static final String ak = "bjtWBQXrcxgo7HWwlC_bgHg81j352_GhgBGZPeOW";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.qiniu.android.common.FixedZone;
import com.qiniu.android.http.request.IUploadServer;
import com.qiniu.android.http.request.UploadRequestState;
import com.qiniu.android.http.serverRegion.UploadDomainRegion;
import com.qiniu.android.http.serverRegion.UploadServerFreezeManager;
import com.qiniu.android.utils.Utils;
Expand All @@ -18,9 +19,11 @@ public void testGetOneServer(){
UploadDomainRegion region = new UploadDomainRegion();
region.setupRegionData(zone.getZonesInfo(null).zonesInfo.get(0));

UploadServerFreezeManager.getInstance().freezeHost(host, type, 100);
UploadServerFreezeManager.getInstance().freezeType(type, 100);

IUploadServer server = region.getNextServer(false, null, null);
UploadRequestState state = new UploadRequestState();
state.setUseOldServer(false);
IUploadServer server = region.getNextServer(state, null, null);

assertNotNull(server);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,23 @@ public void testFreeze() {

String host = "baidu.com";
String type = host;
UploadServerFreezeManager.getInstance().freezeHost(host, type, 10);
UploadServerFreezeManager.getInstance().freezeType(type, 10);

boolean isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
boolean isFrozen = UploadServerFreezeManager.getInstance().isTypeFrozen(type);
assertTrue(isFrozen);
}

public void testUnfreeze() {

String host = "baidu.com";
String type = host;
UploadServerFreezeManager.getInstance().freezeHost(host, type, 10);
UploadServerFreezeManager.getInstance().freezeType(type, 10);

boolean isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
boolean isFrozen = UploadServerFreezeManager.getInstance().isTypeFrozen(type);
assertTrue(isFrozen);

UploadServerFreezeManager.getInstance().unfreezeHost(host, type);
isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
UploadServerFreezeManager.getInstance().unfreezeType(type);
isFrozen = UploadServerFreezeManager.getInstance().isTypeFrozen(type);
assertTrue(isFrozen == false);

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public String toJson(){
public static final String RequestKeyStatusCode = "status_code";
public static final String RequestKeyRequestId = "req_id";
public static final String RequestKeyHost = "host";
public static final String RequestKeyHttpVersion = "http_version";
public static final String RequestKeyRemoteIp = "remote_ip";
public static final String RequestKeyPort = "port";
public static final String RequestKeyTargetBucket = "target_bucket";
Expand Down Expand Up @@ -80,6 +81,7 @@ public String toJson(){
public static final String RequestKeyPrefetchedDnsSource = "prefetched_dns_source";
public static final String RequestKeyPrefetchedBefore = "prefetched_before";
public static final String RequestKeyPrefetchedErrorMessage = "prefetched_error_message";
public static final String RequestKeyNetworkMeasuring = "network_measuring";

// 分块上传统计⽇志
public static final String BlockKeyLogType = "log_type";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ public void complete(Object value) {

} catch (Exception e) {
/// 此处永远不会执行,回调只为占位
completeHandler.complete(ResponseInfo.NetworkError, ResponseInfo.localIOError("uc query"), null);
completeHandler.complete(ResponseInfo.NetworkError, ResponseInfo.localIOError(e.toString()), null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@


public final class Constants {
public static final String VERSION = "8.1.2";
public static final String VERSION = "8.2.0";

public static final String UTF_8 = "utf-8";
}
13 changes: 12 additions & 1 deletion library/src/main/java/com/qiniu/android/common/ZoneInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public class ZoneInfo {
private static int DOMAIN_FROZEN_SECONDS = 10 * 60;

public final int ttl;
public final boolean http3Enabled;
public final List<String> domains;
public final List<String> old_domains;

Expand Down Expand Up @@ -70,10 +71,12 @@ public static ZoneInfo buildInfo(List<String> mainHosts,
}

private ZoneInfo(int ttl,
boolean http3Enabled,
String regionId,
List<String> domains,
List<String> old_domains) {
this.ttl = ttl;
this.http3Enabled = http3Enabled;
this.regionId = regionId;
this.domains = domains;
this.old_domains = old_domains;
Expand All @@ -91,6 +94,14 @@ public static ZoneInfo buildFromJson(JSONObject obj) throws JSONException {
}

int ttl = obj.optInt("ttl");
boolean http3Enabled = false;
try {
JSONObject features = obj.getJSONObject("features");
JSONObject http3 = features.getJSONObject("http3");
http3Enabled = http3.getBoolean("enabled");
} catch (Exception ignored) {
}

String regionId = obj.optString("region");
if (regionId == null) {
regionId = EmptyRegionId;
Expand Down Expand Up @@ -130,7 +141,7 @@ public static ZoneInfo buildFromJson(JSONObject obj) throws JSONException {
return null;
}

ZoneInfo zoneInfo = new ZoneInfo(ttl, regionId, domains, old_domains);
ZoneInfo zoneInfo = new ZoneInfo(ttl, http3Enabled, regionId, domains, old_domains);
zoneInfo.detailInfo = obj;

zoneInfo.allHosts = allHosts;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,53 +14,57 @@

public class ConnectChecker {

private static SingleFlight<Boolean> singleFlight = new SingleFlight<>();
private static SingleFlight<UploadSingleRequestMetrics> singleFlight = new SingleFlight<>();

public static boolean check() {
public static boolean isConnected(UploadSingleRequestMetrics metrics) {
return metrics != null && metrics.response != null && metrics.response.statusCode > 99;
}

public static UploadSingleRequestMetrics check() {

final CheckResult result = new CheckResult();

final Wait wait = new Wait();
check(new CheckCompleteHandler() {
@Override
public void complete(boolean isConnected) {
result.isConnected = isConnected;
public void complete(UploadSingleRequestMetrics metrics) {
result.metrics = metrics;
wait.stopWait();
}
});
wait.startWait();

return result.isConnected;
return result.metrics;
}

private static void check(final CheckCompleteHandler completeHandler) {

try {
singleFlight.perform("connect_check", new SingleFlight.ActionHandler<Boolean>() {
singleFlight.perform("connect_check", new SingleFlight.ActionHandler<UploadSingleRequestMetrics>() {
@Override
public void action(final SingleFlight.CompleteHandler<Boolean> singleFlightComplete) throws Exception {
public void action(final SingleFlight.CompleteHandler<UploadSingleRequestMetrics> singleFlightComplete) throws Exception {
checkAllHosts(new CheckCompleteHandler() {
@Override
public void complete(boolean isConnected) {
singleFlightComplete.complete(isConnected);
public void complete(UploadSingleRequestMetrics metrics) {
singleFlightComplete.complete(metrics);
}
});
}
}, new SingleFlight.CompleteHandler<Boolean>() {
}, new SingleFlight.CompleteHandler<UploadSingleRequestMetrics>() {
@Override
public void complete(Boolean value) {
completeHandler.complete(value);
public void complete(UploadSingleRequestMetrics metrics) {
completeHandler.complete(metrics);
}
});
} catch (Exception e) {
completeHandler.complete(true);
completeHandler.complete(null);
}
}

private static void checkAllHosts(final CheckCompleteHandler completeHandler) {
String[] allHosts = GlobalConfiguration.getInstance().connectCheckURLStrings;
if (allHosts == null) {
completeHandler.complete(true);
completeHandler.complete(null);
return;
}

Expand All @@ -72,8 +76,8 @@ private static void checkAllHosts(final CheckCompleteHandler completeHandler) {
for (String host : allHosts) {
checkHost(host, new CheckCompleteHandler() {
@Override
public void complete(boolean isHostConnected) {

public void complete(UploadSingleRequestMetrics metrics) {
boolean isHostConnected = isConnected(metrics);
synchronized (checkStatus) {
checkStatus.completeCount += 1;
}
Expand All @@ -90,7 +94,7 @@ public void complete(boolean isHostConnected) {
checkStatus.isCompleted = true;
}
}
completeHandler.complete(checkStatus.isConnected);
completeHandler.complete(metrics);
} else {
LogUtil.i("== check all hosts not completed totalCount:" + checkStatus.totalCount + " completeCount:" + checkStatus.completeCount);
}
Expand All @@ -109,20 +113,15 @@ private static void checkHost(final String host, final CheckCompleteHandler comp
client.request(request, true, null, null, new IRequestClient.RequestClientCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, UploadSingleRequestMetrics metrics, JSONObject response) {
if (responseInfo.statusCode > 99) {
LogUtil.i("== checkHost:" + host + " result: true");
completeHandler.complete(true);
} else {
LogUtil.i("== checkHost:" + host + " result: false");
completeHandler.complete(false);
}
LogUtil.i("== checkHost:" + host + " responseInfo:" + responseInfo);
completeHandler.complete(metrics);
}
});
}


private interface CheckCompleteHandler {
void complete(boolean isConnected);
void complete(UploadSingleRequestMetrics metrics);
}

private static class CheckStatus {
Expand All @@ -133,6 +132,6 @@ private static class CheckStatus {
}

private static class CheckResult {
private boolean isConnected = false;
private UploadSingleRequestMetrics metrics;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@

public class UploadSingleRequestMetrics {

// 请求的 httpVersion
public String httpVersion;

// 只有进行网络检测才会有 connectCheckMetrics
public UploadSingleRequestMetrics connectCheckMetrics;

public Request request;
public ResponseInfo response;

Expand Down
Loading