Merge "Minor change for async DNS API" am: 80be1b1127
am: e0b323df1b
Change-Id: If69e95dbb3cba98af84079506d898350f812a7de
This commit is contained in:
@@ -62,7 +62,7 @@ public final class DnsResolver {
|
|||||||
private static final String TAG = "DnsResolver";
|
private static final String TAG = "DnsResolver";
|
||||||
private static final int FD_EVENTS = EVENT_INPUT | EVENT_ERROR;
|
private static final int FD_EVENTS = EVENT_INPUT | EVENT_ERROR;
|
||||||
private static final int MAXPACKET = 8 * 1024;
|
private static final int MAXPACKET = 8 * 1024;
|
||||||
private static final int SLEEP_TIME = 2;
|
private static final int SLEEP_TIME_MS = 2;
|
||||||
|
|
||||||
@IntDef(prefix = { "CLASS_" }, value = {
|
@IntDef(prefix = { "CLASS_" }, value = {
|
||||||
CLASS_IN
|
CLASS_IN
|
||||||
@@ -228,8 +228,11 @@ public final class DnsResolver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
registerFDListener(executor, queryfd, callback, cancellationSignal, lock);
|
synchronized (lock) {
|
||||||
maybeAddCancellationSignal(cancellationSignal, queryfd, lock);
|
registerFDListener(executor, queryfd, callback, cancellationSignal, lock);
|
||||||
|
if (cancellationSignal == null) return;
|
||||||
|
addCancellationSignal(cancellationSignal, queryfd, lock);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -267,9 +270,11 @@ public final class DnsResolver {
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
synchronized (lock) {
|
||||||
registerFDListener(executor, queryfd, callback, cancellationSignal, lock);
|
registerFDListener(executor, queryfd, callback, cancellationSignal, lock);
|
||||||
maybeAddCancellationSignal(cancellationSignal, queryfd, lock);
|
if (cancellationSignal == null) return;
|
||||||
|
addCancellationSignal(cancellationSignal, queryfd, lock);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class InetAddressAnswerAccumulator extends InetAddressAnswerCallback {
|
private class InetAddressAnswerAccumulator extends InetAddressAnswerCallback {
|
||||||
@@ -368,10 +373,10 @@ public final class DnsResolver {
|
|||||||
queryCount++;
|
queryCount++;
|
||||||
} else v6fd = null;
|
} else v6fd = null;
|
||||||
|
|
||||||
// TODO: Use device flag to controll the sleep time.
|
// TODO: Use device flag to control the sleep time.
|
||||||
// Avoiding gateways drop packets if queries are sent too close together
|
// Avoiding gateways drop packets if queries are sent too close together
|
||||||
try {
|
try {
|
||||||
Thread.sleep(SLEEP_TIME);
|
Thread.sleep(SLEEP_TIME_MS);
|
||||||
} catch (InterruptedException ex) { }
|
} catch (InterruptedException ex) { }
|
||||||
|
|
||||||
if (queryIpv4) {
|
if (queryIpv4) {
|
||||||
@@ -391,16 +396,21 @@ public final class DnsResolver {
|
|||||||
final InetAddressAnswerAccumulator accumulator =
|
final InetAddressAnswerAccumulator accumulator =
|
||||||
new InetAddressAnswerAccumulator(queryCount, callback);
|
new InetAddressAnswerAccumulator(queryCount, callback);
|
||||||
|
|
||||||
if (queryIpv6) registerFDListener(executor, v6fd, accumulator, cancellationSignal, lock);
|
synchronized (lock) {
|
||||||
if (queryIpv4) registerFDListener(executor, v4fd, accumulator, cancellationSignal, lock);
|
if (queryIpv6) {
|
||||||
|
registerFDListener(executor, v6fd, accumulator, cancellationSignal, lock);
|
||||||
if (cancellationSignal == null) return;
|
|
||||||
cancellationSignal.setOnCancelListener(() -> {
|
|
||||||
synchronized (lock) {
|
|
||||||
if (queryIpv4) cancelQuery(v4fd);
|
|
||||||
if (queryIpv6) cancelQuery(v6fd);
|
|
||||||
}
|
}
|
||||||
});
|
if (queryIpv4) {
|
||||||
|
registerFDListener(executor, v4fd, accumulator, cancellationSignal, lock);
|
||||||
|
}
|
||||||
|
if (cancellationSignal == null) return;
|
||||||
|
cancellationSignal.setOnCancelListener(() -> {
|
||||||
|
synchronized (lock) {
|
||||||
|
if (queryIpv4) cancelQuery(v4fd);
|
||||||
|
if (queryIpv6) cancelQuery(v6fd);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> void registerFDListener(@NonNull Executor executor,
|
private <T> void registerFDListener(@NonNull Executor executor,
|
||||||
@@ -443,9 +453,8 @@ public final class DnsResolver {
|
|||||||
resNetworkCancel(queryfd); // Closes fd, marks it invalid.
|
resNetworkCancel(queryfd); // Closes fd, marks it invalid.
|
||||||
}
|
}
|
||||||
|
|
||||||
private void maybeAddCancellationSignal(@Nullable CancellationSignal cancellationSignal,
|
private void addCancellationSignal(@NonNull CancellationSignal cancellationSignal,
|
||||||
@NonNull FileDescriptor queryfd, @NonNull Object lock) {
|
@NonNull FileDescriptor queryfd, @NonNull Object lock) {
|
||||||
if (cancellationSignal == null) return;
|
|
||||||
cancellationSignal.setOnCancelListener(() -> {
|
cancellationSignal.setOnCancelListener(() -> {
|
||||||
synchronized (lock) {
|
synchronized (lock) {
|
||||||
cancelQuery(queryfd);
|
cancelQuery(queryfd);
|
||||||
|
|||||||
Reference in New Issue
Block a user