Merge "Add current clients to servicediscovery dumpsys" into main

This commit is contained in:
Remi NGUYEN VAN 2024-04-05 02:25:36 +00:00 • committed by Gerrit Code Review
commit f421a45491

View file

@ -275,7 +275,7 @@ public class NsdService extends INsdManager.Stub {
}
@VisibleForTesting
static class MdnsListener implements MdnsServiceBrowserListener {
abstract static class MdnsListener implements MdnsServiceBrowserListener {
protected final int mClientRequestId;
protected final int mTransactionId;
@NonNull
@ -321,6 +321,10 @@ public class NsdService extends INsdManager.Stub {
@Override
public void onFailedToParseMdnsResponse(int receivedPacketNumber, int errorCode) { }
// Ensure toString gets overridden
@NonNull
public abstract String toString();
}
private class DiscoveryListener extends MdnsListener {
@ -351,13 +355,21 @@ public class NsdService extends INsdManager.Stub {
mNsdStateMachine.sendMessage(MDNS_DISCOVERY_MANAGER_EVENT, mTransactionId,
DISCOVERY_QUERY_SENT_CALLBACK, new MdnsEvent(mClientRequestId));
}
@NonNull
@Override
public String toString() {
return String.format("DiscoveryListener: serviceType=%s", getListenedServiceType());
}
}
private class ResolutionListener extends MdnsListener {
private final String mServiceName;
ResolutionListener(int clientRequestId, int transactionId,
@NonNull String listenServiceType) {
@NonNull String listenServiceType, @NonNull String serviceName) {
super(clientRequestId, transactionId, listenServiceType);
mServiceName = serviceName;
}
@Override
@ -373,13 +385,22 @@ public class NsdService extends INsdManager.Stub {
mNsdStateMachine.sendMessage(MDNS_DISCOVERY_MANAGER_EVENT, mTransactionId,
DISCOVERY_QUERY_SENT_CALLBACK, new MdnsEvent(mClientRequestId));
}
@NonNull
@Override
public String toString() {
return String.format("ResolutionListener serviceName=%s, serviceType=%s",
mServiceName, getListenedServiceType());
}
}
private class ServiceInfoListener extends MdnsListener {
private final String mServiceName;
ServiceInfoListener(int clientRequestId, int transactionId,
@NonNull String listenServiceType) {
@NonNull String listenServiceType, @NonNull String serviceName) {
super(clientRequestId, transactionId, listenServiceType);
this.mServiceName = serviceName;
}
@Override
@ -410,6 +431,13 @@ public class NsdService extends INsdManager.Stub {
mNsdStateMachine.sendMessage(MDNS_DISCOVERY_MANAGER_EVENT, mTransactionId,
DISCOVERY_QUERY_SENT_CALLBACK, new MdnsEvent(mClientRequestId));
}
@NonNull
@Override
public String toString() {
return String.format("ServiceInfoListener serviceName=%s, serviceType=%s",
mServiceName, getListenedServiceType());
}
}
private class SocketRequestMonitor implements MdnsSocketProvider.SocketRequestMonitor {
@ -656,9 +684,12 @@ public class NsdService extends INsdManager.Stub {
}
private void storeAdvertiserRequestMap(int clientRequestId, int transactionId,
ClientInfo clientInfo, @Nullable Network requestedNetwork) {
ClientInfo clientInfo, @NonNull NsdServiceInfo serviceInfo) {
final String serviceFullName =
serviceInfo.getServiceName() + "." + serviceInfo.getServiceType();
clientInfo.mClientRequests.put(clientRequestId, new AdvertiserClientRequest(
transactionId, requestedNetwork, mClock.elapsedRealtime()));
transactionId, serviceInfo.getNetwork(), serviceFullName,
mClock.elapsedRealtime()));
mTransactionIdToClientInfoMap.put(transactionId, clientInfo);
updateMulticastLock();
}
@ -1010,7 +1041,7 @@ public class NsdService extends INsdManager.Stub {
mAdvertiser.addOrUpdateService(transactionId, serviceInfo,
mdnsAdvertisingOptions, clientInfo.mUid);
storeAdvertiserRequestMap(clientRequestId, transactionId, clientInfo,
serviceInfo.getNetwork());
serviceInfo);
} else {
maybeStartDaemon();
transactionId = getUniqueId();
@ -1104,7 +1135,7 @@ public class NsdService extends INsdManager.Stub {
maybeStartMonitoringSockets();
final MdnsListener listener = new ResolutionListener(clientRequestId,
transactionId, resolveServiceType);
transactionId, resolveServiceType, info.getServiceName());
final int ifaceIdx = info.getNetwork() != null
? 0 : info.getInterfaceIndex();
final MdnsSearchOptions options = MdnsSearchOptions.newBuilder()
@ -1207,7 +1238,7 @@ public class NsdService extends INsdManager.Stub {
maybeStartMonitoringSockets();
final MdnsListener listener = new ServiceInfoListener(clientRequestId,
transactionId, resolveServiceType);
transactionId, resolveServiceType, info.getServiceName());
final int ifIndex = info.getNetwork() != null
? 0 : info.getInterfaceIndex();
final MdnsSearchOptions options = MdnsSearchOptions.newBuilder()
@ -2551,6 +2582,17 @@ public class NsdService extends INsdManager.Stub {
// Dump state machine logs
mNsdStateMachine.dump(fd, pw, args);
// Dump clients
pw.println();
pw.println("Active clients:");
pw.increaseIndent();
HandlerUtils.runWithScissorsForDump(mNsdStateMachine.getHandler(), () -> {
for (ClientInfo clientInfo : mClients.values()) {
pw.println(clientInfo.toString());
}
}, 10_000);
pw.decreaseIndent();
// Dump service and clients logs
pw.println();
pw.println("Logs:");
@ -2623,6 +2665,21 @@ public class NsdService extends INsdManager.Stub {
public int getSentQueryCount() {
return mSentQueryCount;
}
@NonNull
@Override
public String toString() {
return getRequestDescriptor() + " {" + mTransactionId
+ ", startTime " + mStartTimeMs
+ ", foundServices " + mFoundServiceCount
+ ", lostServices " + mLostServiceCount
+ ", fromCache " + mIsServiceFromCache
+ ", sentQueries " + mSentQueryCount
+ "}";
}
@NonNull
protected abstract String getRequestDescriptor();
}
private static class LegacyClientRequest extends ClientRequest {
@ -2632,6 +2689,12 @@ public class NsdService extends INsdManager.Stub {
super(transactionId, startTimeMs);
mRequestCode = requestCode;
}
@NonNull
@Override
protected String getRequestDescriptor() {
return "Legacy (" + mRequestCode + ")";
}
}
private abstract static class JavaBackendClientRequest extends ClientRequest {
@ -2651,9 +2714,20 @@ public class NsdService extends INsdManager.Stub {
}
private static class AdvertiserClientRequest extends JavaBackendClientRequest {
@NonNull
private final String mServiceFullName;
private AdvertiserClientRequest(int transactionId, @Nullable Network requestedNetwork,
long startTimeMs) {
@NonNull String serviceFullName, long startTimeMs) {
super(transactionId, requestedNetwork, startTimeMs);
mServiceFullName = serviceFullName;
}
@NonNull
@Override
public String getRequestDescriptor() {
return String.format("Advertiser: serviceFullName=%s, net=%s",
mServiceFullName, getRequestedNetwork());
}
}
@ -2666,6 +2740,12 @@ public class NsdService extends INsdManager.Stub {
super(transactionId, requestedNetwork, startTimeMs);
mListener = listener;
}
@NonNull
@Override
public String getRequestDescriptor() {
return String.format("Discovery/%s, net=%s", mListener, getRequestedNetwork());
}
}
/* Information tracked per client */
@ -2710,17 +2790,15 @@ public class NsdService extends INsdManager.Stub {
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("mResolvedService ").append(mResolvedService).append("\n");
sb.append("mIsLegacy ").append(mIsPreSClient).append("\n");
sb.append("mUseJavaBackend ").append(mUseJavaBackend).append("\n");
sb.append("mUid ").append(mUid).append("\n");
sb.append("mUid ").append(mUid).append(", ");
sb.append("mResolvedService ").append(mResolvedService).append(", ");
sb.append("mIsLegacy ").append(mIsPreSClient).append(", ");
sb.append("mUseJavaBackend ").append(mUseJavaBackend).append(", ");
sb.append("mClientRequests:\n");
for (int i = 0; i < mClientRequests.size(); i++) {
int clientRequestId = mClientRequests.keyAt(i);
sb.append("clientRequestId ")
.append(clientRequestId)
.append(" transactionId ").append(mClientRequests.valueAt(i).mTransactionId)
.append(" type ").append(
mClientRequests.valueAt(i).getClass().getSimpleName())
sb.append(" ").append(clientRequestId)
.append(": ").append(mClientRequests.valueAt(i).toString())
.append("\n");
}
return sb.toString();