From 331daa07b4ba49247a905f423ed1d0337737b853 Mon Sep 17 00:00:00 2001 From: n8fr8 Date: Mon, 1 Oct 2012 12:35:31 +0530 Subject: [PATCH] updates for transproxy iptables detection on JB --- .../android/service/TorService.java | 79 +++++++++++++------ .../android/service/TorTransProxy.java | 70 +++++++++------- 2 files changed, 93 insertions(+), 56 deletions(-) diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java index 77116485..7b53f3c2 100644 --- a/src/org/torproject/android/service/TorService.java +++ b/src/org/torproject/android/service/TorService.java @@ -58,7 +58,7 @@ import android.util.Log; public class TorService extends Service implements TorServiceConstants, TorConstants, Runnable, EventHandler { - public static boolean ENABLE_DEBUG_LOG = false; + public static boolean ENABLE_DEBUG_LOG = true; private static int currentStatus = STATUS_OFF; @@ -709,7 +709,10 @@ public class TorService extends Service implements TorServiceConstants, TorConst { TorService.logMessage ("Clearing TransProxy rules"); - + + if (mTransProxy == null) + mTransProxy = new TorTransProxy(); + if (mTransProxyAll) mTransProxy.clearTransparentProxyingAll(this); else @@ -1041,7 +1044,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst public void message(String severity, String msg) { - logNotice( "[Tor Control Port] " + severity + ": " + msg); + logNotice(severity + ": " + msg); if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1) { @@ -1062,13 +1065,9 @@ public class TorService extends Service implements TorServiceConstants, TorConst } - - sendCallbackStatusMessage (msg); } - //showToolbarNotification(msg, TRANSPROXY_NOTIFY_ID, R.drawable.ic_stat_notify); - public void newDescriptors(List orList) { } @@ -1076,23 +1075,20 @@ public class TorService extends Service implements TorServiceConstants, TorConst public void orConnStatus(String status, String orName) { - if (ENABLE_DEBUG_LOG) - { + StringBuilder sb = new StringBuilder(); sb.append("orConnStatus ("); - sb.append((orName) ); + sb.append(parseNodeName(orName) ); sb.append("): "); sb.append(status); logNotice(sb.toString()); - } + } public void streamStatus(String status, String streamID, String target) { - if (ENABLE_DEBUG_LOG) - { StringBuilder sb = new StringBuilder(); sb.append("StreamStatus ("); sb.append((streamID)); @@ -1100,14 +1096,12 @@ public class TorService extends Service implements TorServiceConstants, TorConst sb.append(status); logNotice(sb.toString()); - } + } public void unrecognized(String type, String msg) { - if (ENABLE_DEBUG_LOG) - { StringBuilder sb = new StringBuilder(); sb.append("Message ("); sb.append(type); @@ -1115,7 +1109,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst sb.append(msg); logNotice(sb.toString()); - } + } @@ -1142,21 +1136,44 @@ public class TorService extends Service implements TorServiceConstants, TorConst public void circuitStatus(String status, String circID, String path) { - if (ENABLE_DEBUG_LOG) + StringBuilder sb = new StringBuilder(); + sb.append("Circuit ("); + sb.append((circID)); + sb.append(") "); + sb.append(status); + sb.append(": "); + + StringTokenizer st = new StringTokenizer(path,","); + String node = null; + + while (st.hasMoreTokens()) { - StringBuilder sb = new StringBuilder(); - sb.append("Circuit ("); - sb.append((circID)); - sb.append("): "); - sb.append(status); - sb.append("; "); - sb.append(path); + node = st.nextToken(); - logNotice(sb.toString()); + sb.append(parseNodeName(node)); + + + if (st.hasMoreTokens()) + sb.append (" > "); } + logNotice(sb.toString()); + } + private String parseNodeName(String node) + { + if (node.indexOf('=')!=-1) + { + return (node.substring(node.indexOf("=")+1)); + } + else if (node.indexOf('~')!=-1) + { + return (node.substring(node.indexOf("~")+1)); + } + else + return node; + } public IBinder onBind(Intent intent) { @@ -1512,6 +1529,16 @@ public class TorService extends Service implements TorServiceConstants, TorConst try { mBinder.updateConfiguration("DisableNetwork", noConnectivity ? "1" : "0", false); mBinder.saveConfiguration(); + + if (noConnectivity) + { + logNotice("No network connectivity. Putting Tor to sleep..."); + } + else + { + logNotice("Network connectivity is good. Waking Tor up..."); + + } } catch (RemoteException e) { logException ("error applying prefs",e); } diff --git a/src/org/torproject/android/service/TorTransProxy.java b/src/org/torproject/android/service/TorTransProxy.java index 1a34c5c8..e5050f8e 100644 --- a/src/org/torproject/android/service/TorTransProxy.java +++ b/src/org/torproject/android/service/TorTransProxy.java @@ -13,44 +13,56 @@ import android.util.Log; public class TorTransProxy implements TorServiceConstants { - private String ipTablesPath; - public String getIpTablesPath (Context context) { + String ipTablesPath = null; - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean useSystemIpTables = prefs.getBoolean(TorConstants.PREF_USE_SYSTEM_IPTABLES, false); + + if (useSystemIpTables) + { + ipTablesPath = findSystemIPTables(); + } + else + { + //use the bundled version + + ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath(); - if (prefs.getBoolean(TorConstants.PREF_USE_SYSTEM_IPTABLES, false)) + try { - //if the user wants us to use the built-in iptables, then we have to find it - File fileIpt = new File("/system/bin/iptables"); - - if (fileIpt.exists()) - ipTablesPath = fileIpt.getAbsolutePath(); - else - { - - fileIpt = new File("/system/xbin/iptables"); - - if (fileIpt.exists()) - return (ipTablesPath = fileIpt.getAbsolutePath()); - else - { - //use the bundled version - ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath(); - } - } + if (testOwnerModule(context,ipTablesPath) != 0) + ipTablesPath = findSystemIPTables(); } - else + catch (Exception e) { - //use the bundled version - - ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath(); + ipTablesPath = findSystemIPTables(); } - + } return ipTablesPath; + } + + private String findSystemIPTables () + { + String path = null; + //if the user wants us to use the built-in iptables, then we have to find it + File fileIpt = new File("/system/bin/iptables"); + + if (fileIpt.exists()) + path = fileIpt.getAbsolutePath(); + else + { + + fileIpt = new File("/system/xbin/iptables"); + + if (fileIpt.exists()) + path = fileIpt.getAbsolutePath(); + } + + return path; } public int flushIptablesAll(Context context) throws Exception { @@ -164,7 +176,7 @@ public class TorTransProxy implements TorServiceConstants { } */ - public int testOwnerModule(Context context) throws Exception + public int testOwnerModule(Context context, String ipTablesPath) throws Exception { TorBinaryInstaller.assertIpTablesBinaries(context, false); @@ -174,8 +186,6 @@ public class TorTransProxy implements TorServiceConstants { int torUid = context.getApplicationInfo().uid; - String ipTablesPath = getIpTablesPath(context); - StringBuilder script = new StringBuilder(); StringBuilder res = new StringBuilder();