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

Commit b9ef4dd2 authored by Luke Huang's avatar Luke Huang Committed by Gerrit Code Review
Browse files

Merge "Use IDnsResolver instead of INetd for resolver related binder commands"

parents bc350db9 6591477a
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -330,12 +330,6 @@ interface INetworkManagementService
     */
    void removeIdleTimer(String iface);

    /**
     * Configure name servers, search paths, and resolver parameters for the given network.
     */
    void setDnsConfigurationForNetwork(int netId, in String[] servers, in String[] domains,
            in int[] params, String tlsHostname, in String[] tlsServers);

    void setFirewallEnabled(boolean enabled);
    boolean isFirewallEnabled();
    void setFirewallInterfaceRule(String iface, boolean allow);
@@ -380,11 +374,6 @@ interface INetworkManagementService
     */
    void createVirtualNetwork(int netId, boolean secure);

    /**
     * Remove a network.
     */
    void removeNetwork(int netId);

    /**
     * Add an interface to a network.
     */
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ java_library_static {
        "android.hardware.configstore-V1.0-java",
        "android.hardware.contexthub-V1.0-java",
        "android.hidl.manager-V1.2-java",
        "dnsresolver_aidl_interface-java",
        "netd_aidl_interface-java",
        "netd_event_listener_interface-java",
    ],
+18 −8
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ import android.net.ConnectionInfo;
import android.net.ConnectivityManager;
import android.net.ICaptivePortal;
import android.net.IConnectivityManager;
import android.net.IDnsResolver;
import android.net.IIpConnectivityMetrics;
import android.net.INetd;
import android.net.INetdEventCallback;
@@ -294,6 +295,8 @@ public class ConnectivityService extends IConnectivityManager.Stub

    private INetworkManagementService mNMS;
    @VisibleForTesting
    protected IDnsResolver mDnsResolver;
    @VisibleForTesting
    protected INetd mNetd;
    private INetworkStatsService mStatsService;
    private INetworkPolicyManager mPolicyManager;
@@ -525,6 +528,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
        return sMagicDecoderRing.get(what, Integer.toString(what));
    }

    private static IDnsResolver getDnsResolver() {
        return IDnsResolver.Stub
                .asInterface(ServiceManager.getService("dnsresolver"));
    }

    /** Handler thread used for both of the handlers below. */
    @VisibleForTesting
    protected final HandlerThread mHandlerThread;
@@ -810,13 +818,14 @@ public class ConnectivityService extends IConnectivityManager.Stub

    public ConnectivityService(Context context, INetworkManagementService netManager,
            INetworkStatsService statsService, INetworkPolicyManager policyManager) {
        this(context, netManager, statsService, policyManager, new IpConnectivityLog());
        this(context, netManager, statsService, policyManager,
            getDnsResolver(), new IpConnectivityLog());
    }

    @VisibleForTesting
    protected ConnectivityService(Context context, INetworkManagementService netManager,
            INetworkStatsService statsService, INetworkPolicyManager policyManager,
            IpConnectivityLog logger) {
            IDnsResolver dnsresolver, IpConnectivityLog logger) {
        if (DBG) log("ConnectivityService starting up");

        mSystemProperties = getSystemProperties();
@@ -853,6 +862,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        mPolicyManagerInternal = checkNotNull(
                LocalServices.getService(NetworkPolicyManagerInternal.class),
                "missing NetworkPolicyManagerInternal");
        mDnsResolver = checkNotNull(dnsresolver, "missing IDnsResolver");
        mProxyTracker = makeProxyTracker();

        mNetd = NetdService.getInstance();
@@ -1006,7 +1016,7 @@ public class ConnectivityService extends IConnectivityManager.Stub

        mMultipathPolicyTracker = new MultipathPolicyTracker(mContext, mHandler);

        mDnsManager = new DnsManager(mContext, mNMS, mSystemProperties);
        mDnsManager = new DnsManager(mContext, mDnsResolver, mSystemProperties);
        registerPrivateDnsSettingsCallbacks();
    }

@@ -3021,9 +3031,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
            // NetworkFactories, so network traffic isn't interrupted for an unnecessarily
            // long time.
            try {
                mNMS.removeNetwork(nai.network.netId);
            } catch (Exception e) {
                loge("Exception removing network: " + e);
                mNetd.networkDestroy(nai.network.netId);
            } catch (RemoteException | ServiceSpecificException e) {
                loge("Exception destroying network: " + e);
            }
            mDnsManager.removeNetwork(nai.network);
        }
