diff --git a/.travis.yml b/.travis.yml
index 817a3f03..226a30d8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -35,7 +35,7 @@ after_success:
- sbt deploy
env:
global:
- - "ARTIFACTS_AWS_REGION=ap-northeast-1"
- - "ARTIFACTS_S3_BUCKET=travis-ci"
+ - "ARTIFACTS_AWS_REGION=us-east-1"
+ - "ARTIFACTS_S3_BUCKET=travis-nightly"
- secure: "GkAdnMh07id2VKhpCW16lE73A0LK2Jsk3hzkFvdx76JKW8FjLgaimLJ2T/+i\nxFfDw8XBinLE09dqg8JxSNS6JbLHLcav8P3yJIlzFh1NqfJABU9U4I8atb6P\nITSdSo9nb3LX6sB8SOU0nqXb5U+nj7jiekQqiBhmEmu6iDmMtfU="
- secure: "eCh5BjCFccp+sB/FIrjsmxJU4475D4qiWvDV++khcIHLel6lgUjDX18ImBlJ\n+IdiCKxvR6EpRDV1Cs4gJ2jZEAV0PbojQMoQOXbs1FLggM8RRq/Re1qWQFq7\nWkBRjjr8w8ddjJZHRo459cTUvgvD7krhp07coabAnEahDaGWSUo="
diff --git a/build-ndk.sh b/build-ndk.sh
index 19d230a8..a8c3608e 100755
--- a/build-ndk.sh
+++ b/build-ndk.sh
@@ -5,7 +5,7 @@ ndk-build
mkdir -p assets/armeabi
mkdir -p assets/armeabi-v7a
mkdir -p assets/x86
-for app in iptables pdnsd redsocks shadowsocks tun2socks
+for app in iptables pdnsd redsocks ss-local ss-tunnel tun2socks
do
mv libs/armeabi/$app assets/armeabi/
mv libs/armeabi-v7a/$app assets/armeabi-v7a/
diff --git a/project/Build.scala b/project/Build.scala
index 3d6450d9..6ba7fb5b 100644
--- a/project/Build.scala
+++ b/project/Build.scala
@@ -5,8 +5,8 @@ import sbtandroid._
import sbtandroid.AndroidPlugin._
object App {
- val version = "2.1.1"
- val versionCode = 62
+ val version = "2.1.2"
+ val versionCode = 63
}
object General {
diff --git a/src/main/assets/pages/about.html b/src/main/assets/pages/about.html
index d22cdf3b..f64fac6e 100644
--- a/src/main/assets/pages/about.html
+++ b/src/main/assets/pages/about.html
@@ -274,7 +274,7 @@ img {
A Shadowsocks client for Android, written in Scala.
-Copyright (C) 2013 Max Lv max.c.lv@gmail.com
+Copyright (C) 2014 Max Lv max.c.lv@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
diff --git a/src/main/java/com/github/shadowsocks/aidl/Config.java b/src/main/java/com/github/shadowsocks/aidl/Config.java
index cac52c3c..f0afc982 100644
--- a/src/main/java/com/github/shadowsocks/aidl/Config.java
+++ b/src/main/java/com/github/shadowsocks/aidl/Config.java
@@ -9,6 +9,7 @@ public class Config implements Parcelable {
public boolean isGFWList = true;
public boolean isBypassApps = false;
public boolean isTrafficStat = false;
+ public boolean isUdpDns = false;
public String profileName = "Untitled";
public String proxy = "127.0.0.1";
@@ -20,24 +21,24 @@ public class Config implements Parcelable {
public int remotePort = 1984;
public int localPort = 1080;
- public static final Parcelable.Creator CREATOR = new
- Parcelable.Creator() {
- public Config createFromParcel(Parcel in) {
- return new Config(in);
- }
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
+ public Config createFromParcel(Parcel in) {
+ return new Config(in);
+ }
- public Config[] newArray(int size) {
- return new Config[size];
- }
- };
+ public Config[] newArray(int size) {
+ return new Config[size];
+ }
+ };
public Config(boolean isGlobalProxy, boolean isGFWList, boolean isBypassApps,
- boolean isTrafficStat, String profileName, String proxy, String sitekey, String encMethod,
- String proxiedAppString, int remotePort, int localPort) {
+ boolean isTrafficStat, boolean isUdpDns, String profileName, String proxy, String sitekey,
+ String encMethod, String proxiedAppString, int remotePort, int localPort) {
this.isGlobalProxy = isGlobalProxy;
this.isGFWList = isGFWList;
this.isBypassApps = isBypassApps;
this.isTrafficStat = isTrafficStat;
+ this.isUdpDns = isUdpDns;
this.profileName = profileName;
this.proxy = proxy;
this.sitekey = sitekey;
@@ -56,6 +57,7 @@ public class Config implements Parcelable {
isGFWList = in.readInt() == 1;
isBypassApps = in.readInt() == 1;
isTrafficStat = in.readInt() == 1;
+ isUdpDns = in.readInt() == 1;
profileName = in.readString();
proxy = in.readString();
sitekey = in.readString();
@@ -70,10 +72,11 @@ public class Config implements Parcelable {
}
@Override public void writeToParcel(Parcel out, int flags) {
- out.writeInt(isGlobalProxy ? 1: 0);
- out.writeInt(isGFWList ? 1: 0);
- out.writeInt(isBypassApps ? 1: 0);
- out.writeInt(isTrafficStat ? 1: 0);
+ out.writeInt(isGlobalProxy ? 1 : 0);
+ out.writeInt(isGFWList ? 1 : 0);
+ out.writeInt(isBypassApps ? 1 : 0);
+ out.writeInt(isTrafficStat ? 1 : 0);
+ out.writeInt(isUdpDns ? 1 : 0);
out.writeString(profileName);
out.writeString(proxy);
out.writeString(sitekey);
@@ -81,6 +84,5 @@ public class Config implements Parcelable {
out.writeString(proxiedAppString);
out.writeInt(remotePort);
out.writeInt(localPort);
-
}
}
diff --git a/src/main/java/com/github/shadowsocks/aidl/IShadowsocksService.aidl b/src/main/java/com/github/shadowsocks/aidl/IShadowsocksService.aidl
index 66b2f820..70667310 100644
--- a/src/main/java/com/github/shadowsocks/aidl/IShadowsocksService.aidl
+++ b/src/main/java/com/github/shadowsocks/aidl/IShadowsocksService.aidl
@@ -7,8 +7,8 @@ interface IShadowsocksService {
int getMode();
int getState();
- void registerCallback(IShadowsocksServiceCallback cb);
- void unregisterCallback(IShadowsocksServiceCallback cb);
+ oneway void registerCallback(IShadowsocksServiceCallback cb);
+ oneway void unregisterCallback(IShadowsocksServiceCallback cb);
oneway void start(in Config config);
oneway void stop();
diff --git a/src/main/java/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl b/src/main/java/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl
index 00ef9b63..d079a20c 100644
--- a/src/main/java/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl
+++ b/src/main/java/com/github/shadowsocks/aidl/IShadowsocksServiceCallback.aidl
@@ -1,5 +1,5 @@
package com.github.shadowsocks.aidl;
interface IShadowsocksServiceCallback {
- void stateChanged(int state, String msg);
-}
\ No newline at end of file
+ oneway void stateChanged(int state, String msg);
+}
diff --git a/src/main/jni/Android.mk b/src/main/jni/Android.mk
index 0e23bf66..eaeb435e 100755
--- a/src/main/jni/Android.mk
+++ b/src/main/jni/Android.mk
@@ -89,14 +89,14 @@ LOCAL_CFLAGS := -Wall -O2 -I$(LOCAL_PATH)/pdnsd
include $(BUILD_EXECUTABLE)
########################################################
-## shadowsocks
+## shadowsocks local
########################################################
include $(CLEAR_VARS)
SHADOWSOCKS_SOURCES := local.c cache.c udprelay.c encrypt.c utils.c json.c jconf.c
-LOCAL_MODULE := shadowsocks
+LOCAL_MODULE := ss-local
LOCAL_SRC_FILES := $(addprefix shadowsocks/src/, $(SHADOWSOCKS_SOURCES))
LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DUDPRELAY_LOCAL \
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H \
@@ -109,6 +109,27 @@ LOCAL_LDLIBS := -llog
include $(BUILD_EXECUTABLE)
+########################################################
+## shadowsocks tunnel
+########################################################
+
+include $(CLEAR_VARS)
+
+SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c json.c jconf.c
+
+LOCAL_MODULE := ss-tunnel
+LOCAL_SRC_FILES := $(addprefix shadowsocks/src/, $(SHADOWSOCKS_SOURCES))
+LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DUDPRELAY_LOCAL -DUDPRELAY_TUNNEL \
+ -DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H \
+ -I$(LOCAL_PATH)/libev/ \
+ -I$(LOCAL_PATH)/openssl/include
+
+LOCAL_STATIC_LIBRARIES := libev libcrypto
+
+LOCAL_LDLIBS := -llog
+
+include $(BUILD_EXECUTABLE)
+
########################################################
## termExec
########################################################
diff --git a/src/main/jni/shadowsocks b/src/main/jni/shadowsocks
index 69f8bd61..b2df5a4c 160000
--- a/src/main/jni/shadowsocks
+++ b/src/main/jni/shadowsocks
@@ -1 +1 @@
-Subproject commit 69f8bd61c096337abb34a9e64534865d08022957
+Subproject commit b2df5a4c26d293469237fd89153e16f1fa47000c
diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml
index f3b6b1d4..9d1e2df6 100755
--- a/src/main/res/values-zh/strings.xml
+++ b/src/main/res/values-zh/strings.xml
@@ -67,6 +67,9 @@
刷新中...
添加配置文件
+ DNS转发
+ 向远程服务器转发UDP协议的DNS请求
+
为影梭添加此配置文件?
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index a2348b15..0ecd7be2 100755
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -45,6 +45,8 @@
Enable Shadowsocks on startup
Traffic Stats
Show traffic stats in notification bar
+ DNS Forwarding
+ Forward DNS\'s UDP packets to remote server
Shadowsocks started.
diff --git a/src/main/res/xml/pref_feature.xml b/src/main/res/xml/pref_feature.xml
index 758e9c7f..630de01e 100755
--- a/src/main/res/xml/pref_feature.xml
+++ b/src/main/res/xml/pref_feature.xml
@@ -22,10 +22,16 @@
+ android:key="isTrafficStat"
+ android:defaultValue="true"
+ android:summary="@string/traffic_stat_summary"
+ android:title="@string/traffic_stat">
+
+
updateCheckBoxPreference(pref, profile.chnroute)
case Key.isGlobalProxy => updateCheckBoxPreference(pref, profile.global)
case Key.isTrafficStat => updateCheckBoxPreference(pref, profile.traffic)
+ case Key.isUdpDns => updateCheckBoxPreference(pref, profile.udpdns)
case _ =>
}
}
@@ -417,10 +418,12 @@ class Shadowsocks
val sb = new StringBuilder
sb.append("kill -9 `cat /data/data/com.github.shadowsocks/pdnsd.pid`").append("\n")
- sb.append("kill -9 `cat /data/data/com.github.shadowsocks/shadowsocks.pid`").append("\n")
+ sb.append("kill -9 `cat /data/data/com.github.shadowsocks/ss-local.pid`").append("\n")
+ sb.append("kill -9 `cat /data/data/com.github.shadowsocks/ss-tunnel.pid`").append("\n")
sb.append("kill -9 `cat /data/data/com.github.shadowsocks/tun2socks.pid`").append("\n")
sb.append("killall -9 pdnsd").append("\n")
- sb.append("killall -9 shadowsocks").append("\n")
+ sb.append("killall -9 ss-local").append("\n")
+ sb.append("killall -9 ss-tunnel").append("\n")
sb.append("killall -9 tun2socks").append("\n")
sb.append("rm /data/data/com.github.shadowsocks/pdnsd.conf").append("\n")
sb.append("rm /data/data/com.github.shadowsocks/pdnsd.cache").append("\n")
@@ -908,7 +911,8 @@ class Shadowsocks
Utils.runCommand("chmod 755 /data/data/com.github.shadowsocks/iptables\n"
+ "chmod 755 /data/data/com.github.shadowsocks/redsocks\n"
+ "chmod 755 /data/data/com.github.shadowsocks/pdnsd\n"
- + "chmod 755 /data/data/com.github.shadowsocks/shadowsocks\n"
+ + "chmod 755 /data/data/com.github.shadowsocks/ss-local\n"
+ + "chmod 755 /data/data/com.github.shadowsocks/ss-tunnel\n"
+ "chmod 755 /data/data/com.github.shadowsocks/tun2socks\n")
}
diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala
index ee3a7f45..e102c22e 100644
--- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala
+++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala
@@ -102,20 +102,28 @@ class ShadowsocksNatService extends Service with BaseService {
val handler: Handler = new Handler()
def startShadowsocksDaemon() {
- val cmd: String = (Path.BASE +
- "shadowsocks -b 127.0.0.1 -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\" -f " +
- Path.BASE + "shadowsocks.pid")
+ val cmd = (Path.BASE +
+ "ss-local -b 127.0.0.1 -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\" -f " +
+ Path.BASE + "ss-local.pid")
.format(config.proxy, config.remotePort, config.localPort, config.sitekey, config.encMethod)
if (BuildConfig.DEBUG) Log.d(TAG, cmd)
Utils.runCommand(cmd)
}
def startDnsDaemon() {
- val cmd: String = Path.BASE + "pdnsd -c " + Path.BASE + "pdnsd.conf"
- val conf: String = ConfigUtils.PDNSD.format("127.0.0.1")
- ConfigUtils.printToFile(new File(Path.BASE + "pdnsd.conf"))(p => {
- p.println(conf)
- })
+ val cmd = if (config.isUdpDns) {
+ (Path.BASE +
+ "ss-tunnel -b 127.0.0.1 -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\" -L 8.8.8.8:53 -u -f " +
+ Path.BASE + "ss-local.pid")
+ .format(config.proxy, config.remotePort, 8153, config.sitekey, config.encMethod)
+ } else {
+ val conf = ConfigUtils.PDNSD.format("127.0.0.1")
+ ConfigUtils.printToFile(new File(Path.BASE + "pdnsd.conf"))(p => {
+ p.println(conf)
+ })
+ Path.BASE + "pdnsd -c " + Path.BASE + "pdnsd.conf"
+ }
+
Utils.runCommand(cmd)
}
@@ -271,8 +279,10 @@ class ShadowsocksNatService extends Service with BaseService {
sb ++= "kill -9 `cat " ++= Path.BASE ++= "pdnsd.pid`" ++= "\n"
sb ++= "killall -9 pdnsd" ++= "\n"
- sb ++= "kill -9 `cat " ++= Path.BASE ++= "shadowsocks.pid`" ++= "\n"
- sb ++= "killall -9 shadowsocks" ++= "\n"
+ sb ++= "kill -9 `cat " ++= Path.BASE ++= "ss-local.pid`" ++= "\n"
+ sb ++= "killall -9 ss-local" ++= "\n"
+ sb ++= "kill -9 `cat " ++= Path.BASE ++= "ss-tunnel.pid`" ++= "\n"
+ sb ++= "killall -9 ss-tunnel" ++= "\n"
Utils.runCommand(sb.toString())
}
diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala
index 8df6e702..55503352 100644
--- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala
+++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala
@@ -76,19 +76,26 @@ class ShadowsocksVpnService extends VpnService with BaseService {
def startShadowsocksDaemon() {
val cmd: String = (Path.BASE +
- "shadowsocks -b 127.0.0.1 -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\" -f " +
- Path.BASE + "shadowsocks.pid")
+ "ss-local -b 127.0.0.1 -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\" -f " +
+ Path.BASE + "ss-local.pid")
.format(config.proxy, config.remotePort, config.localPort, config.sitekey, config.encMethod)
if (BuildConfig.DEBUG) Log.d(TAG, cmd)
System.exec(cmd)
}
def startDnsDaemon() {
- val cmd: String = Path.BASE + "pdnsd -c " + Path.BASE + "pdnsd.conf"
- val conf: String = ConfigUtils.PDNSD.format("0.0.0.0")
- ConfigUtils.printToFile(new File(Path.BASE + "pdnsd.conf"))(p => {
- p.println(conf)
- })
+ val cmd = if (config.isUdpDns) {
+ (Path.BASE +
+ "ss-tunnel -b 0.0.0.0 -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\" -L 8.8.8.8:53 -u -f " +
+ Path.BASE + "ss-tunnel.pid")
+ .format(config.proxy, config.remotePort, 8153, config.sitekey, config.encMethod)
+ } else {
+ val conf = ConfigUtils.PDNSD.format("0.0.0.0")
+ ConfigUtils.printToFile(new File(Path.BASE + "pdnsd.conf"))(p => {
+ p.println(conf)
+ })
+ Path.BASE + "pdnsd -c " + Path.BASE + "pdnsd.conf"
+ }
Utils.runCommand(cmd)
}
@@ -243,12 +250,14 @@ class ShadowsocksVpnService extends VpnService with BaseService {
def killProcesses() {
val sb = new StringBuilder
- sb ++= "kill -9 `cat " ++= Path.BASE ++= "shadowsocks.pid`" ++= "\n"
- sb ++= "killall -9 shadowsocks" ++= "\n"
+ sb ++= "kill -9 `cat " ++= Path.BASE ++= "ss-local.pid`" ++= "\n"
+ sb ++= "killall -9 ss-local" ++= "\n"
+ sb ++= "kill -9 `cat " ++= Path.BASE ++= "ss-tunnel.pid`" ++= "\n"
+ sb ++= "killall -9 ss-tunnel" ++= "\n"
sb ++= "kill -9 `cat " ++= Path.BASE ++= "tun2socks.pid`" ++= "\n"
sb ++= "killall -9 tun2socks" ++= "\n"
- sb ++= "kill -9 `cat " ++= Path.BASE ++= "pdnsd.pid`" ++= "\n"
- sb ++= "killall -9 pdnsd" ++= "\n"
+ // sb ++= "kill -9 `cat " ++= Path.BASE ++= "pdnsd.pid`" ++= "\n"
+ // sb ++= "killall -9 pdnsd" ++= "\n"
Utils.runCommand(sb.toString())
}
diff --git a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala b/src/main/scala/com/github/shadowsocks/database/DBHelper.scala
index f3582625..d68ca3f4 100644
--- a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala
+++ b/src/main/scala/com/github/shadowsocks/database/DBHelper.scala
@@ -50,7 +50,7 @@ object DBHelper {
val PROFILE = "profile.db"
}
-class DBHelper(val context: Context) extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 7) {
+class DBHelper(val context: Context) extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 8) {
lazy val profileDao:Dao[Profile,Int] = getDao(classOf[Profile])
@@ -59,7 +59,11 @@ class DBHelper(val context: Context) extends OrmLiteSqliteOpenHelper(context, DB
}
def onUpgrade(database: SQLiteDatabase, connectionSource: ConnectionSource, oldVersion: Int, newVersion: Int) {
- TableUtils.dropTable(connectionSource, classOf[Profile], true)
+ if (oldVersion < 8) {
+ profileDao.executeRaw("ALTER TABLE `profile` ADD COLUMN udpdns INTEGER;")
+ } else {
+ TableUtils.dropTable(connectionSource, classOf[Profile], true)
+ }
onCreate(database, connectionSource)
}
}
diff --git a/src/main/scala/com/github/shadowsocks/database/Profile.scala b/src/main/scala/com/github/shadowsocks/database/Profile.scala
index 20246ad9..14d3b8ee 100644
--- a/src/main/scala/com/github/shadowsocks/database/Profile.scala
+++ b/src/main/scala/com/github/shadowsocks/database/Profile.scala
@@ -84,6 +84,9 @@ class Profile {
@DatabaseField
var traffic: Boolean = false
+ @DatabaseField
+ var udpdns: Boolean = false
+
@DatabaseField(dataType = DataType.LONG_STRING)
var individual: String = ""
diff --git a/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala b/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala
index 1a2df5f3..602a04af 100644
--- a/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala
+++ b/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala
@@ -121,6 +121,7 @@ class ProfileManager(settings: SharedPreferences, dbHelper: DBHelper) {
edit.putBoolean(Key.isGFWList, profile.chnroute)
edit.putBoolean(Key.isBypassApps, profile.bypass)
edit.putBoolean(Key.isTrafficStat, profile.traffic)
+ edit.putBoolean(Key.isUdpDns, profile.udpdns)
edit.putString(Key.profileName, profile.name)
edit.putString(Key.proxy, profile.host)
edit.putString(Key.sitekey, profile.password)
@@ -143,6 +144,7 @@ class ProfileManager(settings: SharedPreferences, dbHelper: DBHelper) {
profile.chnroute = settings.getBoolean(Key.isGFWList, false)
profile.bypass = settings.getBoolean(Key.isBypassApps, false)
profile.traffic = settings.getBoolean(Key.isTrafficStat, false)
+ profile.udpdns = settings.getBoolean(Key.isUdpDns, false)
profile.name = settings.getString(Key.profileName, "default")
profile.host = settings.getString(Key.proxy, "127.0.0.1")
profile.password = settings.getString(Key.sitekey, "default")
diff --git a/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala b/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala
index 5090cd2f..230e3a11 100644
--- a/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala
+++ b/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala
@@ -84,7 +84,8 @@ object ConfigUtils {
val method = proxy(3).trim
new Config(config.isGlobalProxy, config.isGFWList, config.isBypassApps, config.isTrafficStat,
- config.profileName, host, password, method, config.proxiedAppString, port, config.localPort)
+ config.isUdpDns, config.profileName, host, password, method, config.proxiedAppString, port,
+ config.localPort)
}
def load(settings: SharedPreferences): Config = {
@@ -92,6 +93,7 @@ object ConfigUtils {
val isGFWList = settings.getBoolean(Key.isGFWList, false)
val isBypassApps = settings.getBoolean(Key.isBypassApps, false)
val isTrafficStat = settings.getBoolean(Key.isTrafficStat, false)
+ val isUdpDns = settings.getBoolean(Key.isUdpDns, false)
val profileName = settings.getString(Key.profileName, "default")
val proxy = settings.getString(Key.proxy, "127.0.0.1")
@@ -111,7 +113,7 @@ object ConfigUtils {
}
val proxiedAppString = settings.getString(Key.proxied, "")
- new Config(isGlobalProxy, isGFWList, isBypassApps, isTrafficStat, profileName, proxy, sitekey,
+ new Config(isGlobalProxy, isGFWList, isBypassApps, isTrafficStat, isUdpDns, profileName, proxy, sitekey,
encMethod, proxiedAppString, remotePort, localPort)
}
diff --git a/src/main/scala/com/github/shadowsocks/utils/Constants.scala b/src/main/scala/com/github/shadowsocks/utils/Constants.scala
index 614ab3d5..11ce486c 100644
--- a/src/main/scala/com/github/shadowsocks/utils/Constants.scala
+++ b/src/main/scala/com/github/shadowsocks/utils/Constants.scala
@@ -70,6 +70,7 @@ object Key {
val isGFWList = "isGFWList"
val isBypassApps = "isBypassApps"
val isTrafficStat = "isTrafficStat"
+ val isUdpDns = "isUdpDns"
val proxy = "proxy"
val sitekey = "sitekey"