mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-11-03 16:45:53 +00:00
add traffic stat IPC calls
This commit is contained in:
+53
-3
@@ -55,10 +55,10 @@ int protect_socket(int fd)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Set timeout to 100us
|
||||
// Set timeout to 1s
|
||||
struct timeval tv;
|
||||
tv.tv_sec = 1; /* 0 Secs Timeout */
|
||||
tv.tv_usec = 0; // Not init'ing this can cause strange errors
|
||||
tv.tv_sec = 1;
|
||||
tv.tv_usec = 0;
|
||||
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval));
|
||||
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval));
|
||||
|
||||
@@ -92,3 +92,53 @@ int protect_socket(int fd)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int send_traffic_stat(uint64_t tx, uint64_t rx)
|
||||
{
|
||||
int sock;
|
||||
struct sockaddr_un addr;
|
||||
|
||||
if ( (sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
|
||||
LOGE("[android] socket() failed: %s (socket fd = %d)\n", strerror(errno), sock);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Set timeout to 1s
|
||||
struct timeval tv;
|
||||
tv.tv_sec = 1;
|
||||
tv.tv_usec = 0;
|
||||
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval));
|
||||
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval));
|
||||
|
||||
const char path[] = "/data/data/com.github.shadowsocks/stat_path";
|
||||
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
addr.sun_family = AF_UNIX;
|
||||
strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1);
|
||||
|
||||
if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
|
||||
LOGE("[android] connect() failed: %s (socket fd = %d)\n", strerror(errno), sock);
|
||||
close(sock);
|
||||
return -1;
|
||||
}
|
||||
|
||||
char stat[256] = {0};
|
||||
snprintf(stat, 256, "%" PRIu64 "|%" PRIu64, tx, rx);
|
||||
size_t len = strlen(stat);
|
||||
|
||||
if (send(sock, stat, len, 0) == -1) {
|
||||
ERROR("[android] send");
|
||||
close(sock);
|
||||
return -1;
|
||||
}
|
||||
|
||||
char ret = 0;
|
||||
|
||||
if (recv(sock, &ret, 1, 0) == -1) {
|
||||
ERROR("[android] recv");
|
||||
close(sock);
|
||||
return -1;
|
||||
}
|
||||
|
||||
close(sock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user