commit c9bb1c2890a10389b0b5bf871ed1a4e5afd74b20
Author: Nathan Freitas <[email protected]>
Date:   Fri Oct 24 01:14:02 2014 -0400

    remove bind service and use localbroadcast instead
    this should fix problems with the service being killed on unbind
---
 src/org/torproject/android/Orbot.java              |  306 +++++++++----------
 src/org/torproject/android/service/TorService.java |  321 +++++++++-----------
 .../android/service/TorServiceConstants.java       |    2 +-
 3 files changed, 290 insertions(+), 339 deletions(-)

diff --git a/src/org/torproject/android/Orbot.java 
b/src/org/torproject/android/Orbot.java
index 0ffdecf..0920c2a 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 b5be7b0..be0e9d4 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,75 +1932,48 @@ 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<String> mStatusBuffer = new ArrayList<String>();
-
-    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<String> mLogBuffer = new ArrayList<String>();
-    
+ //   private ArrayList<String> mLogBuffer = new ArrayList<String>();
     
     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 
@@ -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 34316b2..51cae41 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 



_______________________________________________
tor-commits mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to