[tor-commits] [orbot/master] add support for meek PT
n8fr8 at torproject.org
n8fr8 at torproject.org
Fri Apr 3 17:04:06 UTC 2015
commit bff6d0f567a72748035ad87299575731d579bf82
Author: Nathan Freitas <nathan at freitas.net>
Date: Sat Feb 14 00:44:09 2015 -0500
add support for meek PT
---
.../android/service/TorResourceInstaller.java | 6 +
src/org/torproject/android/service/TorService.java | 235 +++++++++++++-------
.../android/service/TorServiceConstants.java | 5 +
3 files changed, 165 insertions(+), 81 deletions(-)
diff --git a/src/org/torproject/android/service/TorResourceInstaller.java b/src/org/torproject/android/service/TorResourceInstaller.java
index 07cb4fd..c361e80 100644
--- a/src/org/torproject/android/service/TorResourceInstaller.java
+++ b/src/org/torproject/android/service/TorResourceInstaller.java
@@ -99,6 +99,12 @@ public class TorResourceInstaller implements TorServiceConstants {
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
streamToFile(is,outFile, false, true);
+
+ is = context.getResources().openRawResource(R.raw.meek);
+ outFile = new File(installFolder, MEEK_ASSET_KEY);
+ shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
+ streamToFile(is,outFile, false, true);
+
is = context.getResources().openRawResource(R.raw.xtables);
outFile = new File(installFolder, IPTABLES_ASSET_KEY);
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 9bd64f1..81fdf90 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -115,6 +115,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
private File fileTor;
private File filePolipo;
private File fileObfsclient;
+ private File fileMeekclient;
private File fileXtables;
private File fileTorRc;
@@ -650,6 +651,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
fileObfsclient = new File(appBinHome, OBFSCLIENT_ASSET_KEY);
+ fileMeekclient = new File(appBinHome, MEEK_ASSET_KEY);
+
fileTorRc = new File(appBinHome, TORRC_ASSET_KEY);
fileXtables = new File(appBinHome, IPTABLES_ASSET_KEY);
@@ -770,6 +773,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
prefPersistNotifications = prefs.getBoolean(TorConstants.PREF_PERSIST_NOTIFICATIONS, true);
+ mUseVPN = prefs.getBoolean("pref_vpn", false);
}
private void startTor () throws Exception
@@ -784,6 +788,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
enableBinExec(fileTor);
enableBinExec(filePolipo);
enableBinExec(fileObfsclient);
+ enableBinExec(fileMeekclient);
enableBinExec(fileXtables);
updateSettings ();
@@ -791,7 +796,12 @@ public class TorService extends Service implements TorServiceConstants, TorConst
logNotice(getString(R.string.status_starting_up));
sendCallbackLogMessage(getString(R.string.status_starting_up));
- Shell shellUser = Shell.startShell();
+ ArrayList<String> customEnv = new ArrayList<String>();
+ // customEnv.add("TOR_PT_MANAGED_TRANSPORT_VER=1");
+ // customEnv.add("TOR_PT_CLIENT_TRANSPORTS=meek");
+
+ String baseDirectory = fileTor.getParent();
+ Shell shellUser = Shell.startShell(customEnv, baseDirectory);
boolean success = runTorShellCmd(shellUser);
@@ -809,10 +819,12 @@ public class TorService extends Service implements TorServiceConstants, TorConst
shellRoot.close();
}
- else if (mUseVPN)
+
+ if (mUseVPN) //we need to turn on VPN here so the proxy is running
{
enableVpnProxy();
}
+
getHiddenServiceHostname ();
}
@@ -1430,16 +1442,22 @@ public class TorService extends Service implements TorServiceConstants, TorConst
debug ("enabling VPN Proxy");
mUseVPN = true;
-
+
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
Editor ePrefs = prefs.edit();
+
+ ePrefs.putBoolean("pref_vpn", true);
+ /*
ePrefs.putString("pref_proxy_type", "socks5");
ePrefs.putString("pref_proxy_host", "127.0.0.1");
ePrefs.putString("pref_proxy_port", "9999");
ePrefs.remove("pref_proxy_username");
ePrefs.remove("pref_proxy_password");
+ */
+
ePrefs.commit();
+
processSettings();
Intent intent = new Intent(TorService.this, OrbotVpnService.class);
@@ -1455,14 +1473,12 @@ public class TorService extends Service implements TorServiceConstants, TorConst
mUseVPN = false;
+
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
- Editor ePrefs = prefs.edit();
- ePrefs.remove("pref_proxy_type");
- ePrefs.remove("pref_proxy_host");
- ePrefs.remove("pref_proxy_port");
- ePrefs.remove("pref_proxy_username");
- ePrefs.remove("pref_proxy_password");
+ Editor ePrefs = prefs.edit();
+ ePrefs.putBoolean("pref_vpn", false);
ePrefs.commit();
+
processSettings();
Intent intent = new Intent(TorService.this, OrbotVpnService.class);
@@ -2090,8 +2106,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
*/
boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
-
- //boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
@@ -2102,35 +2116,49 @@ public class TorService extends Service implements TorServiceConstants, TorConst
String exitNodes = prefs.getString("pref_exit_nodes", "");
String excludeNodes = prefs.getString("pref_exclude_nodes", "");
- String proxyType = prefs.getString("pref_proxy_type", null);
- if (proxyType != null && proxyType.length() > 0)
+ if (!useBridges)
{
- String proxyHost = prefs.getString("pref_proxy_host", null);
- String proxyPort = prefs.getString("pref_proxy_port", null);
- String proxyUser = prefs.getString("pref_proxy_username", null);
- String proxyPass = prefs.getString("pref_proxy_password", null);
-
- if ((proxyHost != null && proxyHost.length()>0) && (proxyPort != null && proxyPort.length() > 0))
- {
- updateConfiguration(proxyType + "Proxy", proxyHost + ':' + proxyPort, false);
-
- if (proxyUser != null && proxyPass != null)
- {
- if (proxyType.equalsIgnoreCase("socks5"))
- {
- updateConfiguration("Socks5ProxyUsername", proxyUser, false);
- updateConfiguration("Socks5ProxyPassword", proxyPass, false);
- }
- else
- updateConfiguration(proxyType + "ProxyAuthenticator", proxyUser + ':' + proxyPort, false);
-
- }
- else if (proxyPass != null)
- updateConfiguration(proxyType + "ProxyAuthenticator", proxyUser + ':' + proxyPort, false);
-
-
-
- }
+ if (mUseVPN) //set the proxy here if we aren't using a bridge
+ {
+ String proxyType = "socks5";
+ String proxyHost = "127.0.0.1";
+ int proxyPort = 9999;
+ updateConfiguration(proxyType + "Proxy", proxyHost + ':' + proxyPort, false);
+
+ }
+ else
+ {
+ String proxyType = prefs.getString("pref_proxy_type", null);
+ if (proxyType != null && proxyType.length() > 0)
+ {
+ String proxyHost = prefs.getString("pref_proxy_host", null);
+ String proxyPort = prefs.getString("pref_proxy_port", null);
+ String proxyUser = prefs.getString("pref_proxy_username", null);
+ String proxyPass = prefs.getString("pref_proxy_password", null);
+
+ if ((proxyHost != null && proxyHost.length()>0) && (proxyPort != null && proxyPort.length() > 0))
+ {
+ updateConfiguration(proxyType + "Proxy", proxyHost + ':' + proxyPort, false);
+
+ if (proxyUser != null && proxyPass != null)
+ {
+ if (proxyType.equalsIgnoreCase("socks5"))
+ {
+ updateConfiguration("Socks5ProxyUsername", proxyUser, false);
+ updateConfiguration("Socks5ProxyPassword", proxyPass, false);
+ }
+ else
+ updateConfiguration(proxyType + "ProxyAuthenticator", proxyUser + ':' + proxyPort, false);
+
+ }
+ else if (proxyPass != null)
+ updateConfiguration(proxyType + "ProxyAuthenticator", proxyUser + ':' + proxyPort, false);
+
+
+
+ }
+ }
+ }
}
if (entranceNodes.length() > 0 || exitNodes.length() > 0 || excludeNodes.length() > 0)
@@ -2172,57 +2200,102 @@ public class TorService extends Service implements TorServiceConstants, TorConst
String bridgeCfgKey = "Bridge";
String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,null);
-
- if (bridgeList == null || bridgeList.length() == 0)
- {
- String msgBridge = getString(R.string.bridge_requires_ip) +
- getString(R.string.send_email_for_bridges);
- showToolbarNotification(msgBridge, ERROR_NOTIFY_ID, R.drawable.ic_stat_tor);
- debug(msgBridge);
- return false;
- }
-
-
- String bridgeDelim = "\n";
-
- if (bridgeList.indexOf(",") != -1)
+ if (bridgeList != null && bridgeList.length() > 1) //longer then 1 = some real values here
{
- bridgeDelim = ",";
+ String bridgeDelim = "\n";
+
+ if (bridgeList.indexOf(",") != -1)
+ {
+ bridgeDelim = ",";
+ }
+
+ showToolbarNotification(getString(R.string.notification_using_bridges) + ": " + bridgeList, TRANSPROXY_NOTIFY_ID, R.drawable.ic_stat_tor);
+
+ StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
+ while (st.hasMoreTokens())
+ {
+ String bridgeConfigLine = st.nextToken().trim();
+ debug("Adding bridge: " + bridgeConfigLine);
+ updateConfiguration(bridgeCfgKey, bridgeConfigLine, false);
+
+ }
+
+ //check if any PT bridges are needed
+ boolean obfsBridges = bridgeList.contains("obfs2")||bridgeList.contains("obfs3")||bridgeList.contains("scramblesuit");
+
+ if (obfsBridges)
+ {
+ String bridgeConfig = "obfs2,obfs3,scramblesuit exec " + fileObfsclient.getCanonicalPath();
+
+ debug ("Using OBFUSCATED bridges: " + bridgeConfig);
+
+ updateConfiguration("ClientTransportPlugin",bridgeConfig, false);
+ }
}
-
- showToolbarNotification(getString(R.string.notification_using_bridges) + ": " + bridgeList, TRANSPROXY_NOTIFY_ID, R.drawable.ic_stat_tor);
-
- StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
- while (st.hasMoreTokens())
+ else
{
- String bridgeConfigLine = st.nextToken().trim();
- debug("Adding bridge: " + bridgeConfigLine);
- updateConfiguration(bridgeCfgKey, bridgeConfigLine, false);
+ //time to do autobridges, aka meek
- }
-
- //check if any PT bridges are needed
- boolean obfsBridges = bridgeList.contains("obfs2")||bridgeList.contains("obfs3")||bridgeList.contains("scramblesuit");
-
- if (obfsBridges)
- {
- String bridgeConfig = "obfs2,obfs3,scramblesuit exec " + fileObfsclient.getCanonicalPath();
-
- debug ("Using OBFUSCATED bridges: " + bridgeConfig);
+ debug ("Using meek bridges");
- updateConfiguration("ClientTransportPlugin",bridgeConfig, false);
- }
- else
- {
- debug ("Using standard bridges");
+ String proxyBridge = "";
+ String proxyType = prefs.getString("pref_proxy_type", null);
+
+ if (mUseVPN)
+ {
+ proxyType = "socks5";
+ String proxyHost = "127.0.0.1";
+ int proxyPort = 9999;
+
+ proxyBridge = " proxyurl=" + proxyType + "://" + proxyHost + ':' + proxyPort;
+
+ }
+ else if (proxyType != null && proxyType.length() > 0)
+ {
+ String proxyHost = prefs.getString("pref_proxy_host", null);
+ String proxyPort = prefs.getString("pref_proxy_port", null);
+
+ proxyBridge = " proxyurl=" + proxyType + "://" + proxyHost + ':' + proxyPort;
+
+ }
+
+ String[] meekBridge =
+ {
+ "meek 0.0.2.0:1 url=https://meek-reflect.appspot.com/ front=www.google.com",
+ "meek 0.0.2.0:2 url=https://d2zfqthxsdq309.cloudfront.net/ front=a0.awsstatic.com",
+ "meek 0.0.2.0:3 url=https://az668014.vo.msecnd.net/ front=ajax.aspnetcdn.com"
+ };
+
+ int meekIdx = 2; //let's use Azure by default
+
+ if (bridgeList != null && bridgeList.length() == 1)
+ {
+ try
+ {
+ meekIdx = Integer.parseInt(bridgeList);
+
+ if (meekIdx+1 > meekBridge.length)
+ throw new Exception("not valid meek idx");
+ }
+ catch (Exception e)
+ {
+ debug("invalid meek type; please enter 0=Google, 1=AWS, 2=Azure");
+ }
+ }
+
+ updateConfiguration(bridgeCfgKey, meekBridge[meekIdx] + proxyBridge, false);
+
+ String bridgeConfig = "meek exec " + fileMeekclient.getCanonicalPath();// + " --log /data/local/tmp/meek-tor.log";
+
+ //updateConfiguration(bridgeCfgKey, "meek 0.0.2.0:1", false);
+ //String bridgeConfig = "meek exec " + fileMeekclient.getCanonicalPath() + " --url=https://meek-reflect.appspot.com/ --front=www.google.com --log meek-client.log";
+
+ updateConfiguration("ClientTransportPlugin",bridgeConfig, false);
}
-
-
- updateConfiguration("UpdateBridgesFromAuthority", "0", false);
-
+// updateConfiguration("UpdateBridgesFromAuthority", "0", false);
updateConfiguration("UseBridges", "1", false);
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index 4c3adc9..f065d58 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -92,6 +92,11 @@ public interface TorServiceConstants {
//obfsproxy
public static final String OBFSCLIENT_ASSET_KEY = "obfsclient";
+ public static final String MEEK_ASSET_KEY = "meek-client";
+
+
+
+
public static final int MESSAGE_TRAFFIC_COUNT = 5;
More information about the tor-commits
mailing list