Commit 97bd714b authored by Max Lv's avatar Max Lv

drop abstract domain socket

parent 9a841e90
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.github.shadowsocks" package="com.github.shadowsocks"
android:versionCode="114" android:versionCode="115"
android:versionName="2.7.6"> android:versionName="2.7.7">
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
......
...@@ -502,11 +502,11 @@ int main (int argc, char **argv) ...@@ -502,11 +502,11 @@ int main (int argc, char **argv)
goto fail2; goto fail2;
} }
char *path = "#shadowsocks_tunfd"; char *path = "/data/data/com.github.shadowsocks/sock_path";
unlink(path);
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, path, sizeof(addr.sun_path)-1); strncpy(addr.sun_path, path, sizeof(addr.sun_path)-1);
addr.sun_path[0] = 0;
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) { if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
BLog(BLOG_ERROR, "bind() failed: %s (sock = %d)\n", strerror(errno), sock); BLog(BLOG_ERROR, "bind() failed: %s (sock = %d)\n", strerror(errno), sock);
......
Subproject commit 5d4db4f093de1256bcb25e1958a76a03102dc77d Subproject commit e3ed22236012728d0cf7304ef27eb1c96cc063bb
...@@ -58,8 +58,7 @@ jint Java_com_github_shadowsocks_system_sendfd(JNIEnv *env, jobject thiz, jint t ...@@ -58,8 +58,7 @@ jint Java_com_github_shadowsocks_system_sendfd(JNIEnv *env, jobject thiz, jint t
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, "#shadowsocks_tunfd", sizeof(addr.sun_path)-1); strncpy(addr.sun_path, "/data/data/com.github.shadowsocks/sock_path", sizeof(addr.sun_path)-1);
addr.sun_path[0] = 0;
if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
LOGE("connect() failed: %s (fd = %d)\n", strerror(errno), fd); LOGE("connect() failed: %s (fd = %d)\n", strerror(errno), fd);
......
...@@ -219,6 +219,11 @@ class Shadowsocks ...@@ -219,6 +219,11 @@ class Shadowsocks
state = bgService.getState state = bgService.getState
// set the listener // set the listener
switchButton.setOnCheckedChangeListener(Shadowsocks.this) switchButton.setOnCheckedChangeListener(Shadowsocks.this)
if (!status.getBoolean(getVersionName, false)) {
status.edit.putBoolean(getVersionName, true).commit()
recovery();
}
} }
override def onServiceDisconnected(name: ComponentName) { override def onServiceDisconnected(name: ComponentName) {
...@@ -401,11 +406,6 @@ class Shadowsocks ...@@ -401,11 +406,6 @@ class Shadowsocks
def prepareStartService() { def prepareStartService() {
showProgress(R.string.connecting) showProgress(R.string.connecting)
spawn { spawn {
if (!status.getBoolean(getVersionName, false)) {
status.edit.putBoolean(getVersionName, true).commit()
install()
}
if (isVpnEnabled) { if (isVpnEnabled) {
val intent = VpnService.prepare(this) val intent = VpnService.prepare(this)
if (intent != null) { if (intent != null) {
......
...@@ -104,12 +104,14 @@ class ShadowsocksVpnService extends VpnService with BaseService { ...@@ -104,12 +104,14 @@ class ShadowsocksVpnService extends VpnService with BaseService {
} }
override def onCreate() { override def onCreate() {
super.onCreate() super.onCreate()
ConfigUtils.refresh(this) ConfigUtils.refresh(this)
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
.asInstanceOf[NotificationManager] .asInstanceOf[NotificationManager]
} }
override def onRevoke() { override def onRevoke() {
...@@ -182,11 +184,6 @@ class ShadowsocksVpnService extends VpnService with BaseService { ...@@ -182,11 +184,6 @@ class ShadowsocksVpnService extends VpnService with BaseService {
override def startRunner(c: Config) { override def startRunner(c: Config) {
if (vpnThread != null) {
vpnThread.stopThread()
vpnThread = null
}
vpnThread = new ShadowsocksVpnThread(this) vpnThread = new ShadowsocksVpnThread(this)
vpnThread.start() vpnThread.start()
......
...@@ -45,27 +45,42 @@ import java.util.concurrent.Executors ...@@ -45,27 +45,42 @@ import java.util.concurrent.Executors
import android.net.{LocalServerSocket, LocalSocket, LocalSocketAddress} import android.net.{LocalServerSocket, LocalSocket, LocalSocketAddress}
import android.util.Log import android.util.Log
object ShadowsocksVpn {
@volatile var serverSocket: LocalServerSocket = null
}
class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread { class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
val TAG = "ShadowsocksVpnService" 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() { def stopThread() {
isRunning = false isRunning = false
closeServerSocket()
} }
override def run(): Unit = { override def run(): Unit = {
try { try {
if (ShadowsocksVpn.serverSocket == null) { new File(PATH).delete()
ShadowsocksVpn.serverSocket = new LocalServerSocket(PATH) } catch {
} case _: Exception => // ignore
}
try {
val localSocket = new LocalSocket
localSocket.bind(new LocalSocketAddress(PATH, LocalSocketAddress.Namespace.FILESYSTEM))
serverSocket = new LocalServerSocket(localSocket.getFileDescriptor)
} catch { } catch {
case e: IOException => case e: IOException =>
Log.e(TAG, "unable to bind", e) Log.e(TAG, "unable to bind", e)
...@@ -76,7 +91,7 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread { ...@@ -76,7 +91,7 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
while (isRunning) { while (isRunning) {
try { try {
val socket = ShadowsocksVpn.serverSocket.accept() val socket = serverSocket.accept()
pool.execute(new Runnable { pool.execute(new Runnable {
override def run() { override def run() {
...@@ -123,14 +138,6 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread { ...@@ -123,14 +138,6 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
} catch { } catch {
case e: IOException => { case e: IOException => {
Log.e(TAG, "Error when accept socket", e) Log.e(TAG, "Error when accept socket", e)
if (ShadowsocksVpn.serverSocket != null) {
try {
ShadowsocksVpn.serverSocket.close()
} catch {
case _: Exception => // ignore
}
ShadowsocksVpn.serverSocket = null
}
return return
} }
} }
......
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