Loading core/java/android/net/NetworkWatchlistManager.java +16 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,8 @@ public class NetworkWatchlistManager { /** * Report network watchlist records if necessary. * * Watchlist report process will run summarize records into a single report, then the * report will be processed by differential privacy framework and store it on disk. * Watchlist report process will summarize records into a single report, then the * report will be processed by differential privacy framework and stored on disk. * * @hide */ Loading @@ -72,4 +72,18 @@ public class NetworkWatchlistManager { e.rethrowFromSystemServer(); } } /** * Reload network watchlist. * * @hide */ public void reloadWatchlist() { try { mNetworkWatchlistManager.reloadWatchlist(); } catch (RemoteException e) { Log.e(TAG, "Unable to reload watchlist"); e.rethrowFromSystemServer(); } } } core/java/com/android/internal/net/INetworkWatchlistManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -22,5 +22,6 @@ import android.os.SharedMemory; interface INetworkWatchlistManager { boolean startWatchlistLogging(); boolean stopWatchlistLogging(); void reloadWatchlist(); void reportWatchlistIfNecessary(); } core/res/AndroidManifest.xml +8 −0 Original line number Diff line number Diff line Loading @@ -3870,6 +3870,14 @@ </intent-filter> </receiver> <receiver android:name="com.android.server.updates.NetworkWatchlistInstallReceiver" android:permission="android.permission.UPDATE_CONFIG"> <intent-filter> <action android:name="android.intent.action.UPDATE_NETWORK_WATCHLIST" /> <data android:scheme="content" android:host="*" android:mimeType="*/*" /> </intent-filter> </receiver> <receiver android:name="com.android.server.updates.ApnDbInstallReceiver" android:permission="android.permission.UPDATE_CONFIG"> <intent-filter> Loading services/core/java/com/android/server/net/watchlist/NetworkWatchlistService.java +7 −30 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.text.TextUtils; import android.util.Slog; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.DumpUtils; import com.android.internal.net.INetworkWatchlistManager; Loading Loading @@ -92,6 +93,7 @@ public class NetworkWatchlistService extends INetworkWatchlistManager.Stub { } } @GuardedBy("mLoggingSwitchLock") private volatile boolean mIsLoggingEnabled = false; private final Object mLoggingSwitchLock = new Object(); Loading Loading @@ -220,36 +222,11 @@ public class NetworkWatchlistService extends INetworkWatchlistManager.Stub { } } /** * Set a new network watchlist. * This method should be called by ConfigUpdater only. * * @return True if network watchlist is updated. */ public boolean setNetworkSecurityWatchlist(List<byte[]> domainsCrc32Digests, List<byte[]> domainsSha256Digests, List<byte[]> ipAddressesCrc32Digests, List<byte[]> ipAddressesSha256Digests) { Slog.i(TAG, "Setting network watchlist"); if (domainsCrc32Digests == null || domainsSha256Digests == null || ipAddressesCrc32Digests == null || ipAddressesSha256Digests == null) { Slog.e(TAG, "Parameters cannot be null"); return false; } if (domainsCrc32Digests.size() != domainsSha256Digests.size() || ipAddressesCrc32Digests.size() != ipAddressesSha256Digests.size()) { Slog.e(TAG, "Must need to have the same number of CRC32 and SHA256 digests"); return false; } if (domainsSha256Digests.size() + ipAddressesSha256Digests.size() > MAX_NUM_OF_WATCHLIST_DIGESTS) { Slog.e(TAG, "Total watchlist size cannot exceed " + MAX_NUM_OF_WATCHLIST_DIGESTS); return false; } mSettings.writeSettingsToDisk(domainsCrc32Digests, domainsSha256Digests, ipAddressesCrc32Digests, ipAddressesSha256Digests); Slog.i(TAG, "Set network watchlist: Success"); return true; @Override public void reloadWatchlist() throws RemoteException { enforceWatchlistLoggingPermission(); Slog.i(TAG, "Reloading watchlist"); mSettings.reloadSettings(); } @Override Loading services/core/java/com/android/server/net/watchlist/WatchlistReportDbHelper.java +7 −2 Original line number Diff line number Diff line Loading @@ -21,10 +21,12 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Environment; import android.util.Pair; import com.android.internal.util.HexDump; import java.io.File; import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.HashMap; Loading Loading @@ -83,9 +85,12 @@ class WatchlistReportDbHelper extends SQLiteOpenHelper { HashMap<String, String> appDigestCNCList; } static File getSystemWatchlistDbFile() { return new File(Environment.getDataSystemDirectory(), NAME); } private WatchlistReportDbHelper(Context context) { super(context, WatchlistSettings.getSystemWatchlistFile(NAME).getAbsolutePath(), null, VERSION); super(context, getSystemWatchlistDbFile().getAbsolutePath(), null, VERSION); // Memory optimization - close idle connections after 30s of inactivity setIdleConnectionTimeout(IDLE_CONNECTION_TIMEOUT_MS); } Loading Loading
core/java/android/net/NetworkWatchlistManager.java +16 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,8 @@ public class NetworkWatchlistManager { /** * Report network watchlist records if necessary. * * Watchlist report process will run summarize records into a single report, then the * report will be processed by differential privacy framework and store it on disk. * Watchlist report process will summarize records into a single report, then the * report will be processed by differential privacy framework and stored on disk. * * @hide */ Loading @@ -72,4 +72,18 @@ public class NetworkWatchlistManager { e.rethrowFromSystemServer(); } } /** * Reload network watchlist. * * @hide */ public void reloadWatchlist() { try { mNetworkWatchlistManager.reloadWatchlist(); } catch (RemoteException e) { Log.e(TAG, "Unable to reload watchlist"); e.rethrowFromSystemServer(); } } }
core/java/com/android/internal/net/INetworkWatchlistManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -22,5 +22,6 @@ import android.os.SharedMemory; interface INetworkWatchlistManager { boolean startWatchlistLogging(); boolean stopWatchlistLogging(); void reloadWatchlist(); void reportWatchlistIfNecessary(); }
core/res/AndroidManifest.xml +8 −0 Original line number Diff line number Diff line Loading @@ -3870,6 +3870,14 @@ </intent-filter> </receiver> <receiver android:name="com.android.server.updates.NetworkWatchlistInstallReceiver" android:permission="android.permission.UPDATE_CONFIG"> <intent-filter> <action android:name="android.intent.action.UPDATE_NETWORK_WATCHLIST" /> <data android:scheme="content" android:host="*" android:mimeType="*/*" /> </intent-filter> </receiver> <receiver android:name="com.android.server.updates.ApnDbInstallReceiver" android:permission="android.permission.UPDATE_CONFIG"> <intent-filter> Loading
services/core/java/com/android/server/net/watchlist/NetworkWatchlistService.java +7 −30 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.text.TextUtils; import android.util.Slog; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.DumpUtils; import com.android.internal.net.INetworkWatchlistManager; Loading Loading @@ -92,6 +93,7 @@ public class NetworkWatchlistService extends INetworkWatchlistManager.Stub { } } @GuardedBy("mLoggingSwitchLock") private volatile boolean mIsLoggingEnabled = false; private final Object mLoggingSwitchLock = new Object(); Loading Loading @@ -220,36 +222,11 @@ public class NetworkWatchlistService extends INetworkWatchlistManager.Stub { } } /** * Set a new network watchlist. * This method should be called by ConfigUpdater only. * * @return True if network watchlist is updated. */ public boolean setNetworkSecurityWatchlist(List<byte[]> domainsCrc32Digests, List<byte[]> domainsSha256Digests, List<byte[]> ipAddressesCrc32Digests, List<byte[]> ipAddressesSha256Digests) { Slog.i(TAG, "Setting network watchlist"); if (domainsCrc32Digests == null || domainsSha256Digests == null || ipAddressesCrc32Digests == null || ipAddressesSha256Digests == null) { Slog.e(TAG, "Parameters cannot be null"); return false; } if (domainsCrc32Digests.size() != domainsSha256Digests.size() || ipAddressesCrc32Digests.size() != ipAddressesSha256Digests.size()) { Slog.e(TAG, "Must need to have the same number of CRC32 and SHA256 digests"); return false; } if (domainsSha256Digests.size() + ipAddressesSha256Digests.size() > MAX_NUM_OF_WATCHLIST_DIGESTS) { Slog.e(TAG, "Total watchlist size cannot exceed " + MAX_NUM_OF_WATCHLIST_DIGESTS); return false; } mSettings.writeSettingsToDisk(domainsCrc32Digests, domainsSha256Digests, ipAddressesCrc32Digests, ipAddressesSha256Digests); Slog.i(TAG, "Set network watchlist: Success"); return true; @Override public void reloadWatchlist() throws RemoteException { enforceWatchlistLoggingPermission(); Slog.i(TAG, "Reloading watchlist"); mSettings.reloadSettings(); } @Override Loading
services/core/java/com/android/server/net/watchlist/WatchlistReportDbHelper.java +7 −2 Original line number Diff line number Diff line Loading @@ -21,10 +21,12 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Environment; import android.util.Pair; import com.android.internal.util.HexDump; import java.io.File; import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.HashMap; Loading Loading @@ -83,9 +85,12 @@ class WatchlistReportDbHelper extends SQLiteOpenHelper { HashMap<String, String> appDigestCNCList; } static File getSystemWatchlistDbFile() { return new File(Environment.getDataSystemDirectory(), NAME); } private WatchlistReportDbHelper(Context context) { super(context, WatchlistSettings.getSystemWatchlistFile(NAME).getAbsolutePath(), null, VERSION); super(context, getSystemWatchlistDbFile().getAbsolutePath(), null, VERSION); // Memory optimization - close idle connections after 30s of inactivity setIdleConnectionTimeout(IDLE_CONNECTION_TIMEOUT_MS); } Loading