From c13cf6f5d2fa953b9df0dfbd023364455010963a Mon Sep 17 00:00:00 2001 From: chentao Date: Fri, 26 Feb 2016 08:43:51 +0800 Subject: [PATCH 1/2] Fix a issue in ProcessUtils --- .../com/github/shadowsocks/utils/ProcessUtils.scala | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/utils/ProcessUtils.scala b/src/main/scala/com/github/shadowsocks/utils/ProcessUtils.scala index 8de7939c..d4c9b2b3 100644 --- a/src/main/scala/com/github/shadowsocks/utils/ProcessUtils.scala +++ b/src/main/scala/com/github/shadowsocks/utils/ProcessUtils.scala @@ -33,8 +33,14 @@ object ProcessUtils { } } - def inShadowsocks[A](fun: => A): Unit = - if(getCurrentProcessName startsWith SHADOWNSOCKS) fun + def inShadowsocks[A](fun: => A): Unit = { + val pName = getCurrentProcessName + if (pName.equals(SHADOWNSOCKS) + || (pName.startsWith(SHADOWNSOCKS) && pName.length > SHADOWNSOCKS.length && pName.charAt(SHADOWNSOCKS.length) != ':')){ + fun + } + } + def inVpn[A](fun: => A): Unit = if (getCurrentProcessName startsWith SHADOWNSOCKS_VPN) fun From 5b9a0d0659397cb3ddbdeaa5822b3575bf114afb Mon Sep 17 00:00:00 2001 From: chentao Date: Fri, 26 Feb 2016 11:48:05 +0800 Subject: [PATCH 2/2] Refine #585 --- .../ShadowsocksDeathRecipient.scala | 2 +- .../shadowsocks/utils/ProcessUtils.scala | 36 ++++++++----------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksDeathRecipient.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksDeathRecipient.scala index 44b4e177..97b4b519 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksDeathRecipient.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksDeathRecipient.scala @@ -17,7 +17,7 @@ class ShadowsocksDeathRecipient(val mContext: ServiceBoundContext) mContext match { case ss: Shadowsocks => - inShadowsocks { + inShadowsocks(mContext) { ss.unregisterCallback ss.bindToService() } diff --git a/src/main/scala/com/github/shadowsocks/utils/ProcessUtils.scala b/src/main/scala/com/github/shadowsocks/utils/ProcessUtils.scala index d4c9b2b3..299ad09c 100644 --- a/src/main/scala/com/github/shadowsocks/utils/ProcessUtils.scala +++ b/src/main/scala/com/github/shadowsocks/utils/ProcessUtils.scala @@ -2,6 +2,7 @@ package com.github.shadowsocks.utils import java.io.{BufferedReader, FileInputStream, InputStreamReader} +import android.content.Context import com.github.shadowsocks.utils.IOUtils._ /** @@ -9,23 +10,16 @@ import com.github.shadowsocks.utils.IOUtils._ */ object ProcessUtils { - val SHADOWNSOCKS = "com.github.shadowsocks" - val SHADOWNSOCKS_VPN = "com.github.shadowsocks:vpn" - val SHADOWNSOCKS_NAT = "com.github.shadowsocks:nat" - val TUN2SOCKS = "/data/data/com.github.shadowsocks/tun2socks" - val SS_LOCAL = "/data/data/com.github.shadowsocks/ss-local" - val SS_TUNNEL = "/data/data/com.github.shadowsocks/ss-tunnel" - val PDNSD = "/data/data/com.github.shadowsocks/pdnsd" - def getCurrentProcessName: String = { inSafe { val inputStream = new FileInputStream("/proc/self/cmdline") val reader = new BufferedReader(new InputStreamReader(inputStream)) autoClose(reader) { - reader.readLine() match { - case name: String => name - case _ => "" - } + val sb = new StringBuilder + var c: Int = 0 + while({c = reader.read(); c > 0}) + sb.append(c.asInstanceOf[Char]) + sb.toString() } } match { case Some(name: String) => name @@ -33,20 +27,18 @@ object ProcessUtils { } } - def inShadowsocks[A](fun: => A): Unit = { - val pName = getCurrentProcessName - if (pName.equals(SHADOWNSOCKS) - || (pName.startsWith(SHADOWNSOCKS) && pName.length > SHADOWNSOCKS.length && pName.charAt(SHADOWNSOCKS.length) != ':')){ - fun - } + def inShadowsocks[A](context: Context)(fun: => A): Unit = { + if (context != null && getCurrentProcessName.equals(context.getPackageName)) fun } - def inVpn[A](fun: => A): Unit = - if (getCurrentProcessName startsWith SHADOWNSOCKS_VPN) fun + def inVpn[A](context: Context)(fun: => A): Unit = { + if (context != null && getCurrentProcessName.equals(context.getPackageName + ":vpn")) fun + } - def inNat[A](fun: => A): Unit = - if (getCurrentProcessName startsWith SHADOWNSOCKS_NAT) fun + def inNat[A](context: Context)(fun: => A): Unit = { + if (context != null && getCurrentProcessName.equals(context.getPackageName + ":nat")) fun + } }