From 117ddf4f33a5caf0ef39bad350ab44de18c50830 Mon Sep 17 00:00:00 2001 From: H2NCH2COOH Date: Sat, 9 Apr 2016 23:06:51 +0800 Subject: [PATCH] Fix bug for ss-server when udp is sent with host not ip --- src/udprelay.c | 4 ++++ src/udprelay.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/udprelay.c b/src/udprelay.c index e5fce767..ee55b480 100644 --- a/src/udprelay.c +++ b/src/udprelay.c @@ -605,6 +605,8 @@ static void query_resolve_cb(struct sockaddr *addr, void *data) } if (remote_ctx != NULL) { + memcpy(&remote_ctx->dst_addr, addr, sizeof(struct sockaddr_storage)); + size_t addr_len = get_sockaddr_len(addr); int s = sendto(remote_ctx->fd, query_ctx->buf->array, query_ctx->buf->len, 0, addr, addr_len); @@ -1150,6 +1152,8 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents) if (dst_addr.ss_family != AF_INET && dst_addr.ss_family != AF_INET6) { need_query = 1; } + } else { + memcpy(&dst_addr,&remote_ctx->dst_addr,sizeof(struct sockaddr_storage)); } } else { if (dst_addr.ss_family == AF_INET || dst_addr.ss_family == AF_INET6) { diff --git a/src/udprelay.h b/src/udprelay.h index 7221db63..1fe4ad13 100644 --- a/src/udprelay.h +++ b/src/udprelay.h @@ -81,6 +81,9 @@ typedef struct remote_ctx { int addr_header_len; char addr_header[384]; struct sockaddr_storage src_addr; +#ifdef MODULE_REMOTE + struct sockaddr_storage dst_addr; +#endif struct server_ctx *server_ctx; } remote_ctx_t;