drop abstract domain socket

This commit is contained in:
Max Lv
2015-08-07 22:30:09 +08:00
parent 9a841e901c
commit 97bd714beb
7 changed files with 38 additions and 35 deletions
@@ -219,6 +219,11 @@ class Shadowsocks
state = bgService.getState
// set the listener
switchButton.setOnCheckedChangeListener(Shadowsocks.this)
if (!status.getBoolean(getVersionName, false)) {
status.edit.putBoolean(getVersionName, true).commit()
recovery();
}
}
override def onServiceDisconnected(name: ComponentName) {
@@ -401,11 +406,6 @@ class Shadowsocks
def prepareStartService() {
showProgress(R.string.connecting)
spawn {
if (!status.getBoolean(getVersionName, false)) {
status.edit.putBoolean(getVersionName, true).commit()
install()
}
if (isVpnEnabled) {
val intent = VpnService.prepare(this)
if (intent != null) {
@@ -104,12 +104,14 @@ class ShadowsocksVpnService extends VpnService with BaseService {
}
override def onCreate() {
super.onCreate()
ConfigUtils.refresh(this)
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
.asInstanceOf[NotificationManager]
}
override def onRevoke() {
@@ -182,11 +184,6 @@ class ShadowsocksVpnService extends VpnService with BaseService {
override def startRunner(c: Config) {
if (vpnThread != null) {
vpnThread.stopThread()
vpnThread = null
}
vpnThread = new ShadowsocksVpnThread(this)
vpnThread.start()
@@ -45,27 +45,42 @@ import java.util.concurrent.Executors
import android.net.{LocalServerSocket, LocalSocket, LocalSocketAddress}
import android.util.Log
object ShadowsocksVpn {
@volatile var serverSocket: LocalServerSocket = null
}
class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
val TAG = "ShadowsocksVpnService"
val PATH = "shadowsocks_protect"
val PATH = "/data/data/com.github.shadowsocks/protect_path"
var isRunning: Boolean = true
@volatile var isRunning: Boolean = true
@volatile var serverSocket: LocalServerSocket = null
def closeServerSocket() {
if (serverSocket != null) {
try {
serverSocket.close()
} catch {
case _: Exception => // ignore
}
serverSocket = null
}
}
def stopThread() {
isRunning = false
closeServerSocket()
}
override def run(): Unit = {
try {
if (ShadowsocksVpn.serverSocket == null) {
ShadowsocksVpn.serverSocket = new LocalServerSocket(PATH)
}
new File(PATH).delete()
} catch {
case _: Exception => // ignore
}
try {
val localSocket = new LocalSocket
localSocket.bind(new LocalSocketAddress(PATH, LocalSocketAddress.Namespace.FILESYSTEM))
serverSocket = new LocalServerSocket(localSocket.getFileDescriptor)
} catch {
case e: IOException =>
Log.e(TAG, "unable to bind", e)
@@ -76,7 +91,7 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
while (isRunning) {
try {
val socket = ShadowsocksVpn.serverSocket.accept()
val socket = serverSocket.accept()
pool.execute(new Runnable {
override def run() {
@@ -123,14 +138,6 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
} catch {
case e: IOException => {
Log.e(TAG, "Error when accept socket", e)
if (ShadowsocksVpn.serverSocket != null) {
try {
ShadowsocksVpn.serverSocket.close()
} catch {
case _: Exception => // ignore
}
ShadowsocksVpn.serverSocket = null
}
return
}
}