update tun2socks

This commit is contained in:
Max Lv
2013-06-05 11:17:40 +08:00
parent b3e3cb07a4
commit c486fd75aa
7 changed files with 73 additions and 71 deletions
@@ -50,6 +50,7 @@ import android.net.VpnService
import org.apache.http.conn.util.InetAddressUtils
import android.os.Message
import scala.Some
import scala.concurrent.ops._
object ShadowVpnService {
def isServiceStarted(context: Context): Boolean = {
@@ -136,18 +137,20 @@ class ShadowVpnService extends VpnService {
}
def startShadowsocksDaemon() {
new Thread {
override def run() {
val cmd: String = (BASE +
"shadowsocks -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\" -f " +
BASE +
"shadowsocks.pid")
.format(config.proxy, config.remotePort, config.localPort, config.sitekey,
config.encMethod)
Log.d(TAG, cmd)
System.exec(cmd)
}
}.start()
spawn {
val cmd: String = (BASE +
"shadowsocks -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\" -f " +
BASE +
"shadowsocks.pid")
.format(config.proxy, config.remotePort, config.localPort, config.sitekey, config.encMethod)
Log.d(TAG, cmd)
System.exec(cmd)
}
}
def startDnsDaemon() {
val cmd: String = BASE + "pdnsd -c " + BASE + "pdnsd.conf"
Utils.runCommand(cmd)
}
def getVersionName: String = {
@@ -182,43 +185,41 @@ class ShadowVpnService extends VpnService {
config = Extra.get(intent)
new Thread(new Runnable {
def run() {
killProcesses()
spawn {
killProcesses()
// Resolve server address
var resolved: Boolean = false
if (!InetAddressUtils.isIPv4Address(config.proxy) &&
!InetAddressUtils.isIPv6Address(config.proxy)) {
Utils.resolve(config.proxy, enableIPv6 = true) match {
case Some(addr) =>
config.proxy = addr
resolved = true
case None => resolved = false
}
} else {
resolved = true
// Resolve server address
var resolved: Boolean = false
if (!InetAddressUtils.isIPv4Address(config.proxy) &&
!InetAddressUtils.isIPv6Address(config.proxy)) {
Utils.resolve(config.proxy, enableIPv6 = true) match {
case Some(addr) =>
config.proxy = addr
resolved = true
case None => resolved = false
}
// Resolve UDP gateway
if (resolved) {
Utils.resolve("u.maxcdn.info", enableIPv6 = false) match {
case Some(host) => udpgw = host
case None => resolved = false
}
}
if (resolved && handleConnection) {
handler.sendEmptyMessageDelayed(MSG_CONNECT_SUCCESS, 300)
} else {
notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed))
handler.sendEmptyMessageDelayed(MSG_CONNECT_FAIL, 300)
handler.sendEmptyMessageDelayed(MSG_STOP_SELF, 500)
}
handler.sendEmptyMessageDelayed(MSG_CONNECT_FINISH, 300)
} else {
resolved = true
}
}).start()
// Resolve UDP gateway
if (resolved) {
Utils.resolve("u.maxcdn.info", enableIPv6 = false) match {
case Some(host) => udpgw = host
case None => resolved = false
}
}
if (resolved && handleConnection) {
handler.sendEmptyMessageDelayed(MSG_CONNECT_SUCCESS, 300)
} else {
notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed))
handler.sendEmptyMessageDelayed(MSG_CONNECT_FAIL, 300)
handler.sendEmptyMessageDelayed(MSG_STOP_SELF, 500)
}
handler.sendEmptyMessageDelayed(MSG_CONNECT_FINISH, 300)
}
}
def waitForProcess(name: String): Boolean = {
@@ -310,19 +311,21 @@ class ShadowVpnService extends VpnService {
val cmd = (BASE +
"tun2socks --netif-ipaddr %s "
+ "--udpgw-remote-server-addr %s:7300 "
// + "--udpgw-remote-server-addr %s:7300 "
+ "--dnsgw 127.0.0.1:8153 "
+ "--netif-netmask 255.255.255.0 "
+ "--socks-server-addr 127.0.0.1:%d "
+ "--tunfd %d "
+ "--tunmtu %d "
+ "--pid %stun2socks.pid")
.format(localAddress.format(2), udpgw, config.localPort, fd, VPN_MTU, BASE)
.format(localAddress.format(2), config.localPort, fd, VPN_MTU, BASE)
Log.d(TAG, cmd)
System.exec(cmd)
}
/** Called when the activity is first created. */
def handleConnection: Boolean = {
startDnsDaemon()
startShadowsocksDaemon()
startVpn()
true
@@ -384,11 +387,9 @@ class ShadowVpnService extends VpnService {
unregisterReceiver(receiver)
receiver = null
}
new Thread {
override def run() {
killProcesses()
}
}.start()
spawn {
killProcesses()
}
if (conn != null) {
conn.close()
conn = null