[mDNS] Only consider fully qualified discovery results (#5348)

* [mDNS] only consider fully qualified results

Signed-off-by: Andrew Fiddian-Green <software@whitebear.ch>
This commit is contained in:
Andrew Fiddian-Green
2026-02-14 21:55:37 +01:00
committed by GitHub
parent 70144e3cc5
commit 48e1442e6b
2 changed files with 9 additions and 3 deletions
@@ -190,11 +190,16 @@ public class MDNSDiscoveryService extends AbstractDiscoveryService implements Se
@Override
public void serviceAdded(@NonNullByDefault({}) ServiceEvent serviceEvent) {
considerService(serviceEvent);
/**
* Do nothing when a service is added, as we will get a <code>serviceResolved</code> event afterwards,
* which contains the fully resolved ServiceInfo. If we would already create a DiscoveryResult here,
* we would not have the necessary full information.
*/
}
@Override
public void serviceRemoved(@NonNullByDefault({}) ServiceEvent serviceEvent) {
// note: {@link ServiceEvent} JavaDoc says getInfo() result can be null; but seems never to be so here.
for (MDNSDiscoveryParticipant participant : participants) {
if (participant.getServiceType().equals(serviceEvent.getType())) {
removeDiscoveryResult(participant, serviceEvent.getInfo());
@@ -204,6 +209,7 @@ public class MDNSDiscoveryService extends AbstractDiscoveryService implements Se
@Override
public void serviceResolved(@NonNullByDefault({}) ServiceEvent serviceEvent) {
// note: {@link ServiceEvent} JavaDoc says getInfo() result can be null; but seems never to be so here.
considerService(serviceEvent);
}
@@ -81,11 +81,11 @@ public class MDNSDiscoveryServiceOSGiTest extends JavaOSGiTest {
mdnsDiscoveryService.addDiscoveryListener(mockDiscoveryListener);
mdnsDiscoveryService.serviceAdded(mockServiceEvent);
verify(mockDiscoveryListener, timeout(2000).times(1)).thingDiscovered(mdnsDiscoveryService, discoveryResult);
verify(mockDiscoveryListener, timeout(2000).times(0)).thingDiscovered(mdnsDiscoveryService, discoveryResult);
verifyNoMoreInteractions(mockDiscoveryListener);
mdnsDiscoveryService.serviceResolved(mockServiceEvent);
verify(mockDiscoveryListener, timeout(2000).times(2)).thingDiscovered(mdnsDiscoveryService, discoveryResult);
verify(mockDiscoveryListener, timeout(2000).times(1)).thingDiscovered(mdnsDiscoveryService, discoveryResult);
verifyNoMoreInteractions(mockDiscoveryListener);
mdnsDiscoveryService.serviceRemoved(mockServiceEvent);