diff --git a/src/org/torproject/android/Orbot.java b/src/org/torproject/android/Orbot.java index 0ffdecfa..0920c2a9 100644 --- a/src/org/torproject/android/Orbot.java +++ b/src/org/torproject/android/Orbot.java @@ -8,7 +8,6 @@ import static org.torproject.android.TorConstants.TAG; import java.net.URLDecoder; import java.util.Locale; -import org.torproject.android.service.ITorService; import org.torproject.android.service.TorService; import org.torproject.android.service.TorServiceConstants; import org.torproject.android.service.TorServiceUtils; @@ -20,12 +19,12 @@ import org.torproject.android.wizard.TipsAndTricks; import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.ProgressDialog; -import android.content.ComponentName; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; -import android.content.ServiceConnection; +import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; @@ -38,9 +37,9 @@ import android.net.VpnService; import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.os.IBinder; import android.os.Message; import android.os.RemoteException; +import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.ActionBarActivity; import android.text.ClipboardManager; import android.text.Layout; @@ -80,10 +79,6 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic /* Some tracking bits */ private int torStatus = TorServiceConstants.STATUS_OFF; //latest status reported from the tor service - /* Tor Service interaction */ - /* The primary interface we will be calling on the service. */ - ITorService mService = null; - private SharedPreferences mPrefs = null; private boolean autoStartFromIntent = false; @@ -101,24 +96,65 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic appConflictChecker (); - startService (); - + + // Register to receive messages. + // We are registering an observer (mMessageReceiver) to receive Intents + // with actions named "custom-event-name". + LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, + new IntentFilter("status")); + + LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, + new IntentFilter("log")); + + startService("init"); } + + // Our handler for received Intents. This will be called whenever an Intent + // with an action named "custom-event-name" is broadcasted. + private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + // Get extra data included in the Intent + + if (intent.hasExtra("log")) + { + String log = intent.getStringExtra("log"); + updateStatus(log); + } + else if (intent.hasExtra("up")) + { + long upload = intent.getLongExtra("up",0); + long download = intent.getLongExtra("down",0); + long written = intent.getLongExtra("written",0); + long read = intent.getLongExtra("read",0); + + Message msg = mHandler.obtainMessage(TorServiceConstants.MESSAGE_TRAFFIC_COUNT); + msg.getData().putLong("download", download); + msg.getData().putLong("upload", upload); + msg.getData().putLong("readTotal", read); + msg.getData().putLong("writeTotal", written); + mHandler.sendMessage(msg); + + } + else if (intent.hasExtra("status")) + { + torStatus = intent.getIntExtra("status", TorServiceConstants.STATUS_OFF); + updateStatus(""); + } + + } + }; ProgressDialog mProgressDialog; - private void startService () + private void startService (String action) { - Intent torService = new Intent(this, TorService.class); + Intent torService = new Intent(this, TorService.class); + torService.setAction(action); startService(torService); - bindService(torService, - mConnection, Context.BIND_AUTO_CREATE); - - appendLogTextAndScroll("starting Tor background service... "); - mProgressDialog = ProgressDialog.show(this, "", getString(R.string.status_starting_up), true); - + } private void doLayout () @@ -365,11 +401,7 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic try { - if (mService == null) - { - - } - else if (mService.getStatus() == TorServiceConstants.STATUS_OFF) + if (torStatus == TorServiceConstants.STATUS_OFF) { if (mItemOnOff != null) mItemOnOff.setTitle(R.string.menu_stop); @@ -592,12 +624,9 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic else if (action.equals("org.torproject.android.START_TOR")) { autoStartFromIntent = true; - - if (mService != null) - { + try { startTor(); - Intent nResult = new Intent(); @@ -609,8 +638,6 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic // TODO Auto-generated catch block e.printStackTrace(); } - } - } else if (action.equals(Intent.ACTION_VIEW)) @@ -794,6 +821,19 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public void startVpnService () { + + SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext()); + Editor ePrefs = prefs.edit(); + + + ePrefs.putString("pref_proxy_type", "socks5"); + ePrefs.putString("pref_proxy_host", "127.0.0.1"); + ePrefs.putString("pref_proxy_port", "9999"); + ePrefs.remove("pref_proxy_username"); + ePrefs.remove("pref_proxy_password"); + ePrefs.commit(); + updateSettings(); + Intent intent = VpnService.prepare(this); if (intent != null) { startActivityForResult(intent, REQUEST_VPN); @@ -801,6 +841,19 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic onActivityResult(REQUEST_VPN, RESULT_OK, null); } } + + public void stopVpnService () + { + SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext()); + Editor ePrefs = prefs.edit(); + + ePrefs.remove("pref_proxy_host"); + ePrefs.remove("pref_proxy_port"); + ePrefs.remove("pref_proxy_username"); + ePrefs.remove("pref_proxy_password"); + ePrefs.commit(); + updateSettings(); + } @Override @@ -812,9 +865,8 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic { if (data != null && data.getBooleanExtra("transproxywipe", false)) { - try { - boolean result = mService.flushTransProxy(); + boolean result = flushTransProxy(); if (result) { @@ -828,18 +880,11 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic Toast.makeText(this, R.string.you_do_not_have_root_access_enabled, Toast.LENGTH_SHORT).show(); } - } catch (RemoteException e) { - e.printStackTrace(); - } + } else if (torStatus == TorServiceConstants.STATUS_ON) { - try { - mService.processSettings(); - } catch (RemoteException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + updateSettings(); Toast.makeText(this, R.string.you_may_need_to_stop_and_start_orbot_for_settings_change_to_be_enabled_, Toast.LENGTH_SHORT).show(); } @@ -851,6 +896,18 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic } } + private boolean flushTransProxy () + { + startService("flush"); + return true; + } + + private boolean updateSettings () + { + //todo send service command + startService("update"); + return true; + } @Override protected void onResume() { @@ -858,24 +915,9 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic setLocale(); - if (mService != null) - { - try { - - torStatus = mService.getStatus(); - - if (torStatus == 0) //make sure we don't have a tor process already running - mService.checkAndInit(); - - handleIntents(); - } catch (RemoteException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + handleIntents(); - updateStatus(""); - } - + } AlertDialog aDialog = null; @@ -917,17 +959,11 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic private void updateStatus (String torServiceMsg) { - int newTorStatus = torStatus; - - if (mService != null) - try {newTorStatus = mService.getStatus();} - catch (RemoteException e){} - //now update the layout_main UI based on the status if (imgStatus != null) { - if (newTorStatus == TorServiceConstants.STATUS_ON) + if (torStatus == TorServiceConstants.STATUS_ON) { imgStatus.setImageResource(R.drawable.toron); @@ -967,7 +1003,7 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic } } - else if (newTorStatus == TorServiceConstants.STATUS_CONNECTING) + else if (torStatus == TorServiceConstants.STATUS_CONNECTING) { imgStatus.setImageResource(R.drawable.torstarting); @@ -984,7 +1020,7 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic } - else if (newTorStatus == TorServiceConstants.STATUS_OFF) + else if (torStatus == TorServiceConstants.STATUS_OFF) { imgStatus.setImageResource(R.drawable.toroff); lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start)); @@ -996,9 +1032,6 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic } - - torStatus = newTorStatus; - } @@ -1009,49 +1042,42 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic { - mTxtOrbotLog.setText(""); - - if (mService != null) - { - - // this is a bit of a strange/old/borrowed code/design i used to change the service state - // not sure it really makes sense when what we want to say is just "startTor" - mService.setProfile(TorServiceConstants.STATUS_ON); //this means turn on - - //here we update the UI which is a bit sloppy and mixed up code wise - //might be best to just call updateStatus() instead of directly manipulating UI in this method - yep makes sense - imgStatus.setImageResource(R.drawable.torstarting); - lblStatus.setText(getString(R.string.status_starting_up)); - - //we send a message here to the progressDialog i believe, but we can clarify that shortly - Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG); - msg.getData().putString(HANDLER_TOR_MSG, getString(R.string.status_starting_up)); - mHandler.sendMessage(msg); - - } - else - { - showAlert(getString(R.string.error),"Tor Service has not started yet. Please wait and try again.",false); + startService ("start"); + torStatus = TorServiceConstants.STATUS_CONNECTING; - } + mTxtOrbotLog.setText(""); + + + // this is a bit of a strange/old/borrowed code/design i used to change the service state + // not sure it really makes sense when what we want to say is just "startTor" +// mService.setProfile(TorServiceConstants.STATUS_ON); //this means turn on + //here we update the UI which is a bit sloppy and mixed up code wise + //might be best to just call updateStatus() instead of directly manipulating UI in this method - yep makes sense + imgStatus.setImageResource(R.drawable.torstarting); + lblStatus.setText(getString(R.string.status_starting_up)); + + //we send a message here to the progressDialog i believe, but we can clarify that shortly + Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG); + msg.getData().putString(HANDLER_TOR_MSG, getString(R.string.status_starting_up)); + mHandler.sendMessage(msg); + + } //now we stop Tor! amazing! private void stopTor () throws RemoteException { - if (mService != null) - { - mService.setProfile(TorServiceConstants.STATUS_OFF); + + startService ("stop"); + torStatus = TorServiceConstants.STATUS_OFF; + + // mService.setProfile(TorServiceConstants.STATUS_OFF); Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG); mHandler.sendMessage(msg); - updateStatus(""); - - } - - + } /* @@ -1110,6 +1136,7 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic { try { + /** if (mService != null) { for (String log : mService.getLog()) @@ -1142,7 +1169,7 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic if (mService != null) torStatus = mService.getStatus(); - } + }**/ } catch (Exception re) { @@ -1226,60 +1253,6 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic // this is the connection that gets called back when a successfull bind occurs // we should use this to activity monitor unbind so that we don't have to call // bindService() a million times - - private final ServiceConnection mConnection = new ServiceConnection() { - - public void onServiceConnected(ComponentName className, - IBinder service) { - - if (mProgressDialog != null && mProgressDialog.isShowing()) - mProgressDialog.dismiss(); - - appendLogTextAndScroll("Tor background service connected."); - - // This is called when the connection with the service has been - // established, giving us the service object we can use to - // interact with the service. We are communicating with our - // service through an IDL interface, so get a client-side - // representation of that from the raw service object. - mService = ITorService.Stub.asInterface(service); - - // We want to monitor the service for as long as we are - // connected to it. - try { - torStatus = mService.getStatus(); - initUpdates(); - - handleIntents(); - - updateStatus(""); - - } catch (RemoteException e) { - // In this case the service has crashed before we could even - // do anything with it; we can count on soon being - // disconnected (and then reconnected if it can be restarted) - // so there is no need to do anything here. - Log.d(TAG,"error registering callback to service",e); - } - - - } - - - public void onServiceDisconnected(ComponentName className) { - - appendLogTextAndScroll("Tor background service disconnected."); - - // This is called when the connection with the service has been - // unexpectedly disconnected -- that is, its process crashed. - mKeepUpdating = false; - mService = null; - - - } - - - }; private void setLocale () { @@ -1300,12 +1273,8 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic @Override protected void onDestroy() { super.onDestroy(); - - if (mConnection != null && mService != null) - { - unbindService(mConnection); - mService = null; - } + LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); + } public class DataCount { @@ -1354,9 +1323,11 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic public void spinOrbot (float direction) { - try { - mService.newIdentity(); //request a new identity - + startService ("newnym"); + + //mService.newIdentity(); //request a new identity + //TODO trigger newnym + Toast.makeText(this, R.string.newnym, Toast.LENGTH_SHORT).show(); // Rotate3dAnimation rotation = new Rotate3dAnimation(ROTATE_FROM, ROTATE_TO*direction, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); @@ -1367,10 +1338,7 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic rotation.setRepeatCount(0); imgStatus.startAnimation(rotation); - } catch (RemoteException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + } class MyGestureDetector extends SimpleOnGestureListener { diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java index b5be7b00..be0e9d45 100644 --- a/src/org/torproject/android/service/TorService.java +++ b/src/org/torproject/android/service/TorService.java @@ -38,7 +38,6 @@ import java.util.StringTokenizer; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeoutException; -import java.util.regex.Pattern; import net.freehaven.tor.control.ConfigEntry; import net.freehaven.tor.control.EventHandler; @@ -74,6 +73,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat.Builder; +import android.support.v4.content.LocalBroadcastManager; import android.util.Log; import android.widget.RemoteViews; @@ -183,7 +183,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst sendCallbackLogMessage (getString(R.string.found_existing_tor_process)); mCurrentStatus = STATUS_ON; - + sendCallbackStatus(mCurrentStatus); + return true; } @@ -339,7 +340,9 @@ public class TorService extends Service implements TorServiceConstants, TorConst try { - initialize(); + + //android.os.Debug.waitForDebugger(); + new Thread (new TorStarter(intent)).start(); return Service.START_STICKY; @@ -367,21 +370,40 @@ public class TorService extends Service implements TorServiceConstants, TorConst try { - if (mNotificationManager == null) + //if this is a start on boot launch turn tor on + if (mIntent != null) { - - IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); - registerReceiver(mNetworkStateReceiver , mNetworkStateFilter); - - mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - + String action = mIntent.getAction(); + + if (action!=null) + { + if(action.equals(Intent.ACTION_BOOT_COMPLETED)||action.equals("start")) + { + setTorProfile(STATUS_ON); + } + else if (action.equals("stop")) + { + setTorProfile(STATUS_OFF); + } + else if (action.equals("init")) + { + sendCallbackStatus(mCurrentStatus); + } + else if (action.equals("newnym")) + { + newIdentity(); + } + else if (action.equals("flush")) + { + flushTransparentProxyRules(); + } + else if (action.equals("update")) + { + processSettings(); + } + } } - //if this is a start on boot launch turn tor on - if (mIntent != null && mIntent.getAction()!=null && mIntent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) - { - setTorProfile(STATUS_ON); - } } catch (Exception e) { @@ -417,20 +439,21 @@ public class TorService extends Service implements TorServiceConstants, TorConst stopForeground(true); mCurrentStatus = STATUS_OFF; - + sendCallbackStatus(mCurrentStatus); + if (mHasRoot && mEnableTransparentProxy) disableTransparentProxy(Shell.startRootShell()); clearNotifications(); - sendCallbackStatusMessage(getString(R.string.status_disabled)); + sendCallbackLogMessage(getString(R.string.status_disabled)); } catch (Exception e) { Log.d(TAG, "An error occured stopping Tor",e); logNotice("An error occured stopping Tor: " + e.getMessage()); - sendCallbackStatusMessage(getString(R.string.something_bad_happened)); + sendCallbackLogMessage(getString(R.string.something_bad_happened)); } } @@ -571,6 +594,18 @@ public class TorService extends Service implements TorServiceConstants, TorConst { try { + + if (mNotificationManager == null) + { + + IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); + registerReceiver(mNetworkStateReceiver , mNetworkStateFilter); + + mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + + } + + initBinariesAndDirectories(); updateSettings(); @@ -739,7 +774,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst { mCurrentStatus = STATUS_CONNECTING; - + sendCallbackStatus(mCurrentStatus); + if (fileTor == null) initBinariesAndDirectories(); @@ -751,7 +787,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst updateSettings (); logNotice(getString(R.string.status_starting_up)); - sendCallbackStatusMessage(getString(R.string.status_starting_up)); + sendCallbackLogMessage(getString(R.string.status_starting_up)); boolean success = runTorShellCmd(); @@ -899,7 +935,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst updateTorConfigFile(); - sendCallbackStatusMessage(getString(R.string.status_starting_up)); + sendCallbackLogMessage(getString(R.string.status_starting_up)); if (mShellTor != null) mShellTor.close(); @@ -947,7 +983,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst if (mLastProcessId == -1) { logNotice(getString(R.string.couldn_t_start_tor_process_) + "; exit=" + shellTorCommand.getExitCode() + ": " + shellTorCommand.getOutput()); - sendCallbackStatusMessage(getString(R.string.couldn_t_start_tor_process_)); + sendCallbackLogMessage(getString(R.string.couldn_t_start_tor_process_)); throw new Exception ("Unable to start Tor"); } @@ -1088,7 +1124,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst logNotice( "SUCCESS - authenticated to control port."); - sendCallbackStatusMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete)); + sendCallbackLogMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete)); addEventHandler(); @@ -1104,7 +1140,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst }*/ mCurrentStatus = STATUS_CONNECTING; - + sendCallbackStatus(mCurrentStatus); + String confSocks = conn.getInfo("net/listeners/socks"); StringTokenizer st = new StringTokenizer(confSocks," "); @@ -1340,7 +1377,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst if (profile == STATUS_ON) { - sendCallbackStatusMessage (getString(R.string.status_starting_up)); + sendCallbackLogMessage (getString(R.string.status_starting_up)); try { @@ -1352,17 +1389,21 @@ public class TorService extends Service implements TorServiceConstants, TorConst logException("Unable to start Tor: " + e.toString(),e); mCurrentStatus = STATUS_OFF; + sendCallbackStatus(mCurrentStatus); + showToolbarNotification(getString(R.string.unable_to_start_tor) + ": " + e.getMessage(), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr); stopTor(); } } - else + else if (profile == STATUS_OFF) { - sendCallbackStatusMessage (getString(R.string.status_shutting_down)); + sendCallbackLogMessage (getString(R.string.status_shutting_down)); stopTor(); - mCurrentStatus = STATUS_OFF; + mCurrentStatus = STATUS_OFF; + sendCallbackStatus(mCurrentStatus); + } } @@ -1375,6 +1416,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1) { mCurrentStatus = STATUS_ON; + sendCallbackStatus(mCurrentStatus); + showToolbarNotification(getString(R.string.status_activated), NOTIFY_ID, R.drawable.ic_stat_tor); } @@ -1456,6 +1499,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst lastWritten = written; lastRead = read; + + sendCallbackStatusMessage(lastWritten, lastRead, mTotalTrafficWritten, mTotalTrafficRead); } @@ -1521,6 +1566,9 @@ public class TorService extends Service implements TorServiceConstants, TorConst if (mCurrentStatus == STATUS_CONNECTING) mCurrentStatus = STATUS_ON; + + sendCallbackStatus(mCurrentStatus); + logNotice(sb.toString()); @@ -1646,18 +1694,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst return node; } - public IBinder onBind(Intent intent) { - - logNotice("Background service is bound. Status=" + mCurrentStatus); - return mBinder; - } - - @Override - public void onRebind(Intent intent) { - - super.onRebind(intent); - } public boolean checkAndInitImpl () { @@ -1678,36 +1715,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst return false; } - /** - * The IRemoteInterface is defined through IDL - */ - private final ITorService.Stub mBinder = new ITorService.Stub() { - - public int getStatus () { - return getTorStatus(); - } - - - public boolean checkAndInit () { - return checkAndInitImpl(); - } - - public void setProfile (final int profileNew) - { - - new Thread(new Runnable() - { - - @Override - public void run() { - setTorProfile(profileNew); - } - - }).start(); - - - } - + public void processSettings () { @@ -1924,76 +1932,49 @@ public class TorService extends Service implements TorServiceConstants, TorConst } - @Override - public String[] getStatusMessage() throws RemoteException { - - synchronized (mStatusBuffer) - { - String[] status = mStatusBuffer.toArray(new String[mStatusBuffer.size()]); - mStatusBuffer.clear(); - return status; - } - - } - - @Override - public String[] getLog() throws RemoteException { - synchronized (mLogBuffer) - { - String[] status = mLogBuffer.toArray(new String[mLogBuffer.size()]); - mLogBuffer.clear(); - return status; - } - } - @Override - public long[] getBandwidth() throws RemoteException { - - long[] bw = {lastRead,lastWritten,mTotalTrafficRead,mTotalTrafficWritten}; - return bw; - } - - @Override - public boolean flushTransProxy () throws RemoteException { - - try - { - return flushTransparentProxyRules(); - } - catch (Exception e) - { - Log.e(TAG,"error in transproxy",e); - return false; - } - - } - - }; - private ArrayList mStatusBuffer = new ArrayList(); - - private void sendCallbackStatusMessage (String newStatus) - { - mStatusBuffer.add(newStatus); - } + private void sendCallbackStatusMessage (long upload, long download, long written, long read) { - + Intent intent = new Intent("log"); + // You can also include some extra data. + intent.putExtra("up",upload); + intent.putExtra("down",download); + intent.putExtra("written",written); + intent.putExtra("read",read); + + LocalBroadcastManager.getInstance(this).sendBroadcast(intent); + } - private ArrayList mLogBuffer = new ArrayList(); - + // private ArrayList mLogBuffer = new ArrayList(); private void sendCallbackLogMessage (String logMessage) { - mLogBuffer.add(logMessage); + Intent intent = new Intent("log"); + // You can also include some extra data. + intent.putExtra("log", logMessage); + LocalBroadcastManager.getInstance(this).sendBroadcast(intent); } + private void sendCallbackStatus (int currentStatus) + { + + + Intent intent = new Intent("status"); + // You can also include some extra data. + intent.putExtra("status", currentStatus); + LocalBroadcastManager.getInstance(this).sendBroadcast(intent); + + } + + /* * Another way to do this would be to use the Observer pattern by defining the * BroadcastReciever in the Android manifest. @@ -2021,11 +2002,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst if (doNetworKSleep) { try { - if (mBinder != null) - { - mBinder.updateConfiguration("DisableNetwork", mConnectivity ? "0" : "1", false); - mBinder.saveConfiguration(); - } + updateConfiguration("DisableNetwork", mConnectivity ? "0" : "1", false); if (mCurrentStatus != STATUS_OFF) { @@ -2102,21 +2079,21 @@ public class TorService extends Service implements TorServiceConstants, TorConst if ((proxyHost != null && proxyHost.length()>0) && (proxyPort != null && proxyPort.length() > 0)) { - mBinder.updateConfiguration(proxyType + "Proxy", proxyHost + ':' + proxyPort, false); + updateConfiguration(proxyType + "Proxy", proxyHost + ':' + proxyPort, false); if (proxyUser != null && proxyPass != null) { if (proxyType.equalsIgnoreCase("socks5")) { - mBinder.updateConfiguration("Socks5ProxyUsername", proxyUser, false); - mBinder.updateConfiguration("Socks5ProxyPassword", proxyPass, false); + updateConfiguration("Socks5ProxyUsername", proxyUser, false); + updateConfiguration("Socks5ProxyPassword", proxyPass, false); } else - mBinder.updateConfiguration(proxyType + "ProxyAuthenticator", proxyUser + ':' + proxyPort, false); + updateConfiguration(proxyType + "ProxyAuthenticator", proxyUser + ':' + proxyPort, false); } else if (proxyPass != null) - mBinder.updateConfiguration(proxyType + "ProxyAuthenticator", proxyUser + ':' + proxyPort, false); + updateConfiguration(proxyType + "ProxyAuthenticator", proxyUser + ':' + proxyPort, false); @@ -2138,8 +2115,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst } - mBinder.updateConfiguration("GeoIPFile", fileGeoIP.getCanonicalPath(), false); - mBinder.updateConfiguration("GeoIPv6File", fileGeoIP6.getCanonicalPath(), false); + updateConfiguration("GeoIPFile", fileGeoIP.getCanonicalPath(), false); + updateConfiguration("GeoIPv6File", fileGeoIP6.getCanonicalPath(), false); } catch (Exception e) @@ -2150,10 +2127,10 @@ public class TorService extends Service implements TorServiceConstants, TorConst } } - mBinder.updateConfiguration("EntryNodes", entranceNodes, false); - mBinder.updateConfiguration("ExitNodes", exitNodes, false); - mBinder.updateConfiguration("ExcludeNodes", excludeNodes, false); - mBinder.updateConfiguration("StrictNodes", enableStrictNodes ? "1" : "0", false); + updateConfiguration("EntryNodes", entranceNodes, false); + updateConfiguration("ExitNodes", exitNodes, false); + updateConfiguration("ExcludeNodes", excludeNodes, false); + updateConfiguration("StrictNodes", enableStrictNodes ? "1" : "0", false); if (useBridges) { @@ -2188,7 +2165,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst { String bridgeConfigLine = st.nextToken().trim(); debug("Adding bridge: " + bridgeConfigLine); - mBinder.updateConfiguration(bridgeCfgKey, bridgeConfigLine, false); + updateConfiguration(bridgeCfgKey, bridgeConfigLine, false); } @@ -2201,7 +2178,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst debug ("Using OBFUSCATED bridges: " + bridgeConfig); - mBinder.updateConfiguration("ClientTransportPlugin",bridgeConfig, false); + updateConfiguration("ClientTransportPlugin",bridgeConfig, false); } else { @@ -2210,16 +2187,16 @@ public class TorService extends Service implements TorServiceConstants, TorConst - mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false); + updateConfiguration("UpdateBridgesFromAuthority", "0", false); - mBinder.updateConfiguration("UseBridges", "1", false); + updateConfiguration("UseBridges", "1", false); } else { - mBinder.updateConfiguration("UseBridges", "0", false); + updateConfiguration("UseBridges", "0", false); } @@ -2230,12 +2207,12 @@ public class TorService extends Service implements TorServiceConstants, TorConst String ReachableAddressesPorts = prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443"); - mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false); + updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false); } else { - mBinder.updateConfiguration("ReachableAddresses", "", false); + updateConfiguration("ReachableAddresses", "", false); } } catch (Exception e) @@ -2254,17 +2231,17 @@ public class TorService extends Service implements TorServiceConstants, TorConst String dnsFile = writeDNSFile (); - mBinder.updateConfiguration("ServerDNSResolvConfFile", dnsFile, false); - mBinder.updateConfiguration("ORPort", ORPort + "", false); - mBinder.updateConfiguration("Nickname", nickname, false); - mBinder.updateConfiguration("ExitPolicy", "reject *:*", false); + updateConfiguration("ServerDNSResolvConfFile", dnsFile, false); + updateConfiguration("ORPort", ORPort + "", false); + updateConfiguration("Nickname", nickname, false); + updateConfiguration("ExitPolicy", "reject *:*", false); } else { - mBinder.updateConfiguration("ORPort", "", false); - mBinder.updateConfiguration("Nickname", "", false); - mBinder.updateConfiguration("ExitPolicy", "", false); + updateConfiguration("ORPort", "", false); + updateConfiguration("Nickname", "", false); + updateConfiguration("ExitPolicy", "", false); } } catch (Exception e) @@ -2279,7 +2256,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst { logNotice("hidden services are enabled"); - //mBinder.updateConfiguration("RendPostPeriod", "600 seconds", false); //possible feature to investigate + //updateConfiguration("RendPostPeriod", "600 seconds", false); //possible feature to investigate String hsPorts = prefs.getString("pref_hs_ports",""); @@ -2305,8 +2282,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst debug("Adding hidden service on port: " + hsPortConfig); - mBinder.updateConfiguration("HiddenServiceDir",hsDirPath, false); - mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false); + updateConfiguration("HiddenServiceDir",hsDirPath, false); + updateConfiguration("HiddenServicePort",hsPortConfig, false); } catch (NumberFormatException e) { @@ -2320,11 +2297,11 @@ public class TorService extends Service implements TorServiceConstants, TorConst } else { - mBinder.updateConfiguration("HiddenServiceDir","", false); + updateConfiguration("HiddenServiceDir","", false); } - mBinder.saveConfiguration(); + saveConfiguration(); return true; } @@ -2332,11 +2309,11 @@ public class TorService extends Service implements TorServiceConstants, TorConst /* private void enableSocks (String socks, boolean safeSocks) throws RemoteException { - mBinder.updateConfiguration("SOCKSPort", socks, false); - mBinder.updateConfiguration("SafeSocks", safeSocks ? "1" : "0", false); - mBinder.updateConfiguration("TestSocks", "1", false); - mBinder.updateConfiguration("WarnUnsafeSocks", "1", false); - mBinder.saveConfiguration(); + updateConfiguration("SOCKSPort", socks, false); + updateConfiguration("SafeSocks", safeSocks ? "1" : "0", false); + updateConfiguration("TestSocks", "1", false); + updateConfiguration("WarnUnsafeSocks", "1", false); + saveConfiguration(); } @@ -2344,17 +2321,17 @@ public class TorService extends Service implements TorServiceConstants, TorConst { logMessage ("Transparent Proxying: enabling port..."); - mBinder.updateConfiguration("TransPort",transPort,false); - mBinder.updateConfiguration("DNSPort",dnsPort,false); - mBinder.updateConfiguration("VirtualAddrNetwork","10.192.0.0/10",false); - mBinder.updateConfiguration("AutomapHostsOnResolve","1",false); - mBinder.saveConfiguration(); + updateConfiguration("TransPort",transPort,false); + updateConfiguration("DNSPort",dnsPort,false); + updateConfiguration("VirtualAddrNetwork","10.192.0.0/10",false); + updateConfiguration("AutomapHostsOnResolve","1",false); + saveConfiguration(); }*/ private void blockPlaintextPorts (String portList) throws RemoteException { - mBinder.updateConfiguration("RejectPlaintextPorts",portList,false); + updateConfiguration("RejectPlaintextPorts",portList,false); } //using Google DNS for now as the public DNS server @@ -2455,6 +2432,12 @@ public class TorService extends Service implements TorServiceConstants, TorConst } } + + @Override + public IBinder onBind(Intent arg0) { + // TODO Auto-generated method stub + return null; + } } diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java index 34316b27..51cae410 100644 --- a/src/org/torproject/android/service/TorServiceConstants.java +++ b/src/org/torproject/android/service/TorServiceConstants.java @@ -76,7 +76,7 @@ public interface TorServiceConstants { public static final int DISABLE_TOR_MSG = 3; public static final int LOG_MSG = 4; - public static final String BINARY_TOR_VERSION = "0.2.5.7-openssl1.0.1i"; + public static final String BINARY_TOR_VERSION = "0.2.5.8-openssl1.0.1i"; public static final String PREF_BINARY_TOR_VERSION_INSTALLED = "BINARY_TOR_VERSION_INSTALLED"; //obfsproxy