add unix socket

This commit is contained in:
Max Lv
2014-11-24 18:08:15 +08:00
parent 567543d00e
commit 9ee2345fd6
6 changed files with 200 additions and 20 deletions
@@ -123,7 +123,7 @@ object Shadowsocks {
val FEATRUE_PREFS = Array(Key.route, Key.isGlobalProxy, Key.proxyedApps,
Key.isUdpDns, Key.isAutoConnect)
val EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS, Executable.SS_TUNNEL, Executable.SS_LOCAL)
val EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS, Executable.SS_TUNNEL, Executable.SS_LOCAL, Executable.TUN2SOCKS)
// Helper functions
def updateListPreference(pref: Preference, value: String) {
@@ -45,7 +45,7 @@ import java.net.InetAddress
import android.app._
import android.content._
import android.content.pm.{PackageInfo, PackageManager}
import android.net.VpnService
import android.net.{VpnService, LocalSocket, LocalSocketAddress}
import android.os._
import android.support.v4.app.NotificationCompat
import android.util.Log
@@ -322,19 +322,33 @@ class ShadowsocksVpnService extends VpnService with BaseService {
if (BuildConfig.DEBUG) Log.d(TAG, cmd)
spawn {
Tun2Socks.start(cmd.split(" "))
}
Console.runCommand(cmd)
Thread.sleep(300)
// try {
val localSocket = new LocalSocket()
localSocket.setFileDescriptorsForSend(Array(conn.getFileDescriptor))
val localAddr = new LocalSocketAddress("tun2socks")
localSocket.connect(localAddr)
val output = localSocket.getOutputStream
output.write(1)
output.flush()
output.close()
localSocket.close()
// } catch {
// case ex: Exception => // Ignored
// }
}
/** Called when the activity is first created. */
def handleConnection: Boolean = {
startVpn()
startShadowsocksDaemon()
if (!config.isUdpDns) {
startDnsDaemon()
startDnsTunnel()
}
startVpn()
true
}
@@ -362,7 +376,7 @@ class ShadowsocksVpnService extends VpnService with BaseService {
}
def killProcesses() {
for (task <- Array("ss-local", "ss-tunnel", "pdnsd")) {
for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "tun2socks")) {
try {
val pid = scala.io.Source.fromFile(Path.BASE + task + ".pid").mkString.trim.toInt
Process.killProcess(pid)
@@ -371,7 +385,6 @@ class ShadowsocksVpnService extends VpnService with BaseService {
case e: Throwable => Log.e(TAG, "unable to kill " + task, e)
}
}
Tun2Socks.stop();
}
override def startRunner(c: Config) {