Skip to content

Commit 97bd714

Browse files
committed
drop abstract domain socket
1 parent 9a841e9 commit 97bd714

File tree

7 files changed

+38
-35
lines changed

7 files changed

+38
-35
lines changed

src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
22
package="com.github.shadowsocks"
3-
android:versionCode="114"
4-
android:versionName="2.7.6">
3+
android:versionCode="115"
4+
android:versionName="2.7.7">
55

66
<uses-permission android:name="android.permission.INTERNET"/>
77
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

src/main/jni/badvpn/tun2socks/tun2socks.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,11 +502,11 @@ int main (int argc, char **argv)
502502
goto fail2;
503503
}
504504

505-
char *path = "#shadowsocks_tunfd";
505+
char *path = "/data/data/com.github.shadowsocks/sock_path";
506+
unlink(path);
506507
memset(&addr, 0, sizeof(addr));
507508
addr.sun_family = AF_UNIX;
508509
strncpy(addr.sun_path, path, sizeof(addr.sun_path)-1);
509-
addr.sun_path[0] = 0;
510510

511511
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
512512
BLog(BLOG_ERROR, "bind() failed: %s (sock = %d)\n", strerror(errno), sock);

src/main/jni/system.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ jint Java_com_github_shadowsocks_system_sendfd(JNIEnv *env, jobject thiz, jint t
5858

5959
memset(&addr, 0, sizeof(addr));
6060
addr.sun_family = AF_UNIX;
61-
strncpy(addr.sun_path, "#shadowsocks_tunfd", sizeof(addr.sun_path)-1);
62-
addr.sun_path[0] = 0;
61+
strncpy(addr.sun_path, "/data/data/com.github.shadowsocks/sock_path", sizeof(addr.sun_path)-1);
6362

6463
if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
6564
LOGE("connect() failed: %s (fd = %d)\n", strerror(errno), fd);

src/main/scala/com/github/shadowsocks/Shadowsocks.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@ class Shadowsocks
219219
state = bgService.getState
220220
// set the listener
221221
switchButton.setOnCheckedChangeListener(Shadowsocks.this)
222+
223+
if (!status.getBoolean(getVersionName, false)) {
224+
status.edit.putBoolean(getVersionName, true).commit()
225+
recovery();
226+
}
222227
}
223228

224229
override def onServiceDisconnected(name: ComponentName) {
@@ -401,11 +406,6 @@ class Shadowsocks
401406
def prepareStartService() {
402407
showProgress(R.string.connecting)
403408
spawn {
404-
if (!status.getBoolean(getVersionName, false)) {
405-
status.edit.putBoolean(getVersionName, true).commit()
406-
install()
407-
}
408-
409409
if (isVpnEnabled) {
410410
val intent = VpnService.prepare(this)
411411
if (intent != null) {

src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,14 @@ class ShadowsocksVpnService extends VpnService with BaseService {
104104
}
105105

106106
override def onCreate() {
107+
107108
super.onCreate()
108109

109110
ConfigUtils.refresh(this)
110111

111112
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
112113
.asInstanceOf[NotificationManager]
114+
113115
}
114116

115117
override def onRevoke() {
@@ -182,11 +184,6 @@ class ShadowsocksVpnService extends VpnService with BaseService {
182184

183185
override def startRunner(c: Config) {
184186

185-
if (vpnThread != null) {
186-
vpnThread.stopThread()
187-
vpnThread = null
188-
}
189-
190187
vpnThread = new ShadowsocksVpnThread(this)
191188
vpnThread.start()
192189

src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,42 @@ import java.util.concurrent.Executors
4545
import android.net.{LocalServerSocket, LocalSocket, LocalSocketAddress}
4646
import android.util.Log
4747

48-
object ShadowsocksVpn {
49-
@volatile var serverSocket: LocalServerSocket = null
50-
}
51-
5248
class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
5349

5450
val TAG = "ShadowsocksVpnService"
55-
val PATH = "shadowsocks_protect"
51+
val PATH = "/data/data/com.github.shadowsocks/protect_path"
5652

57-
var isRunning: Boolean = true
53+
@volatile var isRunning: Boolean = true
54+
@volatile var serverSocket: LocalServerSocket = null
55+
56+
def closeServerSocket() {
57+
if (serverSocket != null) {
58+
try {
59+
serverSocket.close()
60+
} catch {
61+
case _: Exception => // ignore
62+
}
63+
serverSocket = null
64+
}
65+
}
5866

5967
def stopThread() {
6068
isRunning = false
69+
closeServerSocket()
6170
}
6271

6372
override def run(): Unit = {
6473

6574
try {
66-
if (ShadowsocksVpn.serverSocket == null) {
67-
ShadowsocksVpn.serverSocket = new LocalServerSocket(PATH)
68-
}
75+
new File(PATH).delete()
76+
} catch {
77+
case _: Exception => // ignore
78+
}
79+
80+
try {
81+
val localSocket = new LocalSocket
82+
localSocket.bind(new LocalSocketAddress(PATH, LocalSocketAddress.Namespace.FILESYSTEM))
83+
serverSocket = new LocalServerSocket(localSocket.getFileDescriptor)
6984
} catch {
7085
case e: IOException =>
7186
Log.e(TAG, "unable to bind", e)
@@ -76,7 +91,7 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
7691

7792
while (isRunning) {
7893
try {
79-
val socket = ShadowsocksVpn.serverSocket.accept()
94+
val socket = serverSocket.accept()
8095

8196
pool.execute(new Runnable {
8297
override def run() {
@@ -123,14 +138,6 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
123138
} catch {
124139
case e: IOException => {
125140
Log.e(TAG, "Error when accept socket", e)
126-
if (ShadowsocksVpn.serverSocket != null) {
127-
try {
128-
ShadowsocksVpn.serverSocket.close()
129-
} catch {
130-
case _: Exception => // ignore
131-
}
132-
ShadowsocksVpn.serverSocket = null
133-
}
134141
return
135142
}
136143
}

0 commit comments

Comments
 (0)