Commit de7e5162 authored by Max Lv's avatar Max Lv

fix MTU

parent c31a5c19
<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="113" android:versionCode="114"
android:versionName="2.7.5"> android:versionName="2.7.6">
<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"/>
......
...@@ -63,7 +63,7 @@ class ShadowsocksVpnService extends VpnService with BaseService { ...@@ -63,7 +63,7 @@ class ShadowsocksVpnService extends VpnService with BaseService {
private lazy val application = getApplication.asInstanceOf[ShadowsocksApplication] private lazy val application = getApplication.asInstanceOf[ShadowsocksApplication]
val TAG = "ShadowsocksVpnService" val TAG = "ShadowsocksVpnService"
val VPN_MTU = 1400 val VPN_MTU = 1500
val PRIVATE_VLAN = "26.26.26.%s" val PRIVATE_VLAN = "26.26.26.%s"
var conn: ParcelFileDescriptor = null var conn: ParcelFileDescriptor = null
var notificationManager: NotificationManager = null var notificationManager: NotificationManager = null
...@@ -103,11 +103,6 @@ class ShadowsocksVpnService extends VpnService with BaseService { ...@@ -103,11 +103,6 @@ class ShadowsocksVpnService extends VpnService with BaseService {
null null
} }
override def onDestroy() {
super.onDestroy()
if (vpnThread != null) vpnThread.stopThread()
}
override def onCreate() { override def onCreate() {
super.onCreate() super.onCreate()
...@@ -115,9 +110,6 @@ class ShadowsocksVpnService extends VpnService with BaseService { ...@@ -115,9 +110,6 @@ class ShadowsocksVpnService extends VpnService with BaseService {
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
.asInstanceOf[NotificationManager] .asInstanceOf[NotificationManager]
vpnThread = new ShadowsocksVpnThread(this)
vpnThread.start()
} }
override def onRevoke() { override def onRevoke() {
...@@ -126,6 +118,11 @@ class ShadowsocksVpnService extends VpnService with BaseService { ...@@ -126,6 +118,11 @@ class ShadowsocksVpnService extends VpnService with BaseService {
override def stopRunner() { override def stopRunner() {
if (vpnThread != null) {
vpnThread.stopThread()
vpnThread = null
}
// channge the state // channge the state
changeState(State.STOPPING) changeState(State.STOPPING)
...@@ -185,6 +182,14 @@ class ShadowsocksVpnService extends VpnService with BaseService { ...@@ -185,6 +182,14 @@ 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.start()
config = c config = c
// ensure the VPNService is prepared // ensure the VPNService is prepared
......
...@@ -45,43 +45,38 @@ import java.util.concurrent.Executors ...@@ -45,43 +45,38 @@ 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 = "shadowsocks_protect"
var isRunning: Boolean = true var isRunning: Boolean = true
var serverSocket: LocalServerSocket = null
def stopThread() { def stopThread() {
isRunning = false isRunning = false
if (serverSocket != null) {
serverSocket.close()
serverSocket = null
}
} }
override def run(): Unit = { override def run(): Unit = {
try { try {
if (serverSocket != null) { if (ShadowsocksVpn.serverSocket == null) {
serverSocket.close() ShadowsocksVpn.serverSocket = new LocalServerSocket(PATH)
serverSocket = null
} }
serverSocket = new LocalServerSocket(PATH)
} catch { } catch {
case e: IOException => case e: IOException =>
Log.e(TAG, "unable to bind", e) Log.e(TAG, "unable to bind", e)
vpnService.stopBackgroundService()
return return
} }
val pool = Executors.newFixedThreadPool(4) val pool = Executors.newFixedThreadPool(4)
while (isRunning) { while (isRunning) {
try { try {
val socket = serverSocket.accept() val socket = ShadowsocksVpn.serverSocket.accept()
pool.execute(new Runnable { pool.execute(new Runnable {
override def run() { override def run() {
...@@ -126,7 +121,10 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread { ...@@ -126,7 +121,10 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread {
}}) }})
} catch { } catch {
case e: IOException => Log.e(TAG, "Error when accept socket", e) case e: IOException => {
Log.e(TAG, "Error when accept socket", e)
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