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

Commit b6fcddfd authored by paulhu's avatar paulhu
Browse files

Add DnsResolverServiceManager

Add DnsResolverServiceManager to obtain android.net.IDnsResolver
IBinder for incoming connectivity service mainline.

Bug: 170598012
Test: atest FrameworksNetTests
Change-Id: Ibd7a678ceaaa550ff3d8eff1d0c4d3a5073b5527
parent 14e70a65
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -6006,6 +6006,10 @@ package android.net {
    method @Deprecated public void onUpstreamChanged(@Nullable android.net.Network);
  }
  public class DnsResolverServiceManager {
    method @NonNull @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public static android.os.IBinder getService(@NonNull android.content.Context);
  }
  public class EthernetManager {
    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public android.net.EthernetManager.TetheredInterfaceRequest requestTetheredInterface(@NonNull java.util.concurrent.Executor, @NonNull android.net.EthernetManager.TetheredInterfaceCallback);
  }
+63 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package android.net;

import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.content.Context;
import android.os.IBinder;
import android.os.ServiceManager;

import java.util.Objects;

/**
 * Provides a way to obtain the DnsResolver binder objects.
 *
 * @hide
 */
@SystemApi
public class DnsResolverServiceManager {
    /**
     * Name to retrieve a {@link android.net.IDnsResolver} IBinder.
     */
    private static final String DNS_RESOLVER_SERVICE = "dnsresolver";

    private DnsResolverServiceManager() {}

    /**
     * Get an {@link IBinder} representing the DnsResolver stable AIDL interface
     *
     * @param context the context for permission check.
     * @return {@link android.net.IDnsResolver} IBinder.
     */
    @NonNull
    @RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK)
    public static IBinder getService(@NonNull final Context context) {
        Objects.requireNonNull(context);
        context.enforceCallingOrSelfPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
                "DnsResolverServiceManager");
        try {
            return ServiceManager.getServiceOrThrow(DNS_RESOLVER_SERVICE);
        } catch (ServiceManager.ServiceNotFoundException e) {
            // Catch ServiceManager#ServiceNotFoundException and rethrow IllegalStateException
            // because ServiceManager#ServiceNotFoundException is @hide so that it can't be listed
            // on the system api. Thus, rethrow IllegalStateException if dns resolver service cannot
            // be found.
            throw new IllegalStateException("Cannot find dns resolver service.");
        }
    }
}