From 8afea6b1ef61af356eb70eb07db97e95d0999a81 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Mon, 12 Jan 2026 19:39:38 +0100 Subject: [PATCH] Enable the HTTP log based on the full payload option --- .../com/emanuelef/remote_capture/CaptureService.java | 2 +- .../com/emanuelef/remote_capture/HTTPReassembly.java | 2 -- .../fragments/DataViewContainerFragment.java | 11 +++++++---- .../remote_capture/model/ConnectionDescriptor.java | 8 ++++++-- 4 files changed, 14 insertions(+), 9 deletions(-) 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 f6d56447..b0d444f2 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java +++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java @@ -361,7 +361,7 @@ public class CaptureService extends VpnService implements Runnable { last_connections = 0; mLowMemory = false; conn_reg = new ConnectionsRegister(this, CONNECTIONS_LOG_SIZE); - mHttpLog = new HttpLog(); + mHttpLog = mSettings.full_payload ? new HttpLog() : null; mDumper = null; mDumpQueue = null; mPendingUpdates.clear(); diff --git a/app/src/main/java/com/emanuelef/remote_capture/HTTPReassembly.java b/app/src/main/java/com/emanuelef/remote_capture/HTTPReassembly.java index 9c379c20..d8147a26 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/HTTPReassembly.java +++ b/app/src/main/java/com/emanuelef/remote_capture/HTTPReassembly.java @@ -53,8 +53,6 @@ public class HTTPReassembly { private boolean mInvalidHttp; private PayloadChunk mFirstChunk; - public static final boolean TODO_ENABLED = true; - /** * @param reassembleChunks if false, all the chunks will be considered as RAW chunks * @param listener a listener for the reassembly diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/DataViewContainerFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/DataViewContainerFragment.java index bb25a4e5..d57cad9b 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/DataViewContainerFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/DataViewContainerFragment.java @@ -37,6 +37,7 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; +import com.emanuelef.remote_capture.CaptureService; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.model.FilterDescriptor; @@ -138,13 +139,15 @@ public class DataViewContainerFragment extends Fragment implements MenuProvider @Override public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { - if (mCurrentView == VIEW_CONNECTIONS && mConnectionsFragment != null) { + if ((mCurrentView == VIEW_CONNECTIONS) && (mConnectionsFragment != null)) { if (mConnectionsFragment instanceof ConnectionsFragment) { ((ConnectionsFragment) mConnectionsFragment).onCreateMenu(menu, menuInflater); } - menu.add(Menu.NONE, R.id.switch_to_http_log, 25, R.string.switch_to_http) - .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); - } else if (mCurrentView == VIEW_HTTP_LOG && mHttpLogFragment != null) { + + if (CaptureService.getHttpLog() != null) + menu.add(Menu.NONE, R.id.switch_to_http_log, 25, R.string.switch_to_http) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + } else if ((mCurrentView == VIEW_HTTP_LOG) && (mHttpLogFragment != null)) { if (mHttpLogFragment instanceof HttpLogFragment) { ((HttpLogFragment) mHttpLogFragment).onCreateMenu(menu, menuInflater); } diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionDescriptor.java b/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionDescriptor.java index 64d9058d..1e299b1a 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionDescriptor.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionDescriptor.java @@ -201,7 +201,7 @@ public class ConnectionDescriptor implements HTTPReassembly.ReassemblyListener { assert(decryption_ignored || isNotDecryptable() || PCAPdroid.getInstance().isDecryptingPcap()); synchronized (this) { - if (HTTPReassembly.TODO_ENABLED && (update.payload_chunks != null)) { + if ((CaptureService.getHttpLog() != null) && (update.payload_chunks != null)) { int chunk_pos = payload_chunks.size(); for (PayloadChunk chunk: update.payload_chunks) { @@ -224,9 +224,13 @@ public class ConnectionDescriptor implements HTTPReassembly.ReassemblyListener { } } + // See HttpLog private void logHttpChunk(PayloadChunk chunk, int chunk_pos) { assert (chunk.type == PayloadChunk.ChunkType.HTTP); + if (CaptureService.getHttpLog() == null) + return; + if (mHttpReqReassembly == null) { // use a lightweight reassembly, without dumping the payload mHttpReqReassembly = new HTTPReassembly(true, this, false); @@ -371,7 +375,7 @@ public class ConnectionDescriptor implements HTTPReassembly.ReassemblyListener { } public synchronized void addPayloadChunkMitm(PayloadChunk chunk) { - if (HTTPReassembly.TODO_ENABLED && (chunk.type == PayloadChunk.ChunkType.HTTP)) + if (chunk.type == PayloadChunk.ChunkType.HTTP) logHttpChunk(chunk, payload_chunks.size()); payload_chunks.add(chunk);