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

Commit 7475c0ce authored by Mattias Falk's avatar Mattias Falk Committed by Johan Redestig
Browse files

Added methods to support dns cache per interface

Added some methods to NetworkManagementService
as part of the work to implement a dns cache
per interface.

Change-Id: I5c7369075dee6b6a4ff67b27f1df7cc124f54c14
parent 08d9d9a4
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);
        }
    }
}