Browse Source

Fix the traffic counter in UDP mode

pull/946/head
Max Lv 8 years ago
parent
commit
a0151422eb
2 changed files with 16 additions and 3 deletions
  1. 1
      src/local.c
  2. 18
      src/udprelay.c

1
src/local.c

@ -737,7 +737,6 @@ stat_update_cb(struct ev_loop *loop)
last = now; last = now;
} }
} }
#endif #endif
static void static void

18
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 void close_and_free_remote(EV_P_ remote_ctx_t *ctx);
static remote_ctx_t *new_remote(int fd, server_ctx_t *server_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; extern int vpn;
#endif
extern int verbose;
#ifdef MODULE_REMOTE #ifdef MODULE_REMOTE
extern uint64_t tx; extern uint64_t tx;
extern uint64_t rx; 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); memmove(buf->array + 3, buf->array, buf->len);
memset(buf->array, 0, 3); memset(buf->array, 0, 3);
buf->len += 3; buf->len += 3;
#ifdef ANDROID
rx += buf->len;
#endif
#endif #endif
#endif #endif
@ -750,6 +758,7 @@ remote_recv_cb(EV_P_ ev_io *w, int revents)
// drop the packet silently // drop the packet silently
goto CLEAN_UP; goto CLEAN_UP;
} }
#endif #endif
if (buf->len > packet_size) { 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); size_t remote_src_addr_len = get_sockaddr_len((struct sockaddr *)&remote_ctx->src_addr);
#ifdef MODULE_REDIR #ifdef MODULE_REDIR
size_t remote_dst_addr_len = get_sockaddr_len((struct sockaddr *)&dst_addr); 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); 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); close(src_fd);
#else #else
int s = sendto(server_ctx->fd, buf->array, buf->len, 0, int s = sendto(server_ctx->fd, buf->array, buf->len, 0,
(struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len); (struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len);
if (s == -1) { if (s == -1) {
ERROR("[udp] remote_recv_sendto"); ERROR("[udp] remote_recv_sendto");
goto CLEAN_UP; goto CLEAN_UP;
} }
#endif #endif
// handle the UDP packet successfully, // handle the UDP packet successfully,
@ -885,7 +897,6 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
} }
#ifdef MODULE_REMOTE #ifdef MODULE_REMOTE
tx += buf->len; tx += buf->len;
int err = ss_decrypt_all(buf, server_ctx->method, server_ctx->auth, buf_size); 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 #ifdef MODULE_LOCAL
#if !defined(MODULE_TUNNEL) && !defined(MODULE_REDIR) #if !defined(MODULE_TUNNEL) && !defined(MODULE_REDIR)
#ifdef ANDROID
tx += buf->len;
#endif
uint8_t frag = *(uint8_t *)(buf->array + 2); uint8_t frag = *(uint8_t *)(buf->array + 2);
offset += 3; offset += 3;
#endif #endif

Loading…
Cancel
Save