diff --git a/build.sbt b/build.sbt index 726a9ef6..f958a9aa 100644 --- a/build.sbt +++ b/build.sbt @@ -20,6 +20,9 @@ proguardVersion := "5.3.2" proguardCache := Seq() proguardOptions ++= "-keep class com.github.shadowsocks.System { *; }" :: + "-keep class okhttp3.** { *; }" :: + "-keep interface okhttp3.** { *; }" :: + "-dontwarn okio.**" :: "-dontwarn com.google.android.gms.internal.**" :: "-dontwarn com.j256.ormlite.**" :: "-dontwarn org.xbill.**" :: @@ -37,7 +40,7 @@ libraryDependencies ++= "com.android.support" % "preference-v14" % "25.1.0" :: "com.evernote" % "android-job" % "1.1.3" :: "com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01" :: - "com.github.kevinsawicki" % "http-request" % "6.0" :: + "com.squareup.okhttp3" % "okhttp" % "3.5.0" :: "com.google.android.gms" % "play-services-ads" % "10.0.1" :: "com.google.android.gms" % "play-services-analytics" % "10.0.1" :: "com.google.android.gms" % "play-services-gcm" % "10.0.1" :: diff --git a/src/main/res/raw/gtm_default_container b/src/main/res/raw/gtm_default_container index fb2471d1..a17ed043 100644 Binary files a/src/main/res/raw/gtm_default_container and b/src/main/res/raw/gtm_default_container differ diff --git a/src/main/scala/com/github/shadowsocks/BaseService.scala b/src/main/scala/com/github/shadowsocks/BaseService.scala index a1b1de52..faa4ad18 100644 --- a/src/main/scala/com/github/shadowsocks/BaseService.scala +++ b/src/main/scala/com/github/shadowsocks/BaseService.scala @@ -21,7 +21,9 @@ package com.github.shadowsocks import java.io.IOException -import java.util.{Timer, TimerTask} +import java.util.concurrent.TimeUnit; +import java.util.{Arrays, List, Timer, TimerTask} +import java.net.InetAddress import android.app.Service import android.content.{BroadcastReceiver, Context, Intent, IntentFilter} @@ -30,12 +32,26 @@ import android.os.{Handler, RemoteCallbackList} import android.text.TextUtils import android.util.Log import android.widget.Toast -import com.github.kevinsawicki.http.HttpRequest import com.github.shadowsocks.ShadowsocksApplication.app import com.github.shadowsocks.aidl.{IShadowsocksService, IShadowsocksServiceCallback} import com.github.shadowsocks.database.Profile import com.github.shadowsocks.utils._ +import okhttp3.Dns +import okhttp3.FormBody +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response + +class CustomDns extends Dns { + override def lookup(hostname: String): List[InetAddress] = { + Utils.resolve(hostname, false) match { + case Some(ip) => Arrays.asList(InetAddress.getByName(ip)) + case _ => Dns.SYSTEM.lookup(hostname) + } + } +} + trait BaseService extends Service { @volatile private var state = State.STOPPED @@ -132,12 +148,24 @@ trait BaseService extends Service { val container = holder.getContainer val url = container.getString("proxy_url") val sig = Utils.getSignature(this) - val list = HttpRequest - .post(url) - .connectTimeout(2000) - .readTimeout(2000) - .send("sig="+sig) - .body + + val client = new OkHttpClient.Builder() + .dns(new CustomDns()) + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .build() + val requestBody = new FormBody.Builder() + .add("sig", sig) + .build() + val request = new Request.Builder() + .url(url) + .post(requestBody) + .build() + + val resposne = client.newCall(request).execute() + val list = resposne.body.string + val proxies = util.Random.shuffle(list.split('|').toSeq) val proxy = proxies.head.split(':') profile.host = proxy(0).trim