Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d3018fc090 | ||
|
|
f1f585b4d9 | ||
|
|
3653f73e0b | ||
|
|
d648910aac | ||
|
|
1e2f8c3bd3 | ||
|
|
b94c16c725 | ||
|
|
a03a6af5ba | ||
|
|
b9414c6b0a | ||
|
|
0d54d9cd9b | ||
|
|
8611a66cdc | ||
|
|
740dcc3ca9 | ||
|
|
730efbafc0 | ||
|
|
8b05476823 | ||
|
|
50b890423a | ||
|
|
fb63268895 | ||
|
|
41934f8909 | ||
|
|
bedc7a0443 | ||
|
|
537f790386 | ||
|
|
62afcf51d7 | ||
|
|
6c1ae68931 | ||
|
|
2703e91bbe | ||
|
|
8fba319db2 | ||
|
|
3e04734b9b | ||
|
|
fe33997494 | ||
|
|
86cd49d3e1 | ||
|
|
ff13792192 | ||
|
|
f36a8c784d | ||
|
|
57f8c0f307 | ||
|
|
601c227644 | ||
|
|
220143aee1 | ||
|
|
81a19c4a81 | ||
|
|
27cc53baf8 | ||
|
|
935fddcb15 | ||
|
|
49458080a1 | ||
|
|
8101fc935e | ||
|
|
491ebe500f | ||
|
|
98ce68774a | ||
|
|
b0e20552dd | ||
|
|
0d478cfbc4 | ||
|
|
d1d135ccdd | ||
|
|
a28303ee76 | ||
|
|
2b09ebcd2c | ||
|
|
59ede2586a | ||
|
|
abd1d0220c | ||
|
|
5427e00012 | ||
|
|
7f226d3f0c | ||
|
|
ee3f3c2338 | ||
|
|
6ac90abbf7 | ||
|
|
2f553b156a |
+3
-3
@@ -1,3 +1,3 @@
|
|||||||
[submodule "src/main/jni/shadowsocks"]
|
[submodule "src/main/jni/shadowsocks-libev"]
|
||||||
path = src/main/jni/shadowsocks
|
path = src/main/jni/shadowsocks-libev
|
||||||
url = https://github.com/madeye/shadowsocks-libev
|
url = https://github.com/shadowsocks/shadowsocks-libev
|
||||||
|
|||||||
+17
-12
@@ -1,21 +1,26 @@
|
|||||||
language: scala
|
language: android
|
||||||
scala:
|
android:
|
||||||
- 2.10.4
|
components:
|
||||||
|
- tools
|
||||||
|
- platform-tools
|
||||||
|
- build-tools-21.1.1
|
||||||
|
- android-21
|
||||||
|
- extra-google-m2repository
|
||||||
|
- extra-android-m2repository
|
||||||
|
cache:
|
||||||
|
- apt
|
||||||
before_install:
|
before_install:
|
||||||
|
- echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
|
||||||
- sudo apt-get update
|
- sudo apt-get update
|
||||||
install:
|
install:
|
||||||
- sudo apt-get install -y libc6-dev-i386 lib32ncurses5-dev libx11-dev g++-multilib lib32z1-dev ccache
|
- sudo apt-get install -y --force-yes sbt libc6-dev-i386 lib32ncurses5-dev libx11-dev g++-multilib lib32z1-dev ccache
|
||||||
- export NDK_CCACHE=ccache
|
- export NDK_CCACHE=ccache
|
||||||
- export ARCH=`uname -m`
|
- export ARCH=`uname -m`
|
||||||
- wget http://dl.google.com/android/android-sdk_r23.0.2-linux.tgz
|
- wget http://dl.google.com/android/ndk/android-ndk-r10d-linux-${ARCH}.bin
|
||||||
- tar xf android-sdk_r23.0.2-linux.tgz
|
- chmod +x android-ndk-r10d-linux-${ARCH}.bin
|
||||||
- wget http://dl.google.com/android/ndk/android-ndk-r9d-linux-${ARCH}.tar.bz2
|
- ./android-ndk-r10d-linux-${ARCH}.bin -y | grep gcc
|
||||||
- tar xf android-ndk-r9d-linux-${ARCH}.tar.bz2
|
- export ANDROID_NDK_HOME=`pwd`/android-ndk-r10d
|
||||||
- export ANDROID_NDK_HOME=`pwd`/android-ndk-r9d
|
|
||||||
- export ANDROID_HOME=`pwd`/android-sdk-linux
|
|
||||||
- export PATH=${PATH}:${ANDROID_NDK_HOME}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
|
- export PATH=${PATH}:${ANDROID_NDK_HOME}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
|
||||||
- echo "y" | android update sdk --filter tools,platform-tools,build-tools-21.0.1,android-21,extra-google-m2repository --no-ui --no-https -a
|
|
||||||
- echo "y" | android update sdk --filter extra-android-m2repository --no-ui --no-https -a
|
|
||||||
script:
|
script:
|
||||||
- cp local.properties.travis local.properties
|
- cp local.properties.travis local.properties
|
||||||
- ./build.sh
|
- ./build.sh
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ Help to translate shadowsocks: http://crowdin.net/project/shadowsocks/invite
|
|||||||
|
|
||||||
* Install Android SDK and NDK by run `brew install android-ndk android-sdk`
|
* Install Android SDK and NDK by run `brew install android-ndk android-sdk`
|
||||||
* Add `export ANDROID_HOME=/usr/local/Cellar/android-sdk/$version` to your .bashrc , then reopen the shell to load it.
|
* Add `export ANDROID_HOME=/usr/local/Cellar/android-sdk/$version` to your .bashrc , then reopen the shell to load it.
|
||||||
|
* Add `export ANDROID_NDK_HOME=/usr/local/Cellar/android-ndk/$version` to your .bashrc , then reopen the shell to load it.
|
||||||
* echo "y" | android update sdk --filter tools,platform-tools,build-tools-21.0.1,android-21,extra-google-m2repository --no-ui --no-https -a
|
* echo "y" | android update sdk --filter tools,platform-tools,build-tools-21.0.1,android-21,extra-google-m2repository --no-ui --no-https -a
|
||||||
* echo "y" | android update sdk --filter extra-android-m2repository --no-ui --no-https -a
|
* echo "y" | android update sdk --filter extra-android-m2repository --no-ui --no-https -a
|
||||||
* Create your key following the instructions at http://developer.android.com/guide/publishing/app-signing.html#cert
|
* Create your key following the instructions at http://developer.android.com/guide/publishing/app-signing.html#cert
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ ndkJavah in Android := List()
|
|||||||
|
|
||||||
ndkBuild in Android := List()
|
ndkBuild in Android := List()
|
||||||
|
|
||||||
|
typedResources in Android := false
|
||||||
|
|
||||||
resolvers += "JRAF" at "http://JRAF.org/static/maven/2"
|
resolvers += "JRAF" at "http://JRAF.org/static/maven/2"
|
||||||
|
|
||||||
resolvers += "madeye private releases" at "http://madeye-maven-repository.googlecode.com/git/"
|
resolvers += "madeye private releases" at "http://madeye-maven-repository.googlecode.com/git/"
|
||||||
@@ -27,12 +29,13 @@ libraryDependencies ++= Seq(
|
|||||||
|
|
||||||
libraryDependencies ++= Seq(
|
libraryDependencies ++= Seq(
|
||||||
"net.simonvt.menudrawer" % "menudrawer" % "3.0.6",
|
"net.simonvt.menudrawer" % "menudrawer" % "3.0.6",
|
||||||
"com.google.android.gms" % "play-services" % "6.1.71",
|
"com.google.android.gms" % "play-services-base" % "6.5.87",
|
||||||
|
"com.google.android.gms" % "play-services-ads" % "6.5.87",
|
||||||
"com.android.support" % "support-v4" % "21.0.3"
|
"com.android.support" % "support-v4" % "21.0.3"
|
||||||
)
|
)
|
||||||
|
|
||||||
libraryDependencies ++= Seq(
|
libraryDependencies ++= Seq(
|
||||||
"de.keyboardsurfer.android.widget" % "crouton" % "1.8.4" exclude("com.google.android", "support-v4"),
|
"com.github.mrengineer13" % "snackbar" % "0.5.0",
|
||||||
"com.nostra13.universalimageloader" % "universal-image-loader" % "1.8.4",
|
"com.nostra13.universalimageloader" % "universal-image-loader" % "1.8.4",
|
||||||
"com.j256.ormlite" % "ormlite-core" % "4.47",
|
"com.j256.ormlite" % "ormlite-core" % "4.47",
|
||||||
"com.j256.ormlite" % "ormlite-android" % "4.47"
|
"com.j256.ormlite" % "ormlite-android" % "4.47"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
-4488
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.github.shadowsocks"
|
package="com.github.shadowsocks"
|
||||||
android:versionCode="95"
|
android:versionCode="103"
|
||||||
android:versionName="2.5.5">
|
android:versionName="2.6.5">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
@@ -65,7 +65,8 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".AppManager"
|
android:name=".AppManager"
|
||||||
android:theme="@style/Theme.AppManager"
|
android:theme="@style/Theme.AppManager"
|
||||||
android:label="@string/app_name">
|
android:label="@string/app_name"
|
||||||
|
android:parentActivityName=".Shadowsocks">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="com.github.shadowsocks.AppManager"/>
|
<action android:name="com.github.shadowsocks.AppManager"/>
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
|||||||
+44
-22
@@ -61,8 +61,8 @@ SODIUM_SOURCE := $(crypto_aead_src) $(crypto_auth_src) $(crypto_box_src) \
|
|||||||
$(crypto_stream_src) $(crypto_verify_src) $(randombytes_src) $(sodium_src)
|
$(crypto_stream_src) $(crypto_verify_src) $(randombytes_src) $(sodium_src)
|
||||||
|
|
||||||
LOCAL_MODULE := sodium
|
LOCAL_MODULE := sodium
|
||||||
LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks/libsodium/src/libsodium/include \
|
LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include \
|
||||||
-I$(LOCAL_PATH)/shadowsocks/libsodium/src/libsodium/include/sodium \
|
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include/sodium \
|
||||||
-DPACKAGE_NAME=\"libsodium\" -DPACKAGE_TARNAME=\"libsodium\" \
|
-DPACKAGE_NAME=\"libsodium\" -DPACKAGE_TARNAME=\"libsodium\" \
|
||||||
-DPACKAGE_VERSION=\"1.0.1\" -DPACKAGE_STRING=\"libsodium\ 1.0.1\" \
|
-DPACKAGE_VERSION=\"1.0.1\" -DPACKAGE_STRING=\"libsodium\ 1.0.1\" \
|
||||||
-DPACKAGE_BUGREPORT=\"https://github.com/jedisct1/libsodium/issues\" \
|
-DPACKAGE_BUGREPORT=\"https://github.com/jedisct1/libsodium/issues\" \
|
||||||
@@ -79,7 +79,7 @@ LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks/libsodium/src/libsodium/include
|
|||||||
-DHAVE_WEAK_SYMBOLS=1 -DHAVE_ARC4RANDOM=1 -DHAVE_ARC4RANDOM_BUF=1 \
|
-DHAVE_WEAK_SYMBOLS=1 -DHAVE_ARC4RANDOM=1 -DHAVE_ARC4RANDOM_BUF=1 \
|
||||||
-DHAVE_MLOCK=1 -DHAVE_MPROTECT=1 -DHAVE_POSIX_MEMALIGN=1
|
-DHAVE_MLOCK=1 -DHAVE_MPROTECT=1 -DHAVE_POSIX_MEMALIGN=1
|
||||||
|
|
||||||
LOCAL_SRC_FILES := $(addprefix shadowsocks/libsodium/src/libsodium/,$(SODIUM_SOURCE))
|
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/libsodium/src/libsodium/,$(SODIUM_SOURCE))
|
||||||
|
|
||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|
||||||
@@ -126,10 +126,10 @@ set_src = set/allocation.c set/inspection.c set/ipv4_set.c set/ipv6_set.c \
|
|||||||
IPSET_SOURCE := general.c $(bdd_src) $(map_src) $(set_src)
|
IPSET_SOURCE := general.c $(bdd_src) $(map_src) $(set_src)
|
||||||
|
|
||||||
LOCAL_MODULE := libipset
|
LOCAL_MODULE := libipset
|
||||||
LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks/libipset/include \
|
LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks-libev/libipset/include \
|
||||||
-I$(LOCAL_PATH)/shadowsocks/libcork/include
|
-I$(LOCAL_PATH)/shadowsocks-libev/libcork/include
|
||||||
|
|
||||||
LOCAL_SRC_FILES := $(addprefix shadowsocks/libipset/,$(IPSET_SOURCE))
|
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/libipset/,$(IPSET_SOURCE))
|
||||||
|
|
||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|
||||||
@@ -153,10 +153,29 @@ pthreads_src := pthreads/thread.c
|
|||||||
CORK_SOURCE := $(cli_src) $(core_src) $(ds_src) $(posix_src) $(pthreads_src)
|
CORK_SOURCE := $(cli_src) $(core_src) $(ds_src) $(posix_src) $(pthreads_src)
|
||||||
|
|
||||||
LOCAL_MODULE := libcork
|
LOCAL_MODULE := libcork
|
||||||
LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks/libcork/include \
|
LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks-libev/libcork/include \
|
||||||
-DCORK_API=CORK_LOCAL
|
-DCORK_API=CORK_LOCAL
|
||||||
|
|
||||||
LOCAL_SRC_FILES := $(addprefix shadowsocks/libcork/,$(CORK_SOURCE))
|
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/libcork/,$(CORK_SOURCE))
|
||||||
|
|
||||||
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|
||||||
|
########################################################
|
||||||
|
## libudns
|
||||||
|
########################################################
|
||||||
|
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
UDNS_SOURCES := udns_dn.c udns_dntosp.c udns_parse.c udns_resolver.c udns_init.c \
|
||||||
|
udns_misc.c udns_XtoX.c \
|
||||||
|
udns_rr_a.c udns_rr_ptr.c udns_rr_mx.c udns_rr_txt.c udns_bl.c \
|
||||||
|
udns_rr_srv.c udns_rr_naptr.c udns_codes.c udns_jran.c
|
||||||
|
|
||||||
|
LOCAL_MODULE := libudns
|
||||||
|
LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/shadowsocks-libev/libudns \
|
||||||
|
-DHAVE_DECL_INET_NTOP
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/libudns/,$(UDNS_SOURCES))
|
||||||
|
|
||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|
||||||
@@ -210,48 +229,51 @@ LOCAL_CFLAGS := -Wall -O2 -I$(LOCAL_PATH)/pdnsd
|
|||||||
include $(BUILD_EXECUTABLE)
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|
||||||
########################################################
|
########################################################
|
||||||
## shadowsocks local library
|
## shadowsocks-libev local library
|
||||||
########################################################
|
########################################################
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
SHADOWSOCKS_SOURCES := local.c cache.c udprelay.c encrypt.c utils.c json.c jconf.c acl.c
|
SHADOWSOCKS_SOURCES := local.c cache.c udprelay.c encrypt.c utils.c netutils.c json.c jconf.c acl.c
|
||||||
|
|
||||||
LOCAL_MODULE := ss-local
|
LOCAL_MODULE := ss-local
|
||||||
LOCAL_SRC_FILES := $(addprefix shadowsocks/src/, $(SHADOWSOCKS_SOURCES))
|
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 -DUDPRELAY_LOCAL \
|
||||||
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H \
|
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H \
|
||||||
-I$(LOCAL_PATH)/libev/ \
|
-I$(LOCAL_PATH)/libev/ \
|
||||||
-I$(LOCAL_PATH)/openssl/include \
|
-I$(LOCAL_PATH)/openssl/include \
|
||||||
-I$(LOCAL_PATH)/shadowsocks/libcork/include \
|
-I$(LOCAL_PATH)/shadowsocks-libev/libudns \
|
||||||
-I$(LOCAL_PATH)/shadowsocks/libsodium/src/libsodium/include \
|
-I$(LOCAL_PATH)/shadowsocks-libev/libcork/include \
|
||||||
-I$(LOCAL_PATH)/shadowsocks/libsodium/src/libsodium/include/sodium \
|
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include \
|
||||||
-I$(LOCAL_PATH)/shadowsocks/libipset/include
|
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include/sodium \
|
||||||
|
-I$(LOCAL_PATH)/shadowsocks-libev/libipset/include
|
||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := libev libcrypto libipset libcork libsodium
|
LOCAL_STATIC_LIBRARIES := libev libcrypto libipset libcork libudns libsodium
|
||||||
|
|
||||||
LOCAL_LDLIBS := -llog
|
LOCAL_LDLIBS := -llog
|
||||||
|
|
||||||
include $(BUILD_EXECUTABLE)
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|
||||||
########################################################
|
########################################################
|
||||||
## shadowsocks tunnel
|
## shadowsocks-libev tunnel
|
||||||
########################################################
|
########################################################
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c json.c jconf.c
|
SHADOWSOCKS_SOURCES := tunnel.c cache.c udprelay.c encrypt.c utils.c netutils.c json.c jconf.c
|
||||||
|
|
||||||
LOCAL_MODULE := ss-tunnel
|
LOCAL_MODULE := ss-tunnel
|
||||||
LOCAL_SRC_FILES := $(addprefix shadowsocks/src/, $(SHADOWSOCKS_SOURCES))
|
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 -DUDPRELAY_LOCAL -DUDPRELAY_TUNNEL \
|
||||||
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H -DSSTUNNEL_JNI \
|
-DUSE_CRYPTO_OPENSSL -DANDROID -DHAVE_CONFIG_H -DSSTUNNEL_JNI \
|
||||||
-I$(LOCAL_PATH)/libev/ \
|
-I$(LOCAL_PATH)/libev/ \
|
||||||
-I$(LOCAL_PATH)/shadowsocks/libsodium/src/libsodium/include \
|
-I$(LOCAL_PATH)/shadowsocks-libev/libudns \
|
||||||
-I$(LOCAL_PATH)/shadowsocks/libsodium/src/libsodium/include/sodium \
|
-I$(LOCAL_PATH)/shadowsocks-libev/libcork/include \
|
||||||
|
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include \
|
||||||
|
-I$(LOCAL_PATH)/shadowsocks-libev/libsodium/src/libsodium/include/sodium \
|
||||||
-I$(LOCAL_PATH)/openssl/include
|
-I$(LOCAL_PATH)/openssl/include
|
||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := libev libcrypto libsodium
|
LOCAL_STATIC_LIBRARIES := libev libcrypto libsodium libcork libudns
|
||||||
|
|
||||||
LOCAL_LDLIBS := -llog
|
LOCAL_LDLIBS := -llog
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ static void
|
|||||||
ev_arc4random_buf(void *buf, size_t n)
|
ev_arc4random_buf(void *buf, size_t n)
|
||||||
{
|
{
|
||||||
#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
|
#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
|
||||||
return arc4random_buf(buf, n);
|
arc4random_buf(buf, n);
|
||||||
|
return;
|
||||||
#else
|
#else
|
||||||
unsigned char *b = buf;
|
unsigned char *b = buf;
|
||||||
|
|
||||||
@@ -71,7 +72,8 @@ ev_arc4random_buf(void *buf, size_t n)
|
|||||||
* trickery.)
|
* trickery.)
|
||||||
*/
|
*/
|
||||||
if (arc4random_buf != NULL) {
|
if (arc4random_buf != NULL) {
|
||||||
return arc4random_buf(buf, n);
|
arc4random_buf(buf, n);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* Make sure that we start out with b at a 4-byte alignment; plenty
|
/* Make sure that we start out with b at a 4-byte alignment; plenty
|
||||||
|
|||||||
@@ -25,11 +25,11 @@
|
|||||||
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
||||||
* major minor fix final patch/beta)
|
* major minor fix final patch/beta)
|
||||||
*/
|
*/
|
||||||
#define OPENSSL_VERSION_NUMBER 0x1000103fL
|
#define OPENSSL_VERSION_NUMBER 0x100010afL
|
||||||
#ifdef OPENSSL_FIPS
|
#ifdef OPENSSL_FIPS
|
||||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1c-fips 10 May 2012"
|
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1j-fips 15 Oct 2014"
|
||||||
#else
|
#else
|
||||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1c 10 May 2012"
|
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1j 15 Oct 2014"
|
||||||
#endif
|
#endif
|
||||||
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
||||||
|
|
||||||
|
|||||||
Submodule src/main/jni/shadowsocks deleted from 888c2438c3
Submodule
+1
Submodule src/main/jni/shadowsocks-libev added at 02050e49e7
@@ -10,13 +10,13 @@
|
|||||||
<string name="profile">配置文件</string>
|
<string name="profile">配置文件</string>
|
||||||
<string name="profile_summary">配置文件名称</string>
|
<string name="profile_summary">配置文件名称</string>
|
||||||
<string name="proxy">服务器</string>
|
<string name="proxy">服务器</string>
|
||||||
<string name="proxy_summary">您的影梭服务器的地址</string>
|
<string name="proxy_summary">远程服务器的地址</string>
|
||||||
<string name="remote_port">远程端口</string>
|
<string name="remote_port">远程端口</string>
|
||||||
<string name="remote_port_summary">您的影梭服务器的端口号</string>
|
<string name="remote_port_summary">远程服务器的端口号</string>
|
||||||
<string name="port">本地端口</string>
|
<string name="port">本地端口</string>
|
||||||
<string name="port_summary">您的影梭客户端的端口号</string>
|
<string name="port_summary">本地客户端的端口号</string>
|
||||||
<string name="sitekey">密码</string>
|
<string name="sitekey">密码</string>
|
||||||
<string name="sitekey_summary">您的影梭服务器的密码</string>
|
<string name="sitekey_summary">远程服务器的密码</string>
|
||||||
<string name="enc_method">加密方法</string>
|
<string name="enc_method">加密方法</string>
|
||||||
<string name="feature_cat">功能设置</string>
|
<string name="feature_cat">功能设置</string>
|
||||||
<string name="http_proxy">HTTP 代理服务器</string>
|
<string name="http_proxy">HTTP 代理服务器</string>
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
<string name="service_failed">无法连接远程服务器</string>
|
<string name="service_failed">无法连接远程服务器</string>
|
||||||
<string name="stop">停止服务</string>
|
<string name="stop">停止服务</string>
|
||||||
<string name="stopping">正在关闭...</string>
|
<string name="stopping">正在关闭...</string>
|
||||||
<string name="vpn_error">后台服务启动失败:\"%s\"。</string>
|
<string name="vpn_error">后台服务启动失败:%s</string>
|
||||||
<string name="ok_iknow">确定</string>
|
<string name="ok_iknow">确定</string>
|
||||||
<string name="port_alert">端口号应大于1024</string>
|
<string name="port_alert">端口号应大于1024</string>
|
||||||
<string name="port_empty">端口号不能为空</string>
|
<string name="port_empty">端口号不能为空</string>
|
||||||
@@ -94,5 +94,6 @@
|
|||||||
<string name="action_export_err">导出失败</string>
|
<string name="action_export_err">导出失败</string>
|
||||||
<string name="action_import_msg">导入成功</string>
|
<string name="action_import_msg">导入成功</string>
|
||||||
<string name="action_import_err">导入失败</string>
|
<string name="action_import_err">导入失败</string>
|
||||||
|
<string name="error">错误</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
+187
-9686
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Executable → Regular
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Executable → Regular
+6
-5
@@ -14,13 +14,13 @@
|
|||||||
<string name="profile">Profile</string>
|
<string name="profile">Profile</string>
|
||||||
<string name="profile_summary">Profile name</string>
|
<string name="profile_summary">Profile name</string>
|
||||||
<string name="proxy">Server</string>
|
<string name="proxy">Server</string>
|
||||||
<string name="proxy_summary">Hostname or IP Address of your Shadowsocks server</string>
|
<string name="proxy_summary">Hostname or IP of the remote server</string>
|
||||||
<string name="remote_port">Remote Port</string>
|
<string name="remote_port">Remote Port</string>
|
||||||
<string name="remote_port_summary">Port number of your Shadowsocks server</string>
|
<string name="remote_port_summary">Port number of the remote server</string>
|
||||||
<string name="port">Local Port</string>
|
<string name="port">Local Port</string>
|
||||||
<string name="port_summary">Port number of your Shadowsocks client</string>
|
<string name="port_summary">Port number of the local server</string>
|
||||||
<string name="sitekey">Password</string>
|
<string name="sitekey">Password</string>
|
||||||
<string name="sitekey_summary">Password of your Shadowsocks server</string>
|
<string name="sitekey_summary">Password of the remote server</string>
|
||||||
<string name="enc_method">Encrypt Method</string>
|
<string name="enc_method">Encrypt Method</string>
|
||||||
|
|
||||||
<!-- feature category -->
|
<!-- feature category -->
|
||||||
@@ -58,9 +58,10 @@
|
|||||||
<string name="service_failed">Failed to connect the remote server</string>
|
<string name="service_failed">Failed to connect the remote server</string>
|
||||||
<string name="stop">Stop the service</string>
|
<string name="stop">Stop the service</string>
|
||||||
<string name="stopping">Shutting down...</string>
|
<string name="stopping">Shutting down...</string>
|
||||||
<string name="vpn_error">Error: \"%s\".</string>
|
<string name="vpn_error">%s</string>
|
||||||
<string name="enable_nat">Turn on NAT mode.</string>
|
<string name="enable_nat">Turn on NAT mode.</string>
|
||||||
<string name="disable_nat">Turn off NAT mode.</string>
|
<string name="disable_nat">Turn off NAT mode.</string>
|
||||||
|
<string name="error">ERROR</string>
|
||||||
|
|
||||||
<!-- alert category -->
|
<!-- alert category -->
|
||||||
<string name="ok_iknow">OK</string>
|
<string name="ok_iknow">OK</string>
|
||||||
|
|||||||
Executable → Regular
@@ -227,8 +227,9 @@ class AppManager extends Activity with OnCheckedChangeListener with OnClickListe
|
|||||||
val prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext)
|
val prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext)
|
||||||
item.getItemId match {
|
item.getItemId match {
|
||||||
case R.id.action_export =>
|
case R.id.action_export =>
|
||||||
|
val bypass = prefs.getBoolean(Key.isBypassApps, false)
|
||||||
val proxiedAppString = prefs.getString(Key.proxied, "")
|
val proxiedAppString = prefs.getString(Key.proxied, "")
|
||||||
val clip = ClipData.newPlainText(Key.proxied, proxiedAppString)
|
val clip = ClipData.newPlainText(Key.proxied, bypass + " " + proxiedAppString)
|
||||||
clipboard.setPrimaryClip(clip)
|
clipboard.setPrimaryClip(clip)
|
||||||
Toast.makeText(this, R.string.action_export_msg, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.action_export_msg, Toast.LENGTH_SHORT).show()
|
||||||
return true
|
return true
|
||||||
@@ -241,8 +242,12 @@ class AppManager extends Activity with OnCheckedChangeListener with OnClickListe
|
|||||||
if (proxiedAppSequence != null) {
|
if (proxiedAppSequence != null) {
|
||||||
val proxiedAppString = proxiedAppSequence.toString
|
val proxiedAppString = proxiedAppSequence.toString
|
||||||
if (!proxiedAppString.isEmpty) {
|
if (!proxiedAppString.isEmpty) {
|
||||||
|
val array = proxiedAppString.split(" ")
|
||||||
|
val bypass = array(0).toBoolean
|
||||||
|
val apps = if (array.size > 1) array(1) else ""
|
||||||
|
prefs.edit.putBoolean(Key.isBypassApps, bypass).commit()
|
||||||
|
prefs.edit.putString(Key.proxied, apps).commit()
|
||||||
Toast.makeText(this, R.string.action_import_msg, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.action_import_msg, Toast.LENGTH_SHORT).show()
|
||||||
prefs.edit.putString(Key.proxied, proxiedAppString).commit()
|
|
||||||
// Restart activity
|
// Restart activity
|
||||||
val intent = getIntent
|
val intent = getIntent
|
||||||
finish()
|
finish()
|
||||||
@@ -254,6 +259,9 @@ class AppManager extends Activity with OnCheckedChangeListener with OnClickListe
|
|||||||
}
|
}
|
||||||
Toast.makeText(this, R.string.action_import_err, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.action_import_err, Toast.LENGTH_SHORT).show()
|
||||||
return false
|
return false
|
||||||
|
case android.R.id.home =>
|
||||||
|
navigateUpTo(getParentActivityIntent)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
super.onOptionsItemSelected(item)
|
super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
@@ -269,7 +277,9 @@ class AppManager extends Activity with OnCheckedChangeListener with OnClickListe
|
|||||||
|
|
||||||
handler = new Handler()
|
handler = new Handler()
|
||||||
|
|
||||||
getActionBar.setTitle(R.string.proxied_help)
|
val actionBar = getActionBar()
|
||||||
|
actionBar.setTitle(R.string.proxied_help)
|
||||||
|
actionBar.setDisplayHomeAsUpEnabled(true)
|
||||||
this.setContentView(R.layout.layout_apps)
|
this.setContentView(R.layout.layout_apps)
|
||||||
this.overlay = View.inflate(this, R.layout.overlay, null).asInstanceOf[TextView]
|
this.overlay = View.inflate(this, R.layout.overlay, null).asInstanceOf[TextView]
|
||||||
getWindowManager.addView(overlay, new
|
getWindowManager.addView(overlay, new
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ import android.view.View.OnLongClickListener
|
|||||||
import android.view._
|
import android.view._
|
||||||
import android.webkit.{WebView, WebViewClient}
|
import android.webkit.{WebView, WebViewClient}
|
||||||
import android.widget._
|
import android.widget._
|
||||||
|
import com.github.mrengineer13.snackbar._
|
||||||
import com.github.shadowsocks.aidl.{IShadowsocksService, IShadowsocksServiceCallback}
|
import com.github.shadowsocks.aidl.{IShadowsocksService, IShadowsocksServiceCallback}
|
||||||
import com.github.shadowsocks.database._
|
import com.github.shadowsocks.database._
|
||||||
import com.github.shadowsocks.preferences.{PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference}
|
import com.github.shadowsocks.preferences.{PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference}
|
||||||
@@ -64,7 +65,6 @@ import com.google.android.gms.ads.{AdRequest, AdSize, AdView}
|
|||||||
import com.google.android.gms.analytics.HitBuilders
|
import com.google.android.gms.analytics.HitBuilders
|
||||||
import com.google.zxing.integration.android.IntentIntegrator
|
import com.google.zxing.integration.android.IntentIntegrator
|
||||||
import com.nostra13.universalimageloader.core.download.BaseImageDownloader
|
import com.nostra13.universalimageloader.core.download.BaseImageDownloader
|
||||||
import de.keyboardsurfer.android.widget.crouton.{Configuration, Crouton, Style}
|
|
||||||
import net.simonvt.menudrawer.MenuDrawer
|
import net.simonvt.menudrawer.MenuDrawer
|
||||||
|
|
||||||
import scala.collection.mutable.{ArrayBuffer, ListBuffer}
|
import scala.collection.mutable.{ArrayBuffer, ListBuffer}
|
||||||
@@ -205,7 +205,6 @@ class Shadowsocks
|
|||||||
// Update the UI
|
// Update the UI
|
||||||
if (switchButton != null) switchButton.setEnabled(true)
|
if (switchButton != null) switchButton.setEnabled(true)
|
||||||
if (State.isAvailable(bgService.getState)) {
|
if (State.isAvailable(bgService.getState)) {
|
||||||
Crouton.cancelAllCroutons()
|
|
||||||
setPreferenceEnabled(enabled = true)
|
setPreferenceEnabled(enabled = true)
|
||||||
} else {
|
} else {
|
||||||
changeSwitch(checked = true)
|
changeSwitch(checked = true)
|
||||||
@@ -322,7 +321,7 @@ class Shadowsocks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private def crash_recovery() {
|
private def crashRecovery() {
|
||||||
val cmd = new ArrayBuffer[String]()
|
val cmd = new ArrayBuffer[String]()
|
||||||
|
|
||||||
for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks", "tun2socks")) {
|
for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks", "tun2socks")) {
|
||||||
@@ -367,7 +366,7 @@ class Shadowsocks
|
|||||||
|
|
||||||
def isTextEmpty(s: String, msg: String): Boolean = {
|
def isTextEmpty(s: String, msg: String): Boolean = {
|
||||||
if (s == null || s.length <= 0) {
|
if (s == null || s.length <= 0) {
|
||||||
Crouton.makeText(this, msg, Style.ALERT).show()
|
new SnackBar.Builder(this).withMessage(msg).withStyle(SnackBar.Style.ALERT).show()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
@@ -828,7 +827,6 @@ class Shadowsocks
|
|||||||
override def onDestroy() {
|
override def onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
deattachService()
|
deattachService()
|
||||||
Crouton.cancelAllCroutons()
|
|
||||||
unregisterReceiver(preferenceReceiver)
|
unregisterReceiver(preferenceReceiver)
|
||||||
new BackupManager(this).dataChanged()
|
new BackupManager(this).dataChanged()
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
@@ -851,7 +849,7 @@ class Shadowsocks
|
|||||||
|
|
||||||
def reset() {
|
def reset() {
|
||||||
|
|
||||||
crash_recovery()
|
crashRecovery()
|
||||||
|
|
||||||
copyAssets(System.getABI)
|
copyAssets(System.getABI)
|
||||||
|
|
||||||
@@ -927,12 +925,12 @@ class Shadowsocks
|
|||||||
try {
|
try {
|
||||||
val port: Int = Integer.valueOf(text)
|
val port: Int = Integer.valueOf(text)
|
||||||
if (!low && port <= 1024) {
|
if (!low && port <= 1024) {
|
||||||
Crouton.makeText(this, R.string.port_alert, Style.ALERT).show()
|
new SnackBar.Builder(this).withMessageId(R.string.port_alert).withStyle(SnackBar.Style.ALERT).show()
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
case ex: Exception =>
|
case ex: Exception =>
|
||||||
Crouton.makeText(this, R.string.port_alert, Style.ALERT).show()
|
new SnackBar.Builder(this).withMessageId(R.string.port_alert).withStyle(SnackBar.Style.ALERT).show()
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
@@ -1014,15 +1012,12 @@ class Shadowsocks
|
|||||||
case State.STOPPED =>
|
case State.STOPPED =>
|
||||||
clearDialog()
|
clearDialog()
|
||||||
changeSwitch(checked = false)
|
changeSwitch(checked = false)
|
||||||
Crouton.cancelAllCroutons()
|
|
||||||
if (m != null) {
|
if (m != null) {
|
||||||
val style = new Style.Builder().setBackgroundColorValue(Style.holoRedLight).build()
|
new SnackBar.Builder(Shadowsocks.this)
|
||||||
val config = new Configuration.Builder()
|
.withMessage(getString(R.string.vpn_error).formatLocal(Locale.ENGLISH, m))
|
||||||
.setDuration(Configuration.DURATION_LONG)
|
.withActionMessageId(R.string.error)
|
||||||
.build()
|
.withStyle(SnackBar.Style.ALERT)
|
||||||
Crouton
|
.withDuration(SnackBar.LONG_SNACK)
|
||||||
.makeText(Shadowsocks.this, getString(R.string.vpn_error).formatLocal(Locale.ENGLISH, m), style)
|
|
||||||
.setConfiguration(config)
|
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
setPreferenceEnabled(enabled = true)
|
setPreferenceEnabled(enabled = true)
|
||||||
|
|||||||
@@ -263,8 +263,9 @@ class ShadowsocksNatService extends Service with BaseService {
|
|||||||
|
|
||||||
val conf = if (config.route == Route.BYPASS_CHN) {
|
val conf = if (config.route == Route.BYPASS_CHN) {
|
||||||
val reject = ConfigUtils.getRejectList(getContext, application)
|
val reject = ConfigUtils.getRejectList(getContext, application)
|
||||||
|
val blackList = ConfigUtils.getBlackList(getContext, application)
|
||||||
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, "127.0.0.1", 8153,
|
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, "127.0.0.1", 8153,
|
||||||
Path.BASE + "pdnsd-nat.pid", reject, reject, 8163)
|
Path.BASE + "pdnsd-nat.pid", reject, blackList, 8163)
|
||||||
} else {
|
} else {
|
||||||
ConfigUtils.PDNSD_LOCAL.formatLocal(Locale.ENGLISH, "127.0.0.1", 8153,
|
ConfigUtils.PDNSD_LOCAL.formatLocal(Locale.ENGLISH, "127.0.0.1", 8153,
|
||||||
Path.BASE + "pdnsd-nat.pid", 8163)
|
Path.BASE + "pdnsd-nat.pid", 8163)
|
||||||
@@ -347,7 +348,7 @@ class ShadowsocksNatService extends Service with BaseService {
|
|||||||
actionIntent)
|
actionIntent)
|
||||||
|
|
||||||
if (visible)
|
if (visible)
|
||||||
builder.setPriority(NotificationCompat.PRIORITY_MAX)
|
builder.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||||
else
|
else
|
||||||
builder.setPriority(NotificationCompat.PRIORITY_MIN)
|
builder.setPriority(NotificationCompat.PRIORITY_MIN)
|
||||||
|
|
||||||
@@ -512,31 +513,33 @@ class ShadowsocksNatService extends Service with BaseService {
|
|||||||
}
|
}
|
||||||
registerReceiver(closeReceiver, filter)
|
registerReceiver(closeReceiver, filter)
|
||||||
|
|
||||||
val screenFilter = new IntentFilter()
|
if (Utils.isLollipopOrAbove) {
|
||||||
screenFilter.addAction(Intent.ACTION_SCREEN_ON)
|
val screenFilter = new IntentFilter()
|
||||||
screenFilter.addAction(Intent.ACTION_SCREEN_OFF)
|
screenFilter.addAction(Intent.ACTION_SCREEN_ON)
|
||||||
screenFilter.addAction(Intent.ACTION_USER_PRESENT)
|
screenFilter.addAction(Intent.ACTION_SCREEN_OFF)
|
||||||
lockReceiver = new BroadcastReceiver() {
|
screenFilter.addAction(Intent.ACTION_USER_PRESENT)
|
||||||
def onReceive(context: Context, intent: Intent) {
|
lockReceiver = new BroadcastReceiver() {
|
||||||
if (getState == State.CONNECTED) {
|
def onReceive(context: Context, intent: Intent) {
|
||||||
val action = intent.getAction
|
if (getState == State.CONNECTED) {
|
||||||
if (action == Intent.ACTION_SCREEN_OFF) {
|
val action = intent.getAction
|
||||||
notifyForegroundAlert(getString(R.string.forward_success),
|
if (action == Intent.ACTION_SCREEN_OFF) {
|
||||||
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), false)
|
notifyForegroundAlert(getString(R.string.forward_success),
|
||||||
} else if (action == Intent.ACTION_SCREEN_ON) {
|
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), false)
|
||||||
val keyGuard = getSystemService(Context.KEYGUARD_SERVICE).asInstanceOf[KeyguardManager]
|
} else if (action == Intent.ACTION_SCREEN_ON) {
|
||||||
if (!keyGuard.inKeyguardRestrictedInputMode) {
|
val keyGuard = getSystemService(Context.KEYGUARD_SERVICE).asInstanceOf[KeyguardManager]
|
||||||
|
if (!keyGuard.inKeyguardRestrictedInputMode) {
|
||||||
|
notifyForegroundAlert(getString(R.string.forward_success),
|
||||||
|
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), true)
|
||||||
|
}
|
||||||
|
} else if (action == Intent.ACTION_USER_PRESENT) {
|
||||||
notifyForegroundAlert(getString(R.string.forward_success),
|
notifyForegroundAlert(getString(R.string.forward_success),
|
||||||
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), true)
|
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), true)
|
||||||
}
|
}
|
||||||
} else if (action == Intent.ACTION_USER_PRESENT) {
|
}
|
||||||
notifyForegroundAlert(getString(R.string.forward_success),
|
|
||||||
getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName), true)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
registerReceiver(lockReceiver, screenFilter)
|
||||||
}
|
}
|
||||||
registerReceiver(lockReceiver, screenFilter)
|
|
||||||
|
|
||||||
// send event
|
// send event
|
||||||
application.tracker.send(new HitBuilders.EventBuilder()
|
application.tracker.send(new HitBuilders.EventBuilder()
|
||||||
@@ -605,9 +608,12 @@ class ShadowsocksNatService extends Service with BaseService {
|
|||||||
unregisterReceiver(closeReceiver)
|
unregisterReceiver(closeReceiver)
|
||||||
closeReceiver = null
|
closeReceiver = null
|
||||||
}
|
}
|
||||||
if (lockReceiver != null) {
|
|
||||||
unregisterReceiver(lockReceiver)
|
if (Utils.isLollipopOrAbove) {
|
||||||
lockReceiver = null
|
if (lockReceiver != null) {
|
||||||
|
unregisterReceiver(lockReceiver)
|
||||||
|
lockReceiver = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// send event
|
// send event
|
||||||
|
|||||||
@@ -58,7 +58,9 @@ class ShadowsocksRunnerActivity extends Activity {
|
|||||||
override def onServiceConnected(name: ComponentName, service: IBinder) {
|
override def onServiceConnected(name: ComponentName, service: IBinder) {
|
||||||
bgService = IShadowsocksService.Stub.asInterface(service)
|
bgService = IShadowsocksService.Stub.asInterface(service)
|
||||||
handler.postDelayed(new Runnable() {
|
handler.postDelayed(new Runnable() {
|
||||||
override def run() = startBackgroundService()
|
override def run() {
|
||||||
|
if (bgService != null) startBackgroundService()
|
||||||
|
}
|
||||||
}, 1000)
|
}, 1000)
|
||||||
}
|
}
|
||||||
override def onServiceDisconnected(name: ComponentName) {
|
override def onServiceDisconnected(name: ComponentName) {
|
||||||
|
|||||||
@@ -155,8 +155,9 @@ class ShadowsocksVpnService extends VpnService with BaseService {
|
|||||||
val conf = {
|
val conf = {
|
||||||
if (Utils.isLollipopOrAbove && config.route == Route.BYPASS_CHN) {
|
if (Utils.isLollipopOrAbove && config.route == Route.BYPASS_CHN) {
|
||||||
val reject = ConfigUtils.getRejectList(getContext, application)
|
val reject = ConfigUtils.getRejectList(getContext, application)
|
||||||
|
val blackList = ConfigUtils.getBlackList(getContext, application)
|
||||||
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, "0.0.0.0", 8153,
|
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, "0.0.0.0", 8153,
|
||||||
Path.BASE + "pdnsd-vpn.pid", reject, reject, 8163)
|
Path.BASE + "pdnsd-vpn.pid", reject, blackList, 8163)
|
||||||
} else {
|
} else {
|
||||||
ConfigUtils.PDNSD_LOCAL.formatLocal(Locale.ENGLISH, "0.0.0.0", 8153,
|
ConfigUtils.PDNSD_LOCAL.formatLocal(Locale.ENGLISH, "0.0.0.0", 8153,
|
||||||
Path.BASE + "pdnsd-vpn.pid", 8163)
|
Path.BASE + "pdnsd-vpn.pid", 8163)
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ object ConfigUtils {
|
|||||||
| cache_dir = "/data/data/com.github.shadowsocks";
|
| cache_dir = "/data/data/com.github.shadowsocks";
|
||||||
| server_ip = %s;
|
| server_ip = %s;
|
||||||
| server_port = %d;
|
| server_port = %d;
|
||||||
| query_method = udp_tcp;
|
| query_method = tcp_only;
|
||||||
| run_ipv4 = on;
|
| run_ipv4 = on;
|
||||||
| min_ttl = 15m;
|
| min_ttl = 15m;
|
||||||
| max_ttl = 1w;
|
| max_ttl = 1w;
|
||||||
@@ -161,18 +161,8 @@ object ConfigUtils {
|
|||||||
| reject = %s;
|
| reject = %s;
|
||||||
| reject_policy = fail;
|
| reject_policy = fail;
|
||||||
| reject_recursively = on;
|
| reject_recursively = on;
|
||||||
| uptest = none;
|
| exclude = %s;
|
||||||
| preset = on;
|
| policy = included;
|
||||||
|}
|
|
||||||
|
|
|
||||||
|server {
|
|
||||||
| label= "secure";
|
|
||||||
| port = 443;
|
|
||||||
| ip = 208.67.220.220,113.20.8.17,77.66.84.233,176.56.237.171;
|
|
||||||
| timeout = 3;
|
|
||||||
| reject = %s;
|
|
||||||
| reject_policy = fail;
|
|
||||||
| reject_recursively = on;
|
|
||||||
| uptest = none;
|
| uptest = none;
|
||||||
| preset = on;
|
| preset = on;
|
||||||
|}
|
|}
|
||||||
@@ -218,6 +208,17 @@ object ConfigUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def getBlackList(context: Context, app: ShadowsocksApplication): String = {
|
||||||
|
val default = context.getString(R.string.black_list)
|
||||||
|
try {
|
||||||
|
val container = app.containerHolder.getContainer
|
||||||
|
val update = container.getString("black_list")
|
||||||
|
if (update == null || update.isEmpty) default else update
|
||||||
|
} catch {
|
||||||
|
case ex: Exception => default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def getPublicConfig(context: Context, container: Container, config: Config): Config = {
|
def getPublicConfig(context: Context, container: Container, config: Config): Config = {
|
||||||
val url = container.getString("proxy_url")
|
val url = container.getString("proxy_url")
|
||||||
val sig = Utils.getSignature(context)
|
val sig = Utils.getSignature(context)
|
||||||
|
|||||||
@@ -52,17 +52,21 @@ object Parser {
|
|||||||
if (uri.getScheme == Scheme.SS) {
|
if (uri.getScheme == Scheme.SS) {
|
||||||
val encoded = data.replace(Scheme.SS + "://", "")
|
val encoded = data.replace(Scheme.SS + "://", "")
|
||||||
val content = new String(Base64.decode(encoded, Base64.NO_PADDING), "UTF-8")
|
val content = new String(Base64.decode(encoded, Base64.NO_PADDING), "UTF-8")
|
||||||
val info = content.split('@')
|
val methodIdx = content.indexOf(':')
|
||||||
val encinfo = info(0).split(':')
|
val passwordIdx = content.lastIndexOf('@')
|
||||||
val serverinfo = info(1).split(':')
|
val hostIdx = content.lastIndexOf(':')
|
||||||
|
val method = content.substring(0, methodIdx)
|
||||||
|
val password = content.substring(methodIdx + 1, passwordIdx)
|
||||||
|
val host = content.substring(passwordIdx + 1, hostIdx)
|
||||||
|
val port = content.substring(hostIdx + 1)
|
||||||
|
|
||||||
val profile = new Profile
|
val profile = new Profile
|
||||||
profile.name = serverinfo(0)
|
profile.name = host
|
||||||
profile.host = serverinfo(0)
|
profile.host = host
|
||||||
profile.remotePort = serverinfo(1).toInt
|
profile.remotePort = port.toInt
|
||||||
profile.localPort = 1080
|
profile.localPort = 1080
|
||||||
profile.method = encinfo(0)
|
profile.method = method.toLowerCase
|
||||||
profile.password = encinfo(1)
|
profile.password = password
|
||||||
return Some(profile)
|
return Some(profile)
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
Reference in New Issue
Block a user