[tor-commits] [orbot/master] fix pdnsd/VPN support

n8fr8 at torproject.org n8fr8 at torproject.org
Fri Jul 5 12:40:01 UTC 2019


commit 7ae000d0c2a59c2257f2779de42ad48b4b4080d0
Author: n8fr8 <nathan at guardianproject.info>
Date:   Fri May 31 14:28:26 2019 -0400

    fix pdnsd/VPN support
---
 .gitignore                                         |   8 +-
 .../org/torproject/android/service/TorService.java |   5 +-
 .../android/service/TorServiceConstants.java       |   3 -
 .../android/service/util/CustomNativeLoader.java   |  32 ---
 .../service/util/CustomTorResourceInstaller.java   |  57 +-----
 .../service/util/OtherResourceInstaller.java       | 228 ---------------------
 .../android/service/vpn/OrbotVpnManager.java       |  21 +-
 .../android/service/vpn/PDNSDInstaller.java        | 195 ++++++++++++++++++
 .../android/service/vpn/TorVpnService.java         |  11 +-
 .../src/main/libs/arm64-v8a/libtun2socks.so        | Bin 0 -> 196640 bytes
 orbotservice/src/main/libs/arm64-v8a/pdnsd.so      | Bin 0 -> 207224 bytes
 .../src/main/libs/armeabi-v7a/libtun2socks.so      | Bin 0 -> 137836 bytes
 orbotservice/src/main/libs/armeabi-v7a/pdnsd.so    | Bin 0 -> 169824 bytes
 orbotservice/src/main/libs/armeabi/libtun2socks.so | Bin 0 -> 146024 bytes
 orbotservice/src/main/libs/armeabi/pdnsd.so        | Bin 0 -> 178012 bytes
 orbotservice/src/main/libs/x86/libtun2socks.so     | Bin 0 -> 195120 bytes
 orbotservice/src/main/libs/x86/pdnsd.so            | Bin 0 -> 202532 bytes
 orbotservice/src/main/libs/x86_64/libtun2socks.so  | Bin 0 -> 196920 bytes
 orbotservice/src/main/libs/x86_64/pdnsd.so         | Bin 0 -> 219696 bytes
 19 files changed, 225 insertions(+), 335 deletions(-)

diff --git a/.gitignore b/.gitignore
index a8f09edc..a6294876 100644
--- a/.gitignore
+++ b/.gitignore
@@ -64,10 +64,10 @@ obj
 
 app/src/main/jniLibs/
 app/src/main/libs/
-orbotservice/src/main/libs/
-orbotservice/src/main/jniLibs/
-orbotservice/src/main/assets/armeabi/
-orbotservice/src/main/assets/x86/
+#orbotservice/src/main/libs/
+#orbotservice/src/main/jniLibs/
+#orbotservice/src/main/assets/armeabi/
+#orbotservice/src/main/assets/x86/
 
 # emacs
 *~
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 6f9f6c12..2561a132 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorService.java
@@ -44,7 +44,7 @@ import org.torproject.android.control.TorControlConnection;
 import org.torproject.android.service.util.CustomShell;
 import org.torproject.android.service.util.CustomTorResourceInstaller;
 import org.torproject.android.service.util.DummyActivity;
-import org.torproject.android.service.util.OtherResourceInstaller;
+import org.torproject.android.service.vpn.PDNSDInstaller;
 import org.torproject.android.service.util.Prefs;
 import org.torproject.android.service.util.TorServiceUtils;
 import org.torproject.android.service.util.Utils;
@@ -603,9 +603,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
             if (!fileTorRc.exists())
                 return false;
 
-            OtherResourceInstaller oInstaller = new OtherResourceInstaller(this, appBinHome);
-            oInstaller.installResources();
-
             isTorUpgradeAndConfigComplete = true;
 
             return true;
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
index b557de80..e02c8f81 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorServiceConstants.java
@@ -143,9 +143,6 @@ public interface TorServiceConstants {
     
    //  String MEEK_ASSET_KEY = "meek-client";
 
-	//DNS daemon for TCP DNS over TOr
-	String PDNSD_ASSET_KEY = "pdnsd";
-
 	//EXIT COUNTRY CODES
 	String[] COUNTRY_CODES = {"DE","AT","SE","CH","IS","CA","US","ES","FR","BG","PL","AU","BR","CZ","DK","FI","GB","HU","NL","JP","RO","RU","SG","SK"};
 
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 bae4b068..0df6784a 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
@@ -74,38 +74,6 @@ public class CustomNativeLoader {
         try {
             String folder = Build.CPU_ABI;
 
-            /**
-             try {
-
-             if (Build.CPU_ABI.equalsIgnoreCase("arm64-v8a")) {
-             folder = "arm64-v8a";
-             }
-             else if (Build.CPU_ABI.equalsIgnoreCase("arm64")) {
-             folder = "arm64";
-             }
-             else if (Build.CPU_ABI.equalsIgnoreCase("x86_64")) {
-             folder = "x86_64";
-             }
-             else if (Build.CPU_ABI.equalsIgnoreCase("armeabi-v7a")) {
-             folder = "armeabi-v7a";
-             }
-             else if (Build.CPU_ABI.equalsIgnoreCase("armeabi")) {
-             folder = "armeabi";
-             } else if (Build.CPU_ABI.equalsIgnoreCase("x86")) {
-             folder = "x86";
-             } else if (Build.CPU_ABI.equalsIgnoreCase("mips")) {
-             folder = "mips";
-             } else {
-             folder = "armeabi";
-             //FileLog.e("tmessages", "Unsupported arch: " + Build.CPU_ABI);
-             }
-
-             } catch (Exception e) {
-             //  FileLog.e("tmessages", e);
-             Log.e(TAG, e.getMessage(),e);
-             folder = "armeabi";
-             }**/
-
 
             String javaArch = System.getProperty("os.arch");
             if (javaArch != null && javaArch.contains("686")) {
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 043987e2..7e9dcc55 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
@@ -4,30 +4,26 @@ import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.util.Log;
 
-import org.torproject.android.binary.NativeLoader;
 import org.torproject.android.binary.TorServiceConstants;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.PrintStream;
 import java.util.concurrent.TimeoutException;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
-
 public class CustomTorResourceInstaller implements TorServiceConstants {
 
 
-    File installFolder;
-    Context context;
+    private File installFolder;
+    private Context context;
 
-    File fileTorrc;
-    File fileTor;
+    private File fileTorrc;
+    private File fileTor;
 
     public CustomTorResourceInstaller (Context context, File installFolder)
     {
@@ -35,35 +31,6 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
         this.context = context;
     }
 
-    public File getTorrcFile ()
-    {
-        return fileTorrc;
-    }
-
-    public File getTorFile ()
-    {
-        return fileTor;
-    }
-
-    /**
-     private void deleteDirectory(File file) {
-     if( file.exists() ) {
-     if (file.isDirectory()) {
-     File[] files = file.listFiles();
-     for(int i=0; i<files.length; i++) {
-     if(files[i].isDirectory()) {
-     deleteDirectory(files[i]);
-     }
-     else {
-     files[i].delete();
-     }
-     }
-     }
-
-     file.delete();
-     }
-     }**/
-
     //
     /*
      * Extract the Tor resources from the APK file using ZIP
@@ -127,23 +94,7 @@ public class CustomTorResourceInstaller implements TorServiceConstants {
     }
 
 
-    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;
-    }
 
     /*
      * Extract the Tor binary from the APK file using ZIP
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java
deleted file mode 100644
index 241f6c7e..00000000
--- a/orbotservice/src/main/java/org/torproject/android/service/util/OtherResourceInstaller.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package org.torproject.android.service.util;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.io.StringBufferInputStream;
-import java.util.ArrayList;
-import java.util.concurrent.TimeoutException;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.os.Build;
-import android.util.Log;
-
-import org.torproject.android.service.OrbotConstants;
-import org.torproject.android.service.R;
-import org.torproject.android.service.TorServiceConstants;
-
-public class OtherResourceInstaller implements TorServiceConstants {
-
-
-    File installFolder;
-    Context context;
-
-    public OtherResourceInstaller (Context context, File installFolder)
-    {
-        this.installFolder = installFolder;
-
-        this.context = context;
-    }
-
-    public void deleteDirectory(File file) {
-        if( file.exists() ) {
-            if (file.isDirectory()) {
-                File[] files = file.listFiles();
-                for(int i=0; i<files.length; i++) {
-                    if(files[i].isDirectory()) {
-                        deleteDirectory(files[i]);
-                    }
-                    else {
-                        files[i].delete();
-                    }
-                }
-            }
-
-            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
-    {
-
-        File outFile;
-
-        if (!installFolder.exists())
-            installFolder.mkdirs();
-
-        outFile = new File(installFolder, PDNSD_ASSET_KEY);
-        NativeLoader.initNativeLibs(context,PDNSD_ASSET_KEY,outFile);
-
-//        outFile = new File(installFolder, OBFSCLIENT_ASSET_KEY);
- //       NativeLoader.initNativeLibs(context,OBFSCLIENT_ASSET_KEY,outFile);
-
-        return true;
-    }
-
-    // Return Full path to the directory where native JNI libraries are stored.
-    public static String getNativeLibraryDir(Context context) {
-        ApplicationInfo appInfo = context.getApplicationInfo();
-        return appInfo.nativeLibraryDir;
-    }
-
-    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;
-    }
-
-
-    /*
-     * Write the inputstream contents to the file
-     */
-    public 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.getAbsolutePath(), 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 static boolean copyFile (InputStream is, File outputFile)
-    {
-
-        try {
-            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
-     * @param resid resource id
-     * @param file destination file
-     * @param mode file permissions (E.g.: "755")
-     * @throws IOException on error
-     * @throws InterruptedException when interrupted
-     */
-    public 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();
-    }
-
-
-    private void setExecutable(File fileBin) {
-        fileBin.setReadable(true);
-        fileBin.setExecutable(true);
-        fileBin.setWritable(false);
-        fileBin.setWritable(true, true);
-    }
-
-}
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 90a13336..b5f294f4 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
@@ -87,12 +87,10 @@ public class OrbotVpnManager implements Handler.Callback {
     private VpnService mService;
     
 
-    public OrbotVpnManager (VpnService service)
-    {
+    public OrbotVpnManager (VpnService service) throws IOException, TimeoutException {
     	mService = service;
 
-		File fileBinHome = service.getFilesDir();//mService.getDir(TorServiceConstants.DIRECTORY_TOR_BINARY, Application.MODE_PRIVATE);
-		filePdnsd = new File(fileBinHome,TorServiceConstants.PDNSD_ASSET_KEY);
+		filePdnsd = new PDNSDInstaller(service.getApplicationContext(),service.getFilesDir()).installResources();
 
 		Tun2Socks.init();
 
@@ -344,13 +342,13 @@ public class OrbotVpnManager implements Handler.Callback {
 
 		        	mInterface = newInterface;
 			        
-		        	Tun2Socks.Start(mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , localDNS , localDnsTransparentProxy);
-		        	
 		        	isRestart = false;
 
 					//start PDNSD daemon pointing to actual DNS
 					startDNS("127.0.0.1",localDns);
 
+					Tun2Socks.Start(mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , localDNS , localDnsTransparentProxy);
+
 
 				}
 		        catch (Exception e)
@@ -411,11 +409,11 @@ public class OrbotVpnManager implements Handler.Callback {
     private void startDNS (String dns, int port) throws IOException, TimeoutException
     {
 
-		makePdnsdConf(mService, dns, port,filePdnsd.getParentFile());
+		File fileConf = makePdnsdConf(mService, dns, port,mService.getFilesDir());
     	
-        ArrayList<String> customEnv = new ArrayList<String>();
+      //  ArrayList<String> customEnv = new ArrayList<String>();
 
-        String[] cmdString = {filePdnsd.getCanonicalPath(),"-c",filePdnsd.getParent() + "/pdnsd.conf"};
+        String[] cmdString = {filePdnsd.getCanonicalPath(),"-c",fileConf.toString()};
         ProcessBuilder pb = new ProcessBuilder(cmdString);
         pb.redirectErrorStream(true);
 		Process proc = pb.start();
@@ -425,6 +423,7 @@ public class OrbotVpnManager implements Handler.Callback {
 
         if (proc.exitValue() != 0)
         {
+
             BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
 
             String line = null;
@@ -437,7 +436,7 @@ public class OrbotVpnManager implements Handler.Callback {
         
     }
     
-    public static void makePdnsdConf(Context context, String dns, int port, File fileDir) throws FileNotFoundException, IOException {
+    public static File makePdnsdConf(Context context, String dns, int port, File fileDir) throws FileNotFoundException, IOException {
         String conf = String.format(context.getString(R.string.pdnsd_conf), dns, port, fileDir.getCanonicalPath());
 
         File f = new File(fileDir,"pdnsd.conf");
@@ -460,6 +459,8 @@ public class OrbotVpnManager implements Handler.Callback {
 
                 }
         }
+
+        return f;
 	}
 
     
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/PDNSDInstaller.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/PDNSDInstaller.java
new file mode 100644
index 00000000..58caffad
--- /dev/null
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/PDNSDInstaller.java
@@ -0,0 +1,195 @@
+package org.torproject.android.service.vpn;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.StringBufferInputStream;
+import java.util.ArrayList;
+import java.util.concurrent.TimeoutException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.os.Build;
+import android.util.Log;
+
+import org.torproject.android.service.OrbotConstants;
+import org.torproject.android.service.R;
+import org.torproject.android.service.TorServiceConstants;
+import org.torproject.android.service.util.CustomNativeLoader;
+import org.torproject.android.service.util.NativeLoader;
+
+public class PDNSDInstaller implements TorServiceConstants {
+
+    private final static String LIB_NAME = "pdnsd";
+    private final static String LIB_SO_NAME = "pdnsd.so";
+
+    private final static String TAG = "TorNativeLoader";
+
+    private File installFolder;
+    private Context context;
+    private File filePdnsd;
+
+     public PDNSDInstaller (Context context, File installFolder)
+    {
+        this.installFolder = installFolder;
+        this.context = context;
+    }
+
+    //
+    /*
+     * Extract the Tor resources from the APK file using ZIP
+     *
+     * @File path to the Tor executable
+     */
+    public File installResources () throws IOException, TimeoutException
+    {
+
+        filePdnsd = new File(installFolder, LIB_NAME);
+
+        if (!installFolder.exists())
+            installFolder.mkdirs();
+
+        File fileNativeDir = new File(getNativeLibraryDir(context));
+        filePdnsd = new File(fileNativeDir,LIB_NAME + ".so");
+
+        if (filePdnsd.exists())
+        {
+            if (filePdnsd.canExecute())
+                return filePdnsd;
+            else
+            {
+                setExecutable(filePdnsd);
+
+                if (filePdnsd.canExecute())
+                    return filePdnsd;
+            }
+        }
+
+        if (filePdnsd.exists()) {
+            InputStream is = new FileInputStream(filePdnsd);
+            streamToFile(is, filePdnsd, false, true);
+            setExecutable(filePdnsd);
+
+            if (filePdnsd.exists() && filePdnsd.canExecute())
+                return filePdnsd;
+        }
+
+        //let's try another approach
+        filePdnsd = new File(installFolder, LIB_NAME);
+        //fileTor = NativeLoader.initNativeLibs(context,fileTor);
+        CustomNativeLoader.initNativeLibs(context,filePdnsd);
+
+        setExecutable(filePdnsd);
+
+        if (filePdnsd != null && filePdnsd.exists() && filePdnsd.canExecute())
+            return filePdnsd;
+
+        return null;
+    }
+
+
+    // Return Full path to the directory where native JNI libraries are stored.
+    private static String getNativeLibraryDir(Context context) {
+        ApplicationInfo appInfo = context.getApplicationInfo();
+        return appInfo.nativeLibraryDir;
+    }
+
+
+
+
+
+
+    /*
+     * Reads file from assetPath/assetKey writes it to the install folder
+     */
+    private File assetToFile(String assetPath, String assetKey, boolean isZipped, boolean isExecutable) throws IOException {
+        InputStream is = context.getAssets().open(assetPath);
+        File outFile = new File(installFolder, assetKey);
+        streamToFile(is, outFile, false, isZipped);
+        if (isExecutable) {
+            setExecutable(outFile);
+        }
+        return outFile;
+    }
+
+
+    /*
+     * 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.getAbsolutePath(), 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;
+
+    }
+
+
+
+    private void setExecutable(File fileBin) {
+        fileBin.setReadable(true);
+        fileBin.setExecutable(true);
+        fileBin.setWritable(false);
+        fileBin.setWritable(true, true);
+    }
+
+    private static File[] listf(String directoryName) {
+
+        // .............list file
+        File directory = new File(directoryName);
+
+        // get all the files from a directory
+        File[] fList = directory.listFiles();
+
+        if (fList != null)
+            for (File file : fList) {
+                if (file.isFile()) {
+                    Log.d(TAG,file.getAbsolutePath());
+                } else if (file.isDirectory()) {
+                    listf(file.getAbsolutePath());
+                }
+            }
+
+        return fList;
+    }
+
+
+}
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 34d89b49..b02fd71a 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
@@ -4,6 +4,9 @@ import android.app.Service;
 import android.content.Intent;
 import android.net.VpnService;
 
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
 /**
  * Created by n8fr8 on 9/26/16.
  */
@@ -13,7 +16,13 @@ public class TorVpnService extends VpnService {
     @Override
     public void onCreate() {
         super.onCreate();
-        mVpnManager = new OrbotVpnManager(this);
+        try {
+            mVpnManager = new OrbotVpnManager(this);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (TimeoutException e) {
+            e.printStackTrace();
+        }
     }
 
     /* (non-Javadoc)
diff --git a/orbotservice/src/main/libs/arm64-v8a/libtun2socks.so b/orbotservice/src/main/libs/arm64-v8a/libtun2socks.so
new file mode 100755
index 00000000..8aaedda7
Binary files /dev/null and b/orbotservice/src/main/libs/arm64-v8a/libtun2socks.so differ
diff --git a/orbotservice/src/main/libs/arm64-v8a/pdnsd.so b/orbotservice/src/main/libs/arm64-v8a/pdnsd.so
new file mode 100755
index 00000000..1bc4487d
Binary files /dev/null and b/orbotservice/src/main/libs/arm64-v8a/pdnsd.so differ
diff --git a/orbotservice/src/main/libs/armeabi-v7a/libtun2socks.so b/orbotservice/src/main/libs/armeabi-v7a/libtun2socks.so
new file mode 100755
index 00000000..74b86bdf
Binary files /dev/null and b/orbotservice/src/main/libs/armeabi-v7a/libtun2socks.so differ
diff --git a/orbotservice/src/main/libs/armeabi-v7a/pdnsd.so b/orbotservice/src/main/libs/armeabi-v7a/pdnsd.so
new file mode 100755
index 00000000..573b5e42
Binary files /dev/null and b/orbotservice/src/main/libs/armeabi-v7a/pdnsd.so differ
diff --git a/orbotservice/src/main/libs/armeabi/libtun2socks.so b/orbotservice/src/main/libs/armeabi/libtun2socks.so
new file mode 100755
index 00000000..55ef663a
Binary files /dev/null and b/orbotservice/src/main/libs/armeabi/libtun2socks.so differ
diff --git a/orbotservice/src/main/libs/armeabi/pdnsd.so b/orbotservice/src/main/libs/armeabi/pdnsd.so
new file mode 100755
index 00000000..95a5269d
Binary files /dev/null and b/orbotservice/src/main/libs/armeabi/pdnsd.so differ
diff --git a/orbotservice/src/main/libs/x86/libtun2socks.so b/orbotservice/src/main/libs/x86/libtun2socks.so
new file mode 100755
index 00000000..af9a3ccc
Binary files /dev/null and b/orbotservice/src/main/libs/x86/libtun2socks.so differ
diff --git a/orbotservice/src/main/libs/x86/pdnsd.so b/orbotservice/src/main/libs/x86/pdnsd.so
new file mode 100755
index 00000000..c078cc38
Binary files /dev/null and b/orbotservice/src/main/libs/x86/pdnsd.so differ
diff --git a/orbotservice/src/main/libs/x86_64/libtun2socks.so b/orbotservice/src/main/libs/x86_64/libtun2socks.so
new file mode 100755
index 00000000..8861e585
Binary files /dev/null and b/orbotservice/src/main/libs/x86_64/libtun2socks.so differ
diff --git a/orbotservice/src/main/libs/x86_64/pdnsd.so b/orbotservice/src/main/libs/x86_64/pdnsd.so
new file mode 100755
index 00000000..68721cc2
Binary files /dev/null and b/orbotservice/src/main/libs/x86_64/pdnsd.so differ





More information about the tor-commits mailing list