Replace usage of android.util.Log to SharedLog
Bug: 294326360 Test: atest FrameworksNetTests Change-Id: I9a3a84f907362260bdcf6be19e2c4d5345788d2e
This commit is contained in:
@@ -1608,7 +1608,8 @@ public class NsdService extends INsdManager.Stub {
|
|||||||
mRunningAppActiveImportanceCutoff);
|
mRunningAppActiveImportanceCutoff);
|
||||||
|
|
||||||
mMdnsSocketClient =
|
mMdnsSocketClient =
|
||||||
new MdnsMultinetworkSocketClient(handler.getLooper(), mMdnsSocketProvider);
|
new MdnsMultinetworkSocketClient(handler.getLooper(), mMdnsSocketProvider,
|
||||||
|
LOGGER.forSubComponent("MdnsMultinetworkSocketClient"));
|
||||||
mMdnsDiscoveryManager = deps.makeMdnsDiscoveryManager(new ExecutorProvider(),
|
mMdnsDiscoveryManager = deps.makeMdnsDiscoveryManager(new ExecutorProvider(),
|
||||||
mMdnsSocketClient, LOGGER.forSubComponent("MdnsDiscoveryManager"));
|
mMdnsSocketClient, LOGGER.forSubComponent("MdnsDiscoveryManager"));
|
||||||
handler.post(() -> mMdnsSocketClient.setCallback(mMdnsDiscoveryManager));
|
handler.post(() -> mMdnsSocketClient.setCallback(mMdnsDiscoveryManager));
|
||||||
|
|||||||
@@ -25,13 +25,12 @@ import android.net.NetworkCapabilities;
|
|||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
|
||||||
import com.android.server.connectivity.mdns.util.MdnsLogger;
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
/** Class for monitoring connectivity changes using {@link ConnectivityManager}. */
|
/** Class for monitoring connectivity changes using {@link ConnectivityManager}. */
|
||||||
public class ConnectivityMonitorWithConnectivityManager implements ConnectivityMonitor {
|
public class ConnectivityMonitorWithConnectivityManager implements ConnectivityMonitor {
|
||||||
private static final String TAG = "ConnMntrWConnMgr";
|
private static final String TAG = "ConnMntrWConnMgr";
|
||||||
private static final MdnsLogger LOGGER = new MdnsLogger(TAG);
|
private final SharedLog sharedLog;
|
||||||
|
|
||||||
private final Listener listener;
|
private final Listener listener;
|
||||||
private final ConnectivityManager.NetworkCallback networkCallback;
|
private final ConnectivityManager.NetworkCallback networkCallback;
|
||||||
private final ConnectivityManager connectivityManager;
|
private final ConnectivityManager connectivityManager;
|
||||||
@@ -42,8 +41,10 @@ public class ConnectivityMonitorWithConnectivityManager implements ConnectivityM
|
|||||||
|
|
||||||
@SuppressWarnings({"nullness:assignment", "nullness:method.invocation"})
|
@SuppressWarnings({"nullness:assignment", "nullness:method.invocation"})
|
||||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
public ConnectivityMonitorWithConnectivityManager(Context context, Listener listener) {
|
public ConnectivityMonitorWithConnectivityManager(Context context, Listener listener,
|
||||||
|
SharedLog sharedLog) {
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
|
this.sharedLog = sharedLog;
|
||||||
|
|
||||||
connectivityManager =
|
connectivityManager =
|
||||||
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
@@ -51,20 +52,20 @@ public class ConnectivityMonitorWithConnectivityManager implements ConnectivityM
|
|||||||
new ConnectivityManager.NetworkCallback() {
|
new ConnectivityManager.NetworkCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onAvailable(Network network) {
|
public void onAvailable(Network network) {
|
||||||
LOGGER.log("network available.");
|
sharedLog.log("network available.");
|
||||||
lastAvailableNetwork = network;
|
lastAvailableNetwork = network;
|
||||||
notifyConnectivityChange();
|
notifyConnectivityChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLost(Network network) {
|
public void onLost(Network network) {
|
||||||
LOGGER.log("network lost.");
|
sharedLog.log("network lost.");
|
||||||
notifyConnectivityChange();
|
notifyConnectivityChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUnavailable() {
|
public void onUnavailable() {
|
||||||
LOGGER.log("network unavailable.");
|
sharedLog.log("network unavailable.");
|
||||||
notifyConnectivityChange();
|
notifyConnectivityChange();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -82,7 +83,7 @@ public class ConnectivityMonitorWithConnectivityManager implements ConnectivityM
|
|||||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
@Override
|
@Override
|
||||||
public void startWatchingConnectivityChanges() {
|
public void startWatchingConnectivityChanges() {
|
||||||
LOGGER.log("Start watching connectivity changes");
|
sharedLog.log("Start watching connectivity changes");
|
||||||
if (isCallbackRegistered) {
|
if (isCallbackRegistered) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -98,7 +99,7 @@ public class ConnectivityMonitorWithConnectivityManager implements ConnectivityM
|
|||||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
@Override
|
@Override
|
||||||
public void stopWatchingConnectivityChanges() {
|
public void stopWatchingConnectivityChanges() {
|
||||||
LOGGER.log("Stop watching connectivity changes");
|
sharedLog.log("Stop watching connectivity changes");
|
||||||
if (!isCallbackRegistered) {
|
if (!isCallbackRegistered) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,10 +20,9 @@ import static com.android.server.connectivity.mdns.MdnsServiceTypeClient.INVALID
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
import com.android.server.connectivity.mdns.util.MdnsLogger;
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -44,7 +43,6 @@ import java.util.concurrent.Callable;
|
|||||||
public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<String>>> {
|
public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<String>>> {
|
||||||
|
|
||||||
private static final String TAG = "MdnsQueryCallable";
|
private static final String TAG = "MdnsQueryCallable";
|
||||||
private static final MdnsLogger LOGGER = new MdnsLogger(TAG);
|
|
||||||
private static final List<Integer> castShellEmulatorMdnsPorts;
|
private static final List<Integer> castShellEmulatorMdnsPorts;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@@ -77,6 +75,8 @@ public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<Str
|
|||||||
private final List<MdnsResponse> servicesToResolve;
|
private final List<MdnsResponse> servicesToResolve;
|
||||||
@NonNull
|
@NonNull
|
||||||
private final MdnsUtils.Clock clock;
|
private final MdnsUtils.Clock clock;
|
||||||
|
@NonNull
|
||||||
|
private final SharedLog sharedLog;
|
||||||
private final boolean onlyUseIpv6OnIpv6OnlyNetworks;
|
private final boolean onlyUseIpv6OnIpv6OnlyNetworks;
|
||||||
|
|
||||||
EnqueueMdnsQueryCallable(
|
EnqueueMdnsQueryCallable(
|
||||||
@@ -90,7 +90,8 @@ public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<Str
|
|||||||
boolean onlyUseIpv6OnIpv6OnlyNetworks,
|
boolean onlyUseIpv6OnIpv6OnlyNetworks,
|
||||||
boolean sendDiscoveryQueries,
|
boolean sendDiscoveryQueries,
|
||||||
@NonNull Collection<MdnsResponse> servicesToResolve,
|
@NonNull Collection<MdnsResponse> servicesToResolve,
|
||||||
@NonNull MdnsUtils.Clock clock) {
|
@NonNull MdnsUtils.Clock clock,
|
||||||
|
@NonNull SharedLog sharedLog) {
|
||||||
weakRequestSender = new WeakReference<>(requestSender);
|
weakRequestSender = new WeakReference<>(requestSender);
|
||||||
this.packetWriter = packetWriter;
|
this.packetWriter = packetWriter;
|
||||||
serviceTypeLabels = TextUtils.split(serviceType, "\\.");
|
serviceTypeLabels = TextUtils.split(serviceType, "\\.");
|
||||||
@@ -102,6 +103,7 @@ public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<Str
|
|||||||
this.sendDiscoveryQueries = sendDiscoveryQueries;
|
this.sendDiscoveryQueries = sendDiscoveryQueries;
|
||||||
this.servicesToResolve = new ArrayList<>(servicesToResolve);
|
this.servicesToResolve = new ArrayList<>(servicesToResolve);
|
||||||
this.clock = clock;
|
this.clock = clock;
|
||||||
|
this.sharedLog = sharedLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -200,7 +202,7 @@ public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<Str
|
|||||||
}
|
}
|
||||||
return Pair.create(transactionId, subtypes);
|
return Pair.create(transactionId, subtypes);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.e(String.format("Failed to create mDNS packet for subtype: %s.",
|
sharedLog.e(String.format("Failed to create mDNS packet for subtype: %s.",
|
||||||
TextUtils.join(",", subtypes)), e);
|
TextUtils.join(",", subtypes)), e);
|
||||||
return Pair.create(INVALID_TRANSACTION_ID, new ArrayList<>());
|
return Pair.create(INVALID_TRANSACTION_ID, new ArrayList<>());
|
||||||
}
|
}
|
||||||
@@ -242,13 +244,13 @@ public class EnqueueMdnsQueryCallable implements Callable<Pair<Integer, List<Str
|
|||||||
sendPacket(requestSender,
|
sendPacket(requestSender,
|
||||||
new InetSocketAddress(MdnsConstants.getMdnsIPv4Address(), port));
|
new InetSocketAddress(MdnsConstants.getMdnsIPv4Address(), port));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.i(TAG, "Can't send packet to IPv4", e);
|
sharedLog.e("Can't send packet to IPv4", e);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
sendPacket(requestSender,
|
sendPacket(requestSender,
|
||||||
new InetSocketAddress(MdnsConstants.getMdnsIPv6Address(), port));
|
new InetSocketAddress(MdnsConstants.getMdnsIPv6Address(), port));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.i(TAG, "Can't send packet to IPv6", e);
|
sharedLog.e("Can't send packet to IPv6", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,7 +124,7 @@ public class MdnsAdvertiser {
|
|||||||
@NonNull MdnsInterfaceAdvertiser advertiser, int serviceId) {
|
@NonNull MdnsInterfaceAdvertiser advertiser, int serviceId) {
|
||||||
final Registration registration = mRegistrations.get(serviceId);
|
final Registration registration = mRegistrations.get(serviceId);
|
||||||
if (registration == null) {
|
if (registration == null) {
|
||||||
Log.wtf(TAG, "Register succeeded for unknown registration");
|
mSharedLog.wtf("Register succeeded for unknown registration");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,7 +329,8 @@ public class MdnsAdvertiser {
|
|||||||
mAdvertisers.valueAt(i).addService(
|
mAdvertisers.valueAt(i).addService(
|
||||||
id, registration.getServiceInfo(), registration.getSubtype());
|
id, registration.getServiceInfo(), registration.getSubtype());
|
||||||
} catch (NameConflictException e) {
|
} catch (NameConflictException e) {
|
||||||
Log.wtf(TAG, "Name conflict adding services that should have unique names", e);
|
mSharedLog.wtf("Name conflict adding services that should have unique names",
|
||||||
|
e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -363,7 +364,8 @@ public class MdnsAdvertiser {
|
|||||||
advertiser.addService(mPendingRegistrations.keyAt(i),
|
advertiser.addService(mPendingRegistrations.keyAt(i),
|
||||||
registration.getServiceInfo(), registration.getSubtype());
|
registration.getServiceInfo(), registration.getSubtype());
|
||||||
} catch (NameConflictException e) {
|
} catch (NameConflictException e) {
|
||||||
Log.wtf(TAG, "Name conflict adding services that should have unique names", e);
|
mSharedLog.wtf("Name conflict adding services that should have unique names",
|
||||||
|
e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -545,7 +547,7 @@ public class MdnsAdvertiser {
|
|||||||
public void addService(int id, NsdServiceInfo service, @Nullable String subtype) {
|
public void addService(int id, NsdServiceInfo service, @Nullable String subtype) {
|
||||||
checkThread();
|
checkThread();
|
||||||
if (mRegistrations.get(id) != null) {
|
if (mRegistrations.get(id) != null) {
|
||||||
Log.e(TAG, "Adding duplicate registration for " + service);
|
mSharedLog.e("Adding duplicate registration for " + service);
|
||||||
// TODO (b/264986328): add a more specific error code
|
// TODO (b/264986328): add a more specific error code
|
||||||
mCb.onRegisterServiceFailed(id, NsdManager.FAILURE_INTERNAL_ERROR);
|
mCb.onRegisterServiceFailed(id, NsdManager.FAILURE_INTERNAL_ERROR);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.annotation.Nullable;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -39,9 +40,6 @@ public class MdnsAnnouncer extends MdnsPacketRepeater<MdnsAnnouncer.BaseAnnounce
|
|||||||
private static final long EXIT_DELAY_MS = 2000L;
|
private static final long EXIT_DELAY_MS = 2000L;
|
||||||
private static final int EXIT_COUNT = 3;
|
private static final int EXIT_COUNT = 3;
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private final String mLogTag;
|
|
||||||
|
|
||||||
/** Base class for announcement requests to send with {@link MdnsAnnouncer}. */
|
/** Base class for announcement requests to send with {@link MdnsAnnouncer}. */
|
||||||
public abstract static class BaseAnnouncementInfo implements MdnsPacketRepeater.Request {
|
public abstract static class BaseAnnouncementInfo implements MdnsPacketRepeater.Request {
|
||||||
private final int mServiceId;
|
private final int mServiceId;
|
||||||
@@ -105,16 +103,11 @@ public class MdnsAnnouncer extends MdnsPacketRepeater<MdnsAnnouncer.BaseAnnounce
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public MdnsAnnouncer(@NonNull String interfaceTag, @NonNull Looper looper,
|
public MdnsAnnouncer(@NonNull Looper looper,
|
||||||
@NonNull MdnsReplySender replySender,
|
@NonNull MdnsReplySender replySender,
|
||||||
@Nullable PacketRepeaterCallback<BaseAnnouncementInfo> cb) {
|
@Nullable PacketRepeaterCallback<BaseAnnouncementInfo> cb,
|
||||||
super(looper, replySender, cb);
|
@NonNull SharedLog sharedLog) {
|
||||||
mLogTag = MdnsAnnouncer.class.getSimpleName() + "/" + interfaceTag;
|
super(looper, replySender, cb, sharedLog);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getTag() {
|
|
||||||
return mLogTag;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Notify MdnsRecordRepository that the records were announced for that service ID,
|
// TODO: Notify MdnsRecordRepository that the records were announced for that service ID,
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import android.net.LinkAddress;
|
|||||||
import android.net.nsd.NsdServiceInfo;
|
import android.net.nsd.NsdServiceInfo;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.net.module.util.HexDump;
|
import com.android.net.module.util.HexDump;
|
||||||
@@ -42,8 +41,6 @@ public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHand
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public static final long EXIT_ANNOUNCEMENT_DELAY_MS = 100L;
|
public static final long EXIT_ANNOUNCEMENT_DELAY_MS = 100L;
|
||||||
@NonNull
|
@NonNull
|
||||||
private final String mTag;
|
|
||||||
@NonNull
|
|
||||||
private final ProbingCallback mProbingCallback = new ProbingCallback();
|
private final ProbingCallback mProbingCallback = new ProbingCallback();
|
||||||
@NonNull
|
@NonNull
|
||||||
private final AnnouncingCallback mAnnouncingCallback = new AnnouncingCallback();
|
private final AnnouncingCallback mAnnouncingCallback = new AnnouncingCallback();
|
||||||
@@ -151,22 +148,30 @@ public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHand
|
|||||||
/** @see MdnsReplySender */
|
/** @see MdnsReplySender */
|
||||||
@NonNull
|
@NonNull
|
||||||
public MdnsReplySender makeReplySender(@NonNull String interfaceTag, @NonNull Looper looper,
|
public MdnsReplySender makeReplySender(@NonNull String interfaceTag, @NonNull Looper looper,
|
||||||
@NonNull MdnsInterfaceSocket socket, @NonNull byte[] packetCreationBuffer) {
|
@NonNull MdnsInterfaceSocket socket, @NonNull byte[] packetCreationBuffer,
|
||||||
return new MdnsReplySender(interfaceTag, looper, socket, packetCreationBuffer);
|
@NonNull SharedLog sharedLog) {
|
||||||
|
return new MdnsReplySender(looper, socket, packetCreationBuffer,
|
||||||
|
sharedLog.forSubComponent(
|
||||||
|
MdnsReplySender.class.getSimpleName() + "/" + interfaceTag));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @see MdnsAnnouncer */
|
/** @see MdnsAnnouncer */
|
||||||
public MdnsAnnouncer makeMdnsAnnouncer(@NonNull String interfaceTag, @NonNull Looper looper,
|
public MdnsAnnouncer makeMdnsAnnouncer(@NonNull String interfaceTag, @NonNull Looper looper,
|
||||||
@NonNull MdnsReplySender replySender,
|
@NonNull MdnsReplySender replySender,
|
||||||
@Nullable PacketRepeaterCallback<MdnsAnnouncer.BaseAnnouncementInfo> cb) {
|
@Nullable PacketRepeaterCallback<MdnsAnnouncer.BaseAnnouncementInfo> cb,
|
||||||
return new MdnsAnnouncer(interfaceTag, looper, replySender, cb);
|
@NonNull SharedLog sharedLog) {
|
||||||
|
return new MdnsAnnouncer(looper, replySender, cb,
|
||||||
|
sharedLog.forSubComponent(
|
||||||
|
MdnsAnnouncer.class.getSimpleName() + "/" + interfaceTag));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @see MdnsProber */
|
/** @see MdnsProber */
|
||||||
public MdnsProber makeMdnsProber(@NonNull String interfaceTag, @NonNull Looper looper,
|
public MdnsProber makeMdnsProber(@NonNull String interfaceTag, @NonNull Looper looper,
|
||||||
@NonNull MdnsReplySender replySender,
|
@NonNull MdnsReplySender replySender,
|
||||||
@NonNull PacketRepeaterCallback<MdnsProber.ProbingInfo> cb) {
|
@NonNull PacketRepeaterCallback<MdnsProber.ProbingInfo> cb,
|
||||||
return new MdnsProber(interfaceTag, looper, replySender, cb);
|
@NonNull SharedLog sharedLog) {
|
||||||
|
return new MdnsProber(looper, replySender, cb, sharedLog.forSubComponent(
|
||||||
|
MdnsProber.class.getSimpleName() + "/" + interfaceTag));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,17 +187,17 @@ public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHand
|
|||||||
@NonNull List<LinkAddress> initialAddresses, @NonNull Looper looper,
|
@NonNull List<LinkAddress> initialAddresses, @NonNull Looper looper,
|
||||||
@NonNull byte[] packetCreationBuffer, @NonNull Callback cb, @NonNull Dependencies deps,
|
@NonNull byte[] packetCreationBuffer, @NonNull Callback cb, @NonNull Dependencies deps,
|
||||||
@NonNull String[] deviceHostName, @NonNull SharedLog sharedLog) {
|
@NonNull String[] deviceHostName, @NonNull SharedLog sharedLog) {
|
||||||
mTag = MdnsInterfaceAdvertiser.class.getSimpleName() + "/" + sharedLog.getTag();
|
|
||||||
mRecordRepository = deps.makeRecordRepository(looper, deviceHostName);
|
mRecordRepository = deps.makeRecordRepository(looper, deviceHostName);
|
||||||
mRecordRepository.updateAddresses(initialAddresses);
|
mRecordRepository.updateAddresses(initialAddresses);
|
||||||
mSocket = socket;
|
mSocket = socket;
|
||||||
mCb = cb;
|
mCb = cb;
|
||||||
mCbHandler = new Handler(looper);
|
mCbHandler = new Handler(looper);
|
||||||
mReplySender = deps.makeReplySender(sharedLog.getTag(), looper, socket,
|
mReplySender = deps.makeReplySender(sharedLog.getTag(), looper, socket,
|
||||||
packetCreationBuffer);
|
packetCreationBuffer, sharedLog);
|
||||||
mAnnouncer = deps.makeMdnsAnnouncer(sharedLog.getTag(), looper, mReplySender,
|
mAnnouncer = deps.makeMdnsAnnouncer(sharedLog.getTag(), looper, mReplySender,
|
||||||
mAnnouncingCallback);
|
mAnnouncingCallback, sharedLog);
|
||||||
mProber = deps.makeMdnsProber(sharedLog.getTag(), looper, mReplySender, mProbingCallback);
|
mProber = deps.makeMdnsProber(sharedLog.getTag(), looper, mReplySender, mProbingCallback,
|
||||||
|
sharedLog);
|
||||||
mSharedLog = sharedLog;
|
mSharedLog = sharedLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,20 +323,18 @@ public class MdnsInterfaceAdvertiser implements MulticastPacketReader.PacketHand
|
|||||||
try {
|
try {
|
||||||
packet = MdnsPacket.parse(new MdnsPacketReader(recvbuf, length));
|
packet = MdnsPacket.parse(new MdnsPacketReader(recvbuf, length));
|
||||||
} catch (MdnsPacket.ParseException e) {
|
} catch (MdnsPacket.ParseException e) {
|
||||||
Log.e(mTag, "Error parsing mDNS packet", e);
|
mSharedLog.e("Error parsing mDNS packet", e);
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.v(
|
mSharedLog.v("Packet: " + HexDump.toHexString(recvbuf, 0, length));
|
||||||
mTag, "Packet: " + HexDump.toHexString(recvbuf, 0, length));
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.v(mTag,
|
mSharedLog.v("Parsed packet with " + packet.questions.size() + " questions, "
|
||||||
"Parsed packet with " + packet.questions.size() + " questions, "
|
+ packet.answers.size() + " answers, "
|
||||||
+ packet.answers.size() + " answers, "
|
+ packet.authorityRecords.size() + " authority, "
|
||||||
+ packet.authorityRecords.size() + " authority, "
|
+ packet.additionalRecords.size() + " additional from " + src);
|
||||||
+ packet.additionalRecords.size() + " additional from " + src);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int conflictServiceId : mRecordRepository.getConflictingServices(packet)) {
|
for (int conflictServiceId : mRecordRepository.getConflictingServices(packet)) {
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ import android.os.ParcelFileDescriptor;
|
|||||||
import android.system.ErrnoException;
|
import android.system.ErrnoException;
|
||||||
import android.system.Os;
|
import android.system.Os;
|
||||||
import android.system.OsConstants;
|
import android.system.OsConstants;
|
||||||
import android.util.Log;
|
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -54,11 +55,12 @@ public class MdnsInterfaceSocket {
|
|||||||
@NonNull private final NetworkInterface mNetworkInterface;
|
@NonNull private final NetworkInterface mNetworkInterface;
|
||||||
@NonNull private final MulticastPacketReader mPacketReader;
|
@NonNull private final MulticastPacketReader mPacketReader;
|
||||||
@NonNull private final ParcelFileDescriptor mFileDescriptor;
|
@NonNull private final ParcelFileDescriptor mFileDescriptor;
|
||||||
|
@NonNull private final SharedLog mSharedLog;
|
||||||
private boolean mJoinedIpv4 = false;
|
private boolean mJoinedIpv4 = false;
|
||||||
private boolean mJoinedIpv6 = false;
|
private boolean mJoinedIpv6 = false;
|
||||||
|
|
||||||
public MdnsInterfaceSocket(@NonNull NetworkInterface networkInterface, int port,
|
public MdnsInterfaceSocket(@NonNull NetworkInterface networkInterface, int port,
|
||||||
@NonNull Looper looper, @NonNull byte[] packetReadBuffer)
|
@NonNull Looper looper, @NonNull byte[] packetReadBuffer, @NonNull SharedLog sharedLog)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
mNetworkInterface = networkInterface;
|
mNetworkInterface = networkInterface;
|
||||||
mMulticastSocket = new MulticastSocket(port);
|
mMulticastSocket = new MulticastSocket(port);
|
||||||
@@ -80,6 +82,8 @@ public class MdnsInterfaceSocket {
|
|||||||
mPacketReader = new MulticastPacketReader(networkInterface.getName(), mFileDescriptor,
|
mPacketReader = new MulticastPacketReader(networkInterface.getName(), mFileDescriptor,
|
||||||
new Handler(looper), packetReadBuffer);
|
new Handler(looper), packetReadBuffer);
|
||||||
mPacketReader.start();
|
mPacketReader.start();
|
||||||
|
|
||||||
|
mSharedLog = sharedLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -117,7 +121,7 @@ public class MdnsInterfaceSocket {
|
|||||||
return true;
|
return true;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// The address may have just been removed
|
// The address may have just been removed
|
||||||
Log.e(TAG, "Error joining multicast group for " + mNetworkInterface, e);
|
mSharedLog.e("Error joining multicast group for " + mNetworkInterface, e);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,7 +152,7 @@ public class MdnsInterfaceSocket {
|
|||||||
try {
|
try {
|
||||||
mFileDescriptor.close();
|
mFileDescriptor.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "Close file descriptor failed.");
|
mSharedLog.e("Close file descriptor failed.");
|
||||||
}
|
}
|
||||||
mMulticastSocket.close();
|
mMulticastSocket.close();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ import android.net.Network;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.DatagramPacket;
|
import java.net.DatagramPacket;
|
||||||
@@ -46,6 +47,7 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
|||||||
|
|
||||||
@NonNull private final Handler mHandler;
|
@NonNull private final Handler mHandler;
|
||||||
@NonNull private final MdnsSocketProvider mSocketProvider;
|
@NonNull private final MdnsSocketProvider mSocketProvider;
|
||||||
|
@NonNull private final SharedLog mSharedLog;
|
||||||
|
|
||||||
private final ArrayMap<MdnsServiceBrowserListener, InterfaceSocketCallback> mRequestedNetworks =
|
private final ArrayMap<MdnsServiceBrowserListener, InterfaceSocketCallback> mRequestedNetworks =
|
||||||
new ArrayMap<>();
|
new ArrayMap<>();
|
||||||
@@ -55,9 +57,11 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
|||||||
private int mReceivedPacketNumber = 0;
|
private int mReceivedPacketNumber = 0;
|
||||||
|
|
||||||
public MdnsMultinetworkSocketClient(@NonNull Looper looper,
|
public MdnsMultinetworkSocketClient(@NonNull Looper looper,
|
||||||
@NonNull MdnsSocketProvider provider) {
|
@NonNull MdnsSocketProvider provider,
|
||||||
|
@NonNull SharedLog sharedLog) {
|
||||||
mHandler = new Handler(looper);
|
mHandler = new Handler(looper);
|
||||||
mSocketProvider = provider;
|
mSocketProvider = provider;
|
||||||
|
mSharedLog = sharedLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class InterfaceSocketCallback implements MdnsSocketProvider.SocketCallback {
|
private class InterfaceSocketCallback implements MdnsSocketProvider.SocketCallback {
|
||||||
@@ -172,7 +176,7 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
|||||||
throw new IllegalArgumentException("Can not register duplicated listener");
|
throw new IllegalArgumentException("Can not register duplicated listener");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DBG) Log.d(TAG, "notifyNetworkRequested: network=" + network);
|
if (DBG) mSharedLog.v("notifyNetworkRequested: network=" + network);
|
||||||
callback = new InterfaceSocketCallback(socketCreationCallback);
|
callback = new InterfaceSocketCallback(socketCreationCallback);
|
||||||
mRequestedNetworks.put(listener, callback);
|
mRequestedNetworks.put(listener, callback);
|
||||||
mSocketProvider.requestSocket(network, callback);
|
mSocketProvider.requestSocket(network, callback);
|
||||||
@@ -184,7 +188,7 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
|||||||
ensureRunningOnHandlerThread(mHandler);
|
ensureRunningOnHandlerThread(mHandler);
|
||||||
final InterfaceSocketCallback callback = mRequestedNetworks.get(listener);
|
final InterfaceSocketCallback callback = mRequestedNetworks.get(listener);
|
||||||
if (callback == null) {
|
if (callback == null) {
|
||||||
Log.e(TAG, "Can not be unrequested with unknown listener=" + listener);
|
mSharedLog.e("Can not be unrequested with unknown listener=" + listener);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
callback.onNetworkUnrequested();
|
callback.onNetworkUnrequested();
|
||||||
@@ -222,7 +226,7 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
|||||||
try {
|
try {
|
||||||
socket.send(packet);
|
socket.send(packet);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "Failed to send a mDNS packet.", e);
|
mSharedLog.e("Failed to send a mDNS packet.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -249,7 +253,7 @@ public class MdnsMultinetworkSocketClient implements MdnsSocketClientBase {
|
|||||||
response = MdnsResponseDecoder.parseResponse(recvbuf, length);
|
response = MdnsResponseDecoder.parseResponse(recvbuf, length);
|
||||||
} catch (MdnsPacket.ParseException e) {
|
} catch (MdnsPacket.ParseException e) {
|
||||||
if (e.code != MdnsResponseErrorCode.ERROR_NOT_RESPONSE_MESSAGE) {
|
if (e.code != MdnsResponseErrorCode.ERROR_NOT_RESPONSE_MESSAGE) {
|
||||||
Log.e(TAG, e.getMessage(), e);
|
mSharedLog.e(e.getMessage(), e);
|
||||||
if (mCallback != null) {
|
if (mCallback != null) {
|
||||||
mCallback.onFailedToParseMdnsResponse(packetNumber, e.code, socketKey);
|
mCallback.onFailedToParseMdnsResponse(packetNumber, e.code, socketKey);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ import android.annotation.Nullable;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.util.Log;
|
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
@@ -45,6 +46,8 @@ public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
|||||||
protected final Handler mHandler;
|
protected final Handler mHandler;
|
||||||
@Nullable
|
@Nullable
|
||||||
private final PacketRepeaterCallback<T> mCb;
|
private final PacketRepeaterCallback<T> mCb;
|
||||||
|
@NonNull
|
||||||
|
private final SharedLog mSharedLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Status callback from {@link MdnsPacketRepeater}.
|
* Status callback from {@link MdnsPacketRepeater}.
|
||||||
@@ -87,12 +90,6 @@ public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
|||||||
int getNumSends();
|
int getNumSends();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the logging tag to use.
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
protected abstract String getTag();
|
|
||||||
|
|
||||||
private final class ProbeHandler extends Handler {
|
private final class ProbeHandler extends Handler {
|
||||||
ProbeHandler(@NonNull Looper looper) {
|
ProbeHandler(@NonNull Looper looper) {
|
||||||
super(looper);
|
super(looper);
|
||||||
@@ -112,7 +109,7 @@ public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
|||||||
|
|
||||||
final MdnsPacket packet = request.getPacket(index);
|
final MdnsPacket packet = request.getPacket(index);
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.v(getTag(), "Sending packets for iteration " + index + " out of "
|
mSharedLog.v("Sending packets for iteration " + index + " out of "
|
||||||
+ request.getNumSends() + " for ID " + msg.what);
|
+ request.getNumSends() + " for ID " + msg.what);
|
||||||
}
|
}
|
||||||
// Send to both v4 and v6 addresses; the reply sender will take care of ignoring the
|
// Send to both v4 and v6 addresses; the reply sender will take care of ignoring the
|
||||||
@@ -121,7 +118,7 @@ public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
|||||||
try {
|
try {
|
||||||
mReplySender.sendNow(packet, destination);
|
mReplySender.sendNow(packet, destination);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(getTag(), "Error sending packet to " + destination, e);
|
mSharedLog.e("Error sending packet to " + destination, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,7 +130,7 @@ public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
|||||||
// likely not to be available since the device is in deep sleep anyway.
|
// likely not to be available since the device is in deep sleep anyway.
|
||||||
final long delay = request.getDelayMs(nextIndex);
|
final long delay = request.getDelayMs(nextIndex);
|
||||||
sendMessageDelayed(obtainMessage(msg.what, nextIndex, 0, request), delay);
|
sendMessageDelayed(obtainMessage(msg.what, nextIndex, 0, request), delay);
|
||||||
if (DBG) Log.v(getTag(), "Scheduled next packet in " + delay + "ms");
|
if (DBG) mSharedLog.v("Scheduled next packet in " + delay + "ms");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call onSent after scheduling the next run, to allow the callback to cancel it
|
// Call onSent after scheduling the next run, to allow the callback to cancel it
|
||||||
@@ -144,15 +141,16 @@ public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected MdnsPacketRepeater(@NonNull Looper looper, @NonNull MdnsReplySender replySender,
|
protected MdnsPacketRepeater(@NonNull Looper looper, @NonNull MdnsReplySender replySender,
|
||||||
@Nullable PacketRepeaterCallback<T> cb) {
|
@Nullable PacketRepeaterCallback<T> cb, @NonNull SharedLog sharedLog) {
|
||||||
mHandler = new ProbeHandler(looper);
|
mHandler = new ProbeHandler(looper);
|
||||||
mReplySender = replySender;
|
mReplySender = replySender;
|
||||||
mCb = cb;
|
mCb = cb;
|
||||||
|
mSharedLog = sharedLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startSending(int id, @NonNull T request, long initialDelayMs) {
|
protected void startSending(int id, @NonNull T request, long initialDelayMs) {
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.v(getTag(), "Starting send with id " + id + ", request "
|
mSharedLog.v("Starting send with id " + id + ", request "
|
||||||
+ request.getClass().getSimpleName() + ", delay " + initialDelayMs);
|
+ request.getClass().getSimpleName() + ", delay " + initialDelayMs);
|
||||||
}
|
}
|
||||||
mHandler.sendMessageDelayed(mHandler.obtainMessage(id, 0, 0, request), initialDelayMs);
|
mHandler.sendMessageDelayed(mHandler.obtainMessage(id, 0, 0, request), initialDelayMs);
|
||||||
@@ -171,7 +169,7 @@ public abstract class MdnsPacketRepeater<T extends MdnsPacketRepeater.Request> {
|
|||||||
// message cannot be cancelled.
|
// message cannot be cancelled.
|
||||||
if (mHandler.hasMessages(id)) {
|
if (mHandler.hasMessages(id)) {
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.v(getTag(), "Stopping send on id " + id);
|
mSharedLog.v("Stopping send on id " + id);
|
||||||
}
|
}
|
||||||
mHandler.removeMessages(id);
|
mHandler.removeMessages(id);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.os.Looper;
|
|||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.net.module.util.CollectionUtils;
|
import com.android.net.module.util.CollectionUtils;
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -34,14 +35,11 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
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;
|
||||||
@NonNull
|
|
||||||
private final String mLogTag;
|
|
||||||
|
|
||||||
public MdnsProber(@NonNull String interfaceTag, @NonNull Looper looper,
|
public MdnsProber(@NonNull Looper looper, @NonNull MdnsReplySender replySender,
|
||||||
@NonNull MdnsReplySender replySender,
|
@NonNull PacketRepeaterCallback<ProbingInfo> cb,
|
||||||
@NonNull PacketRepeaterCallback<ProbingInfo> cb) {
|
@NonNull SharedLog sharedLog) {
|
||||||
super(looper, replySender, cb);
|
super(looper, replySender, cb, sharedLog);
|
||||||
mLogTag = MdnsProber.class.getSimpleName() + "/" + interfaceTag;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Probing request to send with {@link MdnsProber}. */
|
/** Probing request to send with {@link MdnsProber}. */
|
||||||
@@ -118,11 +116,6 @@ public class MdnsProber extends MdnsPacketRepeater<MdnsProber.ProbingInfo> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
protected String getTag() {
|
|
||||||
return mLogTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
protected long getInitialDelay() {
|
protected long getInitialDelay() {
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ import android.annotation.NonNull;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.server.connectivity.mdns.MdnsRecordRepository.ReplyInfo;
|
import com.android.server.connectivity.mdns.MdnsRecordRepository.ReplyInfo;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -43,21 +43,21 @@ import java.util.Collections;
|
|||||||
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;
|
||||||
|
|
||||||
private final String mLogTag;
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private final MdnsInterfaceSocket mSocket;
|
private final MdnsInterfaceSocket mSocket;
|
||||||
@NonNull
|
@NonNull
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
@NonNull
|
@NonNull
|
||||||
private final byte[] mPacketCreationBuffer;
|
private final byte[] mPacketCreationBuffer;
|
||||||
|
@NonNull
|
||||||
|
private final SharedLog mSharedLog;
|
||||||
|
|
||||||
public MdnsReplySender(@NonNull String interfaceTag, @NonNull Looper looper,
|
public MdnsReplySender(@NonNull Looper looper, @NonNull MdnsInterfaceSocket socket,
|
||||||
@NonNull MdnsInterfaceSocket socket, @NonNull byte[] packetCreationBuffer) {
|
@NonNull byte[] packetCreationBuffer, @NonNull SharedLog sharedLog) {
|
||||||
mHandler = new SendHandler(looper);
|
mHandler = new SendHandler(looper);
|
||||||
mLogTag = MdnsReplySender.class.getSimpleName() + "/" + interfaceTag;
|
|
||||||
mSocket = socket;
|
mSocket = socket;
|
||||||
mPacketCreationBuffer = packetCreationBuffer;
|
mPacketCreationBuffer = packetCreationBuffer;
|
||||||
|
mSharedLog = sharedLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -69,7 +69,7 @@ public class MdnsReplySender {
|
|||||||
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SEND, reply), reply.sendDelayMs);
|
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SEND, reply), reply.sendDelayMs);
|
||||||
|
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.v(mLogTag, "Scheduling " + reply);
|
mSharedLog.v("Scheduling " + reply);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ public class MdnsReplySender {
|
|||||||
@Override
|
@Override
|
||||||
public void handleMessage(@NonNull Message msg) {
|
public void handleMessage(@NonNull Message msg) {
|
||||||
final ReplyInfo replyInfo = (ReplyInfo) msg.obj;
|
final ReplyInfo replyInfo = (ReplyInfo) msg.obj;
|
||||||
if (DBG) Log.v(mLogTag, "Sending " + replyInfo);
|
if (DBG) mSharedLog.v("Sending " + replyInfo);
|
||||||
|
|
||||||
final int flags = 0x8400; // Response, authoritative (rfc6762 18.4)
|
final int flags = 0x8400; // Response, authoritative (rfc6762 18.4)
|
||||||
final MdnsPacket packet = new MdnsPacket(flags,
|
final MdnsPacket packet = new MdnsPacket(flags,
|
||||||
@@ -146,7 +146,7 @@ public class MdnsReplySender {
|
|||||||
try {
|
try {
|
||||||
sendNow(packet, replyInfo.destination);
|
sendNow(packet, replyInfo.destination);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(mLogTag, "Error sending MDNS response", e);
|
mSharedLog.e("Error sending MDNS response", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import android.util.ArrayMap;
|
|||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
import com.android.server.connectivity.mdns.util.MdnsLogger;
|
|
||||||
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
import com.android.server.connectivity.mdns.util.MdnsUtils;
|
||||||
|
|
||||||
import java.io.EOFException;
|
import java.io.EOFException;
|
||||||
@@ -35,7 +34,6 @@ import java.util.List;
|
|||||||
public class MdnsResponseDecoder {
|
public class MdnsResponseDecoder {
|
||||||
public static final int SUCCESS = 0;
|
public static final int SUCCESS = 0;
|
||||||
private static final String TAG = "MdnsResponseDecoder";
|
private static final String TAG = "MdnsResponseDecoder";
|
||||||
private static final MdnsLogger LOGGER = new MdnsLogger(TAG);
|
|
||||||
private final boolean allowMultipleSrvRecordsPerHost =
|
private final boolean allowMultipleSrvRecordsPerHost =
|
||||||
MdnsConfigs.allowMultipleSrvRecordsPerHost();
|
MdnsConfigs.allowMultipleSrvRecordsPerHost();
|
||||||
@Nullable private final String[] serviceType;
|
@Nullable private final String[] serviceType;
|
||||||
|
|||||||
@@ -656,7 +656,8 @@ public class MdnsServiceTypeClient {
|
|||||||
taskArgs.config.onlyUseIpv6OnIpv6OnlyNetworks,
|
taskArgs.config.onlyUseIpv6OnIpv6OnlyNetworks,
|
||||||
sendDiscoveryQueries,
|
sendDiscoveryQueries,
|
||||||
servicesToResolve,
|
servicesToResolve,
|
||||||
clock)
|
clock,
|
||||||
|
sharedLog)
|
||||||
.call();
|
.call();
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
sharedLog.e(String.format("Failed to run EnqueueMdnsQueryCallable for subtype: %s",
|
sharedLog.e(String.format("Failed to run EnqueueMdnsQueryCallable for subtype: %s",
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import android.annotation.Nullable;
|
|||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.server.connectivity.mdns.util.MdnsLogger;
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.DatagramPacket;
|
import java.net.DatagramPacket;
|
||||||
@@ -37,8 +37,6 @@ import java.util.List;
|
|||||||
* @see MulticastSocket for javadoc of each public method.
|
* @see MulticastSocket for javadoc of each public method.
|
||||||
*/
|
*/
|
||||||
public class MdnsSocket {
|
public class MdnsSocket {
|
||||||
private static final MdnsLogger LOGGER = new MdnsLogger("MdnsSocket");
|
|
||||||
|
|
||||||
static final int INTERFACE_INDEX_UNSPECIFIED = -1;
|
static final int INTERFACE_INDEX_UNSPECIFIED = -1;
|
||||||
public static final InetSocketAddress MULTICAST_IPV4_ADDRESS =
|
public static final InetSocketAddress MULTICAST_IPV4_ADDRESS =
|
||||||
new InetSocketAddress(MdnsConstants.getMdnsIPv4Address(), MdnsConstants.MDNS_PORT);
|
new InetSocketAddress(MdnsConstants.getMdnsIPv4Address(), MdnsConstants.MDNS_PORT);
|
||||||
@@ -47,19 +45,22 @@ public class MdnsSocket {
|
|||||||
private final MulticastNetworkInterfaceProvider multicastNetworkInterfaceProvider;
|
private final MulticastNetworkInterfaceProvider multicastNetworkInterfaceProvider;
|
||||||
private final MulticastSocket multicastSocket;
|
private final MulticastSocket multicastSocket;
|
||||||
private boolean isOnIPv6OnlyNetwork;
|
private boolean isOnIPv6OnlyNetwork;
|
||||||
|
private final SharedLog sharedLog;
|
||||||
|
|
||||||
public MdnsSocket(
|
public MdnsSocket(
|
||||||
@NonNull MulticastNetworkInterfaceProvider multicastNetworkInterfaceProvider, int port)
|
@NonNull MulticastNetworkInterfaceProvider multicastNetworkInterfaceProvider, int port,
|
||||||
|
SharedLog sharedLog)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
this(multicastNetworkInterfaceProvider, new MulticastSocket(port));
|
this(multicastNetworkInterfaceProvider, new MulticastSocket(port), sharedLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
MdnsSocket(@NonNull MulticastNetworkInterfaceProvider multicastNetworkInterfaceProvider,
|
MdnsSocket(@NonNull MulticastNetworkInterfaceProvider multicastNetworkInterfaceProvider,
|
||||||
MulticastSocket multicastSocket) throws IOException {
|
MulticastSocket multicastSocket, SharedLog sharedLog) throws IOException {
|
||||||
this.multicastNetworkInterfaceProvider = multicastNetworkInterfaceProvider;
|
this.multicastNetworkInterfaceProvider = multicastNetworkInterfaceProvider;
|
||||||
this.multicastNetworkInterfaceProvider.startWatchingConnectivityChanges();
|
this.multicastNetworkInterfaceProvider.startWatchingConnectivityChanges();
|
||||||
this.multicastSocket = multicastSocket;
|
this.multicastSocket = multicastSocket;
|
||||||
|
this.sharedLog = sharedLog;
|
||||||
// RFC Spec: https://tools.ietf.org/html/rfc6762
|
// RFC Spec: https://tools.ietf.org/html/rfc6762
|
||||||
// Time to live is set 255, which is similar to the jMDNS implementation.
|
// Time to live is set 255, which is similar to the jMDNS implementation.
|
||||||
multicastSocket.setTimeToLive(255);
|
multicastSocket.setTimeToLive(255);
|
||||||
@@ -130,7 +131,7 @@ public class MdnsSocket {
|
|||||||
try {
|
try {
|
||||||
return multicastSocket.getNetworkInterface().getIndex();
|
return multicastSocket.getNetworkInterface().getIndex();
|
||||||
} catch (SocketException e) {
|
} catch (SocketException e) {
|
||||||
LOGGER.e("Failed to retrieve interface index for socket.", e);
|
sharedLog.e("Failed to retrieve interface index for socket.", e);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import android.os.SystemClock;
|
|||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.server.connectivity.mdns.util.MdnsLogger;
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.DatagramPacket;
|
import java.net.DatagramPacket;
|
||||||
@@ -57,7 +57,6 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
private static final String CAST_SENDER_LOG_SOURCE = "CAST_SENDER_SDK";
|
private static final String CAST_SENDER_LOG_SOURCE = "CAST_SENDER_SDK";
|
||||||
private static final String CAST_PREFS_NAME = "google_cast";
|
private static final String CAST_PREFS_NAME = "google_cast";
|
||||||
private static final String PREF_CAST_SENDER_ID = "PREF_CAST_SENDER_ID";
|
private static final String PREF_CAST_SENDER_ID = "PREF_CAST_SENDER_ID";
|
||||||
private static final MdnsLogger LOGGER = new MdnsLogger(TAG);
|
|
||||||
private static final String MULTICAST_TYPE = "multicast";
|
private static final String MULTICAST_TYPE = "multicast";
|
||||||
private static final String UNICAST_TYPE = "unicast";
|
private static final String UNICAST_TYPE = "unicast";
|
||||||
|
|
||||||
@@ -105,8 +104,11 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
@Nullable private Timer logMdnsPacketTimer;
|
@Nullable private Timer logMdnsPacketTimer;
|
||||||
private AtomicInteger packetsCount;
|
private AtomicInteger packetsCount;
|
||||||
@Nullable private Timer checkMulticastResponseTimer;
|
@Nullable private Timer checkMulticastResponseTimer;
|
||||||
|
private final SharedLog sharedLog;
|
||||||
|
|
||||||
public MdnsSocketClient(@NonNull Context context, @NonNull MulticastLock multicastLock) {
|
public MdnsSocketClient(@NonNull Context context, @NonNull MulticastLock multicastLock,
|
||||||
|
SharedLog sharedLog) {
|
||||||
|
this.sharedLog = sharedLog;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.multicastLock = multicastLock;
|
this.multicastLock = multicastLock;
|
||||||
if (useSeparateSocketForUnicast) {
|
if (useSeparateSocketForUnicast) {
|
||||||
@@ -125,7 +127,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void startDiscovery() throws IOException {
|
public synchronized void startDiscovery() throws IOException {
|
||||||
if (multicastSocket != null) {
|
if (multicastSocket != null) {
|
||||||
LOGGER.w("Discovery is already in progress.");
|
sharedLog.w("Discovery is already in progress.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,11 +138,11 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
shouldStopSocketLoop = false;
|
shouldStopSocketLoop = false;
|
||||||
try {
|
try {
|
||||||
// TODO (changed when importing code): consider setting thread stats tag
|
// TODO (changed when importing code): consider setting thread stats tag
|
||||||
multicastSocket = createMdnsSocket(MdnsConstants.MDNS_PORT);
|
multicastSocket = createMdnsSocket(MdnsConstants.MDNS_PORT, sharedLog);
|
||||||
multicastSocket.joinGroup();
|
multicastSocket.joinGroup();
|
||||||
if (useSeparateSocketForUnicast) {
|
if (useSeparateSocketForUnicast) {
|
||||||
// For unicast, use port 0 and the system will assign it with any available port.
|
// For unicast, use port 0 and the system will assign it with any available port.
|
||||||
unicastSocket = createMdnsSocket(0);
|
unicastSocket = createMdnsSocket(0, sharedLog);
|
||||||
}
|
}
|
||||||
multicastLock.acquire();
|
multicastLock.acquire();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -164,7 +166,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
@RequiresPermission(permission.CHANGE_WIFI_MULTICAST_STATE)
|
@RequiresPermission(permission.CHANGE_WIFI_MULTICAST_STATE)
|
||||||
@Override
|
@Override
|
||||||
public void stopDiscovery() {
|
public void stopDiscovery() {
|
||||||
LOGGER.log("Stop discovery.");
|
sharedLog.log("Stop discovery.");
|
||||||
if (multicastSocket == null && unicastSocket == null) {
|
if (multicastSocket == null && unicastSocket == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -233,7 +235,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
private void sendMdnsPacket(DatagramPacket packet, Queue<DatagramPacket> packetQueueToUse,
|
private void sendMdnsPacket(DatagramPacket packet, Queue<DatagramPacket> packetQueueToUse,
|
||||||
boolean onlyUseIpv6OnIpv6OnlyNetworks) {
|
boolean onlyUseIpv6OnIpv6OnlyNetworks) {
|
||||||
if (shouldStopSocketLoop && !MdnsConfigs.allowAddMdnsPacketAfterDiscoveryStops()) {
|
if (shouldStopSocketLoop && !MdnsConfigs.allowAddMdnsPacketAfterDiscoveryStops()) {
|
||||||
LOGGER.w("sendMdnsPacket() is called after discovery already stopped");
|
sharedLog.w("sendMdnsPacket() is called after discovery already stopped");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +262,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
|
|
||||||
private void createAndStartSendThread() {
|
private void createAndStartSendThread() {
|
||||||
if (sendThread != null) {
|
if (sendThread != null) {
|
||||||
LOGGER.w("A socket thread already exists.");
|
sharedLog.w("A socket thread already exists.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sendThread = new Thread(this::sendThreadMain);
|
sendThread = new Thread(this::sendThreadMain);
|
||||||
@@ -270,7 +272,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
|
|
||||||
private void createAndStartReceiverThreads() {
|
private void createAndStartReceiverThreads() {
|
||||||
if (multicastReceiveThread != null) {
|
if (multicastReceiveThread != null) {
|
||||||
LOGGER.w("A multicast receiver thread already exists.");
|
sharedLog.w("A multicast receiver thread already exists.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
multicastReceiveThread =
|
multicastReceiveThread =
|
||||||
@@ -292,12 +294,12 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void triggerSendThread() {
|
private void triggerSendThread() {
|
||||||
LOGGER.log("Trigger send thread.");
|
sharedLog.log("Trigger send thread.");
|
||||||
Thread sendThread = this.sendThread;
|
Thread sendThread = this.sendThread;
|
||||||
if (sendThread != null) {
|
if (sendThread != null) {
|
||||||
sendThread.interrupt();
|
sendThread.interrupt();
|
||||||
} else {
|
} else {
|
||||||
LOGGER.w("Socket thread is null");
|
sharedLog.w("Socket thread is null");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,9 +316,9 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void waitForSendThreadToStop() {
|
private void waitForSendThreadToStop() {
|
||||||
LOGGER.log("wait For Send Thread To Stop");
|
sharedLog.log("wait For Send Thread To Stop");
|
||||||
if (sendThread == null) {
|
if (sendThread == null) {
|
||||||
LOGGER.w("socket thread is already dead.");
|
sharedLog.w("socket thread is already dead.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
waitForThread(sendThread);
|
waitForThread(sendThread);
|
||||||
@@ -331,7 +333,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
thread.interrupt();
|
thread.interrupt();
|
||||||
thread.join(waitMs);
|
thread.join(waitMs);
|
||||||
if (thread.isAlive()) {
|
if (thread.isAlive()) {
|
||||||
LOGGER.w("Failed to join thread: " + thread);
|
sharedLog.w("Failed to join thread: " + thread);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
@@ -390,13 +392,13 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
LOGGER.log("Send thread stopped.");
|
sharedLog.log("Send thread stopped.");
|
||||||
try {
|
try {
|
||||||
if (multicastSocket != null) {
|
if (multicastSocket != null) {
|
||||||
multicastSocket.leaveGroup();
|
multicastSocket.leaveGroup();
|
||||||
}
|
}
|
||||||
} catch (Exception t) {
|
} catch (Exception t) {
|
||||||
LOGGER.e("Failed to leave the group.", t);
|
sharedLog.e("Failed to leave the group.", t);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the socket first. This is the only way to interrupt a blocking receive.
|
// Close the socket first. This is the only way to interrupt a blocking receive.
|
||||||
@@ -409,7 +411,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
unicastSocket.close();
|
unicastSocket.close();
|
||||||
}
|
}
|
||||||
} catch (RuntimeException t) {
|
} catch (RuntimeException t) {
|
||||||
LOGGER.e("Failed to close the mdns socket.", t);
|
sharedLog.e("Failed to close the mdns socket.", t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -439,11 +441,11 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
if (!shouldStopSocketLoop) {
|
if (!shouldStopSocketLoop) {
|
||||||
LOGGER.e("Failed to receive mDNS packets.", e);
|
sharedLog.e("Failed to receive mDNS packets.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOGGER.log("Receive thread stopped.");
|
sharedLog.log("Receive thread stopped.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private int processResponsePacket(@NonNull DatagramPacket packet, String responseType,
|
private int processResponsePacket(@NonNull DatagramPacket packet, String responseType,
|
||||||
@@ -454,7 +456,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
try {
|
try {
|
||||||
response = MdnsResponseDecoder.parseResponse(packet.getData(), packet.getLength());
|
response = MdnsResponseDecoder.parseResponse(packet.getData(), packet.getLength());
|
||||||
} catch (MdnsPacket.ParseException e) {
|
} catch (MdnsPacket.ParseException e) {
|
||||||
LOGGER.w(String.format("Error while decoding %s packet (%d): %d",
|
sharedLog.w(String.format("Error while decoding %s packet (%d): %d",
|
||||||
responseType, packetNumber, e.code));
|
responseType, packetNumber, e.code));
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.onFailedToParseMdnsResponse(packetNumber, e.code,
|
callback.onFailedToParseMdnsResponse(packetNumber, e.code,
|
||||||
@@ -476,8 +478,9 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
MdnsSocket createMdnsSocket(int port) throws IOException {
|
MdnsSocket createMdnsSocket(int port, SharedLog sharedLog) throws IOException {
|
||||||
return new MdnsSocket(new MulticastNetworkInterfaceProvider(context), port);
|
return new MdnsSocket(new MulticastNetworkInterfaceProvider(context, sharedLog), port,
|
||||||
|
sharedLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendPackets(List<DatagramPacket> packets, MdnsSocket socket) {
|
private void sendPackets(List<DatagramPacket> packets, MdnsSocket socket) {
|
||||||
@@ -487,7 +490,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
LOGGER.log("Sending a %s mDNS packet...", requestType);
|
sharedLog.log(String.format("Sending a %s mDNS packet...", requestType));
|
||||||
socket.send(packet);
|
socket.send(packet);
|
||||||
|
|
||||||
// Start the timer task to monitor the response.
|
// Start the timer task to monitor the response.
|
||||||
@@ -516,7 +519,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
}
|
}
|
||||||
if ((!receivedMulticastResponse)
|
if ((!receivedMulticastResponse)
|
||||||
&& receivedUnicastResponse) {
|
&& receivedUnicastResponse) {
|
||||||
LOGGER.e(String.format(
|
sharedLog.e(String.format(
|
||||||
"Haven't received multicast response"
|
"Haven't received multicast response"
|
||||||
+ " in the last %d ms.",
|
+ " in the last %d ms.",
|
||||||
checkMulticastResponseIntervalMs));
|
checkMulticastResponseIntervalMs));
|
||||||
@@ -531,7 +534,7 @@ public class MdnsSocketClient implements MdnsSocketClientBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.e(String.format("Failed to send a %s mDNS packet.", requestType), e);
|
sharedLog.e(String.format("Failed to send a %s mDNS packet.", requestType), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
packets.clear();
|
packets.clear();
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ import android.net.wifi.p2p.WifiP2pManager;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
@@ -118,7 +117,7 @@ public class MdnsSocketProvider {
|
|||||||
|
|
||||||
if (mWifiP2pTetherInterface != null) {
|
if (mWifiP2pTetherInterface != null) {
|
||||||
if (newP2pIface != null) {
|
if (newP2pIface != null) {
|
||||||
Log.wtf(TAG, "Wifi p2p interface is changed from " + mWifiP2pTetherInterface
|
mSharedLog.wtf("Wifi p2p interface is changed from " + mWifiP2pTetherInterface
|
||||||
+ " to " + newP2pIface + " without null broadcast");
|
+ " to " + newP2pIface + " without null broadcast");
|
||||||
}
|
}
|
||||||
// Remove the socket.
|
// Remove the socket.
|
||||||
@@ -133,7 +132,7 @@ public class MdnsSocketProvider {
|
|||||||
if (newP2pIface != null && !socketAlreadyExists) {
|
if (newP2pIface != null && !socketAlreadyExists) {
|
||||||
// Create a socket for wifi p2p interface.
|
// Create a socket for wifi p2p interface.
|
||||||
final int ifaceIndex =
|
final int ifaceIndex =
|
||||||
mDependencies.getNetworkInterfaceIndexByName(newP2pIface);
|
mDependencies.getNetworkInterfaceIndexByName(newP2pIface, mSharedLog);
|
||||||
createSocket(LOCAL_NET, createLPForTetheredInterface(newP2pIface, ifaceIndex));
|
createSocket(LOCAL_NET, createLPForTetheredInterface(newP2pIface, ifaceIndex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -233,21 +232,23 @@ public class MdnsSocketProvider {
|
|||||||
/*** Create a MdnsInterfaceSocket */
|
/*** Create a MdnsInterfaceSocket */
|
||||||
public MdnsInterfaceSocket createMdnsInterfaceSocket(
|
public MdnsInterfaceSocket createMdnsInterfaceSocket(
|
||||||
@NonNull NetworkInterface networkInterface, int port, @NonNull Looper looper,
|
@NonNull NetworkInterface networkInterface, int port, @NonNull Looper looper,
|
||||||
@NonNull byte[] packetReadBuffer) throws IOException {
|
@NonNull byte[] packetReadBuffer, @NonNull SharedLog sharedLog) throws IOException {
|
||||||
return new MdnsInterfaceSocket(networkInterface, port, looper, packetReadBuffer);
|
return new MdnsInterfaceSocket(networkInterface, port, looper, packetReadBuffer,
|
||||||
|
sharedLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Get network interface by given interface name */
|
/*** Get network interface by given interface name */
|
||||||
public int getNetworkInterfaceIndexByName(@NonNull final String ifaceName) {
|
public int getNetworkInterfaceIndexByName(@NonNull final String ifaceName,
|
||||||
|
@NonNull SharedLog sharedLog) {
|
||||||
final NetworkInterface iface;
|
final NetworkInterface iface;
|
||||||
try {
|
try {
|
||||||
iface = NetworkInterface.getByName(ifaceName);
|
iface = NetworkInterface.getByName(ifaceName);
|
||||||
} catch (SocketException e) {
|
} catch (SocketException e) {
|
||||||
Log.e(TAG, "Error querying interface", e);
|
sharedLog.e("Error querying interface", e);
|
||||||
return IFACE_IDX_NOT_EXIST;
|
return IFACE_IDX_NOT_EXIST;
|
||||||
}
|
}
|
||||||
if (iface == null) {
|
if (iface == null) {
|
||||||
Log.e(TAG, "Interface not found: " + ifaceName);
|
sharedLog.e("Interface not found: " + ifaceName);
|
||||||
return IFACE_IDX_NOT_EXIST;
|
return IFACE_IDX_NOT_EXIST;
|
||||||
}
|
}
|
||||||
return iface.getIndex();
|
return iface.getIndex();
|
||||||
@@ -335,7 +336,7 @@ public class MdnsSocketProvider {
|
|||||||
ensureRunningOnHandlerThread(mHandler);
|
ensureRunningOnHandlerThread(mHandler);
|
||||||
mRequestStop = false; // Reset stop request flag.
|
mRequestStop = false; // Reset stop request flag.
|
||||||
if (mMonitoringSockets) {
|
if (mMonitoringSockets) {
|
||||||
Log.d(TAG, "Already monitoring sockets.");
|
mSharedLog.v("Already monitoring sockets.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mSharedLog.i("Start monitoring sockets.");
|
mSharedLog.i("Start monitoring sockets.");
|
||||||
@@ -390,7 +391,7 @@ public class MdnsSocketProvider {
|
|||||||
public void requestStopWhenInactive() {
|
public void requestStopWhenInactive() {
|
||||||
ensureRunningOnHandlerThread(mHandler);
|
ensureRunningOnHandlerThread(mHandler);
|
||||||
if (!mMonitoringSockets) {
|
if (!mMonitoringSockets) {
|
||||||
Log.d(TAG, "Monitoring sockets hasn't been started.");
|
mSharedLog.v("Monitoring sockets hasn't been started.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mRequestStop = true;
|
mRequestStop = true;
|
||||||
@@ -410,7 +411,7 @@ public class MdnsSocketProvider {
|
|||||||
mActiveNetworksLinkProperties.put(network, lp);
|
mActiveNetworksLinkProperties.put(network, lp);
|
||||||
if (!matchRequestedNetwork(network)) {
|
if (!matchRequestedNetwork(network)) {
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.d(TAG, "Ignore LinkProperties change. There is no request for the"
|
mSharedLog.v("Ignore LinkProperties change. There is no request for the"
|
||||||
+ " Network:" + network);
|
+ " Network:" + network);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -428,7 +429,7 @@ public class MdnsSocketProvider {
|
|||||||
@NonNull final List<LinkAddress> updatedAddresses) {
|
@NonNull final List<LinkAddress> updatedAddresses) {
|
||||||
for (int i = 0; i < mTetherInterfaceSockets.size(); ++i) {
|
for (int i = 0; i < mTetherInterfaceSockets.size(); ++i) {
|
||||||
String tetheringInterfaceName = mTetherInterfaceSockets.keyAt(i);
|
String tetheringInterfaceName = mTetherInterfaceSockets.keyAt(i);
|
||||||
if (mDependencies.getNetworkInterfaceIndexByName(tetheringInterfaceName)
|
if (mDependencies.getNetworkInterfaceIndexByName(tetheringInterfaceName, mSharedLog)
|
||||||
== ifaceIndex) {
|
== ifaceIndex) {
|
||||||
updateSocketInfoAddress(null /* network */,
|
updateSocketInfoAddress(null /* network */,
|
||||||
mTetherInterfaceSockets.valueAt(i), updatedAddresses);
|
mTetherInterfaceSockets.valueAt(i), updatedAddresses);
|
||||||
@@ -462,7 +463,7 @@ public class MdnsSocketProvider {
|
|||||||
// tethering are only created if there is a request for all networks (interfaces).
|
// tethering are only created if there is a request for all networks (interfaces).
|
||||||
// Therefore, only update the interface list and skip this change if no such request.
|
// Therefore, only update the interface list and skip this change if no such request.
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.d(TAG, "Ignore tether interfaces change. There is no request for all"
|
mSharedLog.v("Ignore tether interfaces change. There is no request for all"
|
||||||
+ " networks.");
|
+ " networks.");
|
||||||
}
|
}
|
||||||
current.clear();
|
current.clear();
|
||||||
@@ -482,7 +483,7 @@ public class MdnsSocketProvider {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ifaceIndex = mDependencies.getNetworkInterfaceIndexByName(name);
|
int ifaceIndex = mDependencies.getNetworkInterfaceIndexByName(name, mSharedLog);
|
||||||
createSocket(LOCAL_NET, createLPForTetheredInterface(name, ifaceIndex));
|
createSocket(LOCAL_NET, createLPForTetheredInterface(name, ifaceIndex));
|
||||||
}
|
}
|
||||||
for (String name : interfaceDiff.removed) {
|
for (String name : interfaceDiff.removed) {
|
||||||
@@ -495,7 +496,7 @@ public class MdnsSocketProvider {
|
|||||||
private void createSocket(NetworkKey networkKey, LinkProperties lp) {
|
private void createSocket(NetworkKey networkKey, LinkProperties lp) {
|
||||||
final String interfaceName = lp.getInterfaceName();
|
final String interfaceName = lp.getInterfaceName();
|
||||||
if (interfaceName == null) {
|
if (interfaceName == null) {
|
||||||
Log.e(TAG, "Can not create socket with null interface name.");
|
mSharedLog.e("Can not create socket with null interface name.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,7 +515,7 @@ public class MdnsSocketProvider {
|
|||||||
if (knownTransports != null) {
|
if (knownTransports != null) {
|
||||||
transports = knownTransports;
|
transports = knownTransports;
|
||||||
} else {
|
} else {
|
||||||
Log.wtf(TAG, "transports is missing for key: " + networkKey);
|
mSharedLog.wtf("transports is missing for key: " + networkKey);
|
||||||
transports = new int[0];
|
transports = new int[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -525,7 +526,8 @@ public class MdnsSocketProvider {
|
|||||||
mSharedLog.log("Create socket on net:" + networkKey + ", ifName:" + interfaceName);
|
mSharedLog.log("Create socket on net:" + networkKey + ", ifName:" + interfaceName);
|
||||||
final MdnsInterfaceSocket socket = mDependencies.createMdnsInterfaceSocket(
|
final MdnsInterfaceSocket socket = mDependencies.createMdnsInterfaceSocket(
|
||||||
networkInterface.getNetworkInterface(), MdnsConstants.MDNS_PORT, mLooper,
|
networkInterface.getNetworkInterface(), MdnsConstants.MDNS_PORT, mLooper,
|
||||||
mPacketReadBuffer);
|
mPacketReadBuffer, mSharedLog.forSubComponent(
|
||||||
|
MdnsInterfaceSocket.class.getSimpleName() + "/" + interfaceName));
|
||||||
final List<LinkAddress> addresses = lp.getLinkAddresses();
|
final List<LinkAddress> addresses = lp.getLinkAddresses();
|
||||||
final Network network =
|
final Network network =
|
||||||
networkKey == LOCAL_NET ? null : ((NetworkAsKey) networkKey).mNetwork;
|
networkKey == LOCAL_NET ? null : ((NetworkAsKey) networkKey).mNetwork;
|
||||||
@@ -637,7 +639,7 @@ public class MdnsSocketProvider {
|
|||||||
final LinkProperties lp = mActiveNetworksLinkProperties.get(network);
|
final LinkProperties lp = mActiveNetworksLinkProperties.get(network);
|
||||||
if (lp == null) {
|
if (lp == null) {
|
||||||
// The requested network is not existed. Maybe wait for LinkProperties change later.
|
// The requested network is not existed. Maybe wait for LinkProperties change later.
|
||||||
if (DBG) Log.d(TAG, "There is no LinkProperties for this network:" + network);
|
if (DBG) mSharedLog.v("There is no LinkProperties for this network:" + network);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
createSocket(new NetworkAsKey(network), lp);
|
createSocket(new NetworkAsKey(network), lp);
|
||||||
@@ -652,7 +654,8 @@ public class MdnsSocketProvider {
|
|||||||
private void retrieveAndNotifySocketFromInterface(String interfaceName, SocketCallback cb) {
|
private void retrieveAndNotifySocketFromInterface(String interfaceName, SocketCallback cb) {
|
||||||
final SocketInfo socketInfo = mTetherInterfaceSockets.get(interfaceName);
|
final SocketInfo socketInfo = mTetherInterfaceSockets.get(interfaceName);
|
||||||
if (socketInfo == null) {
|
if (socketInfo == null) {
|
||||||
int ifaceIndex = mDependencies.getNetworkInterfaceIndexByName(interfaceName);
|
int ifaceIndex = mDependencies.getNetworkInterfaceIndexByName(interfaceName,
|
||||||
|
mSharedLog);
|
||||||
createSocket(
|
createSocket(
|
||||||
LOCAL_NET,
|
LOCAL_NET,
|
||||||
createLPForTetheredInterface(interfaceName, ifaceIndex));
|
createLPForTetheredInterface(interfaceName, ifaceIndex));
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import android.content.Context;
|
|||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.server.connectivity.mdns.util.MdnsLogger;
|
import com.android.net.module.util.SharedLog;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
@@ -41,7 +41,7 @@ import java.util.List;
|
|||||||
public class MulticastNetworkInterfaceProvider {
|
public class MulticastNetworkInterfaceProvider {
|
||||||
|
|
||||||
private static final String TAG = "MdnsNIProvider";
|
private static final String TAG = "MdnsNIProvider";
|
||||||
private static final MdnsLogger LOGGER = new MdnsLogger(TAG);
|
private final SharedLog sharedLog;
|
||||||
private static final boolean PREFER_IPV6 = MdnsConfigs.preferIpv6();
|
private static final boolean PREFER_IPV6 = MdnsConfigs.preferIpv6();
|
||||||
|
|
||||||
private final List<NetworkInterfaceWrapper> multicastNetworkInterfaces = new ArrayList<>();
|
private final List<NetworkInterfaceWrapper> multicastNetworkInterfaces = new ArrayList<>();
|
||||||
@@ -51,10 +51,12 @@ public class MulticastNetworkInterfaceProvider {
|
|||||||
private volatile boolean connectivityChanged = true;
|
private volatile boolean connectivityChanged = true;
|
||||||
|
|
||||||
@SuppressWarnings("nullness:methodref.receiver.bound")
|
@SuppressWarnings("nullness:methodref.receiver.bound")
|
||||||
public MulticastNetworkInterfaceProvider(@NonNull Context context) {
|
public MulticastNetworkInterfaceProvider(@NonNull Context context,
|
||||||
|
@NonNull SharedLog sharedLog) {
|
||||||
|
this.sharedLog = sharedLog;
|
||||||
// IMPORT CHANGED
|
// IMPORT CHANGED
|
||||||
this.connectivityMonitor = new ConnectivityMonitorWithConnectivityManager(
|
this.connectivityMonitor = new ConnectivityMonitorWithConnectivityManager(
|
||||||
context, this::onConnectivityChanged);
|
context, this::onConnectivityChanged, sharedLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void onConnectivityChanged() {
|
private synchronized void onConnectivityChanged() {
|
||||||
@@ -83,7 +85,7 @@ public class MulticastNetworkInterfaceProvider {
|
|||||||
connectivityChanged = false;
|
connectivityChanged = false;
|
||||||
updateMulticastNetworkInterfaces();
|
updateMulticastNetworkInterfaces();
|
||||||
if (multicastNetworkInterfaces.isEmpty()) {
|
if (multicastNetworkInterfaces.isEmpty()) {
|
||||||
LOGGER.log("No network interface available for mDNS scanning.");
|
sharedLog.log("No network interface available for mDNS scanning.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new ArrayList<>(multicastNetworkInterfaces);
|
return new ArrayList<>(multicastNetworkInterfaces);
|
||||||
@@ -93,7 +95,7 @@ public class MulticastNetworkInterfaceProvider {
|
|||||||
multicastNetworkInterfaces.clear();
|
multicastNetworkInterfaces.clear();
|
||||||
List<NetworkInterfaceWrapper> networkInterfaceWrappers = getNetworkInterfaces();
|
List<NetworkInterfaceWrapper> networkInterfaceWrappers = getNetworkInterfaces();
|
||||||
for (NetworkInterfaceWrapper interfaceWrapper : networkInterfaceWrappers) {
|
for (NetworkInterfaceWrapper interfaceWrapper : networkInterfaceWrappers) {
|
||||||
if (canScanOnInterface(interfaceWrapper)) {
|
if (canScanOnInterface(interfaceWrapper, sharedLog)) {
|
||||||
multicastNetworkInterfaces.add(interfaceWrapper);
|
multicastNetworkInterfaces.add(interfaceWrapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -133,10 +135,10 @@ public class MulticastNetworkInterfaceProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SocketException e) {
|
} catch (SocketException e) {
|
||||||
LOGGER.e("Failed to get network interfaces.", e);
|
sharedLog.e("Failed to get network interfaces.", e);
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
// Android R has a bug that could lead to a NPE. See b/159277702.
|
// Android R has a bug that could lead to a NPE. See b/159277702.
|
||||||
LOGGER.e("Failed to call getNetworkInterfaces API", e);
|
sharedLog.e("Failed to call getNetworkInterfaces API", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return networkInterfaceWrappers;
|
return networkInterfaceWrappers;
|
||||||
@@ -148,7 +150,8 @@ public class MulticastNetworkInterfaceProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*** Check whether given network interface can support mdns */
|
/*** Check whether given network interface can support mdns */
|
||||||
private static boolean canScanOnInterface(@Nullable NetworkInterfaceWrapper networkInterface) {
|
private static boolean canScanOnInterface(@Nullable NetworkInterfaceWrapper networkInterface,
|
||||||
|
@NonNull SharedLog sharedLog) {
|
||||||
try {
|
try {
|
||||||
if ((networkInterface == null)
|
if ((networkInterface == null)
|
||||||
|| networkInterface.isLoopback()
|
|| networkInterface.isLoopback()
|
||||||
@@ -160,7 +163,7 @@ public class MulticastNetworkInterfaceProvider {
|
|||||||
}
|
}
|
||||||
return hasInet4Address(networkInterface) || hasInet6Address(networkInterface);
|
return hasInet4Address(networkInterface) || hasInet6Address(networkInterface);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.e(String.format("Failed to check interface %s.",
|
sharedLog.e(String.format("Failed to check interface %s.",
|
||||||
networkInterface.getNetworkInterface().getDisplayName()), e);
|
networkInterface.getNetworkInterface().getDisplayName()), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import android.annotation.NonNull;
|
|||||||
import android.net.LinkAddress;
|
import android.net.LinkAddress;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.system.OsConstants;
|
import android.system.OsConstants;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.android.net.module.util.SharedLog;
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.net.module.util.ip.NetlinkMonitor;
|
import com.android.net.module.util.ip.NetlinkMonitor;
|
||||||
@@ -37,6 +36,8 @@ import com.android.server.connectivity.mdns.MdnsSocketProvider;
|
|||||||
public class SocketNetlinkMonitor extends NetlinkMonitor implements AbstractSocketNetlinkMonitor {
|
public class SocketNetlinkMonitor extends NetlinkMonitor implements AbstractSocketNetlinkMonitor {
|
||||||
|
|
||||||
public static final String TAG = SocketNetlinkMonitor.class.getSimpleName();
|
public static final String TAG = SocketNetlinkMonitor.class.getSimpleName();
|
||||||
|
@NonNull
|
||||||
|
private final SharedLog mSharedLog;
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private final MdnsSocketProvider.NetLinkMonitorCallBack mCb;
|
private final MdnsSocketProvider.NetLinkMonitorCallBack mCb;
|
||||||
@@ -46,6 +47,7 @@ public class SocketNetlinkMonitor extends NetlinkMonitor implements AbstractSock
|
|||||||
super(handler, log, TAG, OsConstants.NETLINK_ROUTE,
|
super(handler, log, TAG, OsConstants.NETLINK_ROUTE,
|
||||||
NetlinkConstants.RTMGRP_IPV4_IFADDR | NetlinkConstants.RTMGRP_IPV6_IFADDR);
|
NetlinkConstants.RTMGRP_IPV4_IFADDR | NetlinkConstants.RTMGRP_IPV6_IFADDR);
|
||||||
mCb = cb;
|
mCb = cb;
|
||||||
|
mSharedLog = log;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void processNetlinkMessage(NetlinkMessage nlMsg, long whenMs) {
|
public void processNetlinkMessage(NetlinkMessage nlMsg, long whenMs) {
|
||||||
@@ -71,7 +73,7 @@ public class SocketNetlinkMonitor extends NetlinkMonitor implements AbstractSock
|
|||||||
mCb.deleteInterfaceAddress(ifaddrMsg.index, la);
|
mCb.deleteInterfaceAddress(ifaddrMsg.index, la);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.e(TAG, "Unknown rtnetlink address msg type " + msg.getHeader().nlmsg_type);
|
mSharedLog.e("Unknown rtnetlink address msg type " + msg.getHeader().nlmsg_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.net.ConnectivityManager.NetworkCallback;
|
|||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
|
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.testutils.DevSdkIgnoreRule;
|
import com.android.testutils.DevSdkIgnoreRule;
|
||||||
import com.android.testutils.DevSdkIgnoreRunner;
|
import com.android.testutils.DevSdkIgnoreRunner;
|
||||||
|
|
||||||
@@ -49,6 +50,7 @@ public class ConnectivityMonitorWithConnectivityManagerTests {
|
|||||||
@Mock private Context mContext;
|
@Mock private Context mContext;
|
||||||
@Mock private ConnectivityMonitor.Listener mockListener;
|
@Mock private ConnectivityMonitor.Listener mockListener;
|
||||||
@Mock private ConnectivityManager mConnectivityManager;
|
@Mock private ConnectivityManager mConnectivityManager;
|
||||||
|
@Mock private SharedLog sharedLog;
|
||||||
|
|
||||||
private ConnectivityMonitorWithConnectivityManager monitor;
|
private ConnectivityMonitorWithConnectivityManager monitor;
|
||||||
|
|
||||||
@@ -57,7 +59,7 @@ public class ConnectivityMonitorWithConnectivityManagerTests {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
doReturn(mConnectivityManager).when(mContext)
|
doReturn(mConnectivityManager).when(mContext)
|
||||||
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
monitor = new ConnectivityMonitorWithConnectivityManager(mContext, mockListener);
|
monitor = new ConnectivityMonitorWithConnectivityManager(mContext, mockListener, sharedLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.os.Build
|
|||||||
import android.os.HandlerThread
|
import android.os.HandlerThread
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
import com.android.internal.util.HexDump
|
import com.android.internal.util.HexDump
|
||||||
|
import com.android.net.module.util.SharedLog
|
||||||
import com.android.server.connectivity.mdns.MdnsAnnouncer.AnnouncementInfo
|
import com.android.server.connectivity.mdns.MdnsAnnouncer.AnnouncementInfo
|
||||||
import com.android.server.connectivity.mdns.MdnsAnnouncer.BaseAnnouncementInfo
|
import com.android.server.connectivity.mdns.MdnsAnnouncer.BaseAnnouncementInfo
|
||||||
import com.android.server.connectivity.mdns.MdnsRecordRepository.getReverseDnsAddress
|
import com.android.server.connectivity.mdns.MdnsRecordRepository.getReverseDnsAddress
|
||||||
@@ -52,6 +53,7 @@ class MdnsAnnouncerTest {
|
|||||||
|
|
||||||
private val thread = HandlerThread(MdnsAnnouncerTest::class.simpleName)
|
private val thread = HandlerThread(MdnsAnnouncerTest::class.simpleName)
|
||||||
private val socket = mock(MdnsInterfaceSocket::class.java)
|
private val socket = mock(MdnsInterfaceSocket::class.java)
|
||||||
|
private val sharedLog = mock(SharedLog::class.java)
|
||||||
private val buffer = ByteArray(1500)
|
private val buffer = ByteArray(1500)
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -80,11 +82,11 @@ class MdnsAnnouncerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testAnnounce() {
|
fun testAnnounce() {
|
||||||
val replySender = MdnsReplySender("testiface", thread.looper, socket, buffer)
|
val replySender = MdnsReplySender( thread.looper, socket, buffer, sharedLog)
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
val cb = mock(MdnsPacketRepeater.PacketRepeaterCallback::class.java)
|
val cb = mock(MdnsPacketRepeater.PacketRepeaterCallback::class.java)
|
||||||
as MdnsPacketRepeater.PacketRepeaterCallback<BaseAnnouncementInfo>
|
as MdnsPacketRepeater.PacketRepeaterCallback<BaseAnnouncementInfo>
|
||||||
val announcer = MdnsAnnouncer("testiface", thread.looper, replySender, cb)
|
val announcer = MdnsAnnouncer(thread.looper, replySender, cb, sharedLog)
|
||||||
/*
|
/*
|
||||||
The expected packet replicates records announced when registering a service, as observed in
|
The expected packet replicates records announced when registering a service, as observed in
|
||||||
the legacy mDNS implementation (some ordering differs to be more readable).
|
the legacy mDNS implementation (some ordering differs to be more readable).
|
||||||
|
|||||||
@@ -108,9 +108,9 @@ class MdnsInterfaceAdvertiserTest {
|
|||||||
doReturn(repository).`when`(deps).makeRecordRepository(any(),
|
doReturn(repository).`when`(deps).makeRecordRepository(any(),
|
||||||
eq(TEST_HOSTNAME)
|
eq(TEST_HOSTNAME)
|
||||||
)
|
)
|
||||||
doReturn(replySender).`when`(deps).makeReplySender(anyString(), any(), any(), any())
|
doReturn(replySender).`when`(deps).makeReplySender(anyString(), any(), any(), any(), any())
|
||||||
doReturn(announcer).`when`(deps).makeMdnsAnnouncer(anyString(), any(), any(), any())
|
doReturn(announcer).`when`(deps).makeMdnsAnnouncer(anyString(), any(), any(), any(), any())
|
||||||
doReturn(prober).`when`(deps).makeMdnsProber(anyString(), any(), any(), any())
|
doReturn(prober).`when`(deps).makeMdnsProber(anyString(), any(), any(), any(), any())
|
||||||
|
|
||||||
val knownServices = mutableSetOf<Int>()
|
val knownServices = mutableSetOf<Int>()
|
||||||
doAnswer { inv ->
|
doAnswer { inv ->
|
||||||
@@ -132,8 +132,8 @@ class MdnsInterfaceAdvertiserTest {
|
|||||||
advertiser.start()
|
advertiser.start()
|
||||||
|
|
||||||
verify(socket).addPacketHandler(packetHandlerCaptor.capture())
|
verify(socket).addPacketHandler(packetHandlerCaptor.capture())
|
||||||
verify(deps).makeMdnsProber(any(), any(), any(), probeCbCaptor.capture())
|
verify(deps).makeMdnsProber(any(), any(), any(), probeCbCaptor.capture(), any())
|
||||||
verify(deps).makeMdnsAnnouncer(any(), any(), any(), announceCbCaptor.capture())
|
verify(deps).makeMdnsAnnouncer(any(), any(), any(), announceCbCaptor.capture(), any())
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import android.os.Handler;
|
|||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
|
|
||||||
import com.android.net.module.util.HexDump;
|
import com.android.net.module.util.HexDump;
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.server.connectivity.mdns.MdnsSocketClientBase.SocketCreationCallback;
|
import com.android.server.connectivity.mdns.MdnsSocketClientBase.SocketCreationCallback;
|
||||||
import com.android.testutils.DevSdkIgnoreRule;
|
import com.android.testutils.DevSdkIgnoreRule;
|
||||||
import com.android.testutils.DevSdkIgnoreRunner;
|
import com.android.testutils.DevSdkIgnoreRunner;
|
||||||
@@ -66,6 +67,7 @@ public class MdnsMultinetworkSocketClientTest {
|
|||||||
@Mock private MdnsServiceBrowserListener mListener;
|
@Mock private MdnsServiceBrowserListener mListener;
|
||||||
@Mock private MdnsSocketClientBase.Callback mCallback;
|
@Mock private MdnsSocketClientBase.Callback mCallback;
|
||||||
@Mock private SocketCreationCallback mSocketCreationCallback;
|
@Mock private SocketCreationCallback mSocketCreationCallback;
|
||||||
|
@Mock private SharedLog mSharedLog;
|
||||||
private MdnsMultinetworkSocketClient mSocketClient;
|
private MdnsMultinetworkSocketClient mSocketClient;
|
||||||
private Handler mHandler;
|
private Handler mHandler;
|
||||||
private SocketKey mSocketKey;
|
private SocketKey mSocketKey;
|
||||||
@@ -78,7 +80,7 @@ public class MdnsMultinetworkSocketClientTest {
|
|||||||
thread.start();
|
thread.start();
|
||||||
mHandler = new Handler(thread.getLooper());
|
mHandler = new Handler(thread.getLooper());
|
||||||
mSocketKey = new SocketKey(1000 /* interfaceIndex */);
|
mSocketKey = new SocketKey(1000 /* interfaceIndex */);
|
||||||
mSocketClient = new MdnsMultinetworkSocketClient(thread.getLooper(), mProvider);
|
mSocketClient = new MdnsMultinetworkSocketClient(thread.getLooper(), mProvider, mSharedLog);
|
||||||
mHandler.post(() -> mSocketClient.setCallback(mCallback));
|
mHandler.post(() -> mSocketClient.setCallback(mCallback));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.os.Handler
|
|||||||
import android.os.HandlerThread
|
import android.os.HandlerThread
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import com.android.internal.util.HexDump
|
import com.android.internal.util.HexDump
|
||||||
|
import com.android.net.module.util.SharedLog
|
||||||
import com.android.server.connectivity.mdns.MdnsProber.ProbingInfo
|
import com.android.server.connectivity.mdns.MdnsProber.ProbingInfo
|
||||||
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
|
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
|
||||||
import com.android.testutils.DevSdkIgnoreRunner
|
import com.android.testutils.DevSdkIgnoreRunner
|
||||||
@@ -55,6 +56,7 @@ private val TEST_SERVICE_NAME_3 = arrayOf("Testservice", "_nmt", "_tcp", "local"
|
|||||||
class MdnsProberTest {
|
class MdnsProberTest {
|
||||||
private val thread = HandlerThread(MdnsProberTest::class.simpleName)
|
private val thread = HandlerThread(MdnsProberTest::class.simpleName)
|
||||||
private val socket = mock(MdnsInterfaceSocket::class.java)
|
private val socket = mock(MdnsInterfaceSocket::class.java)
|
||||||
|
private val sharedLog = mock(SharedLog::class.java)
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
private val cb = mock(MdnsPacketRepeater.PacketRepeaterCallback::class.java)
|
private val cb = mock(MdnsPacketRepeater.PacketRepeaterCallback::class.java)
|
||||||
as MdnsPacketRepeater.PacketRepeaterCallback<ProbingInfo>
|
as MdnsPacketRepeater.PacketRepeaterCallback<ProbingInfo>
|
||||||
@@ -82,8 +84,9 @@ class MdnsProberTest {
|
|||||||
private class TestProber(
|
private class TestProber(
|
||||||
looper: Looper,
|
looper: Looper,
|
||||||
replySender: MdnsReplySender,
|
replySender: MdnsReplySender,
|
||||||
cb: PacketRepeaterCallback<ProbingInfo>
|
cb: PacketRepeaterCallback<ProbingInfo>,
|
||||||
) : MdnsProber("testiface", looper, replySender, cb) {
|
sharedLog: SharedLog
|
||||||
|
) : MdnsProber(looper, replySender, cb, sharedLog) {
|
||||||
override fun getInitialDelay() = 0L
|
override fun getInitialDelay() = 0L
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,8 +119,8 @@ class MdnsProberTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testProbe() {
|
fun testProbe() {
|
||||||
val replySender = MdnsReplySender("testiface", thread.looper, socket, buffer)
|
val replySender = MdnsReplySender(thread.looper, socket, buffer, sharedLog)
|
||||||
val prober = TestProber(thread.looper, replySender, cb)
|
val prober = TestProber(thread.looper, replySender, cb, sharedLog)
|
||||||
val probeInfo = TestProbeInfo(
|
val probeInfo = TestProbeInfo(
|
||||||
listOf(makeServiceRecord(TEST_SERVICE_NAME_1, 37890)))
|
listOf(makeServiceRecord(TEST_SERVICE_NAME_1, 37890)))
|
||||||
prober.startProbing(probeInfo)
|
prober.startProbing(probeInfo)
|
||||||
@@ -140,8 +143,8 @@ class MdnsProberTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testProbeMultipleRecords() {
|
fun testProbeMultipleRecords() {
|
||||||
val replySender = MdnsReplySender("testiface", thread.looper, socket, buffer)
|
val replySender = MdnsReplySender(thread.looper, socket, buffer, sharedLog)
|
||||||
val prober = TestProber(thread.looper, replySender, cb)
|
val prober = TestProber(thread.looper, replySender, cb, sharedLog)
|
||||||
val probeInfo = TestProbeInfo(listOf(
|
val probeInfo = TestProbeInfo(listOf(
|
||||||
makeServiceRecord(TEST_SERVICE_NAME_1, 37890),
|
makeServiceRecord(TEST_SERVICE_NAME_1, 37890),
|
||||||
makeServiceRecord(TEST_SERVICE_NAME_2, 37891),
|
makeServiceRecord(TEST_SERVICE_NAME_2, 37891),
|
||||||
@@ -178,8 +181,8 @@ class MdnsProberTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testStopProbing() {
|
fun testStopProbing() {
|
||||||
val replySender = MdnsReplySender("testiface", thread.looper, socket, buffer)
|
val replySender = MdnsReplySender(thread.looper, socket, buffer, sharedLog)
|
||||||
val prober = TestProber(thread.looper, replySender, cb)
|
val prober = TestProber(thread.looper, replySender, cb, sharedLog)
|
||||||
val probeInfo = TestProbeInfo(
|
val probeInfo = TestProbeInfo(
|
||||||
listOf(makeServiceRecord(TEST_SERVICE_NAME_1, 37890)),
|
listOf(makeServiceRecord(TEST_SERVICE_NAME_1, 37890)),
|
||||||
// delayMs is the delay between each probe, so does not apply to the first one
|
// delayMs is the delay between each probe, so does not apply to the first one
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import android.net.wifi.WifiManager.MulticastLock;
|
|||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
|
||||||
import com.android.net.module.util.HexDump;
|
import com.android.net.module.util.HexDump;
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.testutils.DevSdkIgnoreRule;
|
import com.android.testutils.DevSdkIgnoreRule;
|
||||||
import com.android.testutils.DevSdkIgnoreRunner;
|
import com.android.testutils.DevSdkIgnoreRunner;
|
||||||
|
|
||||||
@@ -74,6 +75,7 @@ public class MdnsSocketClientTests {
|
|||||||
@Mock private MdnsSocket mockUnicastSocket;
|
@Mock private MdnsSocket mockUnicastSocket;
|
||||||
@Mock private MulticastLock mockMulticastLock;
|
@Mock private MulticastLock mockMulticastLock;
|
||||||
@Mock private MdnsSocketClient.Callback mockCallback;
|
@Mock private MdnsSocketClient.Callback mockCallback;
|
||||||
|
@Mock private SharedLog sharedLog;
|
||||||
|
|
||||||
private MdnsSocketClient mdnsClient;
|
private MdnsSocketClient mdnsClient;
|
||||||
|
|
||||||
@@ -84,9 +86,9 @@ public class MdnsSocketClientTests {
|
|||||||
when(mockWifiManager.createMulticastLock(ArgumentMatchers.anyString()))
|
when(mockWifiManager.createMulticastLock(ArgumentMatchers.anyString()))
|
||||||
.thenReturn(mockMulticastLock);
|
.thenReturn(mockMulticastLock);
|
||||||
|
|
||||||
mdnsClient = new MdnsSocketClient(mContext, mockMulticastLock) {
|
mdnsClient = new MdnsSocketClient(mContext, mockMulticastLock, sharedLog) {
|
||||||
@Override
|
@Override
|
||||||
MdnsSocket createMdnsSocket(int port) throws IOException {
|
MdnsSocket createMdnsSocket(int port, SharedLog sharedLog) throws IOException {
|
||||||
if (port == MdnsConstants.MDNS_PORT) {
|
if (port == MdnsConstants.MDNS_PORT) {
|
||||||
return mockMulticastSocket;
|
return mockMulticastSocket;
|
||||||
}
|
}
|
||||||
@@ -513,9 +515,9 @@ public class MdnsSocketClientTests {
|
|||||||
//MdnsConfigsFlagsImpl.allowNetworkInterfaceIndexPropagation.override(true);
|
//MdnsConfigsFlagsImpl.allowNetworkInterfaceIndexPropagation.override(true);
|
||||||
|
|
||||||
when(mockMulticastSocket.getInterfaceIndex()).thenReturn(21);
|
when(mockMulticastSocket.getInterfaceIndex()).thenReturn(21);
|
||||||
mdnsClient = new MdnsSocketClient(mContext, mockMulticastLock) {
|
mdnsClient = new MdnsSocketClient(mContext, mockMulticastLock, sharedLog) {
|
||||||
@Override
|
@Override
|
||||||
MdnsSocket createMdnsSocket(int port) {
|
MdnsSocket createMdnsSocket(int port, SharedLog sharedLog) {
|
||||||
if (port == MdnsConstants.MDNS_PORT) {
|
if (port == MdnsConstants.MDNS_PORT) {
|
||||||
return mockMulticastSocket;
|
return mockMulticastSocket;
|
||||||
}
|
}
|
||||||
@@ -536,9 +538,9 @@ public class MdnsSocketClientTests {
|
|||||||
//MdnsConfigsFlagsImpl.allowNetworkInterfaceIndexPropagation.override(false);
|
//MdnsConfigsFlagsImpl.allowNetworkInterfaceIndexPropagation.override(false);
|
||||||
|
|
||||||
when(mockMulticastSocket.getInterfaceIndex()).thenReturn(21);
|
when(mockMulticastSocket.getInterfaceIndex()).thenReturn(21);
|
||||||
mdnsClient = new MdnsSocketClient(mContext, mockMulticastLock) {
|
mdnsClient = new MdnsSocketClient(mContext, mockMulticastLock, sharedLog) {
|
||||||
@Override
|
@Override
|
||||||
MdnsSocket createMdnsSocket(int port) {
|
MdnsSocket createMdnsSocket(int port, SharedLog sharedLog) {
|
||||||
if (port == MdnsConstants.MDNS_PORT) {
|
if (port == MdnsConstants.MDNS_PORT) {
|
||||||
return mockMulticastSocket;
|
return mockMulticastSocket;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,11 +152,11 @@ public class MdnsSocketProviderTest {
|
|||||||
.getNetworkInterfaceByName(WIFI_P2P_IFACE_NAME);
|
.getNetworkInterfaceByName(WIFI_P2P_IFACE_NAME);
|
||||||
doReturn(mTetheredIfaceWrapper).when(mDeps).getNetworkInterfaceByName(TETHERED_IFACE_NAME);
|
doReturn(mTetheredIfaceWrapper).when(mDeps).getNetworkInterfaceByName(TETHERED_IFACE_NAME);
|
||||||
doReturn(mock(MdnsInterfaceSocket.class))
|
doReturn(mock(MdnsInterfaceSocket.class))
|
||||||
.when(mDeps).createMdnsInterfaceSocket(any(), anyInt(), any(), any());
|
.when(mDeps).createMdnsInterfaceSocket(any(), anyInt(), any(), any(), any());
|
||||||
doReturn(TETHERED_IFACE_IDX).when(mDeps).getNetworkInterfaceIndexByName(
|
doReturn(TETHERED_IFACE_IDX).when(mDeps).getNetworkInterfaceIndexByName(
|
||||||
TETHERED_IFACE_NAME);
|
eq(TETHERED_IFACE_NAME), any());
|
||||||
doReturn(789).when(mDeps).getNetworkInterfaceIndexByName(
|
doReturn(789).when(mDeps).getNetworkInterfaceIndexByName(
|
||||||
WIFI_P2P_IFACE_NAME);
|
eq(WIFI_P2P_IFACE_NAME), any());
|
||||||
final HandlerThread thread = new HandlerThread("MdnsSocketProviderTest");
|
final HandlerThread thread = new HandlerThread("MdnsSocketProviderTest");
|
||||||
thread.start();
|
thread.start();
|
||||||
mHandler = new Handler(thread.getLooper());
|
mHandler = new Handler(thread.getLooper());
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.testutils.DevSdkIgnoreRule;
|
import com.android.testutils.DevSdkIgnoreRule;
|
||||||
import com.android.testutils.DevSdkIgnoreRunner;
|
import com.android.testutils.DevSdkIgnoreRunner;
|
||||||
|
|
||||||
@@ -50,6 +51,7 @@ public class MdnsSocketTests {
|
|||||||
@Mock private NetworkInterfaceWrapper mockNetworkInterfaceWrapper;
|
@Mock private NetworkInterfaceWrapper mockNetworkInterfaceWrapper;
|
||||||
@Mock private MulticastSocket mockMulticastSocket;
|
@Mock private MulticastSocket mockMulticastSocket;
|
||||||
@Mock private MulticastNetworkInterfaceProvider mockMulticastNetworkInterfaceProvider;
|
@Mock private MulticastNetworkInterfaceProvider mockMulticastNetworkInterfaceProvider;
|
||||||
|
@Mock private SharedLog sharedLog;
|
||||||
private SocketAddress socketIPv4Address;
|
private SocketAddress socketIPv4Address;
|
||||||
private SocketAddress socketIPv6Address;
|
private SocketAddress socketIPv6Address;
|
||||||
|
|
||||||
@@ -75,7 +77,8 @@ public class MdnsSocketTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void mdnsSocket_basicFunctionality() throws IOException {
|
public void mdnsSocket_basicFunctionality() throws IOException {
|
||||||
mdnsSocket = new MdnsSocket(mockMulticastNetworkInterfaceProvider, mockMulticastSocket);
|
mdnsSocket = new MdnsSocket(mockMulticastNetworkInterfaceProvider, mockMulticastSocket,
|
||||||
|
sharedLog);
|
||||||
mdnsSocket.send(datagramPacket);
|
mdnsSocket.send(datagramPacket);
|
||||||
verify(mockMulticastSocket).setNetworkInterface(networkInterface);
|
verify(mockMulticastSocket).setNetworkInterface(networkInterface);
|
||||||
verify(mockMulticastSocket).send(datagramPacket);
|
verify(mockMulticastSocket).send(datagramPacket);
|
||||||
@@ -101,7 +104,8 @@ public class MdnsSocketTests {
|
|||||||
when(mockMulticastNetworkInterfaceProvider.getMulticastNetworkInterfaces())
|
when(mockMulticastNetworkInterfaceProvider.getMulticastNetworkInterfaces())
|
||||||
.thenReturn(Collections.singletonList(mockNetworkInterfaceWrapper));
|
.thenReturn(Collections.singletonList(mockNetworkInterfaceWrapper));
|
||||||
|
|
||||||
mdnsSocket = new MdnsSocket(mockMulticastNetworkInterfaceProvider, mockMulticastSocket);
|
mdnsSocket = new MdnsSocket(mockMulticastNetworkInterfaceProvider, mockMulticastSocket,
|
||||||
|
sharedLog);
|
||||||
|
|
||||||
when(mockMulticastNetworkInterfaceProvider.isOnIpV6OnlyNetwork(
|
when(mockMulticastNetworkInterfaceProvider.isOnIpV6OnlyNetwork(
|
||||||
Collections.singletonList(mockNetworkInterfaceWrapper)))
|
Collections.singletonList(mockNetworkInterfaceWrapper)))
|
||||||
@@ -125,7 +129,8 @@ public class MdnsSocketTests {
|
|||||||
when(mockMulticastNetworkInterfaceProvider.getMulticastNetworkInterfaces())
|
when(mockMulticastNetworkInterfaceProvider.getMulticastNetworkInterfaces())
|
||||||
.thenReturn(Collections.singletonList(mockNetworkInterfaceWrapper));
|
.thenReturn(Collections.singletonList(mockNetworkInterfaceWrapper));
|
||||||
|
|
||||||
mdnsSocket = new MdnsSocket(mockMulticastNetworkInterfaceProvider, mockMulticastSocket);
|
mdnsSocket = new MdnsSocket(mockMulticastNetworkInterfaceProvider, mockMulticastSocket,
|
||||||
|
sharedLog);
|
||||||
|
|
||||||
when(mockMulticastNetworkInterfaceProvider.isOnIpV6OnlyNetwork(
|
when(mockMulticastNetworkInterfaceProvider.isOnIpV6OnlyNetwork(
|
||||||
Collections.singletonList(mockNetworkInterfaceWrapper)))
|
Collections.singletonList(mockNetworkInterfaceWrapper)))
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import android.content.Context;
|
|||||||
|
|
||||||
import androidx.test.InstrumentationRegistry;
|
import androidx.test.InstrumentationRegistry;
|
||||||
|
|
||||||
|
import com.android.net.module.util.SharedLog;
|
||||||
import com.android.testutils.DevSdkIgnoreRule;
|
import com.android.testutils.DevSdkIgnoreRule;
|
||||||
import com.android.testutils.DevSdkIgnoreRunner;
|
import com.android.testutils.DevSdkIgnoreRunner;
|
||||||
|
|
||||||
@@ -65,6 +66,8 @@ public class MulticastNetworkInterfaceProviderTests {
|
|||||||
@Mock private NetworkInterfaceWrapper multicastInterfaceOne;
|
@Mock private NetworkInterfaceWrapper multicastInterfaceOne;
|
||||||
@Mock private NetworkInterfaceWrapper multicastInterfaceTwo;
|
@Mock private NetworkInterfaceWrapper multicastInterfaceTwo;
|
||||||
|
|
||||||
|
@Mock private SharedLog sharedLog;
|
||||||
|
|
||||||
private final List<NetworkInterfaceWrapper> networkInterfaces = new ArrayList<>();
|
private final List<NetworkInterfaceWrapper> networkInterfaces = new ArrayList<>();
|
||||||
private MulticastNetworkInterfaceProvider provider;
|
private MulticastNetworkInterfaceProvider provider;
|
||||||
private Context context;
|
private Context context;
|
||||||
@@ -156,7 +159,7 @@ public class MulticastNetworkInterfaceProviderTests {
|
|||||||
false /* isIpv6 */);
|
false /* isIpv6 */);
|
||||||
|
|
||||||
provider =
|
provider =
|
||||||
new MulticastNetworkInterfaceProvider(context) {
|
new MulticastNetworkInterfaceProvider(context, sharedLog) {
|
||||||
@Override
|
@Override
|
||||||
List<NetworkInterfaceWrapper> getNetworkInterfaces() {
|
List<NetworkInterfaceWrapper> getNetworkInterfaces() {
|
||||||
return networkInterfaces;
|
return networkInterfaces;
|
||||||
|
|||||||
Reference in New Issue
Block a user