commit 4e5195e2690719938c1541568f2ca7e38f7cbab4
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2026-05-27T16:45:38Z |
| subject | Moved tcp-specific call back into tcp_route |
commit 4e5195e2690719938c1541568f2ca7e38f7cbab4
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2026-05-27T16:45:38Z
Moved tcp-specific call back into tcp_route
---
src/proxy_proto_v2.c | 34 ----------------------------------
src/proxy_proto_v2.h | 21 +++++----------------
src/tcp_route.c | 20 ++++++++++++++++----
3 files changed, 21 insertions(+), 54 deletions(-)
diff --git a/src/proxy_proto_v2.c b/src/proxy_proto_v2.c
index 3a60c99..864e544 100644
--- a/src/proxy_proto_v2.c
+++ b/src/proxy_proto_v2.c
@@ -1,5 +1,3 @@
-#include <event2/bufferevent.h>
-
#include <errno.h>
#include <stdint.h>
#include <string.h>
@@ -126,35 +124,3 @@ int proxy_v2_build(
return -EAFNOSUPPORT;
}
}
-
-int proxy_v2_write_bufferevent(
- struct bufferevent *bev,
- const struct sockaddr *src,
- socklen_t src_len,
- const struct sockaddr *dst,
- socklen_t dst_len,
- int sock_type
-) {
- unsigned char hdr[256];
- size_t hdr_len = 0;
-
- int rc = proxy_v2_build(
- hdr,
- sizeof(hdr),
- src,
- src_len,
- dst,
- dst_len,
- sock_type,
- &hdr_len
- );
- if (rc != 0) {
- return rc;
- }
-
- if (bufferevent_write(bev, hdr, hdr_len) < 0) {
- return -EIO;
- }
-
- return 0;
-}
diff --git a/src/proxy_proto_v2.h b/src/proxy_proto_v2.h
index 9a2e579..1ad8be6 100644
--- a/src/proxy_proto_v2.h
+++ b/src/proxy_proto_v2.h
@@ -5,14 +5,12 @@
#define PP2_VERSION_CMD_PROXY 0x21
-#define PP2_FAM_INET 0x10
-#define PP2_FAM_INET6 0x20
-#define PP2_FAM_UNIX 0x30
+#define PP2_FAM_INET 0x10
+#define PP2_FAM_INET6 0x20
+#define PP2_FAM_UNIX 0x30
-#define PP2_TRANS_STREAM 0x01
-#define PP2_TRANS_DGRAM 0x02
-
-struct bufferevent;
+#define PP2_TRANS_STREAM 0x01
+#define PP2_TRANS_DGRAM 0x02
int proxy_v2_build(
unsigned char *buf,
@@ -25,13 +23,4 @@ int proxy_v2_build(
size_t *out_len
);
-int proxy_v2_write_bufferevent(
- struct bufferevent *bev,
- const struct sockaddr *src,
- socklen_t src_len,
- const struct sockaddr *dst,
- socklen_t dst_len,
- int sock_type
-);
-
#endif
diff --git a/src/tcp_route.c b/src/tcp_route.c
index 5394c46..0ac1451 100644
--- a/src/tcp_route.c
+++ b/src/tcp_route.c
@@ -323,15 +323,27 @@ static void worker_adopt_client_fd(struct worker *w, struct accepted_client *ac)
return;
}
- int rc = proxy_v2_write_bufferevent(
- conn->upstream,
+ unsigned char hdr[256];
+ size_t hdr_len = 0;
+
+ int rc = proxy_v2_build(
+ hdr,
+ sizeof(hdr),
(const struct sockaddr *)&ac->peer_addr,
ac->peer_addr_len,
- (struct sockaddr *)&local_addr,
+ (const struct sockaddr *)&local_addr,
local_len,
- SOCK_STREAM
+ SOCK_STREAM,
+ &hdr_len
);
+ if (rc == 0) {
+ rc = bufferevent_write(conn->upstream, hdr, hdr_len);
+ if (rc < 0) {
+ rc = -EIO;
+ }
+ }
+
if (rc < 0) {
LOG_ERROR("failed to write PROXY v2 header", "err", _LOGV(strerror(-rc)));
free_conn(conn);