add traffic stat IPC calls

This commit is contained in:
Max Lv
2015-11-19 09:49:33 +08:00
parent f5160d4ecf
commit c9e0cb6698
3 changed files with 83 additions and 9 deletions
+53 -3
View File
@@ -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;
}