Skip to content

Commit 16a1d65

Browse files
maxholmanclaude
andcommitted
fix(entry): track TCP session bytes in traffic statistics
copy_bidirectional_with_sizes returns exact byte counts but they were discarded, leaving bytes_in/bytes_out at zero for all TCP sessions. Pass SharedMetrics into run_tcp_session and increment after copy completes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent c06b5d5 commit 16a1d65

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

crates/core/src/entry/manager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ impl<D: Device + Send + 'static> ConnectionManager<D> {
135135
let transport = Arc::clone(&self.transport);
136136
let metrics = self.metrics.clone();
137137
tokio::spawn(async move {
138-
if let Err(e) = run_tcp_session(stream, transport).await {
138+
if let Err(e) = run_tcp_session(stream, transport, metrics.clone()).await {
139139
tracing::debug!("TCP session ended: {e}");
140140
}
141141
metrics.dec_active_connections();

crates/core/src/entry/session.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ use wallhack_entry_stack::async_stack::tcp_stream::TcpStream;
55
use wallhack_transport::{BiStream as _, ErasedTransport, TransportError};
66
use wallhack_wire::data::{ResponseStatus, SessionProtocol, TcpStreamHeader, TcpStreamStatus};
77

8-
use crate::transport::protocol::{AsyncProtoRead as _, AsyncProtoWrite as _};
8+
use crate::{
9+
control::metrics::SharedMetrics,
10+
transport::protocol::{AsyncProtoRead as _, AsyncProtoWrite as _},
11+
};
912

1013
#[derive(Debug, thiserror::Error)]
1114
pub enum Error {
@@ -19,6 +22,7 @@ pub enum Error {
1922
pub async fn run_tcp_session<D>(
2023
mut local: TcpStream<D>,
2124
transport: Arc<dyn ErasedTransport>,
25+
metrics: SharedMetrics,
2226
) -> Result<(), Error>
2327
where
2428
D: smoltcp::phy::Device + Send + 'static,
@@ -64,6 +68,8 @@ where
6468
match copy_bidirectional_with_sizes(&mut local, &mut remote, 64 * 1024, 64 * 1024).await {
6569
Ok((to_remote, to_local)) => {
6670
tracing::debug!(?target, to_remote, to_local, "copy_bidirectional completed");
71+
metrics.inc_bytes_out(to_remote);
72+
metrics.inc_bytes_in(to_local);
6773
}
6874
Err(e) => {
6975
tracing::debug!(?target, error = %e, "copy_bidirectional failed");

0 commit comments

Comments
 (0)