commit 933b2e9b4ec4dd3d683953d2c5a7caba93f3effc
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Fri Apr 10 22:29:13 2015 -0400
Small VPN and socket monitoring related fixes
---
src/org/torproject/android/service/TorService.java | 24 +++-----
.../torproject/android/vpn/OrbotVpnService.java | 61 ++++++++++++++++++--
2 files changed, 64 insertions(+), 21 deletions(-)
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 3e7edc6..e26dca2 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -727,7 +727,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
extraLines.append("AutomapHostsOnResolve 1").append('\n');
extraLines.append("DisableNetwork 0").append('\n');
-
+
//.extraLines.append("CircuitStreamTimeout 60").append('\n');
processSettingsImpl(extraLines);
@@ -974,7 +974,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
return true;
}
- private boolean runTorShellCmd(Shell shell) throws Exception
+ private boolean runTorShellCmd(final Shell shell) throws Exception
{
String torrcPath = new File(appBinHome, TORRC_ASSET_KEY).getCanonicalPath();
@@ -1005,18 +1005,16 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
shellTorCommand = new SimpleCommand(torCmdString);
shell.add(shellTorCommand).waitForFinish();
-
exitCode = shellTorCommand.getExitCode();
output = shellTorCommand.getOutput();
-
if (exitCode != 0 && output != null && output.length() > 0)
{
logNotice("Tor (" + exitCode + "): " + output);
//throw new Exception ("unable to start");
return false;
}
-
+
//now try to connect
mLastProcessId = initControlConnection (100,false);
@@ -1031,7 +1029,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{
logNotice("Tor started; process id=" + mLastProcessId);
-
}
@@ -1749,7 +1746,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
Proxy proxy = null;
- if (mUseVPN)
+ if (!mUseVPN) //if not on the VPN then we should proxy
{
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8118));
conn = new URL(ONIONOO_BASE_URL + mNode.id).openConnection(proxy);
@@ -2211,13 +2208,14 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (mUseVPN) //set the proxy here if we aren't using a bridge
{
+ /*
if (!mIsLollipop)
{
String proxyType = "socks5";
String proxyHost = "127.0.0.1";
extraLines.append(proxyType + "Proxy" + ' ' + proxyHost + ':' + mVpnProxyPort).append('\n');
};
-
+ */
}
else
{
@@ -2294,14 +2292,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
- /**
- extraLines.append("Bridge obfs3 192.36.31.74:35870 FEB63CA5EBD805C42DC0E5FBDDE82F3B1CDD80B4\n");
- extraLines.append("Bridge obfs3 131.72.136.85:52447 1AC601EA50397948DD5FB5B453922EB8A69A5EF6\n");
- extraLines.append("Bridge obfs3 192.36.31.76:33439 54C59DF0FCEE2D08F789CA04E5B57519071C232B\n");
- */
-
- // extraLines.append("Bridge obfs4 54.66.226.196:18965 95151988DC29FCCB4F610A1C700A1DDF7D5FFBD4 cert=3wYo19iAMNbfO7snEeqVBmsIat+RMmMDV5BV4jDvXuz9BaACXt7XffC8Dz8J1MUvLKHKaQ iat-mode=0\n");
-
}
else
{
@@ -2617,5 +2607,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
// TODO Auto-generated method stub
return null;
}
+
+
}
diff --git a/src/org/torproject/android/vpn/OrbotVpnService.java b/src/org/torproject/android/vpn/OrbotVpnService.java
index bc06f43..4c214ed 100644
--- a/src/org/torproject/android/vpn/OrbotVpnService.java
+++ b/src/org/torproject/android/vpn/OrbotVpnService.java
@@ -16,7 +16,6 @@
package org.torproject.android.vpn;
-import java.io.IOException;
import java.net.InetAddress;
import java.util.Locale;
@@ -86,7 +85,9 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
}
if (!isLollipop)
+ {
startSocksBypass();
+ }
setupTun2Socks();
}
@@ -114,8 +115,7 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
return START_STICKY;
}
-
-
+
private void startSocksBypass()
{
@@ -183,7 +183,7 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
Tun2Socks.Stop();
- stopSocksBypass ();
+ //stopSocksBypass ();
if (mInterface != null){
try
@@ -203,6 +203,9 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
Log.d(TAG,"error stopping tun2socks",e);
}
}
+
+ mThreadVPN = null;
+
}
@Override
@@ -310,5 +313,53 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
super.onRevoke();
}
-
+ /*
+ private void monitorSocketsFD ()
+ {
+
+ final String fdPath = "/proc/self/fd/";
+
+ new Thread ()
+ {
+ public void run ()
+ {
+ while (mThreadVPN != null)
+ {
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ try
+ {
+
+ File fileDir = new File(fdPath);
+ File[] files = fileDir.listFiles();
+ if (files != null)
+ for (File file : files)
+ {
+ String cPath = file.getCanonicalPath();
+
+ if (cPath.contains("socket"))
+ {
+ Log.d(TAG,"found FD for socket: " + file.getAbsolutePath());
+
+ protect(Integer.parseInt(file.getName()));
+
+ }
+
+ }
+ }
+ catch (Exception e)
+ {
+ Log.e(TAG,"error getting fd: " + fdPath,e);
+ }
+ }
+ }
+ }.start();
+
+ }
+ */
}