From cdafc699025b596f38f2cfd1d7b4bb77b8a7496d Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 23 Nov 2022 12:58:09 +0100 Subject: [PATCH] Write app log to file See #282 --- .../remote_capture/ActionReceiver.java | 1 - .../emanuelef/remote_capture/AppsLoader.java | 3 +- .../remote_capture/AppsResolver.java | 1 - .../com/emanuelef/remote_capture/Billing.java | 1 - .../emanuelef/remote_capture/Blacklists.java | 9 +- .../remote_capture/BootReceiver.java | 1 - .../remote_capture/CaptureService.java | 15 +-- .../remote_capture/ConnectionsRegister.java | 3 +- .../emanuelef/remote_capture/Geolocation.java | 1 - .../remote_capture/HTTPReassembly.java | 4 +- .../com/emanuelef/remote_capture/Log.java | 63 ++++++++++ .../emanuelef/remote_capture/MitmAddon.java | 11 +- .../remote_capture/MitmReceiver.java | 9 +- .../emanuelef/remote_capture/PCAPdroid.java | 6 +- .../com/emanuelef/remote_capture/Utils.java | 1 - .../activities/CaptureCtrl.java | 2 +- .../activities/ConnectionDetailsActivity.java | 2 +- .../activities/FirewallActivity.java | 2 +- .../activities/MainActivity.java | 2 +- .../activities/MalwareDetection.java | 2 +- .../activities/OnBoardingActivity.java | 4 +- .../activities/SettingsActivity.java | 2 +- .../activities/VpnExemptionsActivity.java | 2 +- .../adapters/AppsTogglesAdapter.java | 2 +- .../adapters/ConnectionsAdapter.java | 2 +- .../adapters/PayloadAdapter.java | 2 +- .../fragments/AppsFragment.java | 2 +- .../remote_capture/fragments/AppsToggles.java | 2 +- .../fragments/BlacklistsFragment.java | 2 +- .../fragments/ConnectionPayload.java | 2 +- .../fragments/ConnectionsFragment.java | 2 +- .../fragments/EditListFragment.java | 2 +- .../fragments/FirewallStatus.java | 2 +- .../fragments/GeoipSettings.java | 2 +- .../fragments/StatusFragment.java | 2 +- .../mitmwizard/InstallCertificate.java | 2 +- .../remote_capture/model/Blocklist.java | 2 +- .../model/ConnectionUpdate.java | 2 - .../remote_capture/model/MatchList.java | 2 +- .../remote_capture/pcap_dump/FileDumper.java | 2 +- .../remote_capture/pcap_dump/HTTPServer.java | 2 +- app/src/main/jni/core/CMakeLists.txt | 1 + app/src/main/jni/core/capture_root.c | 6 +- app/src/main/jni/core/capture_vpn.c | 10 +- app/src/main/jni/core/jni_impl.c | 42 ++++++- app/src/main/jni/core/log_writer.c | 111 ++++++++++++++++++ app/src/main/jni/core/log_writer.h | 13 ++ app/src/main/jni/core/pcapdroid.c | 10 +- 48 files changed, 293 insertions(+), 83 deletions(-) create mode 100644 app/src/main/java/com/emanuelef/remote_capture/Log.java create mode 100644 app/src/main/jni/core/log_writer.c create mode 100644 app/src/main/jni/core/log_writer.h diff --git a/app/src/main/java/com/emanuelef/remote_capture/ActionReceiver.java b/app/src/main/java/com/emanuelef/remote_capture/ActionReceiver.java index eed4bc55..3c1cb3a0 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/ActionReceiver.java +++ b/app/src/main/java/com/emanuelef/remote_capture/ActionReceiver.java @@ -22,7 +22,6 @@ package com.emanuelef.remote_capture; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.util.Log; import androidx.core.app.NotificationManagerCompat; diff --git a/app/src/main/java/com/emanuelef/remote_capture/AppsLoader.java b/app/src/main/java/com/emanuelef/remote_capture/AppsLoader.java index 5291cf21..e81cb9d3 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/AppsLoader.java +++ b/app/src/main/java/com/emanuelef/remote_capture/AppsLoader.java @@ -23,7 +23,6 @@ import android.annotation.SuppressLint; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; -import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -147,4 +146,4 @@ public class AppsLoader implements LoaderManager.LoaderCallbacks. + * + * Copyright 2020-22 - Emanuele Faranda + */ + +package com.emanuelef.remote_capture; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class Log { + public static final int LOG_LEVEL_INFO = 4; + public static int DEFAULT_LOGGER; + public static int MITMADDON_LOGGER; + + public static void init(String basedir) { + DEFAULT_LOGGER = CaptureService.initLogger(basedir + "/pcapdroid.log", LOG_LEVEL_INFO); + MITMADDON_LOGGER = CaptureService.initLogger(basedir + "/mitmaddon.log", LOG_LEVEL_INFO); + android.util.Log.e("tag", basedir); + } + + public static void writeLog(int logger, int level, @Nullable String tag, @NonNull String message) { + CaptureService.writeLog(logger, level, "[" + tag + "] " + message); + } + + public static void d(@Nullable String tag, @NonNull String message) { + android.util.Log.d(tag, message); + } + + public static void i(@Nullable String tag, @NonNull String message) { + android.util.Log.i(tag, message); + writeLog(DEFAULT_LOGGER, android.util.Log.INFO, tag, message); + } + + public static void w(@Nullable String tag, @NonNull String message) { + android.util.Log.w(tag, message); + writeLog(DEFAULT_LOGGER, android.util.Log.WARN, tag, message); + } + + public static void e(@Nullable String tag, @NonNull String message) { + android.util.Log.e(tag, message); + writeLog(DEFAULT_LOGGER, android.util.Log.ERROR, tag, message); + } + + public static void wtf(@Nullable String tag, @NonNull String message) { + android.util.Log.wtf(tag, message); + writeLog(DEFAULT_LOGGER, android.util.Log.ASSERT, tag, message); // ANDROID_LOG_FATAL + } +} \ No newline at end of file diff --git a/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java b/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java index 7e1ebdcc..e05f6490 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java +++ b/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java @@ -35,7 +35,6 @@ import android.os.Message; import android.os.Messenger; import android.os.ParcelFileDescriptor; import android.os.RemoteException; -import android.util.Log; import androidx.annotation.NonNull; import androidx.core.content.pm.PackageInfoCompat; @@ -69,7 +68,7 @@ public class MitmAddon { private final ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { - Log.d(TAG, "Service connected"); + Log.i(TAG, "Service connected"); mService = new Messenger(service); if(mStopRequested) @@ -80,7 +79,7 @@ public class MitmAddon { @Override public void onServiceDisconnected(ComponentName className) { - Log.d(TAG, "Service disconnected"); + Log.i(TAG, "Service disconnected"); disconnect(); // call unbind to prevent new connections mReceiver.onMitmServiceDisconnect(); } @@ -211,7 +210,7 @@ public class MitmAddon { // This must be always called after connect, e.g. in the OnDestroy public void disconnect() { if(mService != null) { - Log.d(TAG, "Unbinding service..."); + Log.i(TAG, "Unbinding service..."); mContext.unbindService(mConnection); mService = null; } @@ -278,12 +277,12 @@ public class MitmAddon { public boolean stopProxy() { if(mService == null) { - Log.d(TAG, "Not connected, postponing stop message"); + Log.i(TAG, "Not connected, postponing stop message"); mStopRequested = true; return true; } - Log.d(TAG, "Send stop message"); + Log.i(TAG, "Send stop message"); Message msg = Message.obtain(null, MitmAPI.MSG_STOP_MITM); try { mService.send(msg); diff --git a/app/src/main/java/com/emanuelef/remote_capture/MitmReceiver.java b/app/src/main/java/com/emanuelef/remote_capture/MitmReceiver.java index a434c394..7be64528 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/MitmReceiver.java +++ b/app/src/main/java/com/emanuelef/remote_capture/MitmReceiver.java @@ -23,7 +23,6 @@ import android.content.Context; import android.net.Uri; import android.os.ParcelFileDescriptor; import android.os.SystemClock; -import android.util.Log; import android.util.LruCache; import android.util.SparseArray; @@ -179,12 +178,12 @@ public class MitmReceiver implements Runnable, ConnectionsListener, MitmListener @Override public void run() { if(mSocketFd == null) { - Log.d(TAG, "Null socket, abort"); + Log.e(TAG, "Null socket, abort"); proxyRunning.postValue(false); return; } - Log.d(TAG, "Receiving data..."); + Log.i(TAG, "Receiving data..."); try(DataInputStream istream = new DataInputStream(new ParcelFileDescriptor.AutoCloseInputStream(mSocketFd))) { while(mAddon.isConnected()) { String msg_type; @@ -236,7 +235,7 @@ public class MitmReceiver implements Runnable, ConnectionsListener, MitmListener if(type == MsgType.MASTER_SECRET) logMasterSecret(msg); else if(type == MsgType.RUNNING) { - Log.d(TAG, "MITM proxy is running"); + Log.i(TAG, "MITM proxy is running"); proxyRunning.postValue(true); } else { ConnectionDescriptor conn = getConnByLocalPort(port); @@ -258,7 +257,7 @@ public class MitmReceiver implements Runnable, ConnectionsListener, MitmListener } proxyRunning.postValue(false); - Log.d(TAG, "End receiving data"); + Log.i(TAG, "End receiving data"); } private boolean isSent(MsgType type) { diff --git a/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java b/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java index 9e3cf19d..7c635a76 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java +++ b/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java @@ -22,7 +22,6 @@ package com.emanuelef.remote_capture; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; -import android.util.Log; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; @@ -59,8 +58,9 @@ public class PCAPdroid extends Application { public void onCreate() { super.onCreate(); + Log.init(getCacheDir().getAbsolutePath()); Utils.BuildType buildtp = Utils.getVerifiedBuild(this); - Log.d(TAG, "Build type: " + buildtp); + Log.i(TAG, "Build type: " + buildtp); CaocConfig.Builder builder = CaocConfig.Builder.create(); if((buildtp == Utils.BuildType.PLAYSTORE) || (buildtp == Utils.BuildType.UNKNOWN)) { @@ -123,4 +123,4 @@ public class PCAPdroid extends Application { mCtrlPermissions = new CtrlPermissions(this); return mCtrlPermissions; } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/emanuelef/remote_capture/Utils.java b/app/src/main/java/com/emanuelef/remote_capture/Utils.java index 3e35d7c1..c5f5a21d 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Utils.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Utils.java @@ -65,7 +65,6 @@ import android.text.SpannedString; import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.text.style.StyleSpan; -import android.util.Log; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/CaptureCtrl.java b/app/src/main/java/com/emanuelef/remote_capture/activities/CaptureCtrl.java index c8763aea..cc05774c 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/CaptureCtrl.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/CaptureCtrl.java @@ -27,7 +27,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.util.Log; import android.view.View; import android.view.Window; import android.view.WindowInsets; @@ -48,6 +47,7 @@ import com.emanuelef.remote_capture.Billing; import com.emanuelef.remote_capture.BuildConfig; import com.emanuelef.remote_capture.CaptureHelper; import com.emanuelef.remote_capture.CaptureService; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.PCAPdroid; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/ConnectionDetailsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/ConnectionDetailsActivity.java index 45bdd810..f3c02ffb 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/ConnectionDetailsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/ConnectionDetailsActivity.java @@ -29,10 +29,10 @@ import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.util.Log; import com.emanuelef.remote_capture.CaptureService; import com.emanuelef.remote_capture.ConnectionsRegister; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.fragments.ConnectionOverview; import com.emanuelef.remote_capture.fragments.ConnectionPayload; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/FirewallActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/FirewallActivity.java index 79437191..5da556cb 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/FirewallActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/FirewallActivity.java @@ -20,7 +20,6 @@ package com.emanuelef.remote_capture.activities; import android.os.Bundle; -import android.util.Log; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; @@ -28,6 +27,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.fragments.EditListFragment; import com.emanuelef.remote_capture.fragments.FirewallStatus; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java index d35ba8e9..646e2c3f 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java @@ -52,7 +52,6 @@ import android.os.Build; import android.os.Bundle; import android.provider.DocumentsContract; import android.provider.OpenableColumns; -import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; @@ -63,6 +62,7 @@ import com.emanuelef.remote_capture.AppsResolver; import com.emanuelef.remote_capture.Billing; import com.emanuelef.remote_capture.BuildConfig; import com.emanuelef.remote_capture.CaptureHelper; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.MitmReceiver; import com.emanuelef.remote_capture.fragments.ConnectionsFragment; import com.emanuelef.remote_capture.fragments.StatusFragment; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/MalwareDetection.java b/app/src/main/java/com/emanuelef/remote_capture/activities/MalwareDetection.java index 25dabc5a..e8120bee 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/MalwareDetection.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/MalwareDetection.java @@ -20,7 +20,6 @@ package com.emanuelef.remote_capture.activities; import android.os.Bundle; -import android.util.Log; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; @@ -28,6 +27,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.fragments.EditListFragment; import com.emanuelef.remote_capture.fragments.BlacklistsFragment; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/OnBoardingActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/OnBoardingActivity.java index 63050c5e..c21e3fce 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/OnBoardingActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/OnBoardingActivity.java @@ -24,7 +24,6 @@ import android.os.Build; import android.os.Bundle; import android.text.method.LinkMovementMethod; import android.util.DisplayMetrics; -import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; @@ -41,6 +40,7 @@ import androidx.fragment.app.Fragment; import androidx.preference.PreferenceManager; import com.emanuelef.remote_capture.Billing; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.model.Prefs; @@ -210,4 +210,4 @@ public class OnBoardingActivity extends AppIntro { startActivity(intent); finish(); } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java index 27442ac9..a91a8a9e 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java @@ -26,7 +26,6 @@ import android.net.InetAddresses; import android.os.Build; import android.os.Bundle; import android.text.InputType; -import android.util.Log; import android.util.Patterns; import androidx.activity.result.ActivityResultLauncher; @@ -44,6 +43,7 @@ import androidx.preference.PreferenceManager; import androidx.preference.SwitchPreference; import com.emanuelef.remote_capture.Billing; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.PCAPdroid; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.MitmAddon; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/VpnExemptionsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/VpnExemptionsActivity.java index fc674f1f..b28f63c6 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/VpnExemptionsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/VpnExemptionsActivity.java @@ -22,13 +22,13 @@ package com.emanuelef.remote_capture.activities; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; -import android.util.Log; import android.view.MenuItem; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.PreferenceManager; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.fragments.AppsToggles; import com.emanuelef.remote_capture.model.AppDescriptor; diff --git a/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsTogglesAdapter.java b/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsTogglesAdapter.java index f88e1be5..e63afed7 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsTogglesAdapter.java +++ b/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsTogglesAdapter.java @@ -21,7 +21,6 @@ package com.emanuelef.remote_capture.adapters; import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -33,6 +32,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.SwitchCompat; import androidx.recyclerview.widget.RecyclerView; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.model.AppDescriptor; diff --git a/app/src/main/java/com/emanuelef/remote_capture/adapters/ConnectionsAdapter.java b/app/src/main/java/com/emanuelef/remote_capture/adapters/ConnectionsAdapter.java index a8921d78..a74f4482 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/adapters/ConnectionsAdapter.java +++ b/app/src/main/java/com/emanuelef/remote_capture/adapters/ConnectionsAdapter.java @@ -22,7 +22,6 @@ package com.emanuelef.remote_capture.adapters; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.Drawable; -import android.util.Log; import android.util.SparseIntArray; import android.view.LayoutInflater; import android.view.View; @@ -35,6 +34,7 @@ import androidx.core.content.ContextCompat; import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.PCAPdroid; import com.emanuelef.remote_capture.interfaces.ConnectionsListener; import com.emanuelef.remote_capture.model.AppDescriptor; diff --git a/app/src/main/java/com/emanuelef/remote_capture/adapters/PayloadAdapter.java b/app/src/main/java/com/emanuelef/remote_capture/adapters/PayloadAdapter.java index e5da542c..6fd0a7ae 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/adapters/PayloadAdapter.java +++ b/app/src/main/java/com/emanuelef/remote_capture/adapters/PayloadAdapter.java @@ -21,7 +21,6 @@ package com.emanuelef.remote_capture.adapters; import android.annotation.SuppressLint; import android.content.Context; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -34,6 +33,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.emanuelef.remote_capture.CaptureService; import com.emanuelef.remote_capture.HTTPReassembly; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.model.ConnectionDescriptor; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsFragment.java index 6702e064..1390cdba 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsFragment.java @@ -23,7 +23,6 @@ import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.util.Log; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.MenuInflater; @@ -38,6 +37,7 @@ import androidx.fragment.app.Fragment; import com.emanuelef.remote_capture.CaptureService; import com.emanuelef.remote_capture.ConnectionsRegister; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.PCAPdroid; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.activities.AppDetailsActivity; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsToggles.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsToggles.java index 31cbf574..52c11fe3 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsToggles.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsToggles.java @@ -20,7 +20,6 @@ package com.emanuelef.remote_capture.fragments; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -38,6 +37,7 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.Lifecycle; import com.emanuelef.remote_capture.AppsLoader; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.adapters.AppsTogglesAdapter; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/BlacklistsFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/BlacklistsFragment.java index c79c1087..e8641406 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/BlacklistsFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/BlacklistsFragment.java @@ -22,7 +22,6 @@ package com.emanuelef.remote_capture.fragments; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -38,6 +37,7 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.Lifecycle; import com.emanuelef.remote_capture.CaptureService; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.PCAPdroid; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.adapters.BlacklistsAdapter; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionPayload.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionPayload.java index 4f8c6674..4169d624 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionPayload.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionPayload.java @@ -22,7 +22,6 @@ package com.emanuelef.remote_capture.fragments; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -41,6 +40,7 @@ import androidx.preference.PreferenceManager; import com.emanuelef.remote_capture.CaptureService; import com.emanuelef.remote_capture.ConnectionsRegister; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.activities.ConnectionDetailsActivity; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java index 46674458..17398bb1 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java @@ -28,7 +28,6 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.util.Log; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; @@ -55,6 +54,7 @@ import com.emanuelef.remote_capture.AppsResolver; import com.emanuelef.remote_capture.Billing; import com.emanuelef.remote_capture.CaptureService; import com.emanuelef.remote_capture.ConnectionsRegister; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.PCAPdroid; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/EditListFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/EditListFragment.java index 2de7dee7..517b4c60 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/EditListFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/EditListFragment.java @@ -23,7 +23,6 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.util.Log; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; @@ -47,6 +46,7 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.Lifecycle; import com.emanuelef.remote_capture.CaptureService; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.adapters.ListEditAdapter; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/FirewallStatus.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/FirewallStatus.java index 55f347a5..ebbc977c 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/FirewallStatus.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/FirewallStatus.java @@ -26,7 +26,6 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -47,6 +46,7 @@ import androidx.preference.PreferenceManager; import com.emanuelef.remote_capture.CaptureService; import com.emanuelef.remote_capture.ConnectionsRegister; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.PCAPdroid; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/GeoipSettings.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/GeoipSettings.java index f64a7ec6..4b2d869a 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/GeoipSettings.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/GeoipSettings.java @@ -22,7 +22,6 @@ import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -31,6 +30,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import com.emanuelef.remote_capture.Geolocation; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/StatusFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/StatusFragment.java index 0ff7f9d0..55ceb633 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/StatusFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/StatusFragment.java @@ -28,7 +28,6 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.text.method.LinkMovementMethod; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -49,6 +48,7 @@ import androidx.preference.PreferenceManager; import com.emanuelef.remote_capture.AppsLoader; import com.emanuelef.remote_capture.AppsResolver; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.MitmReceiver; import com.emanuelef.remote_capture.interfaces.AppsLoadListener; import com.emanuelef.remote_capture.model.AppDescriptor; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/mitmwizard/InstallCertificate.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/mitmwizard/InstallCertificate.java index 958fd267..b032034a 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/mitmwizard/InstallCertificate.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/mitmwizard/InstallCertificate.java @@ -27,7 +27,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.security.KeyChain; -import android.util.Log; import android.view.View; import android.widget.Toast; @@ -38,6 +37,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.interfaces.MitmListener; diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/Blocklist.java b/app/src/main/java/com/emanuelef/remote_capture/model/Blocklist.java index 6217edf5..2f0a7b55 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/Blocklist.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/Blocklist.java @@ -3,9 +3,9 @@ package com.emanuelef.remote_capture.model; import android.content.Context; import android.os.SystemClock; import android.util.ArrayMap; -import android.util.Log; import com.emanuelef.remote_capture.CaptureService; +import com.emanuelef.remote_capture.Log; import java.util.Iterator; import java.util.Map; diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionUpdate.java b/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionUpdate.java index f769d270..c435fd7f 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionUpdate.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionUpdate.java @@ -19,8 +19,6 @@ package com.emanuelef.remote_capture.model; -import android.util.Log; - import java.util.ArrayList; public class ConnectionUpdate { diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/MatchList.java b/app/src/main/java/com/emanuelef/remote_capture/model/MatchList.java index 8480bd95..38d50578 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/MatchList.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/MatchList.java @@ -24,13 +24,13 @@ import android.content.SharedPreferences; import android.graphics.Typeface; import android.text.style.StyleSpan; import android.util.ArrayMap; -import android.util.Log; import androidx.annotation.Nullable; import androidx.collection.ArraySet; import androidx.preference.PreferenceManager; import com.emanuelef.remote_capture.AppsResolver; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.google.gson.Gson; diff --git a/app/src/main/java/com/emanuelef/remote_capture/pcap_dump/FileDumper.java b/app/src/main/java/com/emanuelef/remote_capture/pcap_dump/FileDumper.java index 7316780b..75efb99e 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/pcap_dump/FileDumper.java +++ b/app/src/main/java/com/emanuelef/remote_capture/pcap_dump/FileDumper.java @@ -2,9 +2,9 @@ package com.emanuelef.remote_capture.pcap_dump; import android.content.Context; import android.net.Uri; -import android.util.Log; import com.emanuelef.remote_capture.CaptureService; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.interfaces.PcapDumper; diff --git a/app/src/main/java/com/emanuelef/remote_capture/pcap_dump/HTTPServer.java b/app/src/main/java/com/emanuelef/remote_capture/pcap_dump/HTTPServer.java index da9d0755..c83a6cb0 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/pcap_dump/HTTPServer.java +++ b/app/src/main/java/com/emanuelef/remote_capture/pcap_dump/HTTPServer.java @@ -20,9 +20,9 @@ package com.emanuelef.remote_capture.pcap_dump; import android.content.Context; -import android.util.Log; import com.emanuelef.remote_capture.CaptureService; +import com.emanuelef.remote_capture.Log; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.interfaces.PcapDumper; diff --git a/app/src/main/jni/core/CMakeLists.txt b/app/src/main/jni/core/CMakeLists.txt index 54cdcb2b..456412b3 100644 --- a/app/src/main/jni/core/CMakeLists.txt +++ b/app/src/main/jni/core/CMakeLists.txt @@ -9,6 +9,7 @@ add_library(capture SHARED crc32.c blacklist.c pcap_utils.c + log_writer.c jni_impl.c) # nDPI diff --git a/app/src/main/jni/core/capture_root.c b/app/src/main/jni/core/capture_root.c index 6e48a4a6..411b3d09 100644 --- a/app/src/main/jni/core/capture_root.c +++ b/app/src/main/jni/core/capture_root.c @@ -57,7 +57,7 @@ static void kill_pcapd(pcapdroid_t *nc) { pid = atoi(pid_s); if(pid != 0) { - log_d("Killing old pcapd with pid %d", pid); + log_i("Killing old pcapd with pid %d", pid); run_shell_cmd("kill", pid_s, true, false); } @@ -185,7 +185,7 @@ static int connectPcapd(pcapdroid_t *pd) { goto cleanup; } - log_d("Connected to pcapd"); + log_i("Connected to pcapd"); cleanup: unlink(PCAPD_SOCKET_PATH); @@ -518,7 +518,7 @@ int run_root(pcapdroid_t *pd) { pd_refresh_time(pd); next_purge_ms = pd->now_ms + PERIODIC_PURGE_TIMEOUT_MS; - log_d("Starting packet loop"); + log_i("Starting packet loop"); while(running) { pcapd_hdr_t hdr; diff --git a/app/src/main/jni/core/capture_vpn.c b/app/src/main/jni/core/capture_vpn.c index 68122468..632b8230 100644 --- a/app/src/main/jni/core/capture_vpn.c +++ b/app/src/main/jni/core/capture_vpn.c @@ -33,7 +33,7 @@ static int resolve_uid(pcapdroid_t *pd, const zdtun_5tuple_t *conn_info) { char appbuf[64]; get_appname_by_uid(pd, uid, appbuf, sizeof(appbuf)); - log_i( "%s [%d/%s]", buf, uid, appbuf); + log_d( "%s [%d/%s]", buf, uid, appbuf); } else { uid = UID_UNKNOWN; log_w("%s => UID not found!", buf); @@ -154,7 +154,7 @@ static bool check_dns_req_allowed(pcapdroid_t *pd, zdtun_conn_t *conn, pkt_conte ip.ip4 = pd->vpn.ipv4.dns_server; zdtun_set_dnat_info(pd->zdt, &ip, htons(53), 4); - log_d("Using new DNS server"); + log_i("Using new DNS server"); } if(pctx->tuple->ipproto == IPPROTO_ICMP) @@ -209,7 +209,7 @@ static bool check_dns_req_allowed(pcapdroid_t *pd, zdtun_conn_t *conn, pkt_conte } if(block_private_dns) { - log_i("blocking packet directed to the DNS server"); + log_d("blocking packet directed to the DNS server"); return(false); } @@ -370,7 +370,7 @@ void vpn_process_ndpi(pcapdroid_t *pd, const zdtun_5tuple_t *tuple, pd_conn_t *d if(block_private_dns && !data->to_block && (data->l7proto == NDPI_PROTOCOL_TLS) && data->info && blacklist_match_domain(pd->vpn.known_dns_servers, data->info)) { - log_i("blocking connection to private DNS server"); + log_d("blocking connection to private DNS server"); data->blacklisted_internal = true; data->to_block = true; } @@ -474,7 +474,7 @@ int run_vpn(pcapdroid_t *pd) { pd_refresh_time(pd); next_purge_ms = pd->now_ms + PERIODIC_PURGE_TIMEOUT_MS; - log_d("Starting packet loop [tunfd=%d]", pd->vpn.tunfd); + log_i("Starting packet loop"); while(running) { int max_fd; diff --git a/app/src/main/jni/core/jni_impl.c b/app/src/main/jni/core/jni_impl.c index 78981488..8adb24e9 100644 --- a/app/src/main/jni/core/jni_impl.c +++ b/app/src/main/jni/core/jni_impl.c @@ -19,15 +19,18 @@ #if ANDROID +#include #include "pcapdroid.h" #include "pcap_utils.h" #include "common/utils.h" +#include "log_writer.h" // This files contains functions to make the capture core communicate // with the Android system. // Exported functions are defined in pcapdroid.h static pcapdroid_t *global_pd = NULL; +static pthread_t jni_thread; jni_classes_t cls; jni_methods_t mids; @@ -37,9 +40,19 @@ jni_enum_t enums; /* ******************************************************* */ static void log_callback(int lvl, const char *line) { - if(lvl >= ANDROID_LOG_FATAL) { - pcapdroid_t *pd = global_pd; + pcapdroid_t *pd = global_pd; + // quick path for debug logs + if(lvl < PD_DEFAULT_LOGGER_LEVEL) + return; + + pd_log_write(PD_DEFAULT_LOGGER, lvl, line); + + // ensure that we are invoking jni from the attached thread + if(!pd || !(pthread_equal(jni_thread, pthread_self()))) + return; + + if(lvl >= ANDROID_LOG_FATAL) { // This is a fatal error, report it to the gui jobject info_string = (*pd->env)->NewStringUTF(pd->env, line); @@ -607,6 +620,7 @@ Java_com_emanuelef_remote_1capture_CaptureService_runPacketLoop(JNIEnv *env, jcl pd.filesdir_len = strlen(pd.filesdir); global_pd = &pd; + jni_thread = pthread_self(); logcallback = log_callback; signal(SIGPIPE, SIG_IGN); @@ -641,7 +655,7 @@ Java_com_emanuelef_remote_1capture_CaptureService_runPacketLoop(JNIEnv *env, jcl JNIEXPORT void JNICALL Java_com_emanuelef_remote_1capture_CaptureService_stopPacketLoop(JNIEnv *env, jclass type) { /* NOTE: the select on the packets loop uses a timeout to wake up periodically */ - log_i( "stopPacketLoop called"); + log_i("stopPacketLoop called"); running = false; } @@ -846,6 +860,28 @@ Java_com_emanuelef_remote_1capture_CaptureService_setPayloadMode(JNIEnv *env, jc /* ******************************************************* */ +JNIEXPORT jint JNICALL +Java_com_emanuelef_remote_1capture_CaptureService_initLogger(JNIEnv *env, jclass clazz, + jstring path, jint level) { + const char *path_s = (*env)->GetStringUTFChars(env, path, 0); + int rv = pd_init_logger(path_s, level); + (*env)->ReleaseStringUTFChars(env, path, path_s); + return rv; +} + +/* ******************************************************* */ + +JNIEXPORT jint JNICALL +Java_com_emanuelef_remote_1capture_CaptureService_writeLog(JNIEnv *env, jclass clazz, + jint logger, jint lvl, jstring message) { + const char *message_s = (*env)->GetStringUTFChars(env, message, 0); + int rv = pd_log_write(logger, lvl, message_s); + (*env)->ReleaseStringUTFChars(env, message, message_s); + return rv; +} + +/* ******************************************************* */ + char* getStringPref(pcapdroid_t *pd, const char *key, char *buf, int bufsize) { JNIEnv *env = pd->env; diff --git a/app/src/main/jni/core/log_writer.c b/app/src/main/jni/core/log_writer.c new file mode 100644 index 00000000..cba27e85 --- /dev/null +++ b/app/src/main/jni/core/log_writer.c @@ -0,0 +1,111 @@ +#include +#include +#include +#include "log_writer.h" + +struct log_writer; + +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; +static struct log_writer **loggers = NULL; +static int num_loggers = 0; + +struct log_writer { + FILE *f; + int id; + int level; +}; + +static void pd_destroy_logger(struct log_writer *logger) { + fclose(logger->f); + pd_free(logger); +} + +void pd_close_loggers() { + pthread_mutex_lock(&mutex); + + for(int i=0; ilevel = min_lvl; + logger->f = f; + + pthread_mutex_lock(&mutex); + loggers = pd_realloc(loggers, sizeof(void*) * (num_loggers + 1)); + if(!loggers) { + pd_destroy_logger(logger); + rv = -1; + } else { + loggers[num_loggers++] = logger; + logger->id = rv = num_loggers; + } + pthread_mutex_unlock(&mutex); + + return rv; +} + +int pd_log_write(int logger_id, int lvl, const char *msg) { + int rv = 0; + char dtbuf[64]; + struct tm tm; + time_t tnow = time(NULL); + + strftime(dtbuf, sizeof(dtbuf), "%d/%b/%Y %H:%M:%S", localtime_r(&tnow, &tm)); + + pthread_mutex_lock(&mutex); + + if((logger_id < 0) || (logger_id >= num_loggers)) { + rv = -ENOENT; + goto unlock; + } + + struct log_writer *logger = loggers[logger_id]; + + if(logger->level > lvl) + goto unlock; + + if(ferror(logger->f)) { + rv = -EINVAL; + goto unlock; + } + + fprintf(logger->f, "[%c] %s - %s\n", loglvl2char(lvl), dtbuf, msg); + if(ferror(logger->f)) { +#ifdef ANDROID + __android_log_print(ANDROID_LOG_ERROR, logtag, + "pd_log %d failed[%d]: %s", logger_id, errno, strerror(errno)); +#endif + rv = -errno; + goto unlock; + } + + fflush(logger->f); + +unlock: + pthread_mutex_unlock(&mutex); + return rv; +} \ No newline at end of file diff --git a/app/src/main/jni/core/log_writer.h b/app/src/main/jni/core/log_writer.h new file mode 100644 index 00000000..d47f64a5 --- /dev/null +++ b/app/src/main/jni/core/log_writer.h @@ -0,0 +1,13 @@ +#ifndef PCAPDROID_LOG_WRITER_H +#define PCAPDROID_LOG_WRITER_H + +#include "common/utils.h" + +#define PD_DEFAULT_LOGGER 0 +#define PD_DEFAULT_LOGGER_LEVEL ANDROID_LOG_INFO + +int pd_init_logger(const char *path, int min_lvl); +int pd_log_write(int logger, int lvl, const char *msg); +void pd_close_loggers(); + +#endif //PCAPDROID_LOG_WRITER_H diff --git a/app/src/main/jni/core/pcapdroid.c b/app/src/main/jni/core/pcapdroid.c index 7a0f66a0..228da8df 100644 --- a/app/src/main/jni/core/pcapdroid.c +++ b/app/src/main/jni/core/pcapdroid.c @@ -1100,7 +1100,7 @@ void pd_dump_packet(pcapdroid_t *pd, const char *pktbuf, int pktlen, const struc JAVA_PCAP_BUFFER_SIZE, pd->pcap_dump.buffer_idx, rec_size); else if((pd->pcap_dump.max_dump_size > 0) && ((pd->pcap_dump.tot_size + rec_size) >= pd->pcap_dump.max_dump_size)) { - log_d("Max dump size reached, stop the dump"); + log_i("Max dump size reached, stop the dump"); stop_pcap_dump(pd); } else { pcap_dump_rec(pd, (u_char *) pd->pcap_dump.buffer + pd->pcap_dump.buffer_idx, @@ -1198,7 +1198,7 @@ int pd_run(pcapdroid_t *pd) { // Run the capture int rv = pd->root_capture ? run_root(pd) : run_vpn(pd); - log_d("Stopped packet loop"); + log_i("Stopped packet loop"); // send last dump if(pd->cb.send_stats_dump) @@ -1216,7 +1216,7 @@ int pd_run(pcapdroid_t *pd) { if(pd->malware_detection.enabled) { if(pd->malware_detection.reload_in_progress) { - log_d("Joining blacklists reload_worker"); + log_i("Joining blacklists reload_worker"); pthread_join(pd->malware_detection.reload_worker, NULL); } if(pd->malware_detection.bl) @@ -1245,8 +1245,8 @@ int pd_run(pcapdroid_t *pd) { pd_free(e); } - log_d("Host LRU cache size: %d", ip_lru_size(pd->ip_to_host)); - log_d("Discarded fragments: %ld", pd->num_discarded_fragments); + log_i("Host LRU cache size: %d", ip_lru_size(pd->ip_to_host)); + log_i("Discarded fragments: %ld", pd->num_discarded_fragments); ip_lru_destroy(pd->ip_to_host); return(rv);