From e708e117be75e42385d18290bf8076922f2f272f Mon Sep 17 00:00:00 2001 From: Max Lv Date: Tue, 9 Dec 2014 20:59:04 +0800 Subject: [PATCH] fix #171 --- .../com/github/shadowsocks/Shadowsocks.scala | 25 ++++++++------- .../shadowsocks/ShadowsocksNatService.scala | 31 ++++++++++--------- .../shadowsocks/ShadowsocksVpnService.scala | 15 ++++----- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index e959a828..99060a17 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -40,6 +40,7 @@ package com.github.shadowsocks import java.util import java.io.{OutputStream, InputStream, ByteArrayInputStream, ByteArrayOutputStream, IOException, FileOutputStream} +import java.util.Locale import android.app.backup.BackupManager import android.app.{Activity, AlertDialog, ProgressDialog} @@ -326,8 +327,8 @@ class Shadowsocks val cmd = new ArrayBuffer[String]() for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks", "tun2socks")) { - cmd.append("chmod 666 %s%s-nat.pid".format(Path.BASE, task)) - cmd.append("chmod 666 %s%s-vpn.pid".format(Path.BASE, task)) + cmd.append("chmod 666 %s%s-nat.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) + cmd.append("chmod 666 %s%s-vpn.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) } Console.runRootCommand(cmd.toArray) cmd.clear() @@ -336,17 +337,17 @@ class Shadowsocks try { val pid_nat = scala.io.Source.fromFile(Path.BASE + task + "-nat.pid").mkString.trim.toInt val pid_vpn = scala.io.Source.fromFile(Path.BASE + task + "-vpn.pid").mkString.trim.toInt - cmd.append("kill -9 %d".format(pid_nat)) - cmd.append("kill -9 %d".format(pid_vpn)) + cmd.append("kill -9 %d".formatLocal(Locale.ENGLISH, pid_nat)) + cmd.append("kill -9 %d".formatLocal(Locale.ENGLISH, pid_vpn)) Process.killProcess(pid_nat) Process.killProcess(pid_vpn) } catch { case e: Throwable => Log.e(Shadowsocks.TAG, "unable to kill " + task) } - cmd.append("rm -f %s%s-nat.pid".format(Path.BASE, task)) - cmd.append("rm -f %s%s-nat.conf".format(Path.BASE, task)) - cmd.append("rm -f %s%s-vpn.pid".format(Path.BASE, task)) - cmd.append("rm -f %s%s-vpn.conf".format(Path.BASE, task)) + cmd.append("rm -f %s%s-nat.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) + cmd.append("rm -f %s%s-nat.conf".formatLocal(Locale.ENGLISH, Path.BASE, task)) + cmd.append("rm -f %s%s-vpn.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) + cmd.append("rm -f %s%s-vpn.conf".formatLocal(Locale.ENGLISH, Path.BASE, task)) } Console.runCommand(cmd.toArray) Console.runRootCommand(cmd.toArray) @@ -673,7 +674,7 @@ class Shadowsocks if (!profile.isDefined) return false new AlertDialog.Builder(this) - .setMessage(String.format(getString(R.string.remove_profile), profile.get.name)) + .setMessage(String.formatLocal(Locale.ENGLISH, getString(R.string.remove_profile), profile.get.name)) .setCancelable(false) .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { override def onClick(dialog: DialogInterface, i: Int) = dialog.cancel() @@ -841,7 +842,7 @@ class Shadowsocks val ab = new ArrayBuffer[String] ab.append("mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system") for (executable <- Shadowsocks.EXECUTABLES) { - ab.append("cp %s%s /system/bin/".format(Path.BASE, executable)) + ab.append("cp %s%s /system/bin/".formatLocal(Locale.ENGLISH, Path.BASE, executable)) ab.append("chmod 755 /system/bin/" + executable) ab.append("chown root:shell /system/bin/" + executable) } @@ -977,7 +978,7 @@ class Shadowsocks } new AlertDialog.Builder(this) - .setTitle(getString(R.string.about_title).format(versionName)) + .setTitle(getString(R.string.about_title).formatLocal(Locale.ENGLISH, versionName)) .setCancelable(false) .setNegativeButton(getString(R.string.ok_iknow), new DialogInterface.OnClickListener() { override def onClick(dialog: DialogInterface, id: Int) { @@ -1022,7 +1023,7 @@ class Shadowsocks .setDuration(Configuration.DURATION_LONG) .build() Crouton - .makeText(Shadowsocks.this, getString(R.string.vpn_error).format(m), style) + .makeText(Shadowsocks.this, getString(R.string.vpn_error).formatLocal(Locale.ENGLISH, m), style) .setConfiguration(config) .show() } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index 615bf54d..dbed09f6 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -43,6 +43,7 @@ import java.io.File import java.lang.reflect.{InvocationTargetException, Method} import java.net.InetAddress import java.util +import java.util.Locale import android.app.{Notification, NotificationManager, PendingIntent, Service} import android.content._ @@ -104,7 +105,7 @@ class ShadowsocksNatService extends Service with BaseService { val netId = getNetId(network) val oldDns = dnsAddressCache.get(netId) if (oldDns != null) { - cmdBuf.append("ndc resolver setnetdns %d \"\" %s".format(netId, oldDns)) + cmdBuf.append("ndc resolver setnetdns %d \"\" %s".formatLocal(Locale.ENGLISH, netId, oldDns)) dnsAddressCache.remove(netId) } }) @@ -128,7 +129,7 @@ class ShadowsocksNatService extends Service with BaseService { val curDns = curDnsList.asScala.map(ip => ip.getHostAddress).mkString(" ") if (curDns != dns) { dnsAddressCache.put(netId, curDns) - cmdBuf.append("ndc resolver setnetdns %d \"\" %s".format(netId, dns)) + cmdBuf.append("ndc resolver setnetdns %d \"\" %s".formatLocal(Locale.ENGLISH, netId, dns)) } } } @@ -153,7 +154,7 @@ class ShadowsocksNatService extends Service with BaseService { val networkInfo = manager.getNetworkInfo(network) if (networkInfo.isAvailable) { val netId = network.getClass.getDeclaredField("netId").get(network).asInstanceOf[Int] - cmdBuf.append("ndc resolver flushnet %d".format(netId)) + cmdBuf.append("ndc resolver flushnet %d".formatLocal(Locale.ENGLISH, netId)) } }) Console.runRootCommand(cmdBuf.toArray) @@ -193,7 +194,7 @@ class ShadowsocksNatService extends Service with BaseService { } val conf = ConfigUtils - .SHADOWSOCKS.format(config.proxy, config.remotePort, config.localPort, + .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, config.localPort, config.sitekey, config.encMethod, 10) ConfigUtils.printToFile(new File(Path.BASE + "ss-local-nat.conf"))(p => { p.println(conf) @@ -217,7 +218,7 @@ class ShadowsocksNatService extends Service with BaseService { def startTunnel() { if (config.isUdpDns) { val conf = ConfigUtils - .SHADOWSOCKS.format(config.proxy, config.remotePort, 8153, + .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, 8153, config.sitekey, config.encMethod, 10) ConfigUtils.printToFile(new File(Path.BASE + "ss-tunnel-nat.conf"))(p => { p.println(conf) @@ -245,7 +246,7 @@ class ShadowsocksNatService extends Service with BaseService { } else { val conf = ConfigUtils - .SHADOWSOCKS.format(config.proxy, config.remotePort, 8163, + .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, 8163, config.sitekey, config.encMethod, 10) ConfigUtils.printToFile(new File(Path.BASE + "ss-tunnel-nat.conf"))(p => { p.println(conf) @@ -266,10 +267,10 @@ class ShadowsocksNatService extends Service with BaseService { def startDnsDaemon() { val conf = if (Utils.isLollipopOrAbove) { ConfigUtils - .PDNSD_BYPASS.format("127.0.0.1", 53, Path.BASE + "pdnsd-nat.pid", getString(R.string.exclude), 8163) + .PDNSD_BYPASS.formatLocal(Locale.ENGLISH, "127.0.0.1", 53, Path.BASE + "pdnsd-nat.pid", getString(R.string.exclude), 8163) } else { ConfigUtils - .PDNSD_BYPASS.format("127.0.0.1", 8153, Path.BASE + "pdnsd-nat.pid", getString(R.string.exclude), 8163) + .PDNSD_BYPASS.formatLocal(Locale.ENGLISH, "127.0.0.1", 8153, Path.BASE + "pdnsd-nat.pid", getString(R.string.exclude), 8163) } ConfigUtils.printToFile(new File(Path.BASE + "pdnsd-nat.conf"))(p => { p.println(conf) @@ -299,9 +300,9 @@ class ShadowsocksNatService extends Service with BaseService { } def startRedsocksDaemon() { - val conf = ConfigUtils.REDSOCKS.format(config.localPort) + val conf = ConfigUtils.REDSOCKS.formatLocal(Locale.ENGLISH, config.localPort) val cmd = Path.BASE + "redsocks -p %sredsocks-nat.pid -c %sredsocks-nat.conf" - .format(Path.BASE, Path.BASE) + .formatLocal(Locale.ENGLISH, Path.BASE, Path.BASE) ConfigUtils.printToFile(new File(Path.BASE + "redsocks-nat.conf"))(p => { p.println(conf) }) @@ -394,7 +395,7 @@ class ShadowsocksNatService extends Service with BaseService { val cmd = new ArrayBuffer[String]() for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks")) { - cmd.append("chmod 666 %s%s-nat.pid".format(Path.BASE, task)) + cmd.append("chmod 666 %s%s-nat.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) } Console.runRootCommand(cmd.toArray) cmd.clear() @@ -402,13 +403,13 @@ class ShadowsocksNatService extends Service with BaseService { for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks")) { try { val pid = scala.io.Source.fromFile(Path.BASE + task + "-nat.pid").mkString.trim.toInt - cmd.append("kill -9 %d".format(pid)) + cmd.append("kill -9 %d".formatLocal(Locale.ENGLISH, pid)) Process.killProcess(pid) } catch { case e: Throwable => Log.e(TAG, "unable to kill " + task) } - cmd.append("rm -f %s%s-nat.pid".format(Path.BASE, task)) - cmd.append("rm -f %s%s-nat.conf".format(Path.BASE, task)) + cmd.append("rm -f %s%s-nat.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) + cmd.append("rm -f %s%s-nat.conf".formatLocal(Locale.ENGLISH, Path.BASE, task)) } Console.runRootCommand(cmd.toArray) @@ -564,7 +565,7 @@ class ShadowsocksNatService extends Service with BaseService { flushDns() notifyForegroundAlert(getString(R.string.forward_success), - getString(R.string.service_running).format(config.profileName)) + getString(R.string.service_running).formatLocal(Locale.ENGLISH, config.profileName)) changeState(State.CONNECTED) } else { changeState(State.STOPPED, getString(R.string.service_failed)) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala index 0c512bde..33829e30 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala @@ -40,6 +40,7 @@ package com.github.shadowsocks import java.io.File +import java.util.Locale import android.app._ import android.content._ @@ -107,7 +108,7 @@ class ShadowsocksVpnService extends VpnService with BaseService { } val conf = ConfigUtils - .SHADOWSOCKS.format(config.proxy, config.remotePort, config.localPort, + .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, config.localPort, config.sitekey, config.encMethod, 10) ConfigUtils.printToFile(new File(Path.BASE + "ss-local-vpn.conf"))(p => { p.println(conf) @@ -130,7 +131,7 @@ class ShadowsocksVpnService extends VpnService with BaseService { def startDnsTunnel() = { val conf = ConfigUtils - .SHADOWSOCKS.format(config.proxy, config.remotePort, 8163, + .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, 8163, config.sitekey, config.encMethod, 10) ConfigUtils.printToFile(new File(Path.BASE + "ss-tunnel-vpn.conf"))(p => { p.println(conf) @@ -150,9 +151,9 @@ class ShadowsocksVpnService extends VpnService with BaseService { def startDnsDaemon() { val conf = { if (Utils.isLollipopOrAbove) { - ConfigUtils.PDNSD_BYPASS.format("0.0.0.0", 8153, Path.BASE + "pdnsd-vpn.pid", getString(R.string.exclude), 8163) + ConfigUtils.PDNSD_BYPASS.formatLocal(Locale.ENGLISH, "0.0.0.0", 8153, Path.BASE + "pdnsd-vpn.pid", getString(R.string.exclude), 8163) } else { - ConfigUtils.PDNSD_LOCAL.format("0.0.0.0", 8163) + ConfigUtils.PDNSD_LOCAL.formatLocal(Locale.ENGLISH, "0.0.0.0", 8163) } } ConfigUtils.printToFile(new File(Path.BASE + "pdnsd-vpn.conf"))(p => { @@ -182,7 +183,7 @@ class ShadowsocksVpnService extends VpnService with BaseService { builder .setSession(config.profileName) .setMtu(VPN_MTU) - .addAddress(PRIVATE_VLAN.format("1"), 24) + .addAddress(PRIVATE_VLAN.formatLocal(Locale.ENGLISH, "1"), 24) .addDnsServer("8.8.8.8") if (Utils.isLollipopOrAbove) { @@ -312,12 +313,12 @@ class ShadowsocksVpnService extends VpnService with BaseService { + "--tunmtu %d " + "--loglevel 3 " + "--pid %stun2socks-vpn.pid") - .format(PRIVATE_VLAN.format("2"), config.localPort, fd, VPN_MTU, Path.BASE) + .formatLocal(Locale.ENGLISH, PRIVATE_VLAN.formatLocal(Locale.ENGLISH, "2"), config.localPort, fd, VPN_MTU, Path.BASE) if (config.isUdpDns) cmd += " --enable-udprelay" else - cmd += " --dnsgw %s:8153".format(PRIVATE_VLAN.format("1")) + cmd += " --dnsgw %s:8153".formatLocal(Locale.ENGLISH, PRIVATE_VLAN.formatLocal(Locale.ENGLISH, "1")) if (Utils.isLollipopOrAbove) { cmd += " --fake-proc"