[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [orbot/master] update APT Pluggable Transport library to 1.0.7



commit 1d45a3d28d548bac4b562df18fee4eef92688119
Author: n8fr8 <nathan@xxxxxxxxxxxxxxxxxxxx>
Date:   Tue Sep 10 00:22:38 2019 -0400

    update APT Pluggable Transport library to 1.0.7
    - this should fix one issue with installing the correct ofbs4proxy binary
    - also small changes to ensure no lock states and reduce log noise
---
 orbotservice/build.gradle                          |   8 +-
 .../android/service/TorEventHandler.java           | 102 ++++++-------
 .../org/torproject/android/service/TorService.java | 166 ++++++++++-----------
 .../android/service/util/CustomNativeLoader.java   |   4 +-
 .../android/service/vpn/OrbotVpnManager.java       |   2 +-
 5 files changed, 134 insertions(+), 148 deletions(-)

diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle
index bf3dc863..b2e3418c 100644
--- a/orbotservice/build.gradle
+++ b/orbotservice/build.gradle
@@ -14,7 +14,7 @@ android {
         minSdkVersion 16
         targetSdkVersion 29
         versionCode 16111000
-        versionName '16.1.1-BETA-2-tor-0.4.0.4-rc-orbotservice'
+        versionName '16.1.1-BETA-2-tor-0.4.1-5-rc-orbotservice'
         archivesBaseName = "OrbotService-$versionName"
 
     }
@@ -37,9 +37,9 @@ android {
 
 dependencies {
 
-    implementation 'org.torproject:tor-android-binary:0.4.0.4-rc'
-    implementation 'info.pluggabletransports.aptds:apt-dispatch-library:1.0.6'
-    implementation 'info.pluggabletransports.aptds:apt-meek-obfs4-legacy:1.0.6'
+    implementation 'org.torproject:tor-android-binary:0.4.1.5-rc'
+    implementation 'info.pluggabletransports.aptds:apt-dispatch-library:1.0.7'
+    implementation 'info.pluggabletransports.aptds:apt-meek-obfs4-legacy:1.0.7'
     implementation 'info.pluggabletransports.aptds:jsocksAndroid:1.0.4'
 
     implementation 'com.android.support:appcompat-v7:28.0.0'
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java b/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
index 15ec4bc0..ae2841d9 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
@@ -160,69 +160,65 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
         if (mService.getCurrentStatus() == STATUS_STARTING && TextUtils.equals(status, "BUILT"))
             mService.sendCallbackStatus(STATUS_ON);
 
-        StringBuilder sb = new StringBuilder();
-        sb.append("Circuit (");
-        sb.append((circID));
-        sb.append(") ");
-        sb.append(status);
-        sb.append(": ");
-
-        StringTokenizer st = new StringTokenizer(path,",");
-        Node node = null;
-
-        while (st.hasMoreTokens())
-        {
-            String nodePath = st.nextToken();
-            node = new Node();
+        if (Prefs.useDebugLogging()) {
+            StringBuilder sb = new StringBuilder();
+            sb.append("Circuit (");
+            sb.append((circID));
+            sb.append(") ");
+            sb.append(status);
+            sb.append(": ");
+
+            StringTokenizer st = new StringTokenizer(path, ",");
+            Node node = null;
+
+            while (st.hasMoreTokens()) {
+                String nodePath = st.nextToken();
+                node = new Node();
+
+                String[] nodeParts;
+
+                if (nodePath.contains("="))
+                    nodeParts = nodePath.split("=");
+                else
+                    nodeParts = nodePath.split("~");
+
+                if (nodeParts.length == 1) {
+                    node.id = nodeParts[0].substring(1);
+                    node.name = node.id;
+                } else if (nodeParts.length == 2) {
+                    node.id = nodeParts[0].substring(1);
+                    node.name = nodeParts[1];
+                }
 
-            String[] nodeParts;
+                node.status = status;
 
-            if (nodePath.contains("="))
-                nodeParts = nodePath.split("=");
-            else
-                nodeParts = nodePath.split("~");
+                sb.append(node.name);
 
-            if (nodeParts.length == 1)
-            {
-                node.id = nodeParts[0].substring(1);
-                node.name = node.id;
+                if (st.hasMoreTokens())
+                    sb.append(" > ");
             }
-            else if (nodeParts.length == 2)
-            {
-                node.id = nodeParts[0].substring(1);
-                node.name = nodeParts[1];
-             }
 
-            node.status = status;
+            if (Prefs.useDebugLogging())
+                mService.debug(sb.toString());
+            else if (status.equals("BUILT"))
+                mService.logNotice(sb.toString());
+            else if (status.equals("CLOSED"))
+                mService.logNotice(sb.toString());
 
-            sb.append(node.name);
+            if (Prefs.expandedNotifications()) {
+                //get IP from last nodename
+                if (status.equals("BUILT")) {
 
-            if (st.hasMoreTokens())
-                sb.append (" > ");
-        }
-
-        if (Prefs.useDebugLogging())
-            mService.debug(sb.toString());
-        else if(status.equals("BUILT"))
-            mService.logNotice(sb.toString());
-        else if (status.equals("CLOSED"))
-            mService.logNotice(sb.toString());
-
-        if (Prefs.expandedNotifications())
-        {
-            //get IP from last nodename
-            if(status.equals("BUILT")){
-
-               // if (node.ipAddress == null)
-                 //   mService.exec(new ExternalIPFetcher(node));
+                    // if (node.ipAddress == null)
+                    //   mService.exec(new ExternalIPFetcher(node));
 
-                hmBuiltNodes.put(circID, node);
-            }
+                    hmBuiltNodes.put(circID, node);
+                }
 
-            if (status.equals("CLOSED"))
-            {
-                hmBuiltNodes.remove(circID);
+                if (status.equals("CLOSED")) {
+                    hmBuiltNodes.remove(circID);
 
+                }
             }
         }
 
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 5b047143..a566b6d4 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -91,7 +91,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
     public final static String BINARY_TOR_VERSION = org.torproject.android.binary.TorServiceConstants.BINARY_TOR_VERSION;
     private String mCurrentStatus = STATUS_OFF;
     
-    private final static int CONTROL_SOCKET_TIMEOUT = 0;
+    private final static int CONTROL_SOCKET_TIMEOUT = 60000;
         
     private TorControlConnection conn = null;
     private int mLastProcessId = -1;
@@ -108,8 +108,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
     private ArrayList<String> configBuffer = null;
     private ArrayList<String> resetBuffer = null;
 
-    private boolean isTorUpgradeAndConfigComplete = false;
-
     private File fileControlPort;
 
     private boolean mConnectivity = true;
@@ -371,12 +369,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         
         public void run() {
 
-            while (!isTorUpgradeAndConfigComplete)
-            {
-                try { Thread.sleep (500);}
-                catch (Exception e){}
-            }
-
             String action = mIntent.getAction();
 
             if (action != null) {
@@ -602,6 +594,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         fileObfsclient = new TransportManager() {
             @Override
             public void startTransportSync(TransportListener transportListener) {
+
             }
         }.installTransport(this, OBFSCLIENT_ASSET_KEY);
 
@@ -619,8 +612,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
     }
 
     private boolean torUpgradeAndConfig() throws IOException, TimeoutException {
-        if (isTorUpgradeAndConfigComplete)
-            return true;
 
         SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
         String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
@@ -639,8 +630,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
             if (!fileTorRc.exists())
                 return false;
 
-            isTorUpgradeAndConfigComplete = true;
-
             return true;
         }
 
@@ -732,8 +721,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         {
         	extraLines.append("Log debug syslog").append('\n');
         	extraLines.append("Log info syslog").append('\n');
-        	extraLines.append("SafeLogging 0").append('\n');   
-
+        	extraLines.append("SafeLogging 0").append('\n');
         }
 
         extraLines = processSettingsImpl(extraLines);
@@ -851,7 +839,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
 
         	
 	        // make sure there are no stray daemons running
-//	        killAllDaemons();
+	        killAllDaemons();
 
             SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
             String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
@@ -859,8 +847,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
 
             sendCallbackStatus(STATUS_STARTING);
             showToolbarNotification(getString(R.string.status_starting_up),NOTIFY_ID,R.drawable.ic_stat_tor);
-	        sendCallbackLogMessage(getString(R.string.status_starting_up));
-	        logNotice(getString(R.string.status_starting_up));
+	        //sendCallbackLogMessage(getString(R.string.status_starting_up));
+	        //logNotice(getString(R.string.status_starting_up));
 	        
 	        ArrayList<String> customEnv = new ArrayList<String>();
 	
@@ -874,56 +862,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
 
             if (success)
             {
-     //       if (mPortHTTP != -1)
-       //         runPolipoShellCmd();
-
-                // Tor is running, update new .onion names at db
-                ContentResolver mCR = getApplicationContext().getContentResolver();
-                Cursor hidden_services = mCR.query(HS_CONTENT_URI, hsProjection, null, null, null);
-                if(hidden_services != null) {
-                    try {
-                        while (hidden_services.moveToNext()) {
-                            String HSDomain = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.DOMAIN));
-                            Integer HSLocalPort = hidden_services.getInt(hidden_services.getColumnIndex(HiddenService.PORT));
-                            Integer HSAuthCookie = hidden_services.getInt(hidden_services.getColumnIndex(HiddenService.AUTH_COOKIE));
-                            String HSAuthCookieValue = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.AUTH_COOKIE_VALUE));
-
-                            // Update only new domains or restored from backup with auth cookie
-                            if ((HSDomain == null || HSDomain.length() < 1) || (HSAuthCookie == 1 && (HSAuthCookieValue == null || HSAuthCookieValue.length() < 1))) {
-                                String hsDirPath = new File(mHSBasePath.getAbsolutePath(), "hs" + HSLocalPort).getCanonicalPath();
-                                File file = new File(hsDirPath, "hostname");
-
-                                if (file.exists()) {
-                                    ContentValues fields = new ContentValues();
-
-                                    try {
-                                        String onionHostname = Utils.readString(new FileInputStream(file)).trim();
-                                        if (HSAuthCookie == 1) {
-                                            String[] aux = onionHostname.split(" ");
-                                            onionHostname = aux[0];
-                                            fields.put(HiddenService.AUTH_COOKIE_VALUE, aux[1]);
-                                        }
-                                        fields.put(HiddenService.DOMAIN, onionHostname);
-                                        mCR.update(HS_CONTENT_URI, fields, "port=" + HSLocalPort, null);
-                                    } catch (FileNotFoundException e) {
-                                        logException("unable to read onion hostname file", e);
-                                        showToolbarNotification(getString(R.string.unable_to_read_hidden_service_name), HS_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
-                                    }
-                                } else {
-                                    showToolbarNotification(getString(R.string.unable_to_read_hidden_service_name), HS_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
-
-                                }
-                            }
-                        }
-
-                    } catch (NumberFormatException e) {
-                        Log.e(OrbotConstants.TAG, "error parsing hsport", e);
-                    } catch (Exception e) {
-                        Log.e(OrbotConstants.TAG, "error starting share server", e);
-                    }
-
-                    hidden_services.close();
-                }
+                updateOnionNames ();
             }
 
         } catch (Exception e) {
@@ -936,6 +875,57 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         }
     }
 
+    private void updateOnionNames ()
+    {
+        // Tor is running, update new .onion names at db
+        ContentResolver mCR = getApplicationContext().getContentResolver();
+        Cursor hidden_services = mCR.query(HS_CONTENT_URI, hsProjection, null, null, null);
+        if(hidden_services != null) {
+            try {
+                while (hidden_services.moveToNext()) {
+                    String HSDomain = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.DOMAIN));
+                    Integer HSLocalPort = hidden_services.getInt(hidden_services.getColumnIndex(HiddenService.PORT));
+                    Integer HSAuthCookie = hidden_services.getInt(hidden_services.getColumnIndex(HiddenService.AUTH_COOKIE));
+                    String HSAuthCookieValue = hidden_services.getString(hidden_services.getColumnIndex(HiddenService.AUTH_COOKIE_VALUE));
+
+                    // Update only new domains or restored from backup with auth cookie
+                    if ((HSDomain == null || HSDomain.length() < 1) || (HSAuthCookie == 1 && (HSAuthCookieValue == null || HSAuthCookieValue.length() < 1))) {
+                        String hsDirPath = new File(mHSBasePath.getAbsolutePath(), "hs" + HSLocalPort).getCanonicalPath();
+                        File file = new File(hsDirPath, "hostname");
+
+                        if (file.exists()) {
+                            ContentValues fields = new ContentValues();
+
+                            try {
+                                String onionHostname = Utils.readString(new FileInputStream(file)).trim();
+                                if (HSAuthCookie == 1) {
+                                    String[] aux = onionHostname.split(" ");
+                                    onionHostname = aux[0];
+                                    fields.put(HiddenService.AUTH_COOKIE_VALUE, aux[1]);
+                                }
+                                fields.put(HiddenService.DOMAIN, onionHostname);
+                                mCR.update(HS_CONTENT_URI, fields, "port=" + HSLocalPort, null);
+                            } catch (FileNotFoundException e) {
+                                logException("unable to read onion hostname file", e);
+                                showToolbarNotification(getString(R.string.unable_to_read_hidden_service_name), HS_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
+                            }
+                        } else {
+                            showToolbarNotification(getString(R.string.unable_to_read_hidden_service_name), HS_NOTIFY_ID, R.drawable.ic_stat_notifyerr);
+
+                        }
+                    }
+                }
+
+            } catch (NumberFormatException e) {
+                Log.e(OrbotConstants.TAG, "error parsing hsport", e);
+            } catch (Exception e) {
+                Log.e(OrbotConstants.TAG, "error starting share server", e);
+            }
+
+            hidden_services.close();
+        }
+    }
+
     private boolean runTorShellCmd() throws Exception
     {
         boolean result = true;
@@ -943,7 +933,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         File fileTorrcCustom = updateTorrcCustomFile();
 
         //make sure Tor exists and we can execute it
-        if ((!fileTor.exists()) || (!fileTor.canExecute()))
+        if (fileTor == null || (!fileTor.exists()) || (!fileTor.canExecute()))
             return false;
 
         if ((!fileTorRc.exists()) || (!fileTorRc.canRead()) )
@@ -1052,7 +1042,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
                         torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
                         
                         conn = new TorControlConnection(torConnSocket);
-                        conn.launchThread(false);//is daemon
+                        conn.launchThread(true);//is daemon
                         
                         break;
                     }
@@ -1089,9 +1079,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
                         logNotice( "SUCCESS - authenticated to control port.");
                         
                         sendCallbackLogMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete));
