From c35a92a927195ba1ee10375c2bb9393184c25ca2 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sun, 14 Sep 2014 15:39:03 +0800 Subject: [PATCH] fix a crash --- build.sbt | 2 +- src/main/res/values-zh/strings.xml | 2 +- src/main/res/values/strings.xml | 2 +- .../com/github/shadowsocks/Shadowsocks.scala | 3 - .../shadowsocks/ShadowsocksNatService.scala | 66 ++++++++----------- .../shadowsocks/ShadowsocksVpnService.scala | 62 +++++++---------- 6 files changed, 53 insertions(+), 84 deletions(-) diff --git a/build.sbt b/build.sbt index f2fc7afb..0a17f489 100644 --- a/build.sbt +++ b/build.sbt @@ -28,7 +28,7 @@ libraryDependencies ++= Seq( ) libraryDependencies ++= Seq( - "de.keyboardsurfer.android.widget" % "crouton" % "1.8.1" exclude("com.google.android", "support-v4"), + "de.keyboardsurfer.android.widget" % "crouton" % "1.8.4" exclude("com.google.android", "support-v4"), "com.nostra13.universalimageloader" % "universal-image-loader" % "1.8.4", "com.j256.ormlite" % "ormlite-core" % "4.47", "com.j256.ormlite" % "ormlite-android" % "4.47" diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index 9eb0996f..479e8f46 100755 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -44,7 +44,7 @@ 后台服务已停止。 请检查你的网络状态后并重试。 停止服务 - 无法启动 VPN 服务:\"%s\"。看来和你的设备存在兼容性问题,请使用 Root 模式。 + 无法启动服务:\"%s\"。 确定 端口号应大于1024 端口号不能为空 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 2a45cdbb..c6ae0734 100755 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -57,7 +57,7 @@ Shadowsocks stopped. Please check your network status and try again. Stop the service - Unable to start VPN service: "%s". It seems to be a compatibility issue with your device. Please consider using ROOT mode instead. + Unable to start service: "%s". OK diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index f30e7d70..5026aae0 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -928,8 +928,6 @@ class Shadowsocks bgService.start(ConfigUtils.load(settings)) if (isVpnEnabled) { - val style = new Style.Builder().setBackgroundColorValue(Style.holoBlueLight).build() - val config = new Configuration.Builder().setDuration(Configuration.DURATION_LONG).build() changeSwitch(checked = false) } true @@ -995,7 +993,6 @@ class Shadowsocks changeSwitch(checked = false) Crouton.cancelAllCroutons() if (m != null) { - Crouton.cancelAllCroutons() val style = new Style.Builder().setBackgroundColorValue(Style.holoRedLight).build() val config = new Configuration.Builder() .setDuration(Configuration.DURATION_LONG) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index 28a402e2..86865a20 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -254,22 +254,6 @@ class ShadowsocksNatService extends Service with BaseService { startForegroundCompat(1, builder.build) } - def notifyAlert(title: String, info: String) { - val openIntent: Intent = new Intent(this, classOf[Shadowsocks]) - openIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - val contentIntent: PendingIntent = PendingIntent.getActivity(this, 0, openIntent, 0) - val builder: NotificationCompat.Builder = new NotificationCompat.Builder(this) - builder - .setSmallIcon(R.drawable.ic_stat_shadowsocks) - .setWhen(0) - .setTicker(title) - .setContentTitle(getString(R.string.app_name)) - .setContentText(info) - .setContentIntent(contentIntent) - .setAutoCancel(true) - notificationManager.notify(1, builder.build) - } - def onBind(intent: Intent): IBinder = { Log.d(TAG, "onBind") if (Action.SERVICE == intent.getAction) { @@ -492,44 +476,46 @@ class ShadowsocksNatService extends Service with BaseService { } spawn { + if (config.proxy == "198.199.101.152") { val holder = application.containerHolder try { config = ConfigUtils.getPublicConfig(getBaseContext, holder.getContainer, config) } catch { case ex: Exception => - notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) + changeState(State.STOPPED, getString(R.string.service_failed)) stopRunner() - changeState(State.STOPPED) - return + config = null } } - killProcesses() + if (config != null) { - var resolved: Boolean = false - if (!InetAddressUtils.isIPv4Address(config.proxy) && - !InetAddressUtils.isIPv6Address(config.proxy)) { - Utils.resolve(config.proxy, enableIPv6 = true) match { - case Some(a) => - config.proxy = a - resolved = true - case None => resolved = false + killProcesses() + + var resolved: Boolean = false + if (!InetAddressUtils.isIPv4Address(config.proxy) && + !InetAddressUtils.isIPv6Address(config.proxy)) { + Utils.resolve(config.proxy, enableIPv6 = true) match { + case Some(a) => + config.proxy = a + resolved = true + case None => resolved = false + } + } else { + resolved = true } - } else { - resolved = true - } - hasRedirectSupport = Utils.getHasRedirectSupport + hasRedirectSupport = Utils.getHasRedirectSupport - if (resolved && handleConnection) { - notifyForegroundAlert(getString(R.string.forward_success), - getString(R.string.service_running).format(config.profileName)) - changeState(State.CONNECTED) - } else { - notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) - stopRunner() - changeState(State.STOPPED) + if (resolved && handleConnection) { + notifyForegroundAlert(getString(R.string.forward_success), + getString(R.string.service_running).format(config.profileName)) + changeState(State.CONNECTED) + } else { + changeState(State.STOPPED, getString(R.string.service_failed)) + stopRunner() + } } } } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala index 4376164b..3c59b463 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala @@ -214,18 +214,6 @@ class ShadowsocksVpnService extends VpnService with BaseService { true } - def notifyAlert(title: String, info: String) { - val builder = new NotificationCompat.Builder(this) - builder - .setSmallIcon(R.drawable.ic_stat_shadowsocks) - .setWhen(0) - .setTicker(title) - .setContentTitle(getString(R.string.app_name)) - .setContentText(info) - .setAutoCancel(true) - notificationManager.notify(1, builder.build) - } - override def onBind(intent: Intent): IBinder = { val action = intent.getAction if (VpnService.SERVICE_INTERFACE == action) { @@ -297,36 +285,37 @@ class ShadowsocksVpnService extends VpnService with BaseService { config = ConfigUtils.getPublicConfig(getBaseContext, holder.getContainer, config) } catch { case ex: Exception => - notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) + changeState(State.STOPPED, getString(R.string.service_failed)) stopRunner() - changeState(State.STOPPED) - return + config = null } } - // reset the context - killProcesses() + if (config != null) { - // Resolve the server address - var resolved: Boolean = false - if (!InetAddressUtils.isIPv4Address(config.proxy) && - !InetAddressUtils.isIPv6Address(config.proxy)) { - Utils.resolve(config.proxy, enableIPv6 = true) match { - case Some(addr) => - config.proxy = addr - resolved = true - case None => resolved = false + // reset the context + killProcesses() + + // Resolve the server address + var resolved: Boolean = false + if (!InetAddressUtils.isIPv4Address(config.proxy) && + !InetAddressUtils.isIPv6Address(config.proxy)) { + Utils.resolve(config.proxy, enableIPv6 = true) match { + case Some(addr) => + config.proxy = addr + resolved = true + case None => resolved = false + } + } else { + resolved = true } - } else { - resolved = true - } - if (resolved && handleConnection) { - changeState(State.CONNECTED) - } else { - notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) - changeState(State.STOPPED) - stopRunner() + if (resolved && handleConnection) { + changeState(State.CONNECTED) + } else { + changeState(State.STOPPED, getString(R.string.service_failed)) + stopRunner() + } } } } @@ -362,9 +351,6 @@ class ShadowsocksVpnService extends VpnService with BaseService { unregisterReceiver(receiver) receiver = null } - - // reset notifications - notificationManager.cancel(1) } override def stopBackgroundService() {