Merge "Matches all MdnsServiceTypeClient if using MdnsSocketClient"

This commit is contained in:
Yuyang Huang 2023-05-31 10:14:32 +00:00 • committed by Gerrit Code Review
commit c2baf9403a
5 changed files with 24 additions and 2 deletions

View file

@ -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<MdnsServiceTypeClient> 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);
}
}

View file

@ -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;

View file

@ -238,6 +238,11 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
socketCreationCallback.onSocketCreated(null);
}
@Override
public boolean supportsRequestingSpecificNetworks() {
return false;
}
private void sendMdnsPacket(DatagramPacket packet, Queue<DatagramPacket> packetQueueToUse) {
if (shouldStopSocketLoop && !MdnsConfigs.allowAddMdnsPacketAfterDiscoveryStops()) {
LOGGER.w("sendMdnsPacket() is called after discovery already stopped");

View file

@ -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 */

View file

@ -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