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

Commit 80be1b11 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Minor change for async DNS API"

parents e5709bf7 5bf7aa2a
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);