Commit 062f4970 authored by Max Lv's avatar Max Lv

update udpgw

parent f38981e5
...@@ -86,7 +86,9 @@ class ShadowVpnService extends VpnService { ...@@ -86,7 +86,9 @@ class ShadowVpnService extends VpnService {
val MSG_HOST_CHANGE: Int = 4 val MSG_HOST_CHANGE: Int = 4
val MSG_STOP_SELF: Int = 5 val MSG_STOP_SELF: Int = 5
val VPN_MTU = 1500 val VPN_MTU = 1500
var conn: ParcelFileDescriptor = null var conn: ParcelFileDescriptor = null
var udpgw: String = null
def getPid(name: String): Int = { def getPid(name: String): Int = {
try { try {
...@@ -184,6 +186,8 @@ class ShadowVpnService extends VpnService { ...@@ -184,6 +186,8 @@ class ShadowVpnService extends VpnService {
new Thread(new Runnable { new Thread(new Runnable {
def run() { def run() {
handler.sendEmptyMessage(MSG_CONNECT_START) handler.sendEmptyMessage(MSG_CONNECT_START)
// Resolve server address
var resolved: Boolean = false var resolved: Boolean = false
if (!InetAddressUtils.isIPv4Address(appHost) && !InetAddressUtils.isIPv6Address(appHost)) { if (!InetAddressUtils.isIPv4Address(appHost) && !InetAddressUtils.isIPv6Address(appHost)) {
if (Utils.isIPv6Support) { if (Utils.isIPv6Support) {
...@@ -207,6 +211,15 @@ class ShadowVpnService extends VpnService { ...@@ -207,6 +211,15 @@ class ShadowVpnService extends VpnService {
} else { } else {
resolved = true resolved = true
} }
// Resolve UDP gateway
if (resolved) {
resolve("u.maxcdn.info", Type.A) match {
case Some(host) => udpgw = host
case None => resolved = false
}
}
if (resolved && handleConnection) { if (resolved && handleConnection) {
notifyAlert(getString(R.string.forward_success), getString(R.string.service_running)) notifyAlert(getString(R.string.forward_success), getString(R.string.service_running))
handler.sendEmptyMessageDelayed(MSG_CONNECT_SUCCESS, 500) handler.sendEmptyMessageDelayed(MSG_CONNECT_SUCCESS, 500)
...@@ -294,9 +307,9 @@ class ShadowVpnService extends VpnService { ...@@ -294,9 +307,9 @@ class ShadowVpnService extends VpnService {
val fd = conn.getFd val fd = conn.getFd
val cmd = (BASE + "tun2socks --netif-ipaddr 172.16.0.2 --udpgw-remote-server-addr 158.255.208.201:7300 " + val cmd = (BASE + "tun2socks --netif-ipaddr 172.16.0.2 --udpgw-remote-server-addr %s:7300 " +
"--netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:%d --tunfd %d --tunmtu %d --pid " + BASE + "tun2socks.pid") "--netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:%d --tunfd %d --tunmtu %d --pid " + BASE + "tun2socks.pid")
.format(localPort, fd, VPN_MTU) .format(udpgw, localPort, fd, VPN_MTU)
Log.d(TAG, cmd) Log.d(TAG, cmd)
System.exec(cmd) System.exec(cmd)
......
...@@ -49,6 +49,35 @@ import org.apache.http.conn.util.InetAddressUtils ...@@ -49,6 +49,35 @@ import org.apache.http.conn.util.InetAddressUtils
import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.ArrayBuffer
object Utils { object Utils {
/**
* Get local IPv4 address
*/
def getIPv4Address: Option[String] = {
try {
val interfaces = NetworkInterface.getNetworkInterfaces
while (interfaces.hasMoreElements) {
val intf = interfaces.nextElement()
val addrs = intf.getInetAddresses
while (addrs.hasMoreElements) {
val addr = addrs.nextElement()
if (!addr.isLoopbackAddress && !addr.isLinkLocalAddress) {
val sAddr = addr.getHostAddress.toUpperCase
if (InetAddressUtils.isIPv4Address(sAddr)) {
return Some(sAddr)
}
}
}
}
}
catch {
case ex: Exception => {
Log.e(TAG, "Failed to get interfaces' addresses.", ex)
}
}
None
}
/** /**
* If there exists a valid IPv6 interface * If there exists a valid IPv6 interface
*/ */
......
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