Extend onDnsEvent callback to report more fields.

When native layer reports onDnsEvent, netId, eventType and
returnCode are available only in NetdEventListenerService, but
not for the clients who register event on it.

Thus, extend the callback to give clients more detail on the
network the look up was performed on and the result of the
lookup.

Bug: 113916551
Test: 1. runtest frameworks-net
      2. runtest frameworks-services -c com.android.server. \
         net.watchlist.NetworkWatchlistServiceTests
Change-Id: If7beecea50e1baf18cb5c6775ad3ecb1a60b312a
This commit is contained in:
junyulai
2018-10-16 22:58:07 +08:00
committed by Chiachang Wang
parent 0d63da86e2
commit 4c2d2d5461
6 changed files with 22 additions and 13 deletions

View File

@@ -28,6 +28,11 @@ oneway interface INetdEventCallback {
* Reports a single DNS lookup function call.
* This method must not block or perform long-running operations.
*
* @param netId the ID of the network the lookup was performed on.
* @param eventType one of the EVENT_* constants in {@link INetdEventListener}.
* @param returnCode the return value of the query, may vary based on {@code eventType}. See
* {@code getaddrinfo()}, {@code gethostbyaddr()} and {@code gethostbyname()} section in
* bionic/libc/include/netdb.h.
* @param hostname the name that was looked up.
* @param ipAddresses (possibly a subset of) the IP addresses returned.
* At most {@link #DNS_REPORTED_IP_ADDRESSES_LIMIT} addresses are logged.
@@ -36,8 +41,8 @@ oneway interface INetdEventCallback {
* @param timestamp the timestamp at which the query was reported by netd.
* @param uid the UID of the application that performed the query.
*/
void onDnsEvent(String hostname, in String[] ipAddresses, int ipAddressesCount, long timestamp,
int uid);
void onDnsEvent(int netId, int eventType, int returnCode, String hostname,
in String[] ipAddresses, int ipAddressesCount, long timestamp, int uid);
/**
* Represents a private DNS validation success or failure.

View File

@@ -26,8 +26,8 @@ import android.net.INetdEventCallback;
*/
public class BaseNetdEventCallback extends INetdEventCallback.Stub {
@Override
public void onDnsEvent(String hostname, String[] ipAddresses,
int ipAddressesCount, long timestamp, int uid) {
public void onDnsEvent(int netId, int eventType, int returnCode, String hostname,
String[] ipAddresses, int ipAddressesCount, long timestamp, int uid) {
// default no-op
}

View File

@@ -208,7 +208,8 @@ public class NetdEventListenerService extends INetdEventListener.Stub {
for (INetdEventCallback callback : mNetdEventCallbackList) {
if (callback != null) {
callback.onDnsEvent(hostname, ipAddresses, ipAddressesCount, timestamp, uid);
callback.onDnsEvent(netId, eventType, returnCode, hostname, ipAddresses,
ipAddressesCount, timestamp, uid);
}
}
}

View File

@@ -142,8 +142,8 @@ public class NetworkWatchlistService extends INetworkWatchlistManager.Stub {
private final INetdEventCallback mNetdEventCallback = new BaseNetdEventCallback() {
@Override
public void onDnsEvent(String hostname, String[] ipAddresses, int ipAddressesCount,
long timestamp, int uid) {
public void onDnsEvent(int netId, int eventType, int returnCode, String hostname,
String[] ipAddresses, int ipAddressesCount, long timestamp, int uid) {
if (!mIsLoggingEnabled) {
return;
}

View File

@@ -53,8 +53,8 @@ final class NetworkLogger {
private final INetdEventCallback mNetdEventCallback = new BaseNetdEventCallback() {
@Override
public void onDnsEvent(String hostname, String[] ipAddresses, int ipAddressesCount,
long timestamp, int uid) {
public void onDnsEvent(int netId, int eventType, int returnCode, String hostname,
String[] ipAddresses, int ipAddressesCount, long timestamp, int uid) {
if (!mIsLoggingEnabled.get()) {
return;
}

View File

@@ -51,7 +51,9 @@ import java.util.concurrent.TimeUnit;
@MediumTest
public class NetworkWatchlistServiceTests {
private static final long NETWOR_EVENT_TIMEOUT_SEC = 1;
private static final long NETWORK_EVENT_TIMEOUT_SEC = 1;
private static final int TEST_NETID = 100;
private static final int TEST_EVENT_TYPE = 1;
private static final String TEST_HOST = "testhost.com";
private static final String TEST_IP = "7.6.8.9";
private static final String[] TEST_IPS =
@@ -180,8 +182,9 @@ public class NetworkWatchlistServiceTests {
}
};
mWatchlistService.mNetworkWatchlistHandler = testDnsHandler;
connectivityMetrics.callback.onDnsEvent(TEST_HOST, TEST_IPS, TEST_IPS.length, 123L, 456);
if (!testDnsLatch.await(NETWOR_EVENT_TIMEOUT_SEC, TimeUnit.SECONDS)) {
connectivityMetrics.callback.onDnsEvent(TEST_NETID, TEST_EVENT_TYPE, 0,
TEST_HOST, TEST_IPS, TEST_IPS.length, 123L, 456);
if (!testDnsLatch.await(NETWORK_EVENT_TIMEOUT_SEC, TimeUnit.SECONDS)) {
fail("Timed out waiting for network event");
}
assertEquals(TEST_HOST, dnsParams[0]);
@@ -206,7 +209,7 @@ public class NetworkWatchlistServiceTests {
};
mWatchlistService.mNetworkWatchlistHandler = testConnectHandler;
connectivityMetrics.callback.onConnectEvent(TEST_IP, 80, 123L, 456);
if (!testConnectLatch.await(NETWOR_EVENT_TIMEOUT_SEC, TimeUnit.SECONDS)) {
if (!testConnectLatch.await(NETWORK_EVENT_TIMEOUT_SEC, TimeUnit.SECONDS)) {
fail("Timed out waiting for network event");
}
assertNull(connectParams[0]);