commit cac2a28d50079edc2f03c35fa9ce32eb91d620a6
Author: Nathan Freitas <[email protected]>
Date:   Tue Jan 14 23:58:54 2014 -0500

    updated TorBinaryInstaller now just handles resources
---
 .../android/service/TorResourceInstaller.java      |  226 ++++++++++++++++++++
 1 file changed, 226 insertions(+)

diff --git a/src/org/torproject/android/service/TorResourceInstaller.java 
b/src/org/torproject/android/service/TorResourceInstaller.java
new file mode 100644
index 0000000..ce30da6
--- /dev/null
+++ b/src/org/torproject/android/service/TorResourceInstaller.java
@@ -0,0 +1,226 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - 
http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+
+package org.torproject.android.service;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import org.torproject.android.R;
+import org.torproject.android.TorConstants;
+
+import android.content.Context;
+import android.util.Log;
+
+public class TorResourceInstaller implements TorServiceConstants {
+
+       
+       File installFolder;
+       Context context;
+       
+       public TorResourceInstaller (Context context, File installFolder)
+       {
+               this.installFolder = installFolder;
+               
+               this.context = context;
+       }
+       
+       //              
+       /*
+        * Extract the Tor resources from the APK file using ZIP
+        */
+       public boolean installResources () throws IOException, 
FileNotFoundException
+       {
+               
+               InputStream is;
+        File outFile;
+        
+               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.torrctether); 
        
+               outFile = new File(installFolder, TORRC_TETHER_KEY);
+               streamToFile(is, outFile, false, false);
+
+               is = 
context.getResources().openRawResource(R.raw.privoxy_config);
+               outFile = new File(installFolder, PRIVOXYCONFIG_ASSET_KEY);
+               streamToFile(is,outFile, false, false);
+       
+               return true;
+       }
+       
+       /*
+        * Extract the Tor binary from the APK file using ZIP
+        */
+       
+       public boolean installGeoIP () throws IOException, FileNotFoundException
+       {
+               
+               InputStream is;
+        File outFile;
+        
+               is = context.getResources().openRawResource(R.raw.geoip);
+               outFile = new File(installFolder, GEOIP_ASSET_KEY);
+               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
+        */
+    private static boolean streamToFile(InputStream stm, File outFile, boolean 
append, boolean zip) throws IOException
+
+    {
+        byte[] buffer = new byte[FILE_WRITE_BUFFER_SIZE];
+
+        int bytecount;
+
+
+       OutputStream stmOut = new FileOutputStream(outFile, append);
+       ZipInputStream zis = null;
+       
+       if (zip)
+       {
+               zis = new ZipInputStream(stm);                  
+               ZipEntry ze = zis.getNextEntry();
+               stm = zis;
+               
+       }
+       
+        while ((bytecount = stm.read(buffer)) > 0)
+        {
+
+            stmOut.write(buffer, 0, bytecount);
+
+        }
+
+        stmOut.close();
+        stm.close();
+        
+        if (zis != null)
+               zis.close();
+        
+        
+        return true;
+
+    }
+       
+    //copy the file from inputstream to File output - alternative impl
+       public void copyFile (InputStream is, File outputFile)
+       {
+               
+               try {
+                       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?
+                       
+                       
+                       
+               } catch (IOException ex) {
+                       Log.e(TorConstants.TAG, "error copying binary", ex);
+               }
+
+       }
+       
+       
+
+   
+       /**
+        * Copies a raw resource file, given its ID to the given location
+        * @param ctx context
+        * @param resid resource id
+        * @param file destination file
+        * @param mode file permissions (E.g.: "755")
+        * @throws IOException on error
+        * @throws InterruptedException when interrupted
+        */
+       private static void copyRawFile(Context ctx, int resid, File file, 
String mode, boolean isZipd) throws IOException, InterruptedException
+       {
+               final String abspath = file.getAbsolutePath();
+               // Write the iptables binary
+               final FileOutputStream out = new FileOutputStream(file);
+               InputStream is = ctx.getResources().openRawResource(resid);
+               
+               if (isZipd)
+       {
+               ZipInputStream zis = new ZipInputStream(is);                    
+               ZipEntry ze = zis.getNextEntry();
+               is = zis;
+       }
+               
+               byte buf[] = new byte[1024];
+               int len;
+               while ((len = is.read(buf)) > 0) {
+                       out.write(buf, 0, len);
+               }
+               out.close();
+               is.close();
+               // Change the permissions
+               Runtime.getRuntime().exec("chmod "+mode+" "+abspath).waitFor();
+       }
+    /**
+        * Asserts that the binary files are installed in the bin directory.
+        * @param ctx context
+     * @param showErrors indicates if errors should be alerted
+        * @return false if the binary files could not be installed
+        */
+       /*
+       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;
+       }*/
+       
+
+}



_______________________________________________
tor-commits mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to