From b77a599e124026bc8034cf84c645aa73c5c4ebdc Mon Sep 17 00:00:00 2001 From: Max Lv Date: Tue, 29 Oct 2013 11:58:23 +0800 Subject: [PATCH] refine proxy list refresing --- build.sbt | 3 ++- .../com/github/shadowsocks/ShadowVpnService.scala | 14 ++++++++------ .../github/shadowsocks/ShadowsocksService.scala | 14 ++++++++------ src/main/scala/com/github/shadowsocks/Utils.scala | 4 +++- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/build.sbt b/build.sbt index 0ea3380c..9cc0a8e7 100644 --- a/build.sbt +++ b/build.sbt @@ -2,7 +2,8 @@ libraryDependencies ++= Seq( "com.google.android" % "support-v4" % "r12", "com.google.android" % "analytics" % "3.01", "com.google.android" % "admob" % "6.4.1", - "dnsjava" % "dnsjava" % "2.1.5" + "dnsjava" % "dnsjava" % "2.1.5", + "org.scalaj" %% "scalaj-http" % "0.3.10" ) libraryDependencies ++= Seq( diff --git a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala index 85b188f4..053a38d7 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala @@ -191,13 +191,15 @@ class ShadowVpnService extends VpnService { if (config.proxy == "198.199.101.152") { val container = getApplication.asInstanceOf[ShadowsocksApplication].tagContainer - if (container == null) { - notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) - stopSelf() - handler.sendEmptyMessageDelayed(MSG_CONNECT_FAIL, 500) - return - } else { + try { config = Config.getPublicConfig(container, config) + } catch { + case ex: Exception => { + notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) + stopSelf() + handler.sendEmptyMessageDelayed(MSG_CONNECT_FAIL, 500) + return + } } } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala index a6df5a2a..0f3235e2 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala @@ -227,13 +227,15 @@ class ShadowsocksService extends Service { if (config.proxy == "198.199.101.152") { val container = getApplication.asInstanceOf[ShadowsocksApplication].tagContainer - if (container == null) { - notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) - stopSelf() - handler.sendEmptyMessageDelayed(MSG_CONNECT_FAIL, 500) - return - } else { + try { config = Config.getPublicConfig(container, config) + } catch { + case ex: Exception => { + notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) + stopSelf() + handler.sendEmptyMessageDelayed(MSG_CONNECT_FAIL, 500) + return + } } } diff --git a/src/main/scala/com/github/shadowsocks/Utils.scala b/src/main/scala/com/github/shadowsocks/Utils.scala index 65832049..3a959406 100644 --- a/src/main/scala/com/github/shadowsocks/Utils.scala +++ b/src/main/scala/com/github/shadowsocks/Utils.scala @@ -53,6 +53,7 @@ import android.app.ActivityManager import android.os.Build import android.provider.Settings import scala.Some +import scalaj.http.{Http, HttpOptions} import com.google.tagmanager.Container object Config { @@ -117,7 +118,8 @@ object Config { } def getPublicConfig(container: Container, config: Config): Config = { - val list = container.getString("proxy_list") + val url = container.getString("proxy_url") + val list = Http(url).option(HttpOptions.connTimeout(1000)).option(HttpOptions.readTimeout(5000)).asString val proxies = util.Random.shuffle(list.split('|').toSeq).toSeq val proxy = proxies(0).split(':')