From d72daab44871daef1a2d9daa3bc5c25f8052659b Mon Sep 17 00:00:00 2001 From: Yuyang Huang Date: Wed, 31 May 2023 12:21:15 +0900 Subject: [PATCH] Matches all MdnsServiceTypeClient if using MdnsSocketClient MdnsSocketClient doesn't support requesting specific network. As a result, when processing the response, all the MdnsServiceTypeClient should be called. Bug: 285064577 Test: atest CtsNetTestCases FrameworksNetTests Change-Id: Id95f1e78d60063ccee7f5855a21fa6b5a48fbd3e --- .../connectivity/mdns/MdnsDiscoveryManager.java | 12 ++++++++++-- .../mdns/MdnsMultinetworkSocketClient.java | 5 +++++ .../server/connectivity/mdns/MdnsSocketClient.java | 5 +++++ .../connectivity/mdns/MdnsSocketClientBase.java | 3 +++ .../connectivity/mdns/MdnsDiscoveryManagerTests.java | 1 + 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java index 0f30f10fff..d3cbf822b7 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java @@ -251,11 +251,19 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { private void handleOnResponseReceived(@NonNull MdnsPacket packet, int interfaceIndex, @Nullable Network network) { for (MdnsServiceTypeClient serviceTypeClient - : perNetworkServiceTypeClients.getByNetwork(network)) { + : getMdnsServiceTypeClient(network)) { serviceTypeClient.processResponse(packet, interfaceIndex, network); } } + private List getMdnsServiceTypeClient(@Nullable Network network) { + if (socketClient.supportsRequestingSpecificNetworks()) { + return perNetworkServiceTypeClients.getByNetwork(network); + } else { + return perNetworkServiceTypeClients.getByNetwork(null); + } + } + @Override public void onFailedToParseMdnsResponse(int receivedPacketNumber, int errorCode, @Nullable Network network) { @@ -266,7 +274,7 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { private void handleOnFailedToParseMdnsResponse(int receivedPacketNumber, int errorCode, @Nullable Network network) { for (MdnsServiceTypeClient serviceTypeClient - : perNetworkServiceTypeClients.getByNetwork(network)) { + : getMdnsServiceTypeClient(network)) { serviceTypeClient.onFailedToParseMdnsResponse(receivedPacketNumber, errorCode); } } diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java index d9bfb26bf0..73e4497bcd 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java @@ -210,6 +210,11 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase { return mHandler.getLooper(); } + @Override + public boolean supportsRequestingSpecificNetworks() { + return true; + } + private void sendMdnsPacket(@NonNull DatagramPacket packet, @Nullable Network targetNetwork) { final boolean isIpv6 = ((InetSocketAddress) packet.getSocketAddress()).getAddress() instanceof Inet6Address; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketClient.java index 1144d16056..b982644da1 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketClient.java @@ -238,6 +238,11 @@ public class MdnsSocketClient implements MdnsSocketClientBase { socketCreationCallback.onSocketCreated(null); } + @Override + public boolean supportsRequestingSpecificNetworks() { + return false; + } + private void sendMdnsPacket(DatagramPacket packet, Queue packetQueueToUse) { if (shouldStopSocketLoop && !MdnsConfigs.allowAddMdnsPacketAfterDiscoveryStops()) { LOGGER.w("sendMdnsPacket() is called after discovery already stopped"); diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketClientBase.java b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketClientBase.java index deadc58de3..e0762f9a7c 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketClientBase.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketClientBase.java @@ -67,6 +67,9 @@ public interface MdnsSocketClientBase { return null; } + /** Returns whether the socket client support requesting per network */ + boolean supportsRequestingSpecificNetworks(); + /*** Callback for mdns response */ interface Callback { /*** Receive a mdns response */ diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsDiscoveryManagerTests.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsDiscoveryManagerTests.java index aeaca06a7e..a54a5210a2 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsDiscoveryManagerTests.java +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsDiscoveryManagerTests.java @@ -99,6 +99,7 @@ public class MdnsDiscoveryManagerTests { thread.start(); handler = new Handler(thread.getLooper()); doReturn(thread.getLooper()).when(socketClient).getLooper(); + doReturn(true).when(socketClient).supportsRequestingSpecificNetworks(); discoveryManager = new MdnsDiscoveryManager(executorProvider, socketClient, sharedLog) { @Override