Skip to content

Commit 7abac61

Browse files
committed
1 parent 31bb108 commit 7abac61

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

src/udprelay.c

+4-7
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ hash_key(const int af, const struct sockaddr_storage *addr)
192192
return key;
193193
}
194194

195-
#if defined(MODULE_REDIR) || defined(MODULE_REMOTE)
195+
#if defined(MODULE_REDIR)
196196
static int
197197
construct_udprelay_header(const struct sockaddr_storage *in_addr,
198198
char *addr_header)
@@ -497,6 +497,7 @@ new_remote(int fd, server_ctx_t *server_ctx)
497497

498498
ctx->fd = fd;
499499
ctx->server_ctx = server_ctx;
500+
ctx->af = AF_UNSPEC;
500501

501502
ev_io_init(&ctx->io, remote_recv_cb, fd, EV_READ);
502503
ev_timer_init(&ctx->watcher, remote_timeout_cb, server_ctx->timeout,
@@ -755,15 +756,9 @@ remote_recv_cb(EV_P_ ev_io *w, int revents)
755756

756757
rx += buf->len;
757758

758-
char addr_header_buf[512];
759759
char *addr_header = remote_ctx->addr_header;
760760
int addr_header_len = remote_ctx->addr_header_len;
761761

762-
if (remote_ctx->af == AF_INET || remote_ctx->af == AF_INET6) {
763-
addr_header_len = construct_udprelay_header(&src_addr, addr_header_buf);
764-
addr_header = addr_header_buf;
765-
}
766-
767762
// Construct packet
768763
brealloc(buf, buf->len + addr_header_len, buf_size);
769764
memmove(buf->data + addr_header_len, buf->data, buf->len);
@@ -1215,6 +1210,8 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
12151210
// detect destination mismatch
12161211
if (remote_ctx->addr_header_len != addr_header_len
12171212
|| memcmp(addr_header, remote_ctx->addr_header, addr_header_len) != 0) {
1213+
remote_ctx->addr_header_len = addr_header_len;
1214+
memcpy(remote_ctx->addr_header, addr_header, addr_header_len);
12181215
if (dst_addr.ss_family != AF_INET && dst_addr.ss_family != AF_INET6) {
12191216
need_query = 1;
12201217
}

0 commit comments

Comments
 (0)