@@ -5379,8 +5389,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
        final NetworkCapabilities nc = new NetworkCapabilities(networkCapabilities);
        final NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(),
                new Network(reserveNetId()), new NetworkInfo(networkInfo), lp, nc, currentScore,
                mContext, mTrackerHandler, new NetworkMisc(networkMisc), this, mNetd, mNMS,
                factorySerialNumber);
                mContext, mTrackerHandler, new NetworkMisc(networkMisc), this, mNetd, mDnsResolver,
                mNMS, factorySerialNumber);
        // Make sure the network capabilities reflect what the agent info says.
        nai.networkCapabilities = mixInCapabilities(nai, nc);
        final String extraInfo = networkInfo.getExtraInfo();
+0 −29
Original line number Diff line number Diff line
@@ -1604,20 +1604,6 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
        return stats;
    }

    @Override
    public void setDnsConfigurationForNetwork(int netId, String[] servers, String[] domains,
                    int[] params, String tlsHostname, String[] tlsServers) {
        mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);

        final String[] tlsFingerprints = new String[0];
        try {
            mNetdService.setResolverConfiguration(
                    netId, servers, domains, params, tlsHostname, tlsServers, tlsFingerprints);
        } catch (RemoteException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void addVpnUidRanges(int netId, UidRange[] ranges) {
        mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
@@ -2075,21 +2061,6 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
        }
    }

    @Override
    public void removeNetwork(int netId) {
        mContext.enforceCallingOrSelfPermission(NETWORK_STACK, TAG);

        try {
            mNetdService.networkDestroy(netId);
        } catch (ServiceSpecificException e) {
            Log.w(TAG, "removeNetwork(" + netId + "): ", e);
            throw e;
        } catch (RemoteException e) {
            Log.w(TAG, "removeNetwork(" + netId + "): ", e);
            throw e.rethrowAsRuntimeException();
        }
    }

    @Override
    public void addInterfaceToNetwork(String iface, int netId) {
        modifyInterfaceInNetwork(MODIFY_OPERATION_ADD, netId, iface);
+17 −7
Original line number Diff line number Diff line
@@ -30,13 +30,15 @@ import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.net.IDnsResolver;
import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkUtils;
import android.net.Uri;
import android.net.shared.PrivateDnsConfig;
import android.os.Binder;
import android.os.INetworkManagementService;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
@@ -229,7 +231,7 @@ public class DnsManager {

    private final Context mContext;
    private final ContentResolver mContentResolver;
    private final INetworkManagementService mNMS;
    private final IDnsResolver mDnsResolver;
    private final MockableSystemProperties mSystemProperties;
    // TODO: Replace these Maps with SparseArrays.
    private final Map<Integer, PrivateDnsConfig> mPrivateDnsMap;
@@ -243,10 +245,10 @@ public class DnsManager {
    private String mPrivateDnsMode;
    private String mPrivateDnsSpecifier;

    public DnsManager(Context ctx, INetworkManagementService nms, MockableSystemProperties sp) {
    public DnsManager(Context ctx, IDnsResolver dnsResolver, MockableSystemProperties sp) {
        mContext = ctx;
        mContentResolver = mContext.getContentResolver();
        mNMS = nms;
        mDnsResolver = dnsResolver;
        mSystemProperties = sp;
        mPrivateDnsMap = new HashMap<>();
        mPrivateDnsValidationMap = new HashMap<>();
@@ -260,6 +262,12 @@ public class DnsManager {
    }

    public void removeNetwork(Network network) {
        try {
            mDnsResolver.clearResolverConfiguration(network.netId);
        } catch (RemoteException | ServiceSpecificException e) {
            Slog.e(TAG, "Error clearing DNS configuration: " + e);
            return;
        }
        mPrivateDnsMap.remove(network.netId);
        mPrivateDnsValidationMap.remove(network.netId);
    }
@@ -344,10 +352,12 @@ public class DnsManager {
        Slog.d(TAG, String.format("setDnsConfigurationForNetwork(%d, %s, %s, %s, %s, %s)",
                netId, Arrays.toString(assignedServers), Arrays.toString(domainStrs),
                Arrays.toString(params), tlsHostname, Arrays.toString(tlsServers)));
        final String[] tlsFingerprints = new String[0];
        try {
            mNMS.setDnsConfigurationForNetwork(
                    netId, assignedServers, domainStrs, params, tlsHostname, tlsServers);
        } catch (Exception e) {
            mDnsResolver.setResolverConfiguration(
                    netId, assignedServers, domainStrs, params,
                    tlsHostname, tlsServers, tlsFingerprints);
        } catch (RemoteException | ServiceSpecificException e) {
            Slog.e(TAG, "Error setting DNS configuration: " + e);
            return;
        }
Loading