Replace usage of android.util.Log to SharedLog

Bug: 294326360
Test: atest FrameworksNetTests
Change-Id: I9a3a84f907362260bdcf6be19e2c4d5345788d2e
This commit is contained in:
Yuyang Huang
2023-08-01 18:16:30 +09:00
parent 2501678e74
commit 7ddf2935f9
27 changed files with 226 additions and 195 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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() {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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