commit 7ae000d0c2a59c2257f2779de42ad48b4b4080d0 Author: n8fr8 nathan@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
tor-commits@lists.torproject.org