4399游戏盒 v7.2.1.31版本的 MD5 值为:951717f45e3fda95c8a358caf4ca93e1
以下内容为反编译后的 Pinger.java 源代码,内容仅作参考
package com.danikula.videocache;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Pinger {
private static final String PING_REQUEST = "ping";
private static final String PING_RESPONSE = "ping ok";
private final String host;
private final ExecutorService pingExecutor = Executors.newSingleThreadExecutor();
private final int port;
public Pinger(String str, int i) {
this.host = (String) Preconditions.checkNotNull(str);
this.port = i;
}
public boolean ping(int i, int i2) {
Preconditions.checkArgument(i >= 1);
Preconditions.checkArgument(i2 > 0);
int i3 = i2;
int i4 = 0;
while (i4 < i) {
if (((Boolean) this.pingExecutor.submit(new PingCallable()).get(i3, TimeUnit.MILLISECONDS)).booleanValue()) {
return true;
}
i4++;
i3 *= 2;
}
String.format(Locale.US, "Error pinging server (attempts: %d, max timeout: %d). If you see this message, please, report at https://github.com/danikula/AndroidVideoCache/issues/134. Default proxies are: %s", Integer.valueOf(i4), Integer.valueOf(i3 / 2), getDefaultProxies());
return false;
}
private List<Proxy> getDefaultProxies() {
try {
return ProxySelector.getDefault().select(new URI(getPingUrl()));
} catch (URISyntaxException e) {
throw new IllegalStateException(e);
}
}
public boolean isPingRequest(String str) {
return PING_REQUEST.equals(str);
}
public void responseToPing(Socket socket) throws IOException {
OutputStream outputStream = socket.getOutputStream();
outputStream.write("HTTP/1.1 200 OK\n\n".getBytes());
outputStream.write(PING_RESPONSE.getBytes());
}
public boolean pingServer() throws ProxyCacheException {
HttpUrlSource httpUrlSource = new HttpUrlSource(getPingUrl());
try {
byte[] bytes = PING_RESPONSE.getBytes();
httpUrlSource.open(0L);
byte[] bArr = new byte[bytes.length];
httpUrlSource.read(bArr);
return Arrays.equals(bytes, bArr);
} catch (ProxyCacheException unused) {
return false;
} finally {
httpUrlSource.close();
}
}
private String getPingUrl() {
return String.format(Locale.US, "http://%s:%d/%s", this.host, Integer.valueOf(this.port), PING_REQUEST);
}
private class PingCallable implements Callable<Boolean> {
private PingCallable() {
}
@Override
public Boolean call() throws Exception {
return Boolean.valueOf(Pinger.this.pingServer());
}
}
}