Merge branch 'the-big-start-stop-makeover' of https://github.com/eighthave/orbot into eighthave-the-big-start-stop-makeover

Conflicts:
	src/org/torproject/android/OrbotMainActivity.java
	src/org/torproject/android/service/TorService.java
This commit is contained in:
Nathan Freitas 2015-06-22 12:43:42 -04:00
commit e11cae883e
4 changed files with 129 additions and 113 deletions

View File

@ -10,8 +10,11 @@ import android.os.Build;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import org.torproject.android.service.TorServiceConstants;
import info.guardianproject.util.Languages; import info.guardianproject.util.Languages;
import java.io.File;
import java.util.Locale; import java.util.Locale;
public class OrbotApp extends Application implements OrbotConstants public class OrbotApp extends Application implements OrbotConstants
@ -19,12 +22,32 @@ public class OrbotApp extends Application implements OrbotConstants
private Locale locale; private Locale locale;
public static File appBinHome;
public static File appCacheHome;
public static File fileTor;
public static File filePolipo;
public static File fileObfsclient;
public static File fileMeekclient;
public static File fileXtables;
public static File fileTorRc;
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
Prefs.setContext(this); Prefs.setContext(this);
setNewLocale(Prefs.getDefaultLocale()); setNewLocale(Prefs.getDefaultLocale());
appBinHome = getDir(TorServiceConstants.DIRECTORY_TOR_BINARY,Application.MODE_PRIVATE);
appCacheHome = getDir(TorServiceConstants.DIRECTORY_TOR_DATA,Application.MODE_PRIVATE);
fileTor= new File(appBinHome, TorServiceConstants.TOR_ASSET_KEY);
filePolipo = new File(appBinHome, TorServiceConstants.POLIPO_ASSET_KEY);
fileObfsclient = new File(appBinHome, TorServiceConstants.OBFSCLIENT_ASSET_KEY);
fileMeekclient = new File(appBinHome, TorServiceConstants.MEEK_ASSET_KEY);
fileXtables = new File(appBinHome, TorServiceConstants.IPTABLES_ASSET_KEY);
fileTorRc = new File(appBinHome, TorServiceConstants.TORRC_ASSET_KEY);
} }
@Override @Override

View File

