Commit 7c31f5e5 authored by Max Lv's avatar Max Lv

refine IPC handling

parent 809f4c13
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.github.shadowsocks"
android:versionCode="108"
android:versionName="2.7.0">
android:versionCode="109"
android:versionName="2.7.1">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
......
......@@ -276,20 +276,21 @@ include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c netutils.c json.c jconf.c
SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c netutils.c json.c jconf.c android.c
LOCAL_MODULE := ss-tunnel
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DUDPRELAY_LOCAL -DUDPRELAY_TUNNEL \
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H -DSSTUNNEL_JNI \
-I$(LOCAL_PATH)/libev/ \
-I$(LOCAL_PATH)/libev \
-I$(LOCAL_PATH)/libancillary \
-I$(LOCAL_PATH)/shadowsocks-libev/libudns \
-I$(LOCAL_PATH)/shadowsocks-libev/libcork/include \
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include \
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include/sodium \
-I$(LOCAL_PATH)/openssl/include
LOCAL_STATIC_LIBRARIES := libev libcrypto libsodium libcork libudns
LOCAL_STATIC_LIBRARIES := libev libcrypto libsodium libcork libudns libancillary
LOCAL_LDLIBS := -llog
......
Subproject commit 680007589c5aaafede801081e46b013b27c93939
Subproject commit 3d2b98016149ddf4c0c6912b16f56f2a56cb658b
......@@ -40,23 +40,33 @@
package com.github.shadowsocks
import java.io.{File, FileDescriptor, IOException}
import java.util.concurrent.Executors
import android.net.{LocalServerSocket, LocalSocket, LocalSocketAddress}
import android.util.Log
class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Runnable {
class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
val TAG = "ShadowsocksVpnService"
val PATH = "/data/data/com.github.shadowsocks/protect_path"
override def run(): Unit = {
var isRunning: Boolean = true
var serverSocket: LocalServerSocket = null
def stopThread() {
isRunning = false
if (serverSocket != null) {
serverSocket.close()
serverSocket = null
}
}
override def run(): Unit = {
try {
new File(PATH).delete()
} catch {
case _ => // ignore
case _: Exception => // ignore
}
try {
......@@ -71,20 +81,21 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Runnable {
return
}
Log.d(TAG, "start to accept connections")
val pool = Executors.newFixedThreadPool(4)
while (true) {
while (isRunning) {
try {
val socket = serverSocket.accept()
pool.execute(new Runnable {
override def run(){
try {
val input = socket.getInputStream
val output = socket.getOutputStream
input.read()
Log.d(TAG, "test")
val fds = socket.getAncillaryFileDescriptors
if (fds.length > 0) {
......@@ -95,18 +106,24 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Runnable {
ret = vpnService.protect(fd)
if (ret) {
socket.setFileDescriptorsForSend(fds)
output.write(0)
} else {
output.write(1)
}
input.close()
output.close()
}
socket.close()
} catch {
case e: Exception =>
Log.e(TAG, "Error when protect socket", e)
}
}})
} catch {
case e: IOException => Log.e(TAG, "Error when accept socket", e)
}
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment