[tor-commits] [orbot/master] switch to using tor-android binary in TorService

n8fr8 at torproject.org n8fr8 at torproject.org
Thu Dec 7 17:55:22 UTC 2017


commit 3d729fc867666f68598965506d9d69476968a15c
Author: n8fr8 <nathan at freitas.net>
Date:   Sun Dec 3 15:11:10 2017 +0530

    switch to using tor-android binary in TorService
---
 .../org/torproject/android/service/TorService.java |  10 +-
 ...eInstaller.java => OtherResourceInstaller.java} | 201 ++++++---------------
 2 files changed, 62 insertions(+), 149 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 6c20a23e..b7e48f95 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -41,12 +41,13 @@ import android.widget.RemoteViews;
 import com.jrummyapps.android.shell.CommandResult;
 import com.jrummyapps.android.shell.Shell;
 
+import org.torproject.android.binary.TorResourceInstaller;
 import org.torproject.android.control.ConfigEntry;
 import org.torproject.android.control.TorControlConnection;
+import org.torproject.android.service.util.OtherResourceInstaller;
 import org.torproject.android.service.vpn.TorifiedApp;
 import org.torproject.android.service.util.DummyActivity;
 import org.torproject.android.service.util.Prefs;
-import org.torproject.android.service.util.TorResourceInstaller;
 import org.torproject.android.service.util.TorServiceUtils;
 import org.torproject.android.service.util.Utils;
 import org.torproject.android.service.vpn.OrbotVpnManager;
@@ -626,14 +627,17 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
             boolean success = installer.installResources();
             
             if (success)
-                prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).commit();    
+                prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).commit();
+
+            OtherResourceInstaller oInstaller = new OtherResourceInstaller(this, appBinHome);
+            oInstaller.installResources();
         }
 
         updateTorConfigFile ();
         isTorUpgradeAndConfigComplete = true;
     }
 
-    private boolean updateTorConfigFile () throws FileNotFoundException, IOException, TimeoutException
+    private boolean updateTorConfigFile () throws IOException, TimeoutException
     {
         SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
 
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/TorResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java
similarity index 59%
rename from orbotservice/src/main/java/org/torproject/android/service/util/TorResourceInstaller.java
rename to orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java
index 8e2a6e02..6c1506b3 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/TorResourceInstaller.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java
@@ -1,6 +1,3 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
 package org.torproject.android.service.util;
 
 import java.io.DataInputStream;
@@ -26,19 +23,19 @@ import org.torproject.android.service.OrbotConstants;
 import org.torproject.android.service.R;
 import org.torproject.android.service.TorServiceConstants;
 
-public class TorResourceInstaller implements TorServiceConstants {
+public class OtherResourceInstaller implements TorServiceConstants {
+
 
-    
     File installFolder;
     Context context;
-    
-    public TorResourceInstaller (Context context, File installFolder)
+
+    public OtherResourceInstaller (Context context, File installFolder)
     {
         this.installFolder = installFolder;
-        
+
         this.context = context;
     }
-    
+
     public void deleteDirectory(File file) {
         if( file.exists() ) {
             if (file.isDirectory()) {
@@ -52,153 +49,65 @@ public class TorResourceInstaller implements TorServiceConstants {
                     }
                 }
             }
-                
+
             file.delete();
         }
     }
-    
+
     private final static String COMMAND_RM_FORCE = "rm -f ";
     private final static String MP3_EXT = ".mp3";
-    //        
+    //
     /*
      * Extract the Tor resources from the APK file using ZIP
      */
     public boolean installResources () throws IOException, FileNotFoundException, TimeoutException
     {
-        
+
         InputStream is;
         File outFile;
 
         String cpuPath = "armeabi";
-            
+
         if (Build.CPU_ABI.contains("x86"))
-        	cpuPath = "x86";
+            cpuPath = "x86";
 
         deleteDirectory(installFolder);
-        
-        installFolder.mkdirs();
 
-        is = context.getResources().openRawResource(R.raw.torrc);
-        outFile = new File(installFolder, TORRC_ASSET_KEY);
-        streamToFile(is,outFile, false, false);
-        
-        is = context.getResources().openRawResource(R.raw.torpolipo);
-        outFile = new File(installFolder, POLIPOCONFIG_ASSET_KEY);
-        streamToFile(is,outFile, false, false);
+        installFolder.mkdirs();
 
         is = context.getAssets().open(cpuPath + '/' + OBFSCLIENT_ASSET_KEY + MP3_EXT);
         outFile = new File(installFolder, OBFSCLIENT_ASSET_KEY);
         streamToFile(is,outFile, false, true);
         setExecutable(outFile);
 
-        is = context.getAssets().open(cpuPath + '/' + TOR_ASSET_KEY + MP3_EXT);
-        outFile = new File(installFolder, TOR_ASSET_KEY);
-        streamToFile(is,outFile, false, true);
-        setExecutable(outFile);
-    
-        is = context.getAssets().open(cpuPath + '/' + POLIPO_ASSET_KEY + MP3_EXT);
-        outFile = new File(installFolder, POLIPO_ASSET_KEY);
-        streamToFile(is,outFile, false, true);
-        setExecutable(outFile);
-    
         is = context.getAssets().open(cpuPath + '/' + PDNSD_ASSET_KEY + MP3_EXT);
         outFile = new File(installFolder, PDNSD_ASSET_KEY);
         streamToFile(is,outFile, false, true);
         setExecutable(outFile);
-        
-        installGeoIP();
-    
+
+
         return true;
     }
-    
+
     public boolean updateTorConfigCustom (File fileTorRcCustom, String extraLines) throws IOException, FileNotFoundException, TimeoutException
     {
-    	if (fileTorRcCustom.exists())
-    	{
-    		fileTorRcCustom.delete();
-    		Log.d("torResources","deleting existing torrc.custom");
-    	}
-    	else
-    		fileTorRcCustom.createNewFile();
-    	
-    	FileOutputStream fos = new FileOutputStream(fileTorRcCustom, false);
-    	PrintStream ps = new PrintStream(fos);
-    	ps.print(extraLines);
-    	ps.close();
-    	
-        return true;
-    }
-    
-    public boolean updatePolipoConfig (File filePolipo, String extraLines) throws IOException, FileNotFoundException, TimeoutException
-    {
-        
-        InputStream is;
-        
-
-        is = context.getResources().openRawResource(R.raw.torpolipo);        
-        streamToFile(is,filePolipo, false, false);
-
-        if (extraLines != null && extraLines.length() > 0)
+        if (fileTorRcCustom.exists())
         {
-            StringBufferInputStream sbis = new StringBufferInputStream('\n' + extraLines + '\n');
-            streamToFile(sbis,filePolipo,true,false);
+            fileTorRcCustom.delete();
+            Log.d("torResources","deleting existing torrc.custom");
         }
-        
+        else
+            fileTorRcCustom.createNewFile();
 
-        return true;
-    }
-    
-    public boolean installPolipoConf () throws IOException, FileNotFoundException, TimeoutException
-    {
-        
-        InputStream is;
-        File outFile;
-        
+        FileOutputStream fos = new FileOutputStream(fileTorRcCustom, false);
+        PrintStream ps = new PrintStream(fos);
+        ps.print(extraLines);
+        ps.close();
 
-        is = context.getResources().openRawResource(R.raw.torpolipo);
-        outFile = new File(installFolder, POLIPOCONFIG_ASSET_KEY);
-        streamToFile(is,outFile, false, false);
-        
-        return true;
-    }
-    
-    /*
-     * Extract the Tor binary from the APK file using ZIP
-     */
-    
-    private boolean installGeoIP () throws IOException, FileNotFoundException
-    {
-        
-        InputStream is;
-        File outFile;
-        
-        outFile = new File(installFolder, GEOIP_ASSET_KEY);
-        is = context.getResources().openRawResource(R.raw.geoip);
-        streamToFile(is, outFile, false, true);
-        
-        is = context.getResources().openRawResource(R.raw.geoip6);
-        outFile = new File(installFolder, GEOIP6_ASSET_KEY);
-        streamToFile(is, outFile, false, true);
-    
         return true;
     }
-    
-    /*
-    private static void copyAssetFile(Context ctx, String asset, File file) throws IOException, InterruptedException
-    {
-        
-        DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
-        InputStream is = new GZIPInputStream(ctx.getAssets().open(asset));
-        
-        byte buf[] = new byte[8172];
-        int len;
-        while ((len = is.read(buf)) > 0) {
-            out.write(buf, 0, len);
-        }
-        out.close();
-        is.close();
-    }*/
-    
+
+
     /*
      * Write the inputstream contents to the file
      */
@@ -211,15 +120,15 @@ public class TorResourceInstaller implements TorServiceConstants {
 
         OutputStream stmOut = new FileOutputStream(outFile.getAbsolutePath(), append);
         ZipInputStream zis = null;
-        
+
         if (zip)
         {
-            zis = new ZipInputStream(stm);            
+            zis = new ZipInputStream(stm);
             ZipEntry ze = zis.getNextEntry();
             stm = zis;
-            
+
         }
-        
+
         while ((bytecount = stm.read(buffer)) > 0)
         {
 
@@ -229,55 +138,55 @@ public class TorResourceInstaller implements TorServiceConstants {
 
         stmOut.close();
         stm.close();
-        
+
         if (zis != null)
             zis.close();
-        
-        
+
+
         return true;
 
     }
-    
+
     //copy the file from inputstream to File output - alternative impl
     public static boolean copyFile (InputStream is, File outputFile)
     {
-        
+
         try {
-        	if (outputFile.exists())
-        		outputFile.delete();
-        	
+            if (outputFile.exists())
+                outputFile.delete();
+
             boolean newFile = outputFile.createNewFile();
             DataOutputStream out = new DataOutputStream(new FileOutputStream(outputFile));
             DataInputStream in = new DataInputStream(is);
-            
+
             int b = -1;
             byte[] data = new byte[1024];
-            
+
             while ((b = in.read(data)) != -1) {
                 out.write(data);
             }
-            
+
             if (b == -1); //rejoice
-            
+
             //
             out.flush();
             out.close();
             in.close();
             // chmod?
-            
+
             return newFile;
-            
-            
+
+
         } catch (IOException ex) {
             Log.e(OrbotConstants.TAG, "error copying binary", ex);
             return false;
         }
 
     }
-    
-    
 
-   
+
+
+
     /**
      * Copies a raw resource file, given its ID to the given location
      * @param ctx context
@@ -293,14 +202,14 @@ public class TorResourceInstaller implements TorServiceConstants {
         // Write the iptables binary
         final FileOutputStream out = new FileOutputStream(file);
         InputStream is = ctx.getResources().openRawResource(resid);
-        
+
         if (isZipd)
         {
-            ZipInputStream zis = new ZipInputStream(is);            
+            ZipInputStream zis = new ZipInputStream(is);
             ZipEntry ze = zis.getNextEntry();
             is = zis;
         }
-        
+
         byte buf[] = new byte[1024];
         int len;
         while ((len = is.read(buf)) > 0) {
@@ -320,14 +229,14 @@ public class TorResourceInstaller implements TorServiceConstants {
     /*
     public static boolean assertIpTablesBinaries(Context ctx, boolean showErrors) throws Exception {
         boolean changed = false;
-        
+
         // Check iptables_g1
         File file = new File(ctx.getDir("bin",0), "iptables");
         copyRawFile(ctx, R.raw.iptables, file, CHMOD_EXEC, false);
-                
+
         return true;
     }*/
-    
+
 
     private void setExecutable(File fileBin) {
         fileBin.setReadable(true);





More information about the tor-commits mailing list