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

Commit ec9830e7 authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Android (Google) Code Review
Browse files

Merge "Pass DNS server info notifications to observers."

parents 64dea2c3 416740ad
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -90,4 +90,13 @@ interface INetworkManagementEventObserver {
     * @param active  True if the interface is actively transmitting data, false if it is idle.
     */
    void interfaceClassDataActivityChanged(String label, boolean active);

    /**
     * Information about available DNS servers has been received.
     *
     * @param iface The interface on which the information was received.
     * @param lifetime The time in seconds for which the DNS servers may be used.
     * @param servers The IP addresses of the DNS servers.
     */
    void interfaceDnsServerInfo(String iface, long lifetime, in String[] servers);
}
+5 −0
Original line number Diff line number Diff line
@@ -64,4 +64,9 @@ public class BaseNetworkObserver extends INetworkManagementEventObserver.Stub {
    public void limitReached(String limitName, String iface) {
        // default no-op
    }

    @Override
    public void interfaceDnsServerInfo(String iface, long lifetime, String[] servers) {
        // default no-op
    }
}
+36 −0
Original line number Diff line number Diff line
@@ -136,6 +136,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
        public static final int BandwidthControl          = 601;
        public static final int InterfaceClassActivity    = 613;
        public static final int InterfaceAddressChange    = 614;
        public static final int InterfaceDnsServerInfo    = 615;
    }

    /**
@@ -431,6 +432,21 @@ public class NetworkManagementService extends INetworkManagementService.Stub
        mObservers.finishBroadcast();
    }

    /**
     * Notify our observers of DNS server information received.
     */
    private void notifyInterfaceDnsServerInfo(String iface, long lifetime, String[] addresses) {
        final int length = mObservers.beginBroadcast();
        for (int i = 0; i < length; i++) {
            try {
                mObservers.getBroadcastItem(i).interfaceDnsServerInfo(iface, lifetime, addresses);
            } catch (RemoteException e) {
            } catch (RuntimeException e) {
            }
        }
        mObservers.finishBroadcast();
    }

    //
    // Netd Callback handling
    //
@@ -535,6 +551,26 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                    }
                    return true;
                    // break;
            case NetdResponseCode.InterfaceDnsServerInfo:
                    /*
                     * Information about available DNS servers has been received.
                     * Format: "NNN DnsInfo servers <interface> <lifetime> <servers>"
                     */
                    long lifetime;  // Actually a 32-bit unsigned integer.

                    if (cooked.length == 6 &&
                        cooked[1].equals("DnsInfo") &&
                        cooked[2].equals("servers")) {
                        try {
                            lifetime = Long.parseLong(cooked[4]);
                        } catch (NumberFormatException e) {
                            throw new IllegalStateException(errorMessage);
                        }
                        String[] servers = cooked[5].split(",");
                        notifyInterfaceDnsServerInfo(cooked[3], lifetime, servers);
                    }
                    return true;
                    // break;
            default: break;
            }
            return false;
+40 −0
Original line number Diff line number Diff line
@@ -172,6 +172,46 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
        sendMessage("666 Address added 2001:db8::1/64 wlan0 1 0");
        // Invalid code.


        /**
         * DNS information broadcasts.
         */
        sendMessage("615 DnsInfo servers rmnet_usb0 3600 2001:db8::1");
        expectSoon(observer).interfaceDnsServerInfo("rmnet_usb0", 3600,
                new String[]{"2001:db8::1"});

        sendMessage("615 DnsInfo servers wlan0 14400 2001:db8::1,2001:db8::2");
        expectSoon(observer).interfaceDnsServerInfo("wlan0", 14400,
                new String[]{"2001:db8::1", "2001:db8::2"});

        // We don't check for negative lifetimes, only for parse errors.
        sendMessage("615 DnsInfo servers wlan0 -3600 ::1");
        expectSoon(observer).interfaceDnsServerInfo("wlan0", -3600,
                new String[]{"::1"});

        sendMessage("615 DnsInfo servers wlan0 SIXHUNDRED ::1");
        // Non-numeric lifetime.

        sendMessage("615 DnsInfo servers wlan0 2001:db8::1");
        // Missing lifetime.

        sendMessage("615 DnsInfo servers wlan0 3600");
        // No servers.

        sendMessage("615 DnsInfo servers 3600 wlan0 2001:db8::1,2001:db8::2");
        // Non-numeric lifetime.

        sendMessage("615 DnsInfo wlan0 7200 2001:db8::1,2001:db8::2");
        // Invalid tokens.

        sendMessage("666 DnsInfo servers wlan0 5400 2001:db8::1");
        // Invalid code.

        // No syntax checking on the addresses.
        sendMessage("615 DnsInfo servers wlan0 600 ,::,,foo,::1,");
        expectSoon(observer).interfaceDnsServerInfo("wlan0", 600,
                new String[]{"", "::", "", "foo", "::1"});

        // Make sure nothing else was called.
        verifyNoMoreInteractions(observer);
    }