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

Commit 38bb0123 authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android Code Review
Browse files

Merge "Added methods to support dns cache per interface"

parents e06749e1 7475c0ce
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -207,4 +207,23 @@ interface INetworkManagementService
     */
    int getInterfaceTxThrottle(String iface);

    /**
     * Sets the name of the default interface in the DNS resolver.
     */
    void setDefaultInterfaceForDns(String iface);

    /**
     * Bind name servers to an interface in the DNS resolver.
     */
    void setDnsServersForInterface(String iface, in String[] servers);

    /**
     * Flush the DNS cache associated with the default interface
     */
    void flushDefaultDnsCache();

    /**
     * Flush the DNS cache associated with the specified interface
     */
    void flushInterfaceDnsCache(String iface);
}
+61 −0
Original line number Diff line number Diff line
@@ -784,4 +784,65 @@ class NetworkManagementService extends INetworkManagementService.Stub {
    public int getInterfaceTxThrottle(String iface) {
        return getInterfaceThrottle(iface, false);
    }

    public void setDefaultInterfaceForDns(String iface) throws IllegalStateException {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
        try {
            String cmd = "resolver setdefaultif " + iface;

            mConnector.doCommand(cmd);
        } catch (NativeDaemonConnectorException e) {
            throw new IllegalStateException(
                    "Error communicating with native daemon to set default interface", e);
        }
    }

    public void setDnsServersForInterface(String iface, String[] servers)
            throws IllegalStateException {
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CHANGE_NETWORK_STATE,
                "NetworkManagementService");
        try {
            String cmd = "resolver setifdns " + iface;
            for (String s : servers) {
                if (s != null && !"0.0.0.0".equals(s) &&
                        !"::".equals(s) && !"0:0:0:0:0:0:0:0".equals(s)) {
                    cmd += " " + InetAddress.getByName(s).getHostAddress();
                }
            }

            mConnector.doCommand(cmd);
        } catch (UnknownHostException e) {
            throw new IllegalStateException("failed to resolve dns address.", e);
        } catch (NativeDaemonConnectorException e) {
            throw new IllegalStateException(
                    "Error communicating with native deamon to set dns for interface", e);
        }
    }

    public void flushDefaultDnsCache() throws IllegalStateException {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
        try {
            String cmd = "resolver flushdefaultif";

            mConnector.doCommand(cmd);
        } catch (NativeDaemonConnectorException e) {
            throw new IllegalStateException(
                    "Error communicating with native deamon to flush default interface", e);
        }
    }

    public void flushInterfaceDnsCache(String iface) throws IllegalStateException {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
        try {
            String cmd = "resolver flushif " + iface;

            mConnector.doCommand(cmd);
        } catch (NativeDaemonConnectorException e) {
            throw new IllegalStateException(
                    "Error communicating with native deamon to flush interface " + iface, e);
        }
    }
}