penguin/tinyproxy

An L4 proxy designed to act as a tiny transparent shim

commit fe24bed4c712eaf1671850ed04504079acd33097

author斟酌 鵬兄 <tgckpg@gmail.com>
date2026-05-30T18:41:31Z
subjectRemoved the duplicated accepted_client struct
commit fe24bed4c712eaf1671850ed04504079acd33097
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2026-05-30T18:41:31Z

    Removed the duplicated accepted_client struct
---
 src/stream_conn.c     | 16 +++++++---------
 src/stream_conn.h     |  6 +++++-
 src/stream_listener.c | 34 +++++++++++++++++++++-------------
 src/stream_route.h    | 13 -------------
 src/worker.h          |  3 +--
 5 files changed, 34 insertions(+), 38 deletions(-)

diff --git a/src/stream_conn.c b/src/stream_conn.c
index eab4f13..464c247 100644
--- a/src/stream_conn.c
+++ b/src/stream_conn.c
@@ -407,15 +407,13 @@ void worker_adopt_client_fd(struct worker *w, struct worker_stream_client_msg *a
 	bufferevent_enable(conn->upstream, EV_READ | EV_WRITE);
 }
 
-int dispatch_client_fd(struct worker *w, struct accepted_client *ac)
+int dispatch_client_fd(struct worker *w,
+	const struct route *route,
+	evutil_socket_t fd,
+	const struct sockaddr *addr,
+	socklen_t addr_len)
 {
-	return worker_enqueue_stream_client(
-		w,
-		ac->route,
-		ac->fd,
-		(const struct sockaddr *)&ac->peer_addr,
-		ac->peer_addr_len
-	);
+	return worker_enqueue_stream_client(w, route, fd, addr, addr_len);
 }
 
 #ifdef FUZZ
@@ -436,7 +434,7 @@ int stream_route_adopt_client_for_fuzz(
 	w.base = base;
 	w.id = 0;
 
-	struct accepted_client ac;
+	struct worker_stream_client_msg ac;
 	memset(&ac, 0, sizeof(ac));
 
 	ac.fd = client_fd;
diff --git a/src/stream_conn.h b/src/stream_conn.h
index 275761b..25b1673 100644
--- a/src/stream_conn.h
+++ b/src/stream_conn.h
@@ -5,7 +5,11 @@
 
 struct worker_stream_client_msg;
 
-int dispatch_client_fd(struct worker *w, struct accepted_client *ac);
+int dispatch_client_fd(struct worker *w,
+	const struct route *route,
+	evutil_socket_t fd,
+	const struct sockaddr *addr,
+	socklen_t addr_len);
 void free_conn(conn_t *conn);
 
 void set_client_idle_timeout(conn_t *conn, const struct route *r);
diff --git a/src/stream_listener.c b/src/stream_listener.c
index 1aa4255..d7e0732 100644
--- a/src/stream_listener.c
+++ b/src/stream_listener.c
@@ -16,31 +16,39 @@ static void accept_cb(
 	int socklen,
 	void *arg
 ) {
+	struct stream_route_ctx *ctx = arg;
+	struct worker *w;
+	int rc;
+
 	(void)listener;
 
-	struct stream_route_ctx *ctx = arg;
-	struct accepted_client ac = {
-		.fd = client_fd,
-		.route = ctx->route,
-	};
-
-	if (addr != NULL && socklen > 0 && (size_t)socklen <= sizeof(ac.peer_addr)) {
-		memcpy(&ac.peer_addr, addr, (size_t)socklen);
-		ac.peer_addr_len = (socklen_t)socklen;
-	} else {
-		LOG_ERROR("invalid accepted client address", "socklen", _LOGV(socklen));
+	if (addr == NULL || socklen <= 0 || (size_t)socklen > sizeof(struct sockaddr_storage)) {
+		LOG_ERROR("invalid accepted client address",
+			"socklen", _LOGV(socklen)
+		);
 		evutil_closesocket(client_fd);
 		return;
 	}
 
-	struct worker *w = worker_pool_next(ctx->worker_pool);
+	w = worker_pool_next(ctx->worker_pool);
 	if (!w) {
 		LOG_ERROR("no worker available", "socklen", _LOGV(socklen));
 		evutil_closesocket(client_fd);
 		return;
 	}
 
-	if (dispatch_client_fd(w, &ac) != 0) {
+	rc = dispatch_client_fd(
+		w,
+		ctx->route,
+		client_fd,
+		addr,
+		(socklen_t)socklen
+	);
+	if (rc != 0) {
+		LOG_ERROR("failed to dispatch accepted client",
+			"worker", _LOGV(w->id),
+			"err", _LOGV(rc)
+		);
 		evutil_closesocket(client_fd);
 	}
 }
diff --git a/src/stream_route.h b/src/stream_route.h
index f9d809e..747ed14 100644
--- a/src/stream_route.h
+++ b/src/stream_route.h
@@ -33,19 +33,6 @@ typedef struct conn_s {
 	bool close_client_after_drain;
 } conn_t;
 
-struct accepted_client {
-	const struct route *route;
-	evutil_socket_t fd;
-
-	struct sockaddr_storage peer_addr;
-	socklen_t peer_addr_len;
-};
-
-struct accepted_client_node {
-	struct accepted_client client;
-	struct accepted_client_node *next;
-};
-
 int start_stream_route(
 		struct event_base *accept_base,
 		struct worker_pool *wpool,
diff --git a/src/worker.h b/src/worker.h
index 6742d9f..68a5ce0 100644
--- a/src/worker.h
+++ b/src/worker.h
@@ -11,8 +11,6 @@
 #include "compat.h"
 #include "route.h"
 
-struct accept_client_node;
-
 struct worker {
 	unsigned int id;
 
@@ -48,6 +46,7 @@ struct worker_msg {
 
 	union {
 		struct worker_stream_client_msg stream_client;
+//		struct worker_datagram_packet_msg datagram_packet;
 	} payload;
 };