-    
-                        addEventHandler();
-                    
+
                         String torProcId = conn.getInfo("process/pid");
                         
                          String confSocks = conn.getInfo("net/listeners/socks");
@@ -1127,6 +1115,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
 
                         sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
 
+                        addEventHandler();
+
                         return Integer.parseInt(torProcId);
                         
                     }
@@ -1189,7 +1179,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         return result;
     }
 
-    public synchronized void addEventHandler () throws Exception
+    public void addEventHandler () throws Exception
     {
            // We extend NullEventHandler so that we don't need to provide empty
            // implementations for all the events we don't care about.
@@ -1199,9 +1189,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         conn.setEventHandler(mEventHandler);
 
         conn.setEvents(Arrays.asList(new String[]{
-              "ORCONN", "CIRC", "NOTICE", "WARN", "ERR","BW"}));
-          // conn.setEvents(Arrays.asList(new String[]{
-            //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
+                "ORCONN", "CIRC", "NOTICE", "WARN", "ERR","BW"}));
 
         logNotice( "SUCCESS added control port event handler");
     }
@@ -1625,34 +1613,34 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
                 //check if any PT bridges are needed
                 if (obfs3Bridges)
                     extraLines.append("ClientTransportPlugin obfs3 exec ")
-                            .append(fileObfsclient.getCanonicalPath()).append('\n');
+                            .append(fileObfsclient.getAbsolutePath()).append('\n');
 
                 if (obfs4Bridges)
                     extraLines.append("ClientTransportPlugin obfs4 exec ")
