Revert "Revert "Record DiscoveryManager history logs for better ..."
Revert submission 2542434-revert-2535219-TAMNEZLAHT Reason for revert: Prepare a fix for the original topic Reverted changes: /q/submissionid:2542434-revert-2535219-TAMNEZLAHT Change-Id: I718418e4499784255b177622e3c08a82d0b24640
This commit is contained in:
@@ -23,16 +23,16 @@ import android.annotation.NonNull;
|
|||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.RequiresPermission;
|
import android.annotation.RequiresPermission;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.server.connectivity.mdns.util.MdnsLogger;
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ import java.util.List;
|
|||||||
public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
|
public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
|
||||||
private static final String TAG = MdnsDiscoveryManager.class.getSimpleName();
|
private static final String TAG = MdnsDiscoveryManager.class.getSimpleName();
|
||||||
public static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
public static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
||||||
private static final MdnsLogger LOGGER = new MdnsLogger("MdnsDiscoveryManager");
|
private static final SharedLog LOGGER = new SharedLog(TAG);
|
||||||
|
|
||||||
private final ExecutorProvider executorProvider;
|
private final ExecutorProvider executorProvider;
|
||||||
private final MdnsSocketClientBase socketClient;
|
private final MdnsSocketClientBase socketClient;
|
||||||
@@ -120,9 +120,7 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
|
|||||||
@NonNull String serviceType,
|
@NonNull String serviceType,
|
||||||
@NonNull MdnsServiceBrowserListener listener,
|
@NonNull MdnsServiceBrowserListener listener,
|
||||||
@NonNull MdnsSearchOptions searchOptions) {
|
@NonNull MdnsSearchOptions searchOptions) {
|
||||||
LOGGER.log(
|
LOGGER.i("Registering listener for serviceType: " + serviceType);
|
||||||
"Registering listener for subtypes: %s",
|
|
||||||
TextUtils.join(",", searchOptions.getSubtypes()));
|
|
||||||
if (perNetworkServiceTypeClients.isEmpty()) {
|
if (perNetworkServiceTypeClients.isEmpty()) {
|
||||||
// First listener. Starts the socket client.
|
// First listener. Starts the socket client.
|
||||||
try {
|
try {
|
||||||
@@ -157,8 +155,7 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
|
|||||||
@RequiresPermission(permission.CHANGE_WIFI_MULTICAST_STATE)
|
@RequiresPermission(permission.CHANGE_WIFI_MULTICAST_STATE)
|
||||||
public synchronized void unregisterListener(
|
public synchronized void unregisterListener(
|
||||||
@NonNull String serviceType, @NonNull MdnsServiceBrowserListener listener) {
|
@NonNull String serviceType, @NonNull MdnsServiceBrowserListener listener) {
|
||||||
LOGGER.log("Unregistering listener for service type: %s", serviceType);
|
LOGGER.i("Unregistering listener for serviceType:" + serviceType);
|
||||||
if (DBG) Log.d(TAG, "Unregistering listener for serviceType:" + serviceType);
|
|
||||||
final List<MdnsServiceTypeClient> serviceTypeClients =
|
final List<MdnsServiceTypeClient> serviceTypeClients =
|
||||||
perNetworkServiceTypeClients.getByServiceType(serviceType);
|
perNetworkServiceTypeClients.getByServiceType(serviceType);
|
||||||
if (serviceTypeClients.isEmpty()) {
|
if (serviceTypeClients.isEmpty()) {
|
||||||
@@ -198,11 +195,19 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Dump info to dumpsys */
|
||||||
|
public void dump(PrintWriter pw) {
|
||||||
|
LOGGER.reverseDump(pw);
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType,
|
MdnsServiceTypeClient createServiceTypeClient(@NonNull String serviceType,
|
||||||
@Nullable Network network) {
|
@Nullable Network network) {
|
||||||
|
LOGGER.log("createServiceTypeClient for serviceType:" + serviceType
|
||||||
|
+ " network:" + network);
|
||||||
return new MdnsServiceTypeClient(
|
return new MdnsServiceTypeClient(
|
||||||
serviceType, socketClient,
|
serviceType, socketClient,
|
||||||
executorProvider.newServiceTypeClientSchedulerExecutor(), network);
|
executorProvider.newServiceTypeClientSchedulerExecutor(), network,
|
||||||
|
LOGGER.forSubComponent(serviceType + "-" + network));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ import android.util.Pair;
|
|||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.server.connectivity.mdns.util.MdnsLogger;
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
@@ -49,8 +49,6 @@ import java.util.concurrent.ScheduledExecutorService;
|
|||||||
public class MdnsServiceTypeClient {
|
public class MdnsServiceTypeClient {
|
||||||
|
|
||||||
private static final int DEFAULT_MTU = 1500;
|
private static final int DEFAULT_MTU = 1500;
|
||||||
private static final MdnsLogger LOGGER = new MdnsLogger("MdnsServiceTypeClient");
|
|
||||||
|
|
||||||
|
|
||||||
private final String serviceType;
|
private final String serviceType;
|
||||||
private final String[] serviceTypeLabels;
|
private final String[] serviceTypeLabels;
|
||||||
@@ -58,6 +56,7 @@ public class MdnsServiceTypeClient {
|
|||||||
private final MdnsResponseDecoder responseDecoder;
|
private final MdnsResponseDecoder responseDecoder;
|
||||||
private final ScheduledExecutorService executor;
|
private final ScheduledExecutorService executor;
|
||||||
@Nullable private final Network network;
|
@Nullable private final Network network;
|
||||||
|
@NonNull private final SharedLog sharedLog;
|
||||||
private final Object lock = new Object();
|
private final Object lock = new Object();
|
||||||
private final ArrayMap<MdnsServiceBrowserListener, MdnsSearchOptions> listeners =
|
private final ArrayMap<MdnsServiceBrowserListener, MdnsSearchOptions> listeners =
|
||||||
new ArrayMap<>();
|
new ArrayMap<>();
|
||||||
@@ -90,8 +89,10 @@ public class MdnsServiceTypeClient {
|
|||||||
@NonNull String serviceType,
|
@NonNull String serviceType,
|
||||||
@NonNull MdnsSocketClientBase socketClient,
|
@NonNull MdnsSocketClientBase socketClient,
|
||||||
@NonNull ScheduledExecutorService executor,
|
@NonNull ScheduledExecutorService executor,
|
||||||
@Nullable Network network) {
|
@Nullable Network network,
|
||||||
this(serviceType, socketClient, executor, new MdnsResponseDecoder.Clock(), network);
|
@NonNull SharedLog sharedLog) {
|
||||||
|
this(serviceType, socketClient, executor, new MdnsResponseDecoder.Clock(), network,
|
||||||
|
sharedLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -100,7 +101,8 @@ public class MdnsServiceTypeClient {
|
|||||||
@NonNull MdnsSocketClientBase socketClient,
|
@NonNull MdnsSocketClientBase socketClient,
|
||||||
@NonNull ScheduledExecutorService executor,
|
@NonNull ScheduledExecutorService executor,
|
||||||
@NonNull MdnsResponseDecoder.Clock clock,
|
@NonNull MdnsResponseDecoder.Clock clock,
|
||||||
@Nullable Network network) {
|
@Nullable Network network,
|
||||||
|
@NonNull SharedLog sharedLog) {
|
||||||
this.serviceType = serviceType;
|
this.serviceType = serviceType;
|
||||||
this.socketClient = socketClient;
|
this.socketClient = socketClient;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
@@ -108,6 +110,7 @@ public class MdnsServiceTypeClient {
|
|||||||
this.responseDecoder = new MdnsResponseDecoder(clock, serviceTypeLabels);
|
this.responseDecoder = new MdnsResponseDecoder(clock, serviceTypeLabels);
|
||||||
this.clock = clock;
|
this.clock = clock;
|
||||||
this.network = network;
|
this.network = network;
|
||||||
|
this.sharedLog = sharedLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MdnsServiceInfo buildMdnsServiceInfoFromResponse(
|
private static MdnsServiceInfo buildMdnsServiceInfoFromResponse(
|
||||||
@@ -261,20 +264,20 @@ public class MdnsServiceTypeClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onResponseModified(@NonNull MdnsResponse response) {
|
private void onResponseModified(@NonNull MdnsResponse response) {
|
||||||
|
final String serviceInstanceName = response.getServiceInstanceName();
|
||||||
final MdnsResponse currentResponse =
|
final MdnsResponse currentResponse =
|
||||||
instanceNameToResponse.get(response.getServiceInstanceName());
|
instanceNameToResponse.get(serviceInstanceName);
|
||||||
|
|
||||||
boolean newServiceFound = false;
|
boolean newServiceFound = false;
|
||||||
boolean serviceBecomesComplete = false;
|
boolean serviceBecomesComplete = false;
|
||||||
if (currentResponse == null) {
|
if (currentResponse == null) {
|
||||||
newServiceFound = true;
|
newServiceFound = true;
|
||||||
String serviceInstanceName = response.getServiceInstanceName();
|
|
||||||
if (serviceInstanceName != null) {
|
if (serviceInstanceName != null) {
|
||||||
instanceNameToResponse.put(serviceInstanceName, response);
|
instanceNameToResponse.put(serviceInstanceName, response);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
boolean before = currentResponse.isComplete();
|
boolean before = currentResponse.isComplete();
|
||||||
instanceNameToResponse.put(response.getServiceInstanceName(), response);
|
instanceNameToResponse.put(serviceInstanceName, response);
|
||||||
boolean after = response.isComplete();
|
boolean after = response.isComplete();
|
||||||
serviceBecomesComplete = !before && after;
|
serviceBecomesComplete = !before && after;
|
||||||
}
|
}
|
||||||
@@ -285,13 +288,16 @@ public class MdnsServiceTypeClient {
|
|||||||
if (!responseMatchesOptions(response, listeners.valueAt(i))) continue;
|
if (!responseMatchesOptions(response, listeners.valueAt(i))) continue;
|
||||||
final MdnsServiceBrowserListener listener = listeners.keyAt(i);
|
final MdnsServiceBrowserListener listener = listeners.keyAt(i);
|
||||||
if (newServiceFound) {
|
if (newServiceFound) {
|
||||||
|
sharedLog.log("onServiceNameDiscovered: " + serviceInstanceName);
|
||||||
listener.onServiceNameDiscovered(serviceInfo);
|
listener.onServiceNameDiscovered(serviceInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.isComplete()) {
|
if (response.isComplete()) {
|
||||||
if (newServiceFound || serviceBecomesComplete) {
|
if (newServiceFound || serviceBecomesComplete) {
|
||||||
|
sharedLog.log("onServiceFound: " + serviceInstanceName);
|
||||||
listener.onServiceFound(serviceInfo);
|
listener.onServiceFound(serviceInfo);
|
||||||
} else {
|
} else {
|
||||||
|
sharedLog.log("onServiceUpdated: " + serviceInstanceName);
|
||||||
listener.onServiceUpdated(serviceInfo);
|
listener.onServiceUpdated(serviceInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,8 +315,10 @@ public class MdnsServiceTypeClient {
|
|||||||
final MdnsServiceInfo serviceInfo =
|
final MdnsServiceInfo serviceInfo =
|
||||||
buildMdnsServiceInfoFromResponse(response, serviceTypeLabels);
|
buildMdnsServiceInfoFromResponse(response, serviceTypeLabels);
|
||||||
if (response.isComplete()) {
|
if (response.isComplete()) {
|
||||||
|
sharedLog.log("onServiceRemoved: " + serviceInstanceName);
|
||||||
listener.onServiceRemoved(serviceInfo);
|
listener.onServiceRemoved(serviceInfo);
|
||||||
}
|
}
|
||||||
|
sharedLog.log("onServiceNameRemoved: " + serviceInstanceName);
|
||||||
listener.onServiceNameRemoved(serviceInfo);
|
listener.onServiceNameRemoved(serviceInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -485,7 +493,7 @@ public class MdnsServiceTypeClient {
|
|||||||
servicesToResolve)
|
servicesToResolve)
|
||||||
.call();
|
.call();
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
LOGGER.e(String.format("Failed to run EnqueueMdnsQueryCallable for subtype: %s",
|
sharedLog.e(String.format("Failed to run EnqueueMdnsQueryCallable for subtype: %s",
|
||||||
TextUtils.join(",", config.subtypes)), e);
|
TextUtils.join(",", config.subtypes)), e);
|
||||||
result = null;
|
result = null;
|
||||||
}
|
}
|
||||||
@@ -534,8 +542,12 @@ public class MdnsServiceTypeClient {
|
|||||||
buildMdnsServiceInfoFromResponse(
|
buildMdnsServiceInfoFromResponse(
|
||||||
existingResponse, serviceTypeLabels);
|
existingResponse, serviceTypeLabels);
|
||||||
if (existingResponse.isComplete()) {
|
if (existingResponse.isComplete()) {
|
||||||
|
sharedLog.log("TTL expired. onServiceRemoved: "
|
||||||
|
+ serviceInstanceName);
|
||||||
listener.onServiceRemoved(serviceInfo);
|
listener.onServiceRemoved(serviceInfo);
|
||||||
}
|
}
|
||||||
|
sharedLog.log("TTL expired. onServiceNameRemoved: "
|
||||||
|
+ serviceInstanceName);
|
||||||
listener.onServiceNameRemoved(serviceInfo);
|
listener.onServiceNameRemoved(serviceInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import android.net.InetAddresses;
|
|||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.server.connectivity.mdns.MdnsServiceInfo.TextEntry;
|
import com.android.server.connectivity.mdns.MdnsServiceInfo.TextEntry;
|
||||||
import com.android.server.connectivity.mdns.MdnsServiceTypeClient.QueryTaskConfig;
|
import com.android.server.connectivity.mdns.MdnsServiceTypeClient.QueryTaskConfig;
|
||||||
import com.android.testutils.DevSdkIgnoreRule;
|
import com.android.testutils.DevSdkIgnoreRule;
|
||||||
@@ -99,6 +100,8 @@ public class MdnsServiceTypeClientTests {
|
|||||||
private Network mockNetwork;
|
private Network mockNetwork;
|
||||||
@Mock
|
@Mock
|
||||||
private MdnsResponseDecoder.Clock mockDecoderClock;
|
private MdnsResponseDecoder.Clock mockDecoderClock;
|
||||||
|
@Mock
|
||||||
|
private SharedLog mockSharedLog;
|
||||||
@Captor
|
@Captor
|
||||||
private ArgumentCaptor<MdnsServiceInfo> serviceInfoCaptor;
|
private ArgumentCaptor<MdnsServiceInfo> serviceInfoCaptor;
|
||||||
|
|
||||||
@@ -166,7 +169,7 @@ public class MdnsServiceTypeClientTests {
|
|||||||
|
|
||||||
client =
|
client =
|
||||||
new MdnsServiceTypeClient(SERVICE_TYPE, mockSocketClient, currentThreadExecutor,
|
new MdnsServiceTypeClient(SERVICE_TYPE, mockSocketClient, currentThreadExecutor,
|
||||||
mockDecoderClock, mockNetwork) {
|
mockDecoderClock, mockNetwork, mockSharedLog) {
|
||||||
@Override
|
@Override
|
||||||
MdnsPacketWriter createMdnsPacketWriter() {
|
MdnsPacketWriter createMdnsPacketWriter() {
|
||||||
return mockPacketWriter;
|
return mockPacketWriter;
|
||||||
@@ -701,7 +704,7 @@ public class MdnsServiceTypeClientTests {
|
|||||||
final String serviceInstanceName = "service-instance-1";
|
final String serviceInstanceName = "service-instance-1";
|
||||||
client =
|
client =
|
||||||
new MdnsServiceTypeClient(SERVICE_TYPE, mockSocketClient, currentThreadExecutor,
|
new MdnsServiceTypeClient(SERVICE_TYPE, mockSocketClient, currentThreadExecutor,
|
||||||
mockDecoderClock, mockNetwork) {
|
mockDecoderClock, mockNetwork, mockSharedLog) {
|
||||||
@Override
|
@Override
|
||||||
MdnsPacketWriter createMdnsPacketWriter() {
|
MdnsPacketWriter createMdnsPacketWriter() {
|
||||||
return mockPacketWriter;
|
return mockPacketWriter;
|
||||||
@@ -740,7 +743,7 @@ public class MdnsServiceTypeClientTests {
|
|||||||
final String serviceInstanceName = "service-instance-1";
|
final String serviceInstanceName = "service-instance-1";
|
||||||
client =
|
client =
|
||||||
new MdnsServiceTypeClient(SERVICE_TYPE, mockSocketClient, currentThreadExecutor,
|
new MdnsServiceTypeClient(SERVICE_TYPE, mockSocketClient, currentThreadExecutor,
|
||||||
mockDecoderClock, mockNetwork) {
|
mockDecoderClock, mockNetwork, mockSharedLog) {
|
||||||
@Override
|
@Override
|
||||||
MdnsPacketWriter createMdnsPacketWriter() {
|
MdnsPacketWriter createMdnsPacketWriter() {
|
||||||
return mockPacketWriter;
|
return mockPacketWriter;
|
||||||
@@ -773,7 +776,7 @@ public class MdnsServiceTypeClientTests {
|
|||||||
final String serviceInstanceName = "service-instance-1";
|
final String serviceInstanceName = "service-instance-1";
|
||||||
client =
|
client =
|
||||||
new MdnsServiceTypeClient(SERVICE_TYPE, mockSocketClient, currentThreadExecutor,
|
new MdnsServiceTypeClient(SERVICE_TYPE, mockSocketClient, currentThreadExecutor,
|
||||||
mockDecoderClock, mockNetwork) {
|
mockDecoderClock, mockNetwork, mockSharedLog) {
|
||||||
@Override
|
@Override
|
||||||
MdnsPacketWriter createMdnsPacketWriter() {
|
MdnsPacketWriter createMdnsPacketWriter() {
|
||||||
return mockPacketWriter;
|
return mockPacketWriter;
|
||||||
@@ -898,7 +901,7 @@ public class MdnsServiceTypeClientTests {
|
|||||||
@Test
|
@Test
|
||||||
public void testProcessResponse_Resolve() throws Exception {
|
public void testProcessResponse_Resolve() throws Exception {
|
||||||
client = new MdnsServiceTypeClient(
|
client = new MdnsServiceTypeClient(
|
||||||
SERVICE_TYPE, mockSocketClient, currentThreadExecutor, mockNetwork);
|
SERVICE_TYPE, mockSocketClient, currentThreadExecutor, mockNetwork, mockSharedLog);
|
||||||
|
|
||||||
final String instanceName = "service-instance";
|
final String instanceName = "service-instance";
|
||||||
final String[] hostname = new String[] { "testhost "};
|
final String[] hostname = new String[] { "testhost "};
|
||||||
@@ -995,7 +998,7 @@ public class MdnsServiceTypeClientTests {
|
|||||||
@Test
|
@Test
|
||||||
public void testProcessResponse_ResolveExcludesOtherServices() {
|
public void testProcessResponse_ResolveExcludesOtherServices() {
|
||||||
client = new MdnsServiceTypeClient(
|
client = new MdnsServiceTypeClient(
|
||||||
SERVICE_TYPE, mockSocketClient, currentThreadExecutor, mockNetwork);
|
SERVICE_TYPE, mockSocketClient, currentThreadExecutor, mockNetwork, mockSharedLog);
|
||||||
|
|
||||||
final String requestedInstance = "instance1";
|
final String requestedInstance = "instance1";
|
||||||
final String otherInstance = "instance2";
|
final String otherInstance = "instance2";
|
||||||
|
|||||||
Reference in New Issue
Block a user