diff --git a/src/main/jni/shadowsocks-libev b/src/main/jni/shadowsocks-libev index 48a063ef..68eaf3b1 160000 --- a/src/main/jni/shadowsocks-libev +++ b/src/main/jni/shadowsocks-libev @@ -1 +1 @@ -Subproject commit 48a063ef1e1a886e274a0fbb797e88358deca35b +Subproject commit 68eaf3b12d385381130c046547163b81e1807ba4 diff --git a/src/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala b/src/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala index 15e9a43c..ec4b890e 100644 --- a/src/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala +++ b/src/main/scala/com/github/shadowsocks/utils/TrafficMonitorThread.scala @@ -40,11 +40,11 @@ package com.github.shadowsocks.utils import java.io.{File, IOException} +import java.nio.{ByteBuffer, ByteOrder} import java.util.concurrent.Executors import android.net.{LocalServerSocket, LocalSocket, LocalSocketAddress} import android.util.Log -import com.github.shadowsocks.BaseService class TrafficMonitorThread() extends Thread { @@ -99,16 +99,10 @@ class TrafficMonitorThread() extends Thread { val input = socket.getInputStream val output = socket.getOutputStream - val buffer = new Array[Byte](256) - val size = input.read(buffer) - - val array = new Array[Byte](size) - Array.copy(buffer, 0, array, 0, size) - - val stat = new String(array, "UTF-8").split("\\|") - if (stat.length == 2) { - TrafficMonitor.update(stat(0).toLong, stat(1).toLong) - } + val buffer = new Array[Byte](16) + if (input.read(buffer) != 16) throw new IOException("Unexpected traffic stat length") + val stat = ByteBuffer.wrap(buffer).order(ByteOrder.LITTLE_ENDIAN) + TrafficMonitor.update(stat.getLong(0), stat.getLong(8)) output.write(0)