[tor-commits] [orbot/master] update service for VPN mode and startup fixes

n8fr8 at torproject.org n8fr8 at torproject.org
Tue Apr 28 21:05:00 UTC 2020


commit bbf5fcb3fb346e9bba712d12bf4934cf925cb2bd
Author: n8fr8 <nathan at guardianproject.info>
Date:   Wed Aug 7 13:33:30 2019 -0400

    update service for VPN mode and startup fixes
---
 orbotservice/build.gradle                          |   4 +-
 .../java/org/torproject/android/control/.cvsignore |   1 -
 .../java/org/torproject/android/control/README     |   4 -
 .../android/control/TorControlConnection.java      |  12 +-
 .../torproject/android/control/examples/.cvsignore |   1 -
 .../control/examples/DebuggingEventHandler.java    |  44 -------
 .../torproject/android/control/examples/Main.java  | 146 ---------------------
 .../org/torproject/android/service/TorService.java |  16 ++-
 .../service/util/CustomTorResourceInstaller.java   |   4 +-
 .../android/service/vpn/OrbotVpnManager.java       |  28 ++--
 .../android/service/vpn/TorVpnService.java         |  19 ++-
 11 files changed, 50 insertions(+), 229 deletions(-)

diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle
index 7e933c7f..f8e96bf5 100644
--- a/orbotservice/build.gradle
+++ b/orbotservice/build.gradle
@@ -13,8 +13,8 @@ android {
     defaultConfig {
         minSdkVersion 16
         targetSdkVersion 28
-        versionCode 16060001
-        versionName '16.0.6-BETA-1-tor-0.3.5.8-orbotservice'
+        versionCode 16111000
+        versionName '16.1.1-BETA-2-tor-0.4.0.4-rc-orbotservice'
         archivesBaseName = "OrbotService-$versionName"
 
     }
diff --git a/orbotservice/src/main/java/org/torproject/android/control/.cvsignore b/orbotservice/src/main/java/org/torproject/android/control/.cvsignore
deleted file mode 100644
index 6b468b62..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.class
diff --git a/orbotservice/src/main/java/org/torproject/android/control/README b/orbotservice/src/main/java/org/torproject/android/control/README
deleted file mode 100644
index b310c7d5..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/README
+++ /dev/null
@@ -1,4 +0,0 @@
-We broke the version detection stuff in Tor 0.1.2.16 / 0.2.0.4-alpha.
-Somebody should rip out the v0 control protocol stuff from here, and
-it should start working again. -RD
-
diff --git a/orbotservice/src/main/java/org/torproject/android/control/TorControlConnection.java b/orbotservice/src/main/java/org/torproject/android/control/TorControlConnection.java
index 05ed8c3c..4f1fe95b 100644
--- a/orbotservice/src/main/java/org/torproject/android/control/TorControlConnection.java
+++ b/orbotservice/src/main/java/org/torproject/android/control/TorControlConnection.java
@@ -312,12 +312,12 @@ public class TorControlConnection implements TorControlCommands {
                 handleEvent(lst);
             else {
                 synchronized (waiters) {
- 		if (!waiters.isEmpty())
-		{
-                    Waiter w;
-                    w = waiters.removeFirst();
-                    w.setResponse(lst);
-		}
+                    if (!waiters.isEmpty())
+                    {
+                                Waiter w;
+                                w = waiters.removeFirst();
+                                w.setResponse(lst);
+                    }
                 }		
 
             }
diff --git a/orbotservice/src/main/java/org/torproject/android/control/examples/.cvsignore b/orbotservice/src/main/java/org/torproject/android/control/examples/.cvsignore
deleted file mode 100644
index 6b468b62..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/examples/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.class
diff --git a/orbotservice/src/main/java/org/torproject/android/control/examples/DebuggingEventHandler.java b/orbotservice/src/main/java/org/torproject/android/control/examples/DebuggingEventHandler.java
deleted file mode 100644
index 48c49a28..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/examples/DebuggingEventHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control.examples;
-
-import java.io.PrintWriter;
-import java.util.Iterator;
-import org.torproject.android.control.EventHandler;
-
-public class DebuggingEventHandler implements EventHandler {
-
-    private final PrintWriter out;
-
-    public DebuggingEventHandler(PrintWriter p) {
-        out = p;
-    }
-
-    public void circuitStatus(String status, String circID, String path) {
-        out.println("Circuit "+circID+" is now "+status+" (path="+path+")");
-    }
-    public void streamStatus(String status, String streamID, String target) {
-        out.println("Stream "+streamID+" is now "+status+" (target="+target+")");
-    }
-    public void orConnStatus(String status, String orName) {
-        out.println("OR connection to "+orName+" is now "+status);
-    }
-    public void bandwidthUsed(long read, long written) {
-        out.println("Bandwidth usage: "+read+" bytes read; "+
-                    written+" bytes written.");
-    }
-    public void newDescriptors(java.util.List<String> orList) {
-        out.println("New descriptors for routers:");
-        for (Iterator<String> i = orList.iterator(); i.hasNext(); )
-            out.println("   "+i.next());
-    }
-    public void message(String type, String msg) {
-        out.println("["+type+"] "+msg.trim());
-    }
-
-    public void unrecognized(String type, String msg) {
-        out.println("unrecognized event ["+type+"] "+msg.trim());
-    }
-
-}
-
diff --git a/orbotservice/src/main/java/org/torproject/android/control/examples/Main.java b/orbotservice/src/main/java/org/torproject/android/control/examples/Main.java
deleted file mode 100644
index b0e0a3c0..00000000
--- a/orbotservice/src/main/java/org/torproject/android/control/examples/Main.java
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2005 Nick Mathewson, Roger Dingledine
-// See LICENSE file for copying information
-package org.torproject.android.control.examples;
-
-import org.torproject.android.control.*;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Iterator;
-
-public class Main implements TorControlCommands {
-
-    public static void main(String args[]) {
-        if (args.length < 1) {
-            System.err.println("No command given.");
-            return;
-        }
-        try {
-            if (args[0].equals("set-config")) {
-                setConfig(args);
-            } else if (args[0].equals("get-config")) {
-                getConfig(args);
-            } else if (args[0].equals("get-info")) {
-                getInfo(args);
-            } else if (args[0].equals("listen")) {
-                listenForEvents(args);
-            } else if (args[0].equals("signal")) {
-                signal(args);
-            } else if (args[0].equals("auth")) {
-                authDemo(args);
-            } else {
-                System.err.println("Unrecognized command: "+args[0]);
-            }
-        } catch (EOFException ex) {
-            System.out.println("Control socket closed by Tor.");
-        } catch (TorControlError ex) {
-            System.err.println("Error from Tor process: "+
-                               ex+" ["+ex.getErrorMsg()+"]");
-        } catch (IOException ex) {
-            System.err.println("IO exception when talking to Tor process: "+
-                               ex);
-            ex.printStackTrace(System.err);
-        }
-    }
-
-    private static TorControlConnection getConnection(String[] args,
-        boolean daemon) throws IOException {
-        Socket s = new Socket("127.0.0.1", 9100);
-        TorControlConnection conn = new TorControlConnection(s);
-        conn.launchThread(daemon);
-        conn.authenticate(new byte[0]);
-        return conn;
-    }
-
-    private static TorControlConnection getConnection(String[] args)
-        throws IOException {
-        return getConnection(args, true);
-    }
-
-    public static void setConfig(String[] args) throws IOException {
-        // Usage: "set-config [-save] key value key value key value"
-        TorControlConnection conn = getConnection(args);
-        ArrayList<String> lst = new ArrayList<String>();
-        int i = 1;
-        boolean save = false;
-        if (args[i].equals("-save")) {
-            save = true;
-            ++i;
-        }
-        for (; i < args.length; i +=2) {
-            lst.add(args[i]+" "+args[i+1]);
-        }
-        conn.setConf(lst);
-        if (save) {
-            conn.saveConf();
-        }
-    }
-
-    public static void getConfig(String[] args) throws IOException {
-        // Usage: get-config key key key
-        TorControlConnection conn = getConnection(args);
-        List<ConfigEntry> lst = conn.getConf(Arrays.asList(args).subList(1,args.length));
-        for (Iterator<ConfigEntry> i = lst.iterator(); i.hasNext(); ) {
-            ConfigEntry e = i.next();
-            System.out.println("KEY: "+e.key);
-            System.out.println("VAL: "+e.value);
-        }
-    }
-
-    public static void getInfo(String[] args) throws IOException {
-        TorControlConnection conn = getConnection(args);
-        Map<String,String> m = conn.getInfo(Arrays.asList(args).subList(1,args.length));
-        for (Iterator<Map.Entry<String, String>> i = m.entrySet().iterator(); i.hasNext(); ) {
-            Map.Entry<String,String> e = i.next();
-            System.out.println("KEY: "+e.getKey());
-            System.out.println("VAL: "+e.getValue());
-        }
-    }
-
-    public static void listenForEvents(String[] args) throws IOException {
-        // Usage: listen [circ|stream|orconn|bw|newdesc|info|notice|warn|error]*
-        TorControlConnection conn = getConnection(args, false);
-        ArrayList<String> lst = new ArrayList<String>();
-        for (int i = 1; i < args.length; ++i) {
-            lst.add(args[i]);
-        }
-        conn.setEventHandler(
-            new DebuggingEventHandler(new PrintWriter(System.out, true)));
-        conn.setEvents(lst);
-    }
-
-    public static void signal(String[] args) throws IOException {
-        // Usage signal [reload|shutdown|dump|debug|halt]
-        TorControlConnection conn = getConnection(args, false);
-        // distinguish shutdown signal from other signals
-        if ("SHUTDOWN".equalsIgnoreCase(args[1])
-        		|| "HALT".equalsIgnoreCase(args[1])) {
-        	conn.shutdownTor(args[1].toUpperCase());
-        } else {
-        	conn.signal(args[1].toUpperCase());
-        }
-    }
-
-    public static void authDemo(String[] args) throws IOException {
-
-        PasswordDigest pwd = PasswordDigest.generateDigest();
-        Socket s = new Socket("127.0.0.1", 9100);
-        TorControlConnection conn = new TorControlConnection(s);
-        conn.launchThread(true);
-        conn.authenticate(new byte[0]);
-
-        conn.setConf("HashedControlPassword", pwd.getHashedPassword());
-
-        s = new Socket("127.0.0.1", 9100);
-        conn = new TorControlConnection(s);
-        conn.launchThread(true);
-        conn.authenticate(pwd.getSecret());
-    }
-
-}
-
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 65f0d179..fc518024 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -723,9 +723,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         extraLines.append("VirtualAddrNetwork 10.192.0.0/10").append('\n');
         extraLines.append("AutomapHostsOnResolve 1").append('\n');
 
-        extraLines.append("DisableNetwork 0").append('\n');
         extraLines.append("DormantClientTimeout 10 minutes").append('\n');
-        extraLines.append("DormantOnFirstStartup 1").append('\n');
+        extraLines.append("DormantOnFirstStartup 0").append('\n');
+
+        extraLines.append("DisableNetwork 0").append('\n');
 
         if (Prefs.useDebugLogging())
         {
@@ -1051,7 +1052,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
                         torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
                         
                         conn = new TorControlConnection(torConnSocket);
-                        conn.launchThread(true);//is daemon
+                        conn.launchThread(false);//is daemon
                         
                         break;
                     }
@@ -1197,7 +1198,6 @@ 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[]{
@@ -1509,11 +1509,13 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
             }
             
             mNetworkType = newNetType;
-        	mConnectivity = newConnectivityState;
 
-        	if (mConnectivity)
-                newIdentity();
+            if (newConnectivityState != mConnectivity) {
+                mConnectivity = newConnectivityState;
 
+                if (mConnectivity)
+                    newIdentity();
+            }
 
             /**
             if (doNetworKSleep && mCurrentStatus != STATUS_OFF)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
index a2561238..cb4f5c6a 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/CustomTorResourceInstaller.java
@@ -64,6 +64,7 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
             }
         }
 
+        //it exists but we can't execute it, so copy it to a new path
         if (fileTor.exists()) {
             InputStream is = new FileInputStream(fileTor);
             streamToFile(is, fileTor, false, true);
@@ -76,7 +77,8 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
         //let's try another approach
         fileTor = CustomNativeLoader.loadNativeBinary(context,TOR_ASSET_KEY,new File(installFolder, TOR_ASSET_KEY));
 
-        setExecutable(fileTor);
+        if (fileTor != null && fileTor.exists())
+            setExecutable(fileTor);
 
         if (fileTor != null && fileTor.exists() && fileTor.canExecute())
             return fileTor;
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 65db4659..0af6dcff 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
@@ -95,9 +95,8 @@ public class OrbotVpnManager implements Handler.Callback {
 
 		filePdnsd = CustomNativeLoader.loadNativeBinary(service.getApplicationContext(),PDNSD_BIN,new File(service.getFilesDir(),PDNSD_BIN));
 
-		// if that fails, try again using native utils
 		try {
-			killProcess(filePdnsd, "-1"); // this is -HUP
+			killProcess(filePdnsd, "-1");
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -144,14 +143,17 @@ public class OrbotVpnManager implements Handler.Callback {
 			{
 				Log.d(TAG,"starting OrbotVPNService service!");
 
-				int newTorSocks = intent.getIntExtra(TorService.EXTRA_SOCKS_PROXY_PORT,-1);
-				int newTorDns = intent.getIntExtra(TorService.EXTRA_DNS_PORT,-1);
+				int torSocks = intent.getIntExtra(TorService.EXTRA_SOCKS_PROXY_PORT,-1);
+				int torDns = intent.getIntExtra(TorService.EXTRA_DNS_PORT,-1);
+
+				//if running, we need to restart
+				if ((torSocks != mTorSocks || torDns != mTorDns)) {
 
-				if ((mTorSocks != newTorSocks || mTorDns != newTorDns)) {
-					mTorSocks = newTorSocks;
-					mTorDns = newTorDns;
+					mTorSocks = torSocks;
+					mTorDns = torDns;
 
 					if (!mIsLollipop) {
+						stopSocksBypass();
 						startSocksBypass();
 					}
 
@@ -444,12 +446,14 @@ public class OrbotVpnManager implements Handler.Callback {
 
 			try {
 				BufferedReader reader = new BufferedReader(new FileReader(filePid));
-				pid = reader.readLine().trim();
-
-				VpnUtils.killProcess(pid,"-9");
-				filePid.delete();
-				return true;
+				String line = reader.readLine();
+				if (line != null) {
+					pid = reader.readLine().trim();
 
+					VpnUtils.killProcess(pid, "-9");
+					filePid.delete();
+					return true;
+				}
 			} catch (Exception e) {
 				Log.e(TAG,"error killing DNS Process: " + pid,e);
 			}
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/TorVpnService.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/TorVpnService.java
index e70753f6..78c405f4 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/TorVpnService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/TorVpnService.java
@@ -31,9 +31,7 @@ public class TorVpnService extends VpnService {
             e.printStackTrace();
         }
 
-        LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
-        lbm.registerReceiver(mLocalBroadcastReceiver,
-                new IntentFilter(TorServiceConstants.LOCAL_ACTION_PORTS));
+
     }
 
     /* (non-Javadoc)
@@ -41,6 +39,18 @@ public class TorVpnService extends VpnService {
      */
     public int onStartCommand(Intent intent, int flags, int startId) {
 
+        if (intent.getAction().equals("start"))
+        {
+            LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
+            lbm.registerReceiver(mLocalBroadcastReceiver,
+                    new IntentFilter(TorServiceConstants.LOCAL_ACTION_PORTS));
+        }
+        else if (intent.getAction().equals("stop"))
+        {
+            LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
+            lbm.unregisterReceiver(mLocalBroadcastReceiver);
+        }
+
         mVpnManager.handleIntent(new Builder(), intent);
 
         return Service.START_STICKY;
@@ -50,8 +60,7 @@ public class TorVpnService extends VpnService {
     public void onDestroy() {
         super.onDestroy();
 
-        LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
-        lbm.unregisterReceiver(mLocalBroadcastReceiver);
+
     }
 
     /**





More information about the tor-commits mailing list