-                            .append(fileObfsclient.getCanonicalPath()).append('\n');
+                            .append(fileObfsclient.getAbsolutePath()).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
                 {
-                    String[] bridgeListLines = bridgeList.split("\\n");
+                    String[] bridgeListLines = bridgeList.trim().split("\\n");
+
 
+                    int bridgeIdx = (int)Math.round(Math.random()*((double)bridgeListLines.length));
+                    String bridgeLine = bridgeListLines[bridgeIdx];
+                    extraLines.append("Bridge ");
+                    extraLines.append(bridgeLine);
+                    extraLines.append("\n");
+                    /**
                     for (String bridgeConfigLine : bridgeListLines) {
                         if (!TextUtils.isEmpty(bridgeConfigLine)) {
                             extraLines.append("Bridge ");
-                            extraLines.append(bridgeConfigLine);
-
-                            /**
-                            StringTokenizer st = new StringTokenizer(bridgeConfigLine, " ");
-                            while (st.hasMoreTokens())
-                                extraLines.append(st.nextToken()).append(' ');
-                            **/
+                            extraLines.append(bridgeConfigLine.trim());
                             extraLines.append("\n");
-
                         }
 
-                    }
+                    }**/
 
                 } else {
 
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java
index e44340b4..24a994d5 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomNativeLoader.java
@@ -26,7 +26,9 @@ public class CustomNativeLoader {
             zipFile = new ZipFile(context.getApplicationInfo().sourceDir);
             ZipEntry entry = zipFile.getEntry("lib/" + arch + "/" + libname + ".so");
             if (entry == null) {
-                throw new Exception("Unable to find file in apk:" + "lib/" + arch + "/" + libname);
+                entry = zipFile.getEntry("jni/" + arch + "/" + libname + ".so");
+                if (entry == null)
+                    throw new Exception("Unable to find file in apk:" + "lib/" + arch + "/" + libname);
             }
 
             //how we wrap this in another stream because the native .so is zipped itself
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
index 03ad79c2..98de7bbb 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/OrbotVpnManager.java
@@ -341,7 +341,7 @@ public class OrbotVpnManager implements Handler.Callback {
 
 					//start PDNSD daemon pointing to actual DNS
 					int pdnsdPort = 8091;
-					startDNS(filePdnsd.getCanonicalPath(), localhost,mTorDns, virtualGateway, pdnsdPort);
+						startDNS(filePdnsd.getCanonicalPath(), localhost,mTorDns, virtualGateway, pdnsdPort);
 					final boolean localDnsTransparentProxy = true;
 
 					Tun2Socks.Start(mService, mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , virtualGateway + ":" + pdnsdPort , localDnsTransparentProxy);



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits