Add newApi linter check for mDNS library
The mDNS library need to be backported to some internal library which support minSdk 21. Therefore, updated the build rules to add the linter check. Bug: 296175311 Test: TH Change-Id: Iae0bffa315dc6de2339a05f595b13480fa7385ae
This commit is contained in:
@@ -19,7 +19,9 @@ package android.net.nsd;
|
|||||||
import android.annotation.IntRange;
|
import android.annotation.IntRange;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
@@ -38,6 +40,7 @@ import java.util.Objects;
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@SystemApi
|
@SystemApi
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public final class OffloadServiceInfo implements Parcelable {
|
public final class OffloadServiceInfo implements Parcelable {
|
||||||
@NonNull
|
@NonNull
|
||||||
private final Key mKey;
|
private final Key mKey;
|
||||||
|
|||||||
@@ -91,6 +91,10 @@ java_library {
|
|||||||
java_library {
|
java_library {
|
||||||
name: "service-connectivity-mdns-standalone-build-test",
|
name: "service-connectivity-mdns-standalone-build-test",
|
||||||
sdk_version: "core_platform",
|
sdk_version: "core_platform",
|
||||||
|
min_sdk_version: "21",
|
||||||
|
lint: {
|
||||||
|
error_checks: ["NewApi"],
|
||||||
|
},
|
||||||
srcs: [
|
srcs: [
|
||||||
"src/com/android/server/connectivity/mdns/**/*.java",
|
"src/com/android/server/connectivity/mdns/**/*.java",
|
||||||
":framework-connectivity-t-mdns-standalone-build-sources",
|
":framework-connectivity-t-mdns-standalone-build-sources",
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import static com.android.server.connectivity.mdns.util.MdnsUtils.Clock;
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -59,6 +60,7 @@ import android.net.nsd.OffloadEngine;
|
|||||||
import android.net.nsd.OffloadServiceInfo;
|
import android.net.nsd.OffloadServiceInfo;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
@@ -120,6 +122,7 @@ import java.util.regex.Pattern;
|
|||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class NsdService extends INsdManager.Stub {
|
public class NsdService extends INsdManager.Stub {
|
||||||
private static final String TAG = "NsdService";
|
private static final String TAG = "NsdService";
|
||||||
private static final String MDNS_TAG = "mDnsConnector";
|
private static final String MDNS_TAG = "mDnsConnector";
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.android.server.connectivity.mdns;
|
|||||||
import static com.android.server.connectivity.mdns.MdnsServiceTypeClient.INVALID_TRANSACTION_ID;
|
import static com.android.server.connectivity.mdns.MdnsServiceTypeClient.INVALID_TRANSACTION_ID;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.os.Build;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
@@ -220,7 +221,9 @@ public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<Str
|
|||||||
throws IOException {
|
throws IOException {
|
||||||
DatagramPacket packet = packetWriter.getPacket(address);
|
DatagramPacket packet = packetWriter.getPacket(address);
|
||||||
if (expectUnicastResponse) {
|
if (expectUnicastResponse) {
|
||||||
if (requestSender instanceof MdnsMultinetworkSocketClient) {
|
// MdnsMultinetworkSocketClient is only available on T+
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
|
||||||
|
&& requestSender instanceof MdnsMultinetworkSocketClient) {
|
||||||
((MdnsMultinetworkSocketClient) requestSender).sendPacketRequestingUnicastResponse(
|
((MdnsMultinetworkSocketClient) requestSender).sendPacketRequestingUnicastResponse(
|
||||||
packet, socketKey, onlyUseIpv6OnIpv6OnlyNetworks);
|
packet, socketKey, onlyUseIpv6OnIpv6OnlyNetworks);
|
||||||
} else {
|
} else {
|
||||||
@@ -228,7 +231,8 @@ public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<Str
|
|||||||
packet, onlyUseIpv6OnIpv6OnlyNetworks);
|
packet, onlyUseIpv6OnIpv6OnlyNetworks);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (requestSender instanceof MdnsMultinetworkSocketClient) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
|
||||||
|
&& requestSender instanceof MdnsMultinetworkSocketClient) {
|
||||||
((MdnsMultinetworkSocketClient) requestSender)
|
((MdnsMultinetworkSocketClient) requestSender)
|
||||||
.sendPacketRequestingMulticastResponse(
|
.sendPacketRequestingMulticastResponse(
|
||||||
packet, socketKey, onlyUseIpv6OnIpv6OnlyNetworks);
|
packet, socketKey, onlyUseIpv6OnIpv6OnlyNetworks);
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
package com.android.server.connectivity.mdns;
|
package com.android.server.connectivity.mdns;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.util.ArraySet;
|
|
||||||
|
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
@@ -30,7 +31,7 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|||||||
public class ExecutorProvider {
|
public class ExecutorProvider {
|
||||||
|
|
||||||
private final Set<ScheduledExecutorService> serviceTypeClientSchedulerExecutors =
|
private final Set<ScheduledExecutorService> serviceTypeClientSchedulerExecutors =
|
||||||
new ArraySet<>();
|
MdnsUtils.newSet();
|
||||||
|
|
||||||
/** Returns a new {@link ScheduledExecutorService} instance. */
|
/** Returns a new {@link ScheduledExecutorService} instance. */
|
||||||
public ScheduledExecutorService newServiceTypeClientSchedulerExecutor() {
|
public ScheduledExecutorService newServiceTypeClientSchedulerExecutor() {
|
||||||
|
|||||||
@@ -21,12 +21,14 @@ import static com.android.server.connectivity.mdns.MdnsRecord.MAX_LABEL_LENGTH;
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
import android.net.LinkAddress;
|
import android.net.LinkAddress;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.nsd.NsdManager;
|
import android.net.nsd.NsdManager;
|
||||||
import android.net.nsd.NsdServiceInfo;
|
import android.net.nsd.NsdServiceInfo;
|
||||||
import android.net.nsd.OffloadEngine;
|
import android.net.nsd.OffloadEngine;
|
||||||
import android.net.nsd.OffloadServiceInfo;
|
import android.net.nsd.OffloadServiceInfo;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -50,6 +52,7 @@ import java.util.function.Consumer;
|
|||||||
*
|
*
|
||||||
* All methods except the constructor must be called on the looper thread.
|
* All methods except the constructor must be called on the looper thread.
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class MdnsAdvertiser {
|
public class MdnsAdvertiser {
|
||||||
private static final String TAG = MdnsAdvertiser.class.getSimpleName();
|
private static final String TAG = MdnsAdvertiser.class.getSimpleName();
|
||||||
static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ package com.android.server.connectivity.mdns;
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
@@ -31,6 +33,7 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* This allows maintaining other hosts' caches up-to-date. See RFC6762 8.3.
|
* This allows maintaining other hosts' caches up-to-date. See RFC6762 8.3.
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class MdnsAnnouncer extends MdnsPacketRepeater<MdnsAnnouncer.BaseAnnouncementInfo> {
|
public class MdnsAnnouncer extends MdnsPacketRepeater<MdnsAnnouncer.BaseAnnouncementInfo> {
|
||||||
private static final long ANNOUNCEMENT_INITIAL_DELAY_MS = 1000L;
|
private static final long ANNOUNCEMENT_INITIAL_DELAY_MS = 1000L;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import com.android.server.connectivity.mdns.util.MdnsUtils;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class keeps tracking the set of registered {@link MdnsServiceBrowserListener} instances, and
|
* This class keeps tracking the set of registered {@link MdnsServiceBrowserListener} instances, and
|
||||||
@@ -102,8 +103,12 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void remove(@NonNull MdnsServiceTypeClient client) {
|
public void remove(@NonNull MdnsServiceTypeClient client) {
|
||||||
final int index = clients.indexOfValue(client);
|
for (int i = 0; i < clients.size(); ++i) {
|
||||||
clients.removeAt(index);
|
if (Objects.equals(client, clients.valueAt(i))) {
|
||||||
|
clients.removeAt(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
|
|||||||
@@ -20,8 +20,10 @@ import static com.android.server.connectivity.mdns.MdnsConstants.NO_PACKET;
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
import android.net.LinkAddress;
|
import android.net.LinkAddress;
|
||||||
import android.net.nsd.NsdServiceInfo;
|
import android.net.nsd.NsdServiceInfo;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
|
||||||
@@ -39,6 +41,7 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* A class that handles advertising services on a {@link MdnsInterfaceSocket} tied to an interface.
|
* A class that handles advertising services on a {@link MdnsInterfaceSocket} tied to an interface.
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHandler {
|
public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHandler {
|
||||||
private static final boolean DBG = MdnsAdvertiser.DBG;
|
private static final boolean DBG = MdnsAdvertiser.DBG;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
|||||||
@@ -20,8 +20,10 @@ import static com.android.server.connectivity.mdns.MdnsSocket.MULTICAST_IPV4_ADD
|
|||||||
import static com.android.server.connectivity.mdns.MdnsSocket.MULTICAST_IPV6_ADDRESS;
|
import static com.android.server.connectivity.mdns.MdnsSocket.MULTICAST_IPV6_ADDRESS;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
import android.net.LinkAddress;
|
import android.net.LinkAddress;
|
||||||
import android.net.util.SocketUtils;
|
import android.net.util.SocketUtils;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
@@ -49,6 +51,7 @@ import java.util.List;
|
|||||||
* @see MulticastSocket for javadoc of each public method.
|
* @see MulticastSocket for javadoc of each public method.
|
||||||
* @see MulticastSocket for javadoc of each public method.
|
* @see MulticastSocket for javadoc of each public method.
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class MdnsInterfaceSocket {
|
public class MdnsInterfaceSocket {
|
||||||
private static final String TAG = MdnsInterfaceSocket.class.getSimpleName();
|
private static final String TAG = MdnsInterfaceSocket.class.getSimpleName();
|
||||||
@NonNull private final MulticastSocket mMulticastSocket;
|
@NonNull private final MulticastSocket mMulticastSocket;
|
||||||
|
|||||||
@@ -20,8 +20,10 @@ import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningO
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
import android.net.LinkAddress;
|
import android.net.LinkAddress;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
@@ -40,6 +42,7 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* * <p>This class is not thread safe.
|
* * <p>This class is not thread safe.
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
||||||
private static final String TAG = MdnsMultinetworkSocketClient.class.getSimpleName();
|
private static final String TAG = MdnsMultinetworkSocketClient.class.getSimpleName();
|
||||||
private static final boolean DBG = MdnsDiscoveryManager.DBG;
|
private static final boolean DBG = MdnsDiscoveryManager.DBG;
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ package com.android.server.connectivity.mdns;
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.io.EOFException;
|
import java.io.EOFException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -206,9 +205,6 @@ public class MdnsPacket {
|
|||||||
|
|
||||||
default: {
|
default: {
|
||||||
try {
|
try {
|
||||||
if (MdnsAdvertiser.DBG) {
|
|
||||||
Log.i(TAG, "Skipping parsing of record of unhandled type " + type);
|
|
||||||
}
|
|
||||||
skipMdnsRecord(reader, isQuestion);
|
skipMdnsRecord(reader, isQuestion);
|
||||||
return null;
|
return null;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import static com.android.server.connectivity.mdns.MdnsRecordRepository.IPV6_ADD
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
@@ -34,6 +36,7 @@ import java.net.InetSocketAddress;
|
|||||||
* A class used to send several packets at given time intervals.
|
* A class used to send several packets at given time intervals.
|
||||||
* @param <T> The type of the request providing packet repeating parameters.
|
* @param <T> The type of the request providing packet repeating parameters.
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
||||||
private static final boolean DBG = MdnsAdvertiser.DBG;
|
private static final boolean DBG = MdnsAdvertiser.DBG;
|
||||||
private static final InetSocketAddress[] ALL_ADDRS = new InetSocketAddress[] {
|
private static final InetSocketAddress[] ALL_ADDRS = new InetSocketAddress[] {
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
package com.android.server.connectivity.mdns;
|
package com.android.server.connectivity.mdns;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
@@ -33,6 +35,7 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* TODO: implement receiving replies and handling conflicts.
|
* TODO: implement receiving replies and handling conflicts.
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class MdnsProber extends MdnsPacketRepeater<MdnsProber.ProbingInfo> {
|
public class MdnsProber extends MdnsPacketRepeater<MdnsProber.ProbingInfo> {
|
||||||
private static final long CONFLICT_RETRY_DELAY_MS = 5_000L;
|
private static final long CONFLICT_RETRY_DELAY_MS = 5_000L;
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ package com.android.server.connectivity.mdns;
|
|||||||
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
|
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
@@ -41,6 +43,7 @@ import java.util.Collections;
|
|||||||
*
|
*
|
||||||
* TODO: implement sending after a delay, combining queued replies and duplicate answer suppression
|
* TODO: implement sending after a delay, combining queued replies and duplicate answer suppression
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class MdnsReplySender {
|
public class MdnsReplySender {
|
||||||
private static final boolean DBG = MdnsAdvertiser.DBG;
|
private static final boolean DBG = MdnsAdvertiser.DBG;
|
||||||
private static final int MSG_SEND = 1;
|
private static final int MSG_SEND = 1;
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import android.annotation.NonNull;
|
|||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.ArraySet;
|
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
||||||
@@ -29,6 +28,7 @@ import java.io.EOFException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/** A class that decodes mDNS responses from UDP packets. */
|
/** A class that decodes mDNS responses from UDP packets. */
|
||||||
public class MdnsResponseDecoder {
|
public class MdnsResponseDecoder {
|
||||||
@@ -125,7 +125,7 @@ public class MdnsResponseDecoder {
|
|||||||
* 2) A copy of the original responses with some of them have records
|
* 2) A copy of the original responses with some of them have records
|
||||||
* update or only contains receive time updated.
|
* update or only contains receive time updated.
|
||||||
*/
|
*/
|
||||||
public Pair<ArraySet<MdnsResponse>, ArrayList<MdnsResponse>> augmentResponses(
|
public Pair<Set<MdnsResponse>, ArrayList<MdnsResponse>> augmentResponses(
|
||||||
@NonNull MdnsPacket mdnsPacket,
|
@NonNull MdnsPacket mdnsPacket,
|
||||||
@NonNull Collection<MdnsResponse> existingResponses, int interfaceIndex,
|
@NonNull Collection<MdnsResponse> existingResponses, int interfaceIndex,
|
||||||
@Nullable Network network) {
|
@Nullable Network network) {
|
||||||
@@ -136,7 +136,7 @@ public class MdnsResponseDecoder {
|
|||||||
records.addAll(mdnsPacket.authorityRecords);
|
records.addAll(mdnsPacket.authorityRecords);
|
||||||
records.addAll(mdnsPacket.additionalRecords);
|
records.addAll(mdnsPacket.additionalRecords);
|
||||||
|
|
||||||
final ArraySet<MdnsResponse> modified = new ArraySet<>();
|
final Set<MdnsResponse> modified = MdnsUtils.newSet();
|
||||||
final ArrayList<MdnsResponse> responses = new ArrayList<>(existingResponses.size());
|
final ArrayList<MdnsResponse> responses = new ArrayList<>(existingResponses.size());
|
||||||
final ArrayMap<MdnsResponse, MdnsResponse> augmentedToOriginal = new ArrayMap<>();
|
final ArrayMap<MdnsResponse, MdnsResponse> augmentedToOriginal = new ArrayMap<>();
|
||||||
for (MdnsResponse existing : existingResponses) {
|
for (MdnsResponse existing : existingResponses) {
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ import android.net.Network;
|
|||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArraySet;
|
|
||||||
|
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -46,11 +47,11 @@ public class MdnsSearchOptions implements Parcelable {
|
|||||||
public MdnsSearchOptions createFromParcel(Parcel source) {
|
public MdnsSearchOptions createFromParcel(Parcel source) {
|
||||||
return new MdnsSearchOptions(
|
return new MdnsSearchOptions(
|
||||||
source.createStringArrayList(),
|
source.createStringArrayList(),
|
||||||
source.readBoolean(),
|
source.readInt() == 1,
|
||||||
source.readBoolean(),
|
source.readInt() == 1,
|
||||||
source.readParcelable(null),
|
source.readParcelable(null),
|
||||||
source.readString(),
|
source.readString(),
|
||||||
source.readBoolean(),
|
source.readInt() == 1,
|
||||||
source.readInt());
|
source.readInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,11 +166,11 @@ public class MdnsSearchOptions implements Parcelable {
|
|||||||
@Override
|
@Override
|
||||||
public void writeToParcel(Parcel out, int flags) {
|
public void writeToParcel(Parcel out, int flags) {
|
||||||
out.writeStringList(subtypes);
|
out.writeStringList(subtypes);
|
||||||
out.writeBoolean(isPassiveMode);
|
out.writeInt(isPassiveMode ? 1 : 0);
|
||||||
out.writeBoolean(removeExpiredService);
|
out.writeInt(removeExpiredService ? 1 : 0);
|
||||||
out.writeParcelable(mNetwork, 0);
|
out.writeParcelable(mNetwork, 0);
|
||||||
out.writeString(resolveInstanceName);
|
out.writeString(resolveInstanceName);
|
||||||
out.writeBoolean(onlyUseIpv6OnIpv6OnlyNetworks);
|
out.writeInt(onlyUseIpv6OnIpv6OnlyNetworks ? 1 : 0);
|
||||||
out.writeInt(numOfQueriesBeforeBackoff);
|
out.writeInt(numOfQueriesBeforeBackoff);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +185,7 @@ public class MdnsSearchOptions implements Parcelable {
|
|||||||
private String resolveInstanceName;
|
private String resolveInstanceName;
|
||||||
|
|
||||||
private Builder() {
|
private Builder() {
|
||||||
subtypes = new ArraySet<>();
|
subtypes = MdnsUtils.newSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import android.os.Looper;
|
|||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.ArraySet;
|
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
@@ -42,6 +41,7 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -414,11 +414,11 @@ public class MdnsServiceTypeClient {
|
|||||||
currentList.add(additionalResponse);
|
currentList.add(additionalResponse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final Pair<ArraySet<MdnsResponse>, ArrayList<MdnsResponse>> augmentedResult =
|
final Pair<Set<MdnsResponse>, ArrayList<MdnsResponse>> augmentedResult =
|
||||||
responseDecoder.augmentResponses(packet, currentList,
|
responseDecoder.augmentResponses(packet, currentList,
|
||||||
socketKey.getInterfaceIndex(), socketKey.getNetwork());
|
socketKey.getInterfaceIndex(), socketKey.getNetwork());
|
||||||
|
|
||||||
final ArraySet<MdnsResponse> modifiedResponse = augmentedResult.first;
|
final Set<MdnsResponse> modifiedResponse = augmentedResult.first;
|
||||||
final ArrayList<MdnsResponse> allResponses = augmentedResult.second;
|
final ArrayList<MdnsResponse> allResponses = augmentedResult.second;
|
||||||
|
|
||||||
for (MdnsResponse response : allResponses) {
|
for (MdnsResponse response : allResponses) {
|
||||||
|
|||||||
@@ -19,12 +19,12 @@ package com.android.server.connectivity.mdns;
|
|||||||
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
||||||
|
|
||||||
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
|
import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread;
|
||||||
import static com.android.server.connectivity.mdns.util.MdnsUtils.isNetworkMatched;
|
import static com.android.server.connectivity.mdns.util.MdnsUtils.isNetworkMatched;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.RequiresApi;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -41,6 +41,7 @@ import android.net.TetheringManager.TetheringEventCallback;
|
|||||||
import android.net.wifi.p2p.WifiP2pGroup;
|
import android.net.wifi.p2p.WifiP2pGroup;
|
||||||
import android.net.wifi.p2p.WifiP2pInfo;
|
import android.net.wifi.p2p.WifiP2pInfo;
|
||||||
import android.net.wifi.p2p.WifiP2pManager;
|
import android.net.wifi.p2p.WifiP2pManager;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
@@ -67,6 +68,7 @@ import java.util.Objects;
|
|||||||
* to their default value (0, false or null).
|
* to their default value (0, false or null).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||||
public class MdnsSocketProvider {
|
public class MdnsSocketProvider {
|
||||||
private static final String TAG = MdnsSocketProvider.class.getSimpleName();
|
private static final String TAG = MdnsSocketProvider.class.getSimpleName();
|
||||||
private static final boolean DBG = MdnsDiscoveryManager.DBG;
|
private static final boolean DBG = MdnsDiscoveryManager.DBG;
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ import android.annotation.NonNull;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
import android.system.Os;
|
import android.system.Os;
|
||||||
import android.util.ArraySet;
|
|
||||||
|
|
||||||
import com.android.net.module.util.FdEventsReader;
|
import com.android.net.module.util.FdEventsReader;
|
||||||
|
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
@@ -39,7 +39,7 @@ public class MulticastPacketReader extends FdEventsReader<MulticastPacketReader.
|
|||||||
@NonNull
|
@NonNull
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
@NonNull
|
@NonNull
|
||||||
private final Set<PacketHandler> mPacketHandlers = new ArraySet<>();
|
private final Set<PacketHandler> mPacketHandlers = MdnsUtils.newSet();
|
||||||
|
|
||||||
interface PacketHandler {
|
interface PacketHandler {
|
||||||
void handlePacket(byte[] recvbuf, int length, InetSocketAddress src);
|
void handlePacket(byte[] recvbuf, int length, InetSocketAddress src);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.android.server.connectivity.mdns.util;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
@@ -34,6 +35,8 @@ import java.nio.CharBuffer;
|
|||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.charset.CharsetEncoder;
|
import java.nio.charset.CharsetEncoder;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mdns utility functions.
|
* Mdns utility functions.
|
||||||
@@ -57,6 +60,17 @@ public class MdnsUtils {
|
|||||||
return new String(outChars);
|
return new String(outChars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a ArraySet or HashSet based on the sdk version.
|
||||||
|
*/
|
||||||
|
public static <Type> Set<Type> newSet() {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
return new ArraySet<>();
|
||||||
|
} else {
|
||||||
|
return new HashSet<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert the array of labels to DNS case-insensitive lowercase.
|
* Convert the array of labels to DNS case-insensitive lowercase.
|
||||||
*/
|
*/
|
||||||
@@ -142,7 +156,7 @@ public class MdnsUtils {
|
|||||||
|
|
||||||
/*** Check whether the target network matches any of the current networks */
|
/*** Check whether the target network matches any of the current networks */
|
||||||
public static boolean isAnyNetworkMatched(@Nullable Network targetNetwork,
|
public static boolean isAnyNetworkMatched(@Nullable Network targetNetwork,
|
||||||
ArraySet<Network> currentNetworks) {
|
Set<Network> currentNetworks) {
|
||||||
if (targetNetwork == null) {
|
if (targetNetwork == null) {
|
||||||
return !currentNetworks.isEmpty();
|
return !currentNetworks.isEmpty();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,8 @@
|
|||||||
package com.android.server.connectivity.mdns;
|
package com.android.server.connectivity.mdns;
|
||||||
|
|
||||||
import static android.net.InetAddresses.parseNumericAddress;
|
import static android.net.InetAddresses.parseNumericAddress;
|
||||||
|
|
||||||
import static com.android.server.connectivity.mdns.util.MdnsUtils.Clock;
|
import static com.android.server.connectivity.mdns.util.MdnsUtils.Clock;
|
||||||
import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2;
|
import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2;
|
||||||
|
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
@@ -343,9 +341,9 @@ public class MdnsResponseDecoderTests {
|
|||||||
assertNotNull(parsedPacket);
|
assertNotNull(parsedPacket);
|
||||||
|
|
||||||
final Network network = mock(Network.class);
|
final Network network = mock(Network.class);
|
||||||
responses = decoder.augmentResponses(parsedPacket,
|
responses = new ArraySet<>(decoder.augmentResponses(parsedPacket,
|
||||||
/* existingResponses= */ Collections.emptyList(),
|
/* existingResponses= */ Collections.emptyList(),
|
||||||
/* interfaceIndex= */ 10, network /* expireOnExit= */).first;
|
/* interfaceIndex= */ 10, network /* expireOnExit= */).first);
|
||||||
|
|
||||||
assertEquals(responses.size(), 1);
|
assertEquals(responses.size(), 1);
|
||||||
assertEquals(responses.valueAt(0).getInterfaceIndex(), 10);
|
assertEquals(responses.valueAt(0).getInterfaceIndex(), 10);
|
||||||
@@ -641,8 +639,8 @@ public class MdnsResponseDecoderTests {
|
|||||||
final MdnsPacket parsedPacket = MdnsResponseDecoder.parseResponse(data, data.length);
|
final MdnsPacket parsedPacket = MdnsResponseDecoder.parseResponse(data, data.length);
|
||||||
assertNotNull(parsedPacket);
|
assertNotNull(parsedPacket);
|
||||||
|
|
||||||
return decoder.augmentResponses(parsedPacket,
|
return new ArraySet<>(decoder.augmentResponses(parsedPacket,
|
||||||
existingResponses,
|
existingResponses,
|
||||||
MdnsSocket.INTERFACE_INDEX_UNSPECIFIED, mock(Network.class)).first;
|
MdnsSocket.INTERFACE_INDEX_UNSPECIFIED, mock(Network.class)).first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user