Commit 383e9404 authored by Max Lv's avatar Max Lv

Run tun2socks in seprate process for now

parent 16d2cd9a
...@@ -23,6 +23,7 @@ local.sbt ...@@ -23,6 +23,7 @@ local.sbt
out/ out/
#NDK #NDK
src/main/obj
src/main/libs src/main/libs
src/main/assets/armeabi src/main/assets/armeabi
src/main/assets/armeabi-v7a src/main/assets/armeabi-v7a
......
...@@ -18,5 +18,6 @@ install: ...@@ -18,5 +18,6 @@ install:
- 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
script: script:
- cp local.properties.travis local.properties - cp local.properties.travis local.properties
- ./build.sh
- sbt android:package-release - sbt android:package-release
- exit 0 - exit 0
...@@ -29,6 +29,9 @@ Help to translate shadowsocks: http://crowdin.net/project/shadowsocks/invite ...@@ -29,6 +29,9 @@ Help to translate shadowsocks: http://crowdin.net/project/shadowsocks/invite
```bash ```bash
git submodule update --init git submodule update --init
# Build native binaries
./build.sh
# Build the App # Build the App
sbt clean android:package-release sbt clean android:package-release
``` ```
...@@ -47,6 +50,9 @@ Help to translate shadowsocks: http://crowdin.net/project/shadowsocks/invite ...@@ -47,6 +50,9 @@ Help to translate shadowsocks: http://crowdin.net/project/shadowsocks/invite
```bash ```bash
git submodule update --init git submodule update --init
# Build native binaries
./build.sh
# Build the apk # Build the apk
sbt clean android:package-release sbt clean android:package-release
``` ```
......
...@@ -15,7 +15,7 @@ rm -rf assets/armeabi-v7a ...@@ -15,7 +15,7 @@ rm -rf assets/armeabi-v7a
rm -rf assets/x86 rm -rf assets/x86
mkdir -p assets/armeabi-v7a mkdir -p assets/armeabi-v7a
mkdir -p assets/x86 mkdir -p assets/x86
for app in pdnsd redsocks ss-local ss-tunnel tun2socks for app in pdnsd redsocks ss-local ss-tunnel
do do
try mv libs/armeabi-v7a/$app assets/armeabi-v7a/ try mv libs/armeabi-v7a/$app assets/armeabi-v7a/
try mv libs/x86/$app assets/x86/ try mv libs/x86/$app assets/x86/
......
...@@ -2,4 +2,6 @@ resolvers += Resolver.url("scalasbt releases", new URL("http://scalasbt.artifact ...@@ -2,4 +2,6 @@ resolvers += Resolver.url("scalasbt releases", new URL("http://scalasbt.artifact
addSbtPlugin("com.hanhuy.sbt" % "android-sdk-plugin" % "1.3.10") addSbtPlugin("com.hanhuy.sbt" % "android-sdk-plugin" % "1.3.10")
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0") resolvers += Resolver.sbtPluginRepo("snapshots")
addSbtPlugin("com.hanhuy.sbt" % "sbt-idea" % "1.7.0-SNAPSHOT")
<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="84" android:versionCode="85"
android:versionName="2.4.4"> android:versionName="2.4.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"/>
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
<application <application
android:allowBackup="true" android:allowBackup="true"
android:debuggable="true"
android:name=".ShadowsocksApplication" android:name=".ShadowsocksApplication"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
......
...@@ -40,7 +40,7 @@ package com.github.shadowsocks; ...@@ -40,7 +40,7 @@ package com.github.shadowsocks;
public class Tun2Socks { public class Tun2Socks {
static { static {
java.lang.System.loadLibrary("tun2socks-jni"); java.lang.System.loadLibrary("tun2socks");
} }
public static native void start(String[] cmd); public static native void start(String[] cmd);
......
...@@ -214,7 +214,7 @@ LOCAL_CFLAGS += -DBADVPN_THREADWORK_USE_PTHREAD -DBADVPN_LINUX -DBADVPN_BREACTOR ...@@ -214,7 +214,7 @@ LOCAL_CFLAGS += -DBADVPN_THREADWORK_USE_PTHREAD -DBADVPN_LINUX -DBADVPN_BREACTOR
LOCAL_CFLAGS += -DBADVPN_USE_SELFPIPE -DBADVPN_USE_EPOLL LOCAL_CFLAGS += -DBADVPN_USE_SELFPIPE -DBADVPN_USE_EPOLL
LOCAL_CFLAGS += -DBADVPN_LITTLE_ENDIAN -DBADVPN_THREAD_SAFE LOCAL_CFLAGS += -DBADVPN_LITTLE_ENDIAN -DBADVPN_THREAD_SAFE
LOCAL_CFLAGS += -DNDEBUG -DANDROID LOCAL_CFLAGS += -DNDEBUG -DANDROID
#LOCAL_CFLAGS += -DTUN2SOCKS_JNI LOCAL_CFLAGS += -DTUN2SOCKS_JNI
LOCAL_C_INCLUDES:= \ LOCAL_C_INCLUDES:= \
$(LOCAL_PATH)/badvpn/lwip/src/include/ipv4 \ $(LOCAL_PATH)/badvpn/lwip/src/include/ipv4 \
...@@ -288,9 +288,9 @@ LOCAL_MODULE := tun2socks ...@@ -288,9 +288,9 @@ LOCAL_MODULE := tun2socks
LOCAL_LDLIBS := -ldl -llog LOCAL_LDLIBS := -ldl -llog
LOCAL_SRC_FILES := $(addprefix badvpn/, $(TUN2SOCKS_SOURCES)) LOCAL_SRC_FILES := $(addprefix badvpn/, $(TUN2SOCKS_SOURCES)) tun2socks-jni.cpp
include $(BUILD_EXECUTABLE) include $(BUILD_SHARED_LIBRARY)
# OpenSSL # OpenSSL
openssl_subdirs := $(addprefix $(LOCAL_PATH)/openssl/,$(addsuffix /Android.mk, \ openssl_subdirs := $(addprefix $(LOCAL_PATH)/openssl/,$(addsuffix /Android.mk, \
......
...@@ -183,8 +183,6 @@ sock_fd_write(int sock, void *buf, ssize_t buflen, int fd) ...@@ -183,8 +183,6 @@ sock_fd_write(int sock, void *buf, ssize_t buflen, int fd)
size = sendmsg(sock, &msg, 0); size = sendmsg(sock, &msg, 0);
if (size < 0)
perror ("sendmsg");
return size; return size;
} }
...@@ -213,7 +211,6 @@ sock_fd_read(int sock, void *buf, ssize_t bufsize, int *fd) ...@@ -213,7 +211,6 @@ sock_fd_read(int sock, void *buf, ssize_t bufsize, int *fd)
msg.msg_controllen = sizeof(cmsgu.control); msg.msg_controllen = sizeof(cmsgu.control);
size = recvmsg (sock, &msg, 0); size = recvmsg (sock, &msg, 0);
if (size < 0) { if (size < 0) {
perror ("recvmsg");
return -1; return -1;
} }
cmsg = CMSG_FIRSTHDR(&msg); cmsg = CMSG_FIRSTHDR(&msg);
...@@ -474,10 +471,9 @@ static void daemonize(const char* path) { ...@@ -474,10 +471,9 @@ static void daemonize(const char* path) {
int int
recv_tun_fd (void) recv_tun_fd (void)
{ {
int s_fd, c_fd, fd_to_read; int s_fd, fd_to_read;
struct sockaddr_un addr; struct sockaddr_un addr;
socklen_t addr_len; socklen_t addr_len;
char buf[16];
s_fd = socket(AF_UNIX, SOCK_STREAM, 0); s_fd = socket(AF_UNIX, SOCK_STREAM, 0);
if (s_fd < 0) { if (s_fd < 0) {
...@@ -490,42 +486,25 @@ recv_tun_fd (void) ...@@ -490,42 +486,25 @@ recv_tun_fd (void)
addr_len = sizeof(struct sockaddr_un); addr_len = sizeof(struct sockaddr_un);
memset(&addr, 0, addr_len); memset(&addr, 0, addr_len);
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
snprintf(addr.sun_path + 1, 14, "tun2socks"); addr.sun_path[0] = '\0';
strcpy(addr.sun_path+1, "tun2socks");
if (bind(s_fd, (struct sockaddr *) &addr, addr_len) != 0)
{
BLog(BLOG_ERROR, "Error to bind local socket");
close(s_fd);
return -1;
}
BLog(BLOG_NOTICE, "Bind socket");
if (listen(s_fd, 5) != 0) if (connect(s_fd, (struct sockaddr *)&addr, addr_len) != -1)
{ {
BLog(BLOG_ERROR, "Error to listen on local socket"); char buf[16];
close(s_fd);
return -1;
}
BLog(BLOG_NOTICE, "Listen on socket");
if ((c_fd = accept(s_fd, (struct sockaddr *)&addr, &addr_len)) != -1)
{
char buf[1];
BLog(BLOG_NOTICE, "Accept a connection"); BLog(BLOG_NOTICE, "Connected");
read(c_fd, buf, 1); read(s_fd, buf, 1);
sock_fd_read(c_fd, buf, sizeof(buf), &fd_to_read); sock_fd_read(s_fd, buf, sizeof(buf), &fd_to_read);
buf[0] = 0; buf[0] = 0;
write(c_fd, buf, 1); write(s_fd, buf, 1);
close(c_fd); close(s_fd);
} }
else else
{ {
BLog(BLOG_ERROR, "Error to accept socket"); BLog(BLOG_ERROR, "Error to connect: %s", strerror(errno));
close(s_fd); close(s_fd);
return -1; return -1;
} }
...@@ -598,17 +577,6 @@ int main (int argc, char **argv) ...@@ -598,17 +577,6 @@ int main (int argc, char **argv)
if (options.pid) { if (options.pid) {
daemonize(options.pid); daemonize(options.pid);
} }
BLog(BLOG_NOTICE, "Receiving the tun fd");
// Wait to recevie tun fd
if (recv_tun_fd() == -1) {
BLog(BLOG_ERROR, "Failed to recv tun fd");
return -1;
}
BLog(BLOG_NOTICE, "Received the tun fd successfully");
#endif #endif
// clear password contents pointer // clear password contents pointer
...@@ -759,16 +727,17 @@ int main (int argc, char **argv) ...@@ -759,16 +727,17 @@ int main (int argc, char **argv)
netif_remove(&netif); netif_remove(&netif);
} }
BReactor_RemoveTimer(&ss, &tcp_timer);
BFree(device_write_buf);
#ifdef ANDROID #ifdef ANDROID
BLog(BLOG_NOTICE, "Free TCP connections");
tcp_remove(tcp_bound_pcbs); tcp_remove(tcp_bound_pcbs);
tcp_remove(tcp_active_pcbs); tcp_remove(tcp_active_pcbs);
tcp_remove(tcp_tw_pcbs); tcp_remove(tcp_tw_pcbs);
free_connections(); free_connections();
#endif #endif
BReactor_RemoveTimer(&ss, &tcp_timer);
BFree(device_write_buf);
fail5: fail5:
BPending_Free(&lwip_init_job); BPending_Free(&lwip_init_job);
if (options.udpgw_remote_server_addr) { if (options.udpgw_remote_server_addr) {
......
...@@ -123,7 +123,7 @@ object Shadowsocks { ...@@ -123,7 +123,7 @@ object Shadowsocks {
val FEATRUE_PREFS = Array(Key.route, Key.isGlobalProxy, Key.proxyedApps, val FEATRUE_PREFS = Array(Key.route, Key.isGlobalProxy, Key.proxyedApps,
Key.isUdpDns, Key.isAutoConnect) Key.isUdpDns, Key.isAutoConnect)
val EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS, Executable.SS_TUNNEL, Executable.SS_LOCAL, Executable.TUN2SOCKS) val EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS, Executable.SS_TUNNEL, Executable.SS_LOCAL)
// Helper functions // Helper functions
def updateListPreference(pref: Preference, value: String) { def updateListPreference(pref: Preference, value: String) {
......
...@@ -45,7 +45,7 @@ import java.net.InetAddress ...@@ -45,7 +45,7 @@ import java.net.InetAddress
import android.app._ import android.app._
import android.content._ import android.content._
import android.content.pm.{PackageInfo, PackageManager} import android.content.pm.{PackageInfo, PackageManager}
import android.net.{VpnService, LocalSocket, LocalSocketAddress} import android.net.{LocalServerSocket, VpnService, LocalSocket, LocalSocketAddress}
import android.os._ import android.os._
import android.support.v4.app.NotificationCompat import android.support.v4.app.NotificationCompat
import android.util.Log import android.util.Log
...@@ -322,23 +322,25 @@ class ShadowsocksVpnService extends VpnService with BaseService { ...@@ -322,23 +322,25 @@ class ShadowsocksVpnService extends VpnService with BaseService {
if (BuildConfig.DEBUG) Log.d(TAG, cmd) if (BuildConfig.DEBUG) Log.d(TAG, cmd)
Console.runCommand(cmd) Tun2Socks.start(cmd.split(" "))
}
Thread.sleep(300)
// try { def startTunFdServer() {
val localSocket = new LocalSocket() spawn {
val fdServer = new LocalServerSocket("tun2socks")
try {
val localSocket = fdServer.accept()
localSocket.setFileDescriptorsForSend(Array(conn.getFileDescriptor)) localSocket.setFileDescriptorsForSend(Array(conn.getFileDescriptor))
val localAddr = new LocalSocketAddress("tun2socks")
localSocket.connect(localAddr)
val output = localSocket.getOutputStream val output = localSocket.getOutputStream
output.write(1) output.write(1)
output.flush() output.flush()
output.close() output.close()
localSocket.close() localSocket.close()
// } catch { fdServer.close()
// case ex: Exception => // Ignored } catch {
// } case ex: Exception => Log.e(TAG, "Exception", ex) // Ignored
}
}
} }
/** Called when the activity is first created. */ /** Called when the activity is first created. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment