From b0f3d91d5df32ff48685e7c8ded9bea0180f5074 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Thu, 3 Dec 2015 15:15:29 +0800 Subject: [PATCH 1/2] update shadowsocks-libev --- src/main/jni/Android.mk | 4 ++-- src/main/jni/shadowsocks-libev | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/jni/Android.mk b/src/main/jni/Android.mk index 2c848f4e..547e785c 100755 --- a/src/main/jni/Android.mk +++ b/src/main/jni/Android.mk @@ -254,7 +254,7 @@ SHADOWSOCKS_SOURCES := local.c cache.c udprelay.c encrypt.c utils.c netutils.c j LOCAL_MODULE := ss-local LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES)) -LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DUDPRELAY_LOCAL \ +LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_LOCAL \ -DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H \ -I$(LOCAL_PATH)/libev \ -I$(LOCAL_PATH)/libancillary \ @@ -281,7 +281,7 @@ SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c netutils.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 \ +LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_TUNNEL \ -DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H -DSSTUNNEL_JNI \ -I$(LOCAL_PATH)/libev \ -I$(LOCAL_PATH)/libancillary \ diff --git a/src/main/jni/shadowsocks-libev b/src/main/jni/shadowsocks-libev index c5155e4a..eeac81e8 160000 --- a/src/main/jni/shadowsocks-libev +++ b/src/main/jni/shadowsocks-libev @@ -1 +1 @@ -Subproject commit c5155e4a59c1965203b2f894c4f3c06358fa3a65 +Subproject commit eeac81e8faa225b381223559811e1e477a195d2c From d2a10272294990816cde2bea8a2cccb23b0dd2b4 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sat, 5 Dec 2015 17:32:56 +0800 Subject: [PATCH 2/2] Fix an issue of attach/deattach service when switching NAT mode --- .../github/shadowsocks/ServiceBoundContext.scala | 14 +++++++++++--- .../github/shadowsocks/ShadowsocksSettings.scala | 11 +++++++---- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala b/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala index 1dc247bb..e6cbbeaf 100644 --- a/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala +++ b/src/main/scala/com/github/shadowsocks/ServiceBoundContext.scala @@ -9,7 +9,8 @@ import com.github.shadowsocks.utils.Action * @author Mygod */ trait ServiceBoundContext extends Context { - val connection = new ServiceConnection { + + class ShadowsocksServiceConnection extends ServiceConnection { override def onServiceConnected(name: ComponentName, service: IBinder) { bgService = IShadowsocksService.Stub.asInterface(service) if (callback != null) try { @@ -37,6 +38,7 @@ trait ServiceBoundContext extends Context { def onServiceDisconnected() = () private var callback: IShadowsocksServiceCallback.Stub = _ + private var connection: ShadowsocksServiceConnection = _ // Variables var bgService: IShadowsocksService = _ @@ -46,9 +48,13 @@ trait ServiceBoundContext extends Context { if (bgService == null) { val s = if (ShadowsocksApplication.isVpnEnabled) classOf[ShadowsocksVpnService] else classOf[ShadowsocksNatService] + val intent = new Intent(this, s) intent.setAction(Action.SERVICE) + + connection = new ShadowsocksServiceConnection() bindService(intent, connection, Context.BIND_AUTO_CREATE) + startService(new Intent(this, s)) } } @@ -62,8 +68,10 @@ trait ServiceBoundContext extends Context { case ignored: RemoteException => // Nothing } } - unbindService(connection) - bgService = null + if (connection != null) { + unbindService(connection) + connection = null + } } } } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index 0831eee7..684fc0ed 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -73,10 +73,13 @@ class ShadowsocksSettings extends PreferenceFragment with OnSharedPreferenceChan } def onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) = key match { - case Key.isNAT => if (ShadowsocksApplication.isRoot) activity.handler.post(() => { - activity.deattachService() - activity.attachService() - }) + case Key.isNAT => if (ShadowsocksApplication.isRoot && activity != null) { + activity.handler.post(() => { + val intent = activity.getIntent + activity.finish() + startActivity(intent) + }) + } case _ => } }