From a0151422eb49b0909fb9f55c76039d467a212ac2 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sat, 12 Nov 2016 09:58:06 +0800 Subject: [PATCH] Fix the traffic counter in UDP mode --- src/local.c | 1 - src/udprelay.c | 18 ++++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/local.c b/src/local.c index cebb9513..0a895966 100644 --- a/src/local.c +++ b/src/local.c @@ -737,7 +737,6 @@ stat_update_cb(struct ev_loop *loop) last = now; } } - #endif static void diff --git a/src/udprelay.c b/src/udprelay.c index 397958c1..b10f0cbb 100644 --- a/src/udprelay.c +++ b/src/udprelay.c @@ -91,8 +91,13 @@ static void query_resolve_cb(struct sockaddr *addr, void *data); static void close_and_free_remote(EV_P_ remote_ctx_t *ctx); static remote_ctx_t *new_remote(int fd, server_ctx_t *server_ctx); -extern int verbose; +#ifdef ANDROID +extern uint64_t tx; +extern uint64_t rx; extern int vpn; +#endif + +extern int verbose; #ifdef MODULE_REMOTE extern uint64_t tx; extern uint64_t rx; @@ -723,6 +728,9 @@ remote_recv_cb(EV_P_ ev_io *w, int revents) memmove(buf->array + 3, buf->array, buf->len); memset(buf->array, 0, 3); buf->len += 3; +#ifdef ANDROID + rx += buf->len; +#endif #endif #endif @@ -750,6 +758,7 @@ remote_recv_cb(EV_P_ ev_io *w, int revents) // drop the packet silently goto CLEAN_UP; } + #endif if (buf->len > packet_size) { @@ -760,6 +769,7 @@ remote_recv_cb(EV_P_ ev_io *w, int revents) size_t remote_src_addr_len = get_sockaddr_len((struct sockaddr *)&remote_ctx->src_addr); #ifdef MODULE_REDIR + size_t remote_dst_addr_len = get_sockaddr_len((struct sockaddr *)&dst_addr); int src_fd = socket(remote_ctx->src_addr.ss_family, SOCK_DGRAM, 0); @@ -799,12 +809,14 @@ remote_recv_cb(EV_P_ ev_io *w, int revents) close(src_fd); #else + int s = sendto(server_ctx->fd, buf->array, buf->len, 0, (struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len); if (s == -1) { ERROR("[udp] remote_recv_sendto"); goto CLEAN_UP; } + #endif // handle the UDP packet successfully, @@ -885,7 +897,6 @@ server_recv_cb(EV_P_ ev_io *w, int revents) } #ifdef MODULE_REMOTE - tx += buf->len; int err = ss_decrypt_all(buf, server_ctx->method, server_ctx->auth, buf_size); @@ -897,6 +908,9 @@ server_recv_cb(EV_P_ ev_io *w, int revents) #ifdef MODULE_LOCAL #if !defined(MODULE_TUNNEL) && !defined(MODULE_REDIR) +#ifdef ANDROID + tx += buf->len; +#endif uint8_t frag = *(uint8_t *)(buf->array + 2); offset += 3; #endif