diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java
index 46614021..b3e3e915 100644
--- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java
+++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java
@@ -791,13 +791,13 @@ public class CaptureService extends VpnService implements Runnable {
public static Prefs.PayloadMode getCurPayloadMode() {
if(INSTANCE == null)
- return Prefs.PayloadMode.NONE;
+ return Prefs.PayloadMode.MINIMAL;
// With TLS decryption, payload mode is always "full"
if(INSTANCE.mSettings.tls_decryption)
return Prefs.PayloadMode.FULL;
- return INSTANCE.mSettings.payload_mode;
+ return INSTANCE.mSettings.full_payload ? Prefs.PayloadMode.FULL : Prefs.PayloadMode.MINIMAL;
}
public static void requestBlacklistsUpdate() {
@@ -964,7 +964,7 @@ public class CaptureService extends VpnService implements Runnable {
public int getMaxDumpSize() { return mSettings.max_dump_size; }
- public int getPayloadMode() { return mSettings.payload_mode.ordinal(); }
+ public int getPayloadMode() { return getCurPayloadMode().ordinal(); }
public int getOwnAppUid() {
AppDescriptor app = AppsResolver.resolve(getPackageManager(), BuildConfig.APPLICATION_ID, 0);
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 7a5a8803..f9dc0830 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
@@ -84,6 +84,7 @@ public class SettingsActivity extends BaseActivity {
public static class SettingsFragment extends PreferenceFragmentCompat {
private SwitchPreference mSocks5Enabled;
private SwitchPreference mTlsDecryption;
+ private SwitchPreference mFullPayloadEnabled;
private SwitchPreference mRootCaptureEnabled;
private EditTextPreference mSocks5ProxyIp;
private EditTextPreference mSocks5ProxyPort;
@@ -110,6 +111,7 @@ public class SettingsActivity extends BaseActivity {
setupSecurityPrefs();
setupOtherPrefs();
+ fullPayloadHideShow(mTlsDecryption.isChecked());
socks5ProxyHideShow(mTlsDecryption.isChecked(), mSocks5Enabled.isChecked());
rootCaptureHideShow(Utils.isRootAvailable() && mRootCaptureEnabled.isChecked());
@@ -223,9 +225,13 @@ public class SettingsActivity extends BaseActivity {
return false;
}
+ fullPayloadHideShow((boolean) newValue);
socks5ProxyHideShow((boolean) newValue, mSocks5Enabled.isChecked());
return true;
});
+
+ mFullPayloadEnabled = requirePreference(Prefs.PREF_FULL_PAYLOAD);
+
mSocks5Enabled = requirePreference(Prefs.PREF_SOCKS5_ENABLED_KEY);
mSocks5Enabled.setOnPreferenceChangeListener((preference, newValue) -> {
socks5ProxyHideShow(mTlsDecryption.isChecked(), (boolean)newValue);
@@ -249,6 +255,10 @@ public class SettingsActivity extends BaseActivity {
mSocks5ProxyPort.setOnPreferenceChangeListener((preference, newValue) -> validatePort(newValue.toString()));
}
+ private void fullPayloadHideShow(boolean tlsDecryption) {
+ mFullPayloadEnabled.setVisible(!tlsDecryption);
+ }
+
private void socks5ProxyHideShow(boolean tlsDecryption, boolean socks5Enabled) {
mSocks5Enabled.setVisible(!tlsDecryption);
mSocks5ProxyIp.setVisible(socks5Enabled && !tlsDecryption);
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 f9412871..df62384e 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
@@ -87,7 +87,7 @@ public class ConnectionPayload extends Fragment implements ConnectionDetailsActi
recyclerView.setLayoutManager(layoutMan);
mTruncatedWarning = view.findViewById(R.id.truncated_warning);
- mTruncatedWarning.setText(String.format(getString(R.string.payload_truncated), getString(R.string.minimal_payload)));
+ mTruncatedWarning.setText(String.format(getString(R.string.payload_truncated), getString(R.string.full_payload)));
if(mConn.isPayloadTruncated())
mTruncatedWarning.setVisibility(View.VISIBLE);
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 4f4b331f..5095b15e 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
@@ -37,8 +37,6 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
-import android.widget.AdapterView;
-import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -51,7 +49,6 @@ import androidx.preference.PreferenceManager;
import com.emanuelef.remote_capture.AppsLoader;
import com.emanuelef.remote_capture.AppsResolver;
-import com.emanuelef.remote_capture.adapters.PrefSpinnerAdapter;
import com.emanuelef.remote_capture.interfaces.AppsLoadListener;
import com.emanuelef.remote_capture.model.AppDescriptor;
import com.emanuelef.remote_capture.model.AppState;
@@ -59,7 +56,6 @@ import com.emanuelef.remote_capture.CaptureService;
import com.emanuelef.remote_capture.R;
import com.emanuelef.remote_capture.Utils;
import com.emanuelef.remote_capture.activities.MainActivity;
-import com.emanuelef.remote_capture.activities.StatsActivity;
import com.emanuelef.remote_capture.interfaces.AppStateListener;
import com.emanuelef.remote_capture.model.Prefs;
import com.emanuelef.remote_capture.model.VPNStats;
@@ -87,7 +83,6 @@ public class StatusFragment extends Fragment implements AppStateListener, AppsLo
private String mAppFilter;
private TextView mEmptyAppsView;
private TextView mFilterWarning;
- private Spinner mPayloadMode;
AppsListView mOpenAppsList;
@Override
@@ -117,9 +112,6 @@ public class StatusFragment extends Fragment implements AppStateListener, AppsLo
}
};
- // With TLS decryption, payload mode is always "full"
- mPayloadMode.setVisibility(Prefs.getTlsDecryptionEnabled(mPrefs) ? View.GONE : View.VISIBLE);
-
LocalBroadcastManager.getInstance(requireContext())
.registerReceiver(mReceiver, new IntentFilter(CaptureService.ACTION_STATS_DUMP));
}
@@ -152,16 +144,11 @@ public class StatusFragment extends Fragment implements AppStateListener, AppsLo
mFilterWarning = view.findViewById(R.id.app_filter_warning);
mPrefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
mAppFilter = Prefs.getAppFilter(mPrefs);
- mPayloadMode = view.findViewById(R.id.payload_mode);
PrefSpinner.init(view.findViewById(R.id.dump_mode_spinner),
R.array.pcap_dump_modes, R.array.pcap_dump_modes_labels, R.array.pcap_dump_modes_descriptions,
Prefs.PREF_PCAP_DUMP_MODE, Prefs.DEFAULT_DUMP_MODE);
- PrefSpinner.init(mPayloadMode,
- R.array.payload_modes, R.array.payload_modes_labels, R.array.payload_modes_descriptions,
- Prefs.PREF_PAYLOAD_MODE, Prefs.DEFAULT_PAYLOAD_MODE);
-
mAppFilterSwitch = view.findViewById(R.id.app_filter_switch);
View filterRow = view.findViewById(R.id.app_filter_text);
TextView filterTitle = filterRow.findViewById(R.id.title);
diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/CaptureSettings.java b/app/src/main/java/com/emanuelef/remote_capture/model/CaptureSettings.java
index fef34ab6..453bf546 100644
--- a/app/src/main/java/com/emanuelef/remote_capture/model/CaptureSettings.java
+++ b/app/src/main/java/com/emanuelef/remote_capture/model/CaptureSettings.java
@@ -8,7 +8,6 @@ import java.io.Serializable;
public class CaptureSettings implements Serializable {
public Prefs.DumpMode dump_mode;
- public Prefs.PayloadMode payload_mode;
public String app_filter;
public String collector_address;
public int collector_port;
@@ -20,6 +19,7 @@ public class CaptureSettings implements Serializable {
public boolean ipv6_enabled;
public boolean root_capture;
public boolean pcapdroid_trailer;
+ public boolean full_payload;
public String capture_interface;
public String pcap_uri;
public int snaplen = 0;
@@ -41,7 +41,7 @@ public class CaptureSettings implements Serializable {
capture_interface = Prefs.getCaptureInterface(prefs);
pcap_uri = Prefs.getPCAPUri(prefs);
tls_decryption = Prefs.getTlsDecryptionEnabled(prefs);
- payload_mode = Prefs.getPayloadMode(prefs);
+ full_payload = Prefs.getFullPayloadMode(prefs);
}
public CaptureSettings(Intent intent) {
@@ -62,7 +62,7 @@ public class CaptureSettings implements Serializable {
max_pkts_per_flow = getInt(intent, Prefs.PREF_MAX_PKTS_PER_FLOW, 0);
max_dump_size = getInt(intent, Prefs.PREF_MAX_DUMP_SIZE, 0);
tls_decryption = getBool(intent, Prefs.PREF_TLS_DECRYPTION_KEY, false);
- payload_mode = Prefs.getPayloadMode(getString(intent, Prefs.PREF_PAYLOAD_MODE, "minimal"));
+ full_payload = false;
}
private static String getString(Intent intent, String key, String def_value) {
diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java
index b8fd904b..45c2f905 100644
--- a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java
+++ b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java
@@ -62,7 +62,7 @@ public class Prefs {
public static final String PREF_MAX_DUMP_SIZE = "max_dump_size";
public static final String PREF_SOCKS5_ENABLED_KEY = "socks5_enabled";
public static final String PREF_TLS_DECRYPTION_SETUP_DONE = "tls_decryption_setup_ok";
- public static final String PREF_PAYLOAD_MODE = "payload_mode";
+ public static final String PREF_FULL_PAYLOAD = "full_payload";
public enum DumpMode {
NONE,
@@ -116,5 +116,5 @@ public class Prefs {
public static boolean startAtBoot(SharedPreferences p) { return(p.getBoolean(PREF_START_AT_BOOT, false)); }
public static String getPCAPUri(SharedPreferences p) { return(p.getString(PREF_PCAP_URI, "")); }
public static boolean isTLSDecryptionSetupDone(SharedPreferences p) { return(p.getBoolean(PREF_TLS_DECRYPTION_SETUP_DONE, false)); }
- public static PayloadMode getPayloadMode(SharedPreferences p) { return(getPayloadMode(p.getString(PREF_PAYLOAD_MODE, "minimal")));}
+ public static boolean getFullPayloadMode(SharedPreferences p) { return(p.getBoolean(PREF_FULL_PAYLOAD, false)); }
}
diff --git a/app/src/main/res/layout/status.xml b/app/src/main/res/layout/status.xml
index 8e499b1a..8aeaa070 100644
--- a/app/src/main/res/layout/status.xml
+++ b/app/src/main/res/layout/status.xml
@@ -73,14 +73,6 @@
tools:listitem="@layout/quick_settings_item"
android:prompt="@string/traffic_dump"/>
-
-
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 1de80343..e05091ff 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -38,20 +38,4 @@
- @string/theme_light
- @string/theme_dark
-
-
- - none
- - minimal
- - full
-
-
- - @string/no_payload
- - @string/minimal_payload
- - @string/full_payload
-
-
- - @string/payload_mode_none
- - @string/payload_mode_minimal
- - @string/payload_mode_full
-
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 95ebf577..22f5571f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -291,14 +291,6 @@
Upgrade
Export SSL keylog
Export failed
- Payload
- No payload
- Short payload
- Full payload
- Full
- The connections payload will not be shown
- Only the initial bytes of the payload will be shown
- The full payload will be shown (e.g. the full HTTP request and response). This requires a lot of memory
Connection
Encrypted
Cleartext
@@ -307,11 +299,12 @@
Overview
HTTP request
HTTP response
- Payload visualization
- Only a portion of the actual payload is shown, see \"%1$s\"
+ Payload is truncated. Enable \"%1$s\" to show it in full
WebSocket
HTTP
Raw
TX
RX
+ Full payload
+ Show the full connections payload (e.g. the full HTTP request and response). This requires a lot of memory, don\'t use in the long run
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index 65b9b1b9..7702114c 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -52,6 +52,13 @@
app:summary="@string/tls_decryption_summary"
app:defaultValue="false" />
+
+