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