Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73b82e41 authored by Luke Huang's avatar Luke Huang Committed by android-build-merger
Browse files

Merge "Minor change for async DNS API"

am: 80be1b11

Change-Id: I54a7695484b6523a92eaf246a4bb836fabc8957f
parents 9c9d146a 80be1b11
Loading
Loading
Loading
Loading
+28 −19
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ public final class DnsResolver {
    private static final String TAG = "DnsResolver";
    private static final int FD_EVENTS = EVENT_INPUT | EVENT_ERROR;
    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 = {
            CLASS_IN
@@ -228,8 +228,11 @@ public final class DnsResolver {
            return;
        }

        synchronized (lock)  {
            registerFDListener(executor, queryfd, callback, cancellationSignal, lock);
        maybeAddCancellationSignal(cancellationSignal, queryfd, lock);
            if (cancellationSignal == null) return;
            addCancellationSignal(cancellationSignal, queryfd, lock);
        }
    }

    /**
@@ -267,9 +270,11 @@ public final class DnsResolver {
            });
            return;
        }

        synchronized (lock)  {
            registerFDListener(executor, queryfd, callback, cancellationSignal, lock);
        maybeAddCancellationSignal(cancellationSignal, queryfd, lock);
            if (cancellationSignal == null) return;
            addCancellationSignal(cancellationSignal, queryfd, lock);
        }
    }

    private class InetAddressAnswerAccumulator extends InetAddressAnswerCallback {
@@ -368,10 +373,10 @@ public final class DnsResolver {
            queryCount++;
        } 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
        try {
            Thread.sleep(SLEEP_TIME);
            Thread.sleep(SLEEP_TIME_MS);
        } catch (InterruptedException ex) { }

        if (queryIpv4) {
@@ -391,9 +396,13 @@ public final class DnsResolver {
        final InetAddressAnswerAccumulator accumulator =
                new InetAddressAnswerAccumulator(queryCount, callback);

        if (queryIpv6) registerFDListener(executor, v6fd, accumulator, cancellationSignal, lock);
        if (queryIpv4) registerFDListener(executor, v4fd, accumulator, cancellationSignal, lock);

        synchronized (lock)  {
            if (queryIpv6) {
                registerFDListener(executor, v6fd, accumulator, cancellationSignal, lock);
            }
            if (queryIpv4) {
                registerFDListener(executor, v4fd, accumulator, cancellationSignal, lock);
            }
            if (cancellationSignal == null) return;
            cancellationSignal.setOnCancelListener(() -> {
                synchronized (lock)  {
@@ -402,6 +411,7 @@ public final class DnsResolver {
                }
            });
        }
    }

    private <T> void registerFDListener(@NonNull Executor executor,
            @NonNull FileDescriptor queryfd, @NonNull AnswerCallback<T> answerCallback,
@@ -443,9 +453,8 @@ public final class DnsResolver {
        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) {
        if (cancellationSignal == null) return;
        cancellationSignal.setOnCancelListener(() -> {
            synchronized (lock)  {
                cancelQuery(queryfd);