From a2b1f26a314b8f345fbb830143c4dfb115af51c7 Mon Sep 17 00:00:00 2001 From: djdisodo Date: Tue, 3 Mar 2020 18:18:42 +0900 Subject: [PATCH 1/2] small hack for vpn not stopping --- .../com/github/megatronking/netbare/NetBareThread.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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..43d49a8 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,11 @@ public void interrupt() { NetBareUtils.closeQuietly(vpnDescriptor); NetBareUtils.closeQuietly(input); NetBareUtils.closeQuietly(output); + try { + builder.establish().close(); + } catch (IOException e) { + NetBareLog.wtf(e); + } } @Override @@ -125,6 +132,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 +202,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; From 4dfb0d4e6e67e19534968817ad8a3142622bb807 Mon Sep 17 00:00:00 2001 From: djdisodo Date: Tue, 3 Mar 2020 18:32:07 +0900 Subject: [PATCH 2/2] fix not starting again --- .../java/com/github/megatronking/netbare/NetBareThread.java | 6 ++---- .../com/github/megatronking/netbare/sample/MainActivity.kt | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) 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 43d49a8..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 @@ -77,6 +77,8 @@ public void interrupt() { } catch (IOException e) { NetBareLog.wtf(e); } + // Notify NetBareListener that the service is stopped now. + NetBare.get().notifyServiceStopped(); } @Override @@ -95,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) { 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?) {