From c4e80e6fd7ba36c629019fc14cc06dc59c12296a Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sun, 31 May 2026 17:21:47 +0300 Subject: [PATCH] add traffic debug: PROXY RECV/SEND/FEED for full DATA path tracing on client --- src/tcp_proxy.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/tcp_proxy.c b/src/tcp_proxy.c index 1a5054fe..01ce3248 100644 --- a/src/tcp_proxy.c +++ b/src/tcp_proxy.c @@ -89,6 +89,7 @@ static int send_connect(struct proxy_conn* pc) { static int send_data(struct proxy_conn* pc, const uint8_t* data, uint16_t len) { if (!pc->connected) return -1; + DEBUG_INFO(DEBUG_CATEGORY_TRAFFIC, "PROXY SEND sid=%08x seq=%u len=%u", pc->stream_id, pc->send_seq, len); int ret = proxy_send_msg(pc->proxy->inst, pc->proxy->via_node_id, TCP_PROXY_SUBCMD_DATA, pc->stream_id, pc->send_seq, data, len); if (ret == 0) pc->send_seq++; @@ -162,6 +163,7 @@ static int tcp_proxy_handle_non_tcp(struct tcp_proxy* p, uint8_t* buf, size_t le static void proxy_feed_from_transport(struct proxy_conn *pc) { if (!pc->to_lwip || !pc->pcb) return; int sent_any = 0; + uint32_t q_pre = queue_entry_count(pc->to_lwip); while (1) { uint16_t space = tcp_sndbuf(pc->pcb); if (space < TCP_MSS / 2) break; @@ -178,7 +180,13 @@ static void proxy_feed_from_transport(struct proxy_conn *pc) { queue_resume_callback(pc->to_lwip); } queue_resume_callback(pc->to_lwip); - if (sent_any) tcp_output(pc->pcb); + if (sent_any) { + uint32_t unsent = 0; struct tcp_seg* s; + for (s = pc->pcb->unsent; s; s = s->next) unsent++; + DEBUG_DEBUG(DEBUG_CATEGORY_TRAFFIC, "PROXY FEED exit->client sid=%08x fed=%u q=%u->%u snd_wnd=%u cwnd=%u unsent=%u", + pc->stream_id, sent_any, q_pre, queue_entry_count(pc->to_lwip), pc->pcb->snd_wnd, pc->pcb->cwnd, unsent); + tcp_output(pc->pcb); + } } // ==================================================================== @@ -257,6 +265,7 @@ static err_t proxy_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t if (send_data(pc, data, len) < 0) DEBUG_ERROR(DEBUG_CATEGORY_SOCKET, "PROXY recv send_data failed sid=%08x len=%u", pc->stream_id, len); u_free(data); } else DEBUG_ERROR(DEBUG_CATEGORY_SOCKET, "PROXY recv malloc(%u) failed sid=%08x", len, pc->stream_id); + DEBUG_INFO(DEBUG_CATEGORY_TRAFFIC, "PROXY RECV client->exit sid=%08x len=%u connected=%d", pc->stream_id, len, pc->connected); } else { uint16_t new_len = pc->send_len + len; uint8_t *new_buf = u_realloc(pc->send_buf, new_len);