diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareThread.java b/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareThread.java index 14f1355..00bf3fd 100644 --- a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareThread.java +++ b/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareThread.java @@ -57,6 +57,8 @@ private PacketsTransfer packetsTransfer; + private VpnService.Builder builder; + /* package */ NetBareThread(VpnService vpnService, NetBareConfig config) { super("NetBare"); this.mVpnService = vpnService; @@ -70,6 +72,13 @@ public void interrupt() { NetBareUtils.closeQuietly(vpnDescriptor); NetBareUtils.closeQuietly(input); NetBareUtils.closeQuietly(output); + try { + builder.establish().close(); + } catch (IOException e) { + NetBareLog.wtf(e); + } + // Notify NetBareListener that the service is stopped now. + NetBare.get().notifyServiceStopped(); } @Override @@ -88,10 +97,6 @@ public void run() { // Establish VPN, it runs a while loop unless failed. establishVpn(packetsTransfer); } - - // Notify NetBareListener that the service is stopped now. - NetBare.get().notifyServiceStopped(); - } private void establishVpn(PacketsTransfer packetsTransfer) { @@ -125,6 +130,7 @@ private void establishVpn(PacketsTransfer packetsTransfer) { } catch (PackageManager.NameNotFoundException e) { NetBareLog.wtf(e); } + this.builder = builder; vpnDescriptor = builder.establish(); if (vpnDescriptor == null) { return; @@ -194,7 +200,7 @@ private void transfer(InputStream input, OutputStream output) throws IOException transfer(buffer, input.read(buffer), output); } - private void transfer(byte[] packet, int len, OutputStream output) { + private synchronized void transfer(byte[] packet, int len, OutputStream output) { if (len < IpHeader.MIN_HEADER_LENGTH) { NetBareLog.w("Ip header length < " + IpHeader.MIN_HEADER_LENGTH); return; diff --git a/netbare-sample/src/main/kotlin/com/github/megatronking/netbare/sample/MainActivity.kt b/netbare-sample/src/main/kotlin/com/github/megatronking/netbare/sample/MainActivity.kt index 6bf488a..a17a18c 100644 --- a/netbare-sample/src/main/kotlin/com/github/megatronking/netbare/sample/MainActivity.kt +++ b/netbare-sample/src/main/kotlin/com/github/megatronking/netbare/sample/MainActivity.kt @@ -78,7 +78,7 @@ class MainActivity : AppCompatActivity(), NetBareListener { } // 启动NetBare服务 mNetBare.start(NetBareConfig.defaultHttpConfig(App.getInstance().getJSK(), - interceptorFactories())) + interceptorFactories()).newBuilder().addAllowedApplication("none").build()) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {