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;
}
}
#endif
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 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

Loading…
Cancel
Save