[tor-commits] [orbot/master] updated TorBinaryInstaller now just handles resources

n8fr8 at torproject.org n8fr8 at torproject.org
Wed Jan 15 05:35:11 UTC 2014


commit cac2a28d50079edc2f03c35fa9ce32eb91d620a6
Author: Nathan Freitas <nathan at freitas.net>
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;
+	}*/
+	
+
+}





More information about the tor-commits mailing list