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

Commit 5bf7aa2a authored by Luke Huang's avatar Luke Huang
Browse files

Minor change for async DNS API

do the minor changes to address comments before

Bug: 129395490
Test: atest DnsResolverTest
Change-Id: I56e2e5bc4352ff5c979579247a333a41950079da
parent e9b2bba3
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);