@ -3,22 +3,10 @@
package org.torproject.android; package org.torproject.android;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.NumberFormat;
import java.util.Locale;
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.TorServiceUtils;
import org.torproject.android.settings.SettingsPreferences;
import org.torproject.android.ui.ImageProgressView;
import org.torproject.android.ui.PromoAppsActivity;
import org.torproject.android.ui.Rotate3dAnimation;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.Activity; import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@ -64,6 +52,21 @@ import android.widget.ToggleButton;
import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult; import com.google.zxing.integration.android.IntentResult;
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.TorServiceUtils;
import org.torproject.android.settings.SettingsPreferences;
import org.torproject.android.ui.ImageProgressView;
import org.torproject.android.ui.PromoAppsActivity;
import org.torproject.android.ui.Rotate3dAnimation;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.NumberFormat;
import java.util.Locale;
public class OrbotMainActivity extends Activity public class OrbotMainActivity extends Activity
implements OrbotConstants, OnLongClickListener, OnTouchListener { implements OrbotConstants, OnLongClickListener, OnTouchListener {
@ -1155,6 +1158,16 @@ public class OrbotMainActivity extends Activity
sendIntentToService(TorServiceConstants.ACTION_STATUS); sendIntentToService(TorServiceConstants.ACTION_STATUS);
} }
private boolean isTorServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (TorService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
public boolean onLongClick(View view) { public boolean onLongClick(View view) {
if (torStatus == TorServiceConstants.STATUS_OFF) { if (torStatus == TorServiceConstants.STATUS_OFF) {

View File

@ -9,13 +9,13 @@ package org.torproject.android.service;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Application;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.app.Service; import android.app.Service;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
@ -40,6 +40,7 @@ import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import org.sufficientlysecure.rootcommands.Shell; import org.sufficientlysecure.rootcommands.Shell;
import org.sufficientlysecure.rootcommands.command.SimpleCommand; import org.sufficientlysecure.rootcommands.command.SimpleCommand;
import org.torproject.android.OrbotApp;
import org.torproject.android.OrbotConstants; import org.torproject.android.OrbotConstants;
import org.torproject.android.OrbotMainActivity; import org.torproject.android.OrbotMainActivity;
import org.torproject.android.Prefs; import org.torproject.android.Prefs;
@ -105,18 +106,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private ArrayList<String> configBuffer = null; private ArrayList<String> configBuffer = null;
private ArrayList<String> resetBuffer = null; private ArrayList<String> resetBuffer = null;
// private String appHome; private boolean isTorUpgradeAndConfigComplete = false;
private File appBinHome;
private File appCacheHome;
private File fileTor;
private File filePolipo;
private File fileObfsclient;
private File fileMeekclient;
private File fileXtables;
private File fileTorRc;
private File fileControlPort; private File fileControlPort;
private TorTransProxy mTransProxy; private TorTransProxy mTransProxy;
@ -169,31 +161,17 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private boolean findExistingTorDaemon() { private boolean findExistingTorDaemon() {
if (fileTor != null) try {
{ mLastProcessId = initControlConnection(3, true);
try
{ if (mLastProcessId != -1 && conn != null) {
sendCallbackLogMessage(getString(R.string.found_existing_tor_process));
mLastProcessId = initControlConnection(3,true); sendCallbackStatus(STATUS_ON);
return true;
if (mLastProcessId != -1 && conn != null)
{
sendCallbackLogMessage (getString(R.string.found_existing_tor_process));
sendCallbackStatus(STATUS_ON);
return true;
}
return false;
}
catch (Exception e)
{
//Log.e(TAG,"error finding proc",e);
return false;
} }
} catch (Exception e) {
} }
else return false;
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -442,7 +420,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
int hsPort = Integer.parseInt(st.nextToken().split(" ")[0]);; int hsPort = Integer.parseInt(st.nextToken().split(" ")[0]);;
File fileDir = new File(appCacheHome, "hs" + hsPort); File fileDir = new File(OrbotApp.appCacheHome, "hs" + hsPort);
File file = new File(fileDir, "hostname"); File file = new File(fileDir, "hostname");
@ -507,28 +485,28 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
// try these separately in case one fails, then it can try the next // try these separately in case one fails, then it can try the next
File cannotKillFile = null; File cannotKillFile = null;
try { try {
killProcess(fileObfsclient); killProcess(OrbotApp.fileObfsclient);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
cannotKillFile = fileObfsclient; cannotKillFile = OrbotApp.fileObfsclient;
} }
try { try {
killProcess(fileMeekclient); killProcess(OrbotApp.fileMeekclient);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
cannotKillFile = fileMeekclient; cannotKillFile = OrbotApp.fileMeekclient;
} }
try { try {
killProcess(filePolipo); killProcess(OrbotApp.filePolipo);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
cannotKillFile = filePolipo; cannotKillFile = OrbotApp.filePolipo;
} }
try { try {
killProcess(fileTor); killProcess(OrbotApp.fileTor);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
cannotKillFile = fileTor; cannotKillFile = OrbotApp.fileTor;
} }
if (cannotKillFile != null) if (cannotKillFile != null)
throw new CannotKillException(cannotKillFile); throw new CannotKillException(cannotKillFile);
@ -551,7 +529,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
} }
// if that fails, try again using native utils // if that fails, try again using native utils
try { try {
killProcess(fileTor, "-1"); // this is -HUP killProcess(OrbotApp.fileTor, "-1"); // this is -HUP
} catch (CannotKillException e) { } catch (CannotKillException e) {
e.printStackTrace(); e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
@ -627,7 +605,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
} }
initBinariesAndDirectories(); torUpgradeAndConfig();
new Thread(new Runnable () new Thread(new Runnable ()
{ {
@ -658,33 +636,21 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
logNotice("There was an error installing Orbot binaries"); logNotice("There was an error installing Orbot binaries");
} }
Log.i("TorService", "onCreate end");
} }
private void initBinariesAndDirectories () throws Exception private void torUpgradeAndConfig() throws IOException, TimeoutException {
{ if (isTorUpgradeAndConfigComplete)
return;
if (appBinHome == null)
appBinHome = getDir(DIRECTORY_TOR_BINARY,Application.MODE_PRIVATE);
if (appCacheHome == null)
appCacheHome = getDir(DIRECTORY_TOR_DATA,Application.MODE_PRIVATE);
fileTor= new File(appBinHome, TOR_ASSET_KEY);
filePolipo = new File(appBinHome, POLIPO_ASSET_KEY);
fileObfsclient = new File(appBinHome, OBFSCLIENT_ASSET_KEY);
fileMeekclient = new File(appBinHome, MEEK_ASSET_KEY);
fileTorRc = new File(appBinHome, TORRC_ASSET_KEY);
fileXtables = new File(appBinHome, IPTABLES_ASSET_KEY);
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext()); SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null); String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
logNotice("checking binary version: " + version); logNotice("checking binary version: " + version);
TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome); TorResourceInstaller installer = new TorResourceInstaller(this, OrbotApp.appBinHome);
if (version == null || (!version.equals(BINARY_TOR_VERSION)) || (!fileTor.exists())) if (version == null || (!version.equals(BINARY_TOR_VERSION)) || (!OrbotApp.fileTor.exists()))
{ {
logNotice("upgrading binaries to latest version: " + BINARY_TOR_VERSION); logNotice("upgrading binaries to latest version: " + BINARY_TOR_VERSION);
@ -695,18 +661,19 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
} }
updateTorConfigFile (); updateTorConfigFile ();
isTorUpgradeAndConfigComplete = true;
} }
private boolean updateTorConfigFile () throws FileNotFoundException, IOException, TimeoutException private boolean updateTorConfigFile () throws FileNotFoundException, IOException, TimeoutException
{ {
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext()); SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome); TorResourceInstaller installer = new TorResourceInstaller(this, OrbotApp.appBinHome);
StringBuffer extraLines = new StringBuffer(); StringBuffer extraLines = new StringBuffer();
String TORRC_CONTROLPORT_FILE_KEY = "ControlPortWriteToFile"; String TORRC_CONTROLPORT_FILE_KEY = "ControlPortWriteToFile";
fileControlPort = new File(appBinHome,"control.txt"); fileControlPort = new File(OrbotApp.appBinHome, "control.txt");
extraLines.append(TORRC_CONTROLPORT_FILE_KEY).append(' ').append(fileControlPort.getCanonicalPath()).append('\n'); extraLines.append(TORRC_CONTROLPORT_FILE_KEY).append(' ').append(fileControlPort.getCanonicalPath()).append('\n');
if (Prefs.transparentTethering()) if (Prefs.transparentTethering())
@ -742,7 +709,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
debug("torrc.custom=" + extraLines.toString()); debug("torrc.custom=" + extraLines.toString());
File fileTorRcCustom = new File(fileTorRc.getAbsolutePath() + ".custom"); File fileTorRcCustom = new File(OrbotApp.fileTorRc.getAbsolutePath() + ".custom");
boolean success = installer.updateTorConfigCustom(fileTorRcCustom, extraLines.toString()); boolean success = installer.updateTorConfigCustom(fileTorRcCustom, extraLines.toString());
if (success) if (success)
@ -807,8 +774,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
logNotice(getString(R.string.status_starting_up)); logNotice(getString(R.string.status_starting_up));
try { try {
if (fileTor == null) if (!isTorUpgradeAndConfigComplete)
initBinariesAndDirectories(); torUpgradeAndConfig();
ArrayList<String> customEnv = new ArrayList<String>(); ArrayList<String> customEnv = new ArrayList<String>();
@ -816,7 +783,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (Prefs.useVpn() && !mIsLollipop) if (Prefs.useVpn() && !mIsLollipop)
customEnv.add("TOR_PT_PROXY=socks5://127.0.0.1:" + OrbotVpnService.mSocksProxyPort); customEnv.add("TOR_PT_PROXY=socks5://127.0.0.1:" + OrbotVpnService.mSocksProxyPort);
String baseDirectory = fileTor.getParent(); String baseDirectory = OrbotApp.fileTor.getParent();
Shell shellUser = Shell.startShell(customEnv, baseDirectory); Shell shellUser = Shell.startShell(customEnv, baseDirectory);
boolean success = runTorShellCmd(shellUser); boolean success = runTorShellCmd(shellUser);
@ -868,7 +835,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (Prefs.useRoot()) if (Prefs.useRoot())
{ {
if (mTransProxy == null) if (mTransProxy == null)
mTransProxy = new TorTransProxy(this, fileXtables); mTransProxy = new TorTransProxy(this, OrbotApp.fileXtables);
try { try {
mTransProxy.flushTransproxyRules(this); mTransProxy.flushTransproxyRules(this);
@ -896,7 +863,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (mTransProxy == null) if (mTransProxy == null)
{ {
mTransProxy = new TorTransProxy(this, fileXtables); mTransProxy = new TorTransProxy(this, OrbotApp.fileXtables);
} }
@ -969,7 +936,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
debug ("Transparent Proxying: disabling..."); debug ("Transparent Proxying: disabling...");
if (mTransProxy == null) if (mTransProxy == null)
mTransProxy = new TorTransProxy(this, fileXtables); mTransProxy = new TorTransProxy(this, OrbotApp.fileXtables);
mTransProxy.setTransparentProxyingAll(this, false, shell); mTransProxy.setTransparentProxyingAll(this, false, shell);
ArrayList<TorifiedApp> apps = AppManager.getApps(this, TorServiceUtils.getSharedPrefs(getApplicationContext())); ArrayList<TorifiedApp> apps = AppManager.getApps(this, TorServiceUtils.getSharedPrefs(getApplicationContext()));
@ -981,14 +948,14 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private boolean runTorShellCmd(final Shell shell) throws Exception private boolean runTorShellCmd(final Shell shell) throws Exception
{ {
String torrcPath = new File(appBinHome, TORRC_ASSET_KEY).getCanonicalPath(); String torrcPath = new File(OrbotApp.appBinHome, TORRC_ASSET_KEY).getCanonicalPath();
updateTorConfigFile(); updateTorConfigFile();
sendCallbackLogMessage(getString(R.string.status_starting_up)); sendCallbackLogMessage(getString(R.string.status_starting_up));
String torCmdString = fileTor.getCanonicalPath() String torCmdString = OrbotApp.fileTor.getCanonicalPath()
+ " DataDirectory " + appCacheHome.getCanonicalPath() + " DataDirectory " + OrbotApp.appCacheHome.getCanonicalPath()
+ " --defaults-torrc " + torrcPath + " --defaults-torrc " + torrcPath
+ " -f " + torrcPath + ".custom"; + " -f " + torrcPath + ".custom";
@ -1043,7 +1010,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{ {
File file = new File(appBinHome, POLIPOCONFIG_ASSET_KEY); File file = new File(OrbotApp.appBinHome, POLIPOCONFIG_ASSET_KEY);
Properties props = new Properties(); Properties props = new Properties();
@ -1062,7 +1029,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
logNotice( "Starting polipo process"); logNotice( "Starting polipo process");
int polipoProcId = TorServiceUtils.findProcessId(filePolipo.getCanonicalPath()); int polipoProcId = TorServiceUtils.findProcessId(OrbotApp.filePolipo.getCanonicalPath());
StringBuilder log = null; StringBuilder log = null;
@ -1074,15 +1041,15 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
updatePolipoConfig(); updatePolipoConfig();
String polipoConfigPath = new File(appBinHome, POLIPOCONFIG_ASSET_KEY).getCanonicalPath(); String polipoConfigPath = new File(OrbotApp.appBinHome, POLIPOCONFIG_ASSET_KEY).getCanonicalPath();
SimpleCommand cmdPolipo = new SimpleCommand(filePolipo.getCanonicalPath() + " -c " + polipoConfigPath + " &"); SimpleCommand cmdPolipo = new SimpleCommand(OrbotApp.filePolipo.getCanonicalPath() + " -c " + polipoConfigPath + " &");
shell.add(cmdPolipo); shell.add(cmdPolipo);
//wait one second to make sure it has started up //wait one second to make sure it has started up
Thread.sleep(1000); Thread.sleep(1000);
while ((polipoProcId = TorServiceUtils.findProcessId(filePolipo.getCanonicalPath())) == -1 && attempts < MAX_START_TRIES) while ((polipoProcId = TorServiceUtils.findProcessId(OrbotApp.filePolipo.getCanonicalPath())) == -1 && attempts < MAX_START_TRIES)
{ {
logNotice("Couldn't find Polipo process... retrying...\n" + log); logNotice("Couldn't find Polipo process... retrying...\n" + log);
Thread.sleep(3000); Thread.sleep(3000);
@ -1144,7 +1111,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{ {
logNotice( "SUCCESS connected to Tor control port."); logNotice( "SUCCESS connected to Tor control port.");
File fileCookie = new File(appCacheHome, TOR_CONTROL_COOKIE); File fileCookie = new File(OrbotApp.appCacheHome, TOR_CONTROL_COOKIE);
if (fileCookie.exists()) if (fileCookie.exists())
{ {
@ -1914,20 +1881,32 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private void sendCallbackStatus(String currentStatus) { private void sendCallbackStatus(String currentStatus) {
mCurrentStatus = currentStatus; mCurrentStatus = currentStatus;
Intent intent = getActionStatusIntent(currentStatus);
Intent intent = new Intent(ACTION_STATUS);
intent.putExtra(EXTRA_STATUS, currentStatus);
// send for Orbot internals, using secure local broadcast // send for Orbot internals, using secure local broadcast
LocalBroadcastManager.getInstance(this).sendBroadcast(intent); sendBroadcastOnlyToOrbot(intent);
// send for any apps that are interested // send for any apps that are interested
sendBroadcast(intent); sendBroadcast(intent);
} }
/**
* Send a secure broadcast only to Orbot itself
* @see {@link ContextWrapper#sendBroadcast(Intent)}
* @see {@link LocalBroadcastManager}
*/
private boolean sendBroadcastOnlyToOrbot(Intent intent) {
return LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
private Intent getActionStatusIntent(String currentStatus) {
Intent intent = new Intent(ACTION_STATUS);
intent.putExtra(EXTRA_STATUS, currentStatus);
return intent;
}
/* /*
* Another way to do this would be to use the Observer pattern by defining the * Another way to do this would be to use the Observer pattern by defining the
* BroadcastReciever in the Android manifest. * BroadcastReciever in the Android manifest.
*/ */
private final BroadcastReceiver mNetworkStateReceiver = new BroadcastReceiver() { private final BroadcastReceiver mNetworkStateReceiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
@ -2110,9 +2089,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (obfsBridges) if (obfsBridges)
{ {
extraLines.append("ClientTransportPlugin obfs3 exec " + fileObfsclient.getCanonicalPath()).append('\n'); extraLines.append("ClientTransportPlugin obfs3 exec " + OrbotApp.fileObfsclient.getCanonicalPath()).append('\n');
extraLines.append("ClientTransportPlugin obfs4 exec " + fileObfsclient.getCanonicalPath()).append('\n'); extraLines.append("ClientTransportPlugin obfs4 exec " + OrbotApp.fileObfsclient.getCanonicalPath()).append('\n');
extraLines.append("ClientTransportPlugin scramblesuit exec " + fileObfsclient.getCanonicalPath()).append('\n'); extraLines.append("ClientTransportPlugin scramblesuit exec " + OrbotApp.fileObfsclient.getCanonicalPath()).append('\n');
} }
String[] bridgeListLines = bridgeList.split("\\r?\\n"); String[] bridgeListLines = bridgeList.split("\\r?\\n");
@ -2142,7 +2121,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
debug ("Using meek bridges"); debug ("Using meek bridges");
String bridgeConfig = "meek exec " + fileMeekclient.getCanonicalPath(); String bridgeConfig = "meek exec " + OrbotApp.fileMeekclient.getCanonicalPath();
extraLines.append("ClientTransportPlugin" + ' ' + bridgeConfig).append('\n'); extraLines.append("ClientTransportPlugin" + ' ' + bridgeConfig).append('\n');
String[] meekBridge = String[] meekBridge =
@ -2178,14 +2157,14 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (entranceNodes.length() > 0 || exitNodes.length() > 0 || excludeNodes.length() > 0) if (entranceNodes.length() > 0 || exitNodes.length() > 0 || excludeNodes.length() > 0)
{ {
//only apply GeoIP if you need it //only apply GeoIP if you need it
File fileGeoIP = new File(appBinHome,GEOIP_ASSET_KEY); File fileGeoIP = new File(OrbotApp.appBinHome, GEOIP_ASSET_KEY);
File fileGeoIP6 = new File(appBinHome,GEOIP6_ASSET_KEY); File fileGeoIP6 = new File(OrbotApp.appBinHome, GEOIP6_ASSET_KEY);
try try
{ {
if ((!fileGeoIP.exists())) if ((!fileGeoIP.exists()))
{ {
TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome); TorResourceInstaller installer = new TorResourceInstaller(this, OrbotApp.appBinHome);
boolean success = installer.installGeoIP(); boolean success = installer.installGeoIP();
} }
@ -2281,7 +2260,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
hsPort = Integer.parseInt(hsPortConfig.split(" ")[0]); hsPort = Integer.parseInt(hsPortConfig.split(" ")[0]);
String hsDirPath = new File(appCacheHome,"hs" + hsPort).getCanonicalPath(); String hsDirPath = new File(OrbotApp.appCacheHome,"hs" + hsPort).getCanonicalPath();
debug("Adding hidden service on port: " + hsPortConfig); debug("Adding hidden service on port: " + hsPortConfig);
@ -2321,8 +2300,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
//using Google DNS for now as the public DNS server //using Google DNS for now as the public DNS server
private String writeDNSFile () throws IOException private String writeDNSFile () throws IOException
{ {
File file = new File(appBinHome,"resolv.conf"); File file = new File(OrbotApp.appBinHome, "resolv.conf");
PrintWriter bw = new PrintWriter(new FileWriter(file)); PrintWriter bw = new PrintWriter(new FileWriter(file));
bw.println("nameserver 8.8.8.8"); bw.println("nameserver 8.8.8.8");
bw.println("nameserver 8.8.4.4"); bw.println("nameserver 8.8.4.4");

View File

@ -121,6 +121,7 @@ public interface TorServiceConstants {
// actions for internal command Intents // actions for internal command Intents
public static final String CMD_SIGNAL_HUP = "signal_hup"; public static final String CMD_SIGNAL_HUP = "signal_hup";
public static final String CMD_STATUS = "status";
public static final String CMD_FLUSH = "flush"; public static final String CMD_FLUSH = "flush";
public static final String CMD_NEWNYM = "newnym"; public static final String CMD_NEWNYM = "newnym";
public static final String CMD_VPN = "vpn"; public static final String CMD_VPN = "vpn";