[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [orbot/master] update logic for bridge selection
commit 4af61b609ed0481dbe1b2545cf44e03a02c05a34
Author: Nathan Freitas <nathan@xxxxxxxxxxx>
Date: Wed Mar 22 12:47:05 2017 -0400
update logic for bridge selection
---
.../org/torproject/android/service/TorService.java | 162 ++++++++++++++-------
1 file changed, 112 insertions(+), 50 deletions(-)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorService.java b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
index 9a3e44c..83de202 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -61,15 +61,18 @@ import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
+import java.util.Random;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.concurrent.ExecutorService;
@@ -132,6 +135,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private Shell mShellPolipo;
+ private ArrayList<Bridge> alBridges = null;
+
+
private static final Uri HS_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers/hs");
private static final Uri COOKIE_CONTENT_URI = Uri.parse("content://org.torproject.android.ui.hiddenservices.providers.cookie/cookie");
@@ -1665,31 +1671,29 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
else
{
-
+
+ loadBridgeDefaults ();
extraLines.append("UseBridges 1").append('\n');
String bridgeList = new String(Prefs.getBridgesList().getBytes("ISO-8859-1"));
-
- if (bridgeList != null && bridgeList.length() > 1) //longer then 1 = some real values here
+ boolean obfsBridges = bridgeList.contains("obfs3")||bridgeList.contains("obfs4");
+ boolean meekBridges = bridgeList.contains("meek");
+
+ //check if any PT bridges are needed
+ if (obfsBridges)
+ {
+ extraLines.append("ClientTransportPlugin obfs3 exec " + fileObfsclient.getCanonicalPath()).append('\n');
+ extraLines.append("ClientTransportPlugin obfs4 exec " + fileObfsclient.getCanonicalPath()).append('\n');
+ }
+
+ if (meekBridges)
+ {
+ extraLines.append("ClientTransportPlugin meek_lite exec " + fileObfsclient.getCanonicalPath()).append('\n');
+ }
+
+ if (bridgeList != null && bridgeList.length() > 5) //longer then 1 = some real values here
{
-
- //check if any PT bridges are needed
- boolean obfsBridges = bridgeList.contains("obfs3")||bridgeList.contains("obfs4")||bridgeList.contains("scramblesuit");
-
- if (obfsBridges)
- {
- extraLines.append("ClientTransportPlugin obfs3 exec " + fileObfsclient.getCanonicalPath()).append('\n');
- extraLines.append("ClientTransportPlugin obfs4 exec " + fileObfsclient.getCanonicalPath()).append('\n');
- extraLines.append("ClientTransportPlugin scramblesuit exec " + fileObfsclient.getCanonicalPath()).append('\n');
- }
-
- boolean meekBridges = bridgeList.contains("meek");
- if (meekBridges)
- {
- extraLines.append("ClientTransportPlugin meek_lite exec " + fileObfsclient.getCanonicalPath()).append('\n');
- }
-
String[] bridgeListLines = bridgeList.split("\\r?\\n");
for (String bridgeConfigLine : bridgeListLines)
@@ -1697,9 +1701,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (!TextUtils.isEmpty(bridgeConfigLine))
{
extraLines.append("Bridge ");
-
- //bridgeConfigLine = bridgeConfigLine.replace('�', ' ');
-
+
StringTokenizer st = new StringTokenizer (bridgeConfigLine," ");
while (st.hasMoreTokens())
extraLines.append(st.nextToken()).append(' ');
@@ -1713,34 +1715,14 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
else
{
- //time to do autobridges, aka meek
- debug ("Using meek bridges");
-
- // String bridgeConfig = "meek exec " + fileMeekclient.getCanonicalPath();
- String bridgeConfig = "meek_lite exec " + fileObfsclient.getCanonicalPath();
-
- extraLines.append("ClientTransportPlugin" + ' ' + bridgeConfig).append('\n');
-
- int meekIdx = 2; //let's use Azure by default
-
- if (bridgeList != null && bridgeList.length() == 1)
- {
- try
- {
- meekIdx = Integer.parseInt(bridgeList);
-
- if (meekIdx+1 > BRIDGES_MEEK.length)
- throw new Exception("not valid meek idx");
- }
- catch (Exception e)
- {
- debug("invalid meek type; please enter 0=Google, 1=AWS, 2=Azure");
- }
- }
-
- extraLines.append("Bridge " + BRIDGES_MEEK[meekIdx]).append('\n');
-
+ String type = "obfs4";
+
+ if (meekBridges)
+ type = "meek_lite";
+
+ getBridges(type,extraLines);
+
}
}
@@ -2063,4 +2045,84 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
+
+ // for bridge loading from the assets default bridges.txt file
+ class Bridge
+ {
+ String type;
+ String config;
+ }
+
+
+ private void loadBridgeDefaults ()
+ {
+ if (alBridges == null)
+ {
+ alBridges = new ArrayList<Bridge>();
+
+ try
+ {
+ BufferedReader in=
+ new BufferedReader(new InputStreamReader(getAssets().open("bridges.txt"), "UTF-8"));
+ String str;
+
+ while ((str=in.readLine()) != null) {
+
+ StringTokenizer st = new StringTokenizer (str," ");
+ Bridge b = new Bridge();
+ b.type = st.nextToken();
+
+ StringBuffer sbConfig = new StringBuffer();
+
+ while(st.hasMoreTokens())
+ sbConfig.append(st.nextToken()).append(' ');
+
+ b.config = sbConfig.toString().trim();
+
+ alBridges.add(b);
+
+ }
+
+ in.close();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ //we should randomly sort alBridges so we don't have the same bridge order each time
+ Random bridgeSelectRandom = new Random(System.nanoTime());
+
+ private void getBridges (String type, StringBuffer extraLines)
+ {
+
+ Collections.shuffle(alBridges, bridgeSelectRandom);
+
+ //let's just pull up to 2 bridges from the defaults at time
+ int maxBridges = 2;
+ int bridgeCount = 0;
+
+ //now go through the list to find the bridges we want
+ for (Bridge b : alBridges)
+ {
+ if (b.type.equals(type))
+ {
+ extraLines.append("Bridge ");
+ extraLines.append(b.type);
+ extraLines.append(' ');
+ extraLines.append(b.config);
+ extraLines.append('\n');
+
+ bridgeCount++;
+
+ if (bridgeCount > maxBridges)
+ break;
+ }
+ }
+
+ }
+
}
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits