From 1739473a1df9cae391b00a7edbb004e429fb23bb Mon Sep 17 00:00:00 2001 From: Nathan Freitas Date: Fri, 27 Dec 2013 15:27:20 -0500 Subject: [PATCH] more updates for moving binaries to libs/armeabi --- .../service/CheckBinariesAsyncTask.java | 32 --- .../android/service/TorBinaryInstaller.java | 6 +- .../android/service/TorService.java | 190 +++++------------- 3 files changed, 54 insertions(+), 174 deletions(-) delete mode 100644 src/org/torproject/android/service/CheckBinariesAsyncTask.java diff --git a/src/org/torproject/android/service/CheckBinariesAsyncTask.java b/src/org/torproject/android/service/CheckBinariesAsyncTask.java deleted file mode 100644 index 7ab0c50c..00000000 --- a/src/org/torproject/android/service/CheckBinariesAsyncTask.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.torproject.android.service; - -import org.torproject.android.service.TorService; - -import android.os.AsyncTask; -import android.os.RemoteException; - -public class CheckBinariesAsyncTask extends AsyncTask -{ - - - @Override - protected Long doInBackground(TorService... torService) { - - try { - torService[0].checkTorBinaries(false); - } catch (Exception e) { - e.printStackTrace(); - } - - return 100L; - } - - protected void onProgressUpdate(Integer... progress) { - - } - - protected void onPostExecute(Long result) { - - } - -} diff --git a/src/org/torproject/android/service/TorBinaryInstaller.java b/src/org/torproject/android/service/TorBinaryInstaller.java index cf6bc47e..45705ae5 100644 --- a/src/org/torproject/android/service/TorBinaryInstaller.java +++ b/src/org/torproject/android/service/TorBinaryInstaller.java @@ -42,7 +42,7 @@ public class TorBinaryInstaller implements TorServiceConstants { /* * Extract the Tor binary from the APK file using ZIP */ - public boolean installFromRaw () throws IOException, FileNotFoundException + public boolean installResources () throws IOException, FileNotFoundException { InputStream is; @@ -66,7 +66,7 @@ public class TorBinaryInstaller implements TorServiceConstants { /* * Extract the Tor binary from the APK file using ZIP */ - /* + public boolean installGeoIP () throws IOException, FileNotFoundException { @@ -78,7 +78,7 @@ public class TorBinaryInstaller implements TorServiceConstants { streamToFile(is, outFile, false, true); return true; - }*/ + } /* private static void copyAssetFile(Context ctx, String asset, File file) throws IOException, InterruptedException diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java index 304cd402..d5571873 100644 --- a/src/org/torproject/android/service/TorService.java +++ b/src/org/torproject/android/service/TorService.java @@ -83,6 +83,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst private File fileTor; private File filePrivoxy; private File fileObfsProxy; + private File fileTorRc; private TorTransProxy mTransProxy; @@ -157,6 +158,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst /* (non-Javadoc) * @see android.app.Service#onLowMemory() */ + @Override public void onLowMemory() { super.onLowMemory(); @@ -168,12 +170,11 @@ public class TorService extends Service implements TorServiceConstants, TorConst /* (non-Javadoc) * @see android.app.Service#onUnbind(android.content.Intent) */ + @Override public boolean onUnbind(Intent intent) { // logNotice( "onUnbind Called: " + intent.getAction()); - - return super.onUnbind(intent); @@ -224,6 +225,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst /* (non-Javadoc) * @see android.app.Service#onRebind(android.content.Intent) */ + @Override public void onRebind(Intent intent) { super.onRebind(intent); @@ -237,9 +239,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst /* (non-Javadoc) * @see android.app.Service#onStart(android.content.Intent, int) */ - public void onStart(Intent intent, int startId) { - super.onStart(intent, startId); - + public int onStartCommand(Intent intent, int flags, int startId) { + _torInstance = this; initTorPaths(); @@ -250,23 +251,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - new Thread () - { - - public void run () - { - try { - checkTorBinaries (false); - } catch (Exception e) { - - logNotice("unable to find tor binaries: " + e.getMessage()); - showToolbarNotification(getString(R.string.error_installing_binares), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr, -1); - - Log.e(TAG, "error checking tor binaries", e); - } - } - }.start(); - if (intent != null && intent.getAction()!=null && intent.getAction().equals("onboot")) @@ -279,6 +263,11 @@ public class TorService extends Service implements TorServiceConstants, TorConst setTorProfile(PROFILE_ON); } } + + // We want this service to continue running until it is explicitly + // stopped, so return sticky. + return START_STICKY; + } public static SharedPreferences getSharedPrefs (Context context) @@ -508,91 +497,46 @@ public class TorService extends Service implements TorServiceConstants, TorConst appCacheHome = getDir("data",Application.MODE_PRIVATE); appLibsHome = new File(getApplicationInfo().nativeLibraryDir); - fileTor = new File(appLibsHome, TOR_BINARY_ASSET_KEY); + fileTor = new File(appLibsHome, TOR_BINARY_ASSET_KEY); + if (fileTor.exists()) + logNotice ("Tor binary exists: " + fileTor.getAbsolutePath()); + else + throw new RuntimeException("Tor binary not installed"); + filePrivoxy = new File(appLibsHome, PRIVOXY_ASSET_KEY); + if (filePrivoxy.exists()) + logNotice ("Privoxy binary exists: " + filePrivoxy.getAbsolutePath()); + else + throw new RuntimeException("Privoxy binary not installed"); + fileObfsProxy = new File(appLibsHome, OBFSPROXY_ASSET_KEY); - + if (fileObfsProxy.exists()) + logNotice ("Obfsproxy binary exists: " + fileObfsProxy.getAbsolutePath()); + else + throw new RuntimeException("Obfsproxy binary not installed"); + + fileTorRc = new File(appBinHome, TORRC_ASSET_KEY); - } - - public boolean checkTorBinaries (boolean forceInstall) throws Exception - { - - SharedPreferences prefs =getSharedPrefs(getApplicationContext()); - - initTorPaths(); - - String currTorBinary = prefs.getString(TorServiceConstants.PREF_BINARY_TOR_VERSION_INSTALLED, null); - String currPrivoxyBinary = prefs.getString(TorServiceConstants.PREF_BINARY_PRIVOXY_VERSION_INSTALLED, null); - - StringBuilder cmdLog = new StringBuilder(); - int exitCode = -1; - - if (currTorBinary == null || (!currTorBinary.equals(TorServiceConstants.BINARY_TOR_VERSION))) - if (fileTor.exists()) - { - if (currentStatus != STATUS_OFF) - stopTor(); - - String[] cmds = {"rm " + fileTor.getAbsolutePath()}; - exitCode = TorServiceUtils.doShellCommand(cmds, cmdLog, false, true); - - } - - if (currPrivoxyBinary == null || (!currPrivoxyBinary.equals(TorServiceConstants.BINARY_PRIVOXY_VERSION))) - if (filePrivoxy.exists()) - { - if (currentStatus != STATUS_OFF) - stopTor(); - - - String[] cmds = {"rm " + filePrivoxy.getAbsolutePath()}; - exitCode = TorServiceUtils.doShellCommand(cmds, cmdLog, false, true); - - } - - - - logNotice( "checking Tor binaries"); - - if ((!(fileTor.exists() && filePrivoxy.exists())) || forceInstall) + if (!fileTorRc.exists()) { - stopTor(); - TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome); - boolean success = installer.installFromRaw(); - - - if (success) - { - - Editor edit = prefs.edit(); - edit.putString(TorServiceConstants.PREF_BINARY_TOR_VERSION_INSTALLED, TorServiceConstants.BINARY_TOR_VERSION); - edit.putString(TorServiceConstants.PREF_BINARY_PRIVOXY_VERSION_INSTALLED, TorServiceConstants.BINARY_PRIVOXY_VERSION); - edit.commit(); - - logNotice(getString(R.string.status_install_success)); - - //showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.ic_stat_tor); - - } - else - { - - logNotice(getString(R.string.status_install_fail)); - - sendCallbackStatusMessage(getString(R.string.status_install_fail)); - - return false; - } - + try { + boolean success = installer.installResources(); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + - setBinaryPerms(); - - return true; } + + /* private void setBinaryPerms () throws Exception { @@ -610,7 +554,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst String[] cmd3 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + fileObfsProxy.getAbsolutePath()}; TorServiceUtils.doShellCommand(cmd3, log, false, true); - } + }*/ private boolean mHasRoot = false; private boolean mEnableTransparentProxy = false; @@ -647,7 +591,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst try { - setBinaryPerms(); + //setBinaryPerms(); runTorShellCmd(); runPrivoxyShellCmd(); @@ -1250,40 +1194,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst _torInstance = this; initTorPaths(); - - //if Tor was deleted for some reason, do this again! - if (!fileTor.exists()) - { - new Thread () - { - public void run () - { - try { - checkTorBinaries (false); - } catch (Exception e) { - - logNotice("unable to find tor binaries: " + e.getMessage()); - showToolbarNotification(getString(R.string.error_installing_binares), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr, -1); - - Log.e(TAG, "error checking tor binaries", e); - } - } - }.start(); - } - - - - new Thread () - { - - public void run () - { - findExistingProc (); - } - - - }.start(); - + findExistingProc (); + if (ITorService.class.getName().equals(intent.getAction())) { return mBinder; } @@ -1667,19 +1579,19 @@ public class TorService extends Service implements TorServiceConstants, TorConst if (entranceNodes.length() > 0 || exitNodes.length() > 0 || excludeNodes.length() > 0) { //only apple GeoIP if you need it - File fileGeoIP = new File(appBinHome,"geoip"); + File fileGeoIP = new File(appBinHome,GEOIP_ASSET_KEY); try { - if (!fileGeoIP.exists()) + if ((!fileGeoIP.exists())) { - //TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome); - //boolean success = installer.installGeoIP(); + TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome); + boolean success = installer.installGeoIP(); - //TODO get GEOIP add-on here } mBinder.updateConfiguration("GeoIPFile", fileGeoIP.getAbsolutePath(), false); + } catch (Exception e) {