From 086c9de7800751e1f53f6e3015e29ed93d42f8a2 Mon Sep 17 00:00:00 2001 From: clowwindy Date: Sat, 19 Apr 2014 20:46:12 +0800 Subject: [PATCH 1/2] fix compatibility issue --- src/udprelay.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/udprelay.c b/src/udprelay.c index 826224dd..0eb5bbe7 100644 --- a/src/udprelay.c +++ b/src/udprelay.c @@ -515,11 +515,15 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) } int len = parse_udprealy_header(buf, buf_len, NULL, NULL); - if (len == 0 || len != addr_header_len) + if (len == 0) { + LOGD("[udp] Error in parse header"); // error in parse header goto CLEAN_UP; } + // server may return using a different address type other than the type we + // have used during sending + addr_header_len = len; #ifdef UDPRELAY_TUNNEL // Construct packet From 81159f987112489304546e09abf1d08dfaf453c5 Mon Sep 17 00:00:00 2001 From: clowwindy Date: Sat, 19 Apr 2014 20:57:51 +0800 Subject: [PATCH 2/2] make compiler stop complaining --- src/udprelay.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/udprelay.c b/src/udprelay.c index 0eb5bbe7..8e3618ae 100644 --- a/src/udprelay.c +++ b/src/udprelay.c @@ -486,7 +486,6 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) struct sockaddr src_addr; socklen_t src_addr_len = sizeof(src_addr); - unsigned int addr_header_len = remote_ctx->addr_header_len; char *buf = malloc(BUF_SIZE); // recv @@ -523,12 +522,11 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) } // server may return using a different address type other than the type we // have used during sending - addr_header_len = len; #ifdef UDPRELAY_TUNNEL // Construct packet - buf_len -= addr_header_len; - memmove(buf, buf + addr_header_len, buf_len); + buf_len -= len; + memmove(buf, buf + len, buf_len); #else // Construct packet char *tmpbuf = malloc(buf_len + 3); @@ -541,6 +539,9 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) #endif #ifdef UDPRELAY_REMOTE + + unsigned int addr_header_len = remote_ctx->addr_header_len; + // Construct packet char *tmpbuf = malloc(buf_len + addr_header_len); memcpy(tmpbuf, remote_ctx->addr_header, addr_header_len);