From 5317617c5e624a84d3c7008567e828f55d6d9eef Mon Sep 17 00:00:00 2001 From: Sen Date: Wed, 28 Sep 2022 20:09:22 +0800 Subject: [PATCH] fix bug: fail to register NsdService (#22914) * fix bug: fail to register NsdService * import package * Restyled by google-java-format Co-authored-by: Restyled.io --- .../chip/platform/NsdManagerServiceResolver.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/platform/android/java/chip/platform/NsdManagerServiceResolver.java b/src/platform/android/java/chip/platform/NsdManagerServiceResolver.java index 4fb5bcbe31d664..a3a4ecfa4822d2 100644 --- a/src/platform/android/java/chip/platform/NsdManagerServiceResolver.java +++ b/src/platform/android/java/chip/platform/NsdManagerServiceResolver.java @@ -27,6 +27,7 @@ import android.util.Log; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; public class NsdManagerServiceResolver implements ServiceResolver { private static final String TAG = NsdManagerServiceResolver.class.getSimpleName(); @@ -35,6 +36,7 @@ public class NsdManagerServiceResolver implements ServiceResolver { private MulticastLock multicastLock; private Handler mainThreadHandler; private List registrationListeners = new ArrayList<>(); + private final CopyOnWriteArrayList mMFServiceName = new CopyOnWriteArrayList<>(); public NsdManagerServiceResolver(Context context) { this.nsdManager = (NsdManager) context.getSystemService(Context.NSD_SERVICE); @@ -134,6 +136,15 @@ public void publish( String[] textEntriesKeys, byte[][] textEntriesDatas, String[] subTypes) { + /** + * Note, MF's NSDService will be repeatedly registered until it exceeds the OS's + * maximum(http://androidxref.com/9.0.0_r3/xref/frameworks/base/services/core/java/com/android/server/NsdService.java#MAX_LIMIT) + * limit at which time the registration will fail. + */ + if (serviceName.contains("-") && mMFServiceName.contains(serviceName)) { + Log.w(TAG, "publish: duplicate MF nsdService"); + return; + } NsdServiceInfo serviceInfo = new NsdServiceInfo(); serviceInfo.setServiceName(serviceName); @@ -193,6 +204,7 @@ public void onServiceUnregistered(NsdServiceInfo serviceInfo) { multicastLock.acquire(); } registrationListeners.add(registrationListener); + mMFServiceName.add(serviceName); nsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, registrationListener); Log.d(TAG, "publish " + registrationListener + " count = " + registrationListeners.size()); @@ -209,5 +221,6 @@ public void removeServices() { nsdManager.unregisterService(l); } registrationListeners.clear(); + mMFServiceName.clear(); } }