commit fd47e70f4410af2ed06a6465cf0c4beb394cb680
Author: Nathan Freitas <[email protected]>
Date:   Wed Jun 4 23:24:11 2014 -0400

    fix control port connections with socket timeouts
---
 src/org/torproject/android/service/TorService.java |  139 ++++++++++++--------
 1 file changed, 81 insertions(+), 58 deletions(-)

diff --git a/src/org/torproject/android/service/TorService.java 
b/src/org/torproject/android/service/TorService.java
index 1a90258..ff219f2 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -66,7 +66,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
        
        private static int currentStatus = STATUS_OFF;
        
-       private final static int CONTROL_SOCKET_TIMEOUT = 3000;
+       private final static int CONTROL_SOCKET_TIMEOUT = 10000;
                
        private TorControlConnection conn = null;
        private Socket torConnSocket = null;
@@ -170,7 +170,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                }
                catch (Exception e)
                {
-                       Log.e(TAG,"error finding proc",e);
+                       //Log.e(TAG,"error finding proc",e);
                        return false;
                }
        }
@@ -295,7 +295,6 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
 
                try
                {
-                       
                        new startTorOperation().execute(intent);
                        
                    return START_STICKY;
@@ -730,9 +729,13 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                
                //start Tor in the background
                Shell shell = Shell.startShell();
+               
+               
                SimpleCommand cmdTor = new 
SimpleCommand(fileTor.getAbsolutePath() + " DataDirectory " + 
appCacheHome.getAbsolutePath() + " -f " + torrcPath + " &");
+               
                shell.add(cmdTor);
                
+               
                Thread.sleep(torRetryWaitTimeMS);
                
                //now try to connect
@@ -742,6 +745,9 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                {
                        
logNotice(getString(R.string.couldn_t_start_tor_process_) + "; exit=" + 
cmdTor.getExitCode() + ": " + cmdTor.getOutput());
                        
sendCallbackStatusMessage(getString(R.string.couldn_t_start_tor_process_));
+               
+                       logNotice("Tor exit code: " + cmdTor.getExitCode());
+                       
                        
                        throw new Exception ("Unable to start Tor");
                }
@@ -818,6 +824,18 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                        
                        if (conn != null)
                        {
+                               File fileCookie = new File(appCacheHome, 
TOR_CONTROL_COOKIE);
+                       
+                       if (fileCookie.exists())
+                       {
+                               byte[] cookie = new 
byte[(int)fileCookie.length()];
+                               DataInputStream fis = new DataInputStream(new 
FileInputStream(fileCookie));
+                               fis.read(cookie);
+                               fis.close();
+                               conn.authenticate(cookie);
+                                               
+                       }
+                       
                                 String torProcId = conn.getInfo("process/pid");
                                  return Integer.parseInt(torProcId);
                        }
@@ -835,6 +853,12 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                                                
                                        conn = 
TorControlConnection.getConnection(torConnSocket);
                                        
+                                       if (ENABLE_DEBUG_LOG)
+                                       {
+                                               conn.setDebugging(System.out);
+                                               
+                                       }
+                                       
                                                logNotice( "SUCCESS connected 
to Tor control port");
                                        
                                        File fileCookie = new 
File(appCacheHome, TOR_CONTROL_COOKIE);
@@ -861,6 +885,8 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                                        else
                                        {
                                                logNotice ("Tor authentication 
cookie does not exist yet; trying again...");
+                                               conn = null;
+                                                               
                                        }
                                        }
                                        catch (Exception ce)
@@ -868,11 +894,10 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                                                conn = null;
                                                logNotice( "Error connecting to 
Tor local control port: " + ce.getLocalizedMessage());
                                                 
-                                       //      Log.d(TAG,"Attempt: Error 
connecting to control port: " + ce.getLocalizedMessage(),ce);
+                                               Log.d(TAG,"Attempt: Error 
connecting to control port: " + ce.getLocalizedMessage(),ce);
                                        }
                                        
-                                       
sendCallbackStatusMessage(getString(R.string.tor_process_waiting));
-                                       Thread.sleep(3000);
+                                       
                                        
                                }
                        }               
@@ -976,59 +1001,37 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                        return PROFILE_ON;
                }
                
-               public void setTorProfile(int profile)  {
-               //      logNotice("Tor profile set to " + profile);
-                       
-                       if (profile == PROFILE_ON)
-                       {
-                               
-                  new StartStopTorOperation().execute(true);
-                       }
-                       else if (profile == PROFILE_OFF)
-                       {
-
-                      new StartStopTorOperation().execute(false);
-                               
-                       }
-               }
                
-               private class StartStopTorOperation extends AsyncTask<Boolean, 
Void, Boolean> {
-               @Override
-               protected Boolean doInBackground(Boolean... params) {
+               public synchronized void setTorProfile(int profile)  {
+               
+                       if (profile == PROFILE_ON && currentStatus == 
STATUS_OFF)
+               {
+                       
+                       currentStatus = STATUS_CONNECTING;
+                   sendCallbackStatusMessage 
(getString(R.string.status_starting_up));
+
+                   try
+                            {
+                                  initTor();
+                            }
+                            catch (Exception e)
+                            {                          
+                               
+                               logException("Unable to start Tor: " + 
e.toString(),e); 
+                                currentStatus = STATUS_OFF;
+                                
showToolbarNotification(getString(R.string.unable_to_start_tor) + ": " + 
e.getMessage(), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr, false);
+                            }
+               }
+               else
+               {
+                       currentStatus = STATUS_OFF;
+                   sendCallbackStatusMessage 
(getString(R.string.status_shutting_down));
                  
-                       if (params[0].booleanValue() == true)
-                       {
-                               
-                               currentStatus = STATUS_CONNECTING;
-                           sendCallbackStatusMessage 
(getString(R.string.status_starting_up));
-
-                           try
-                                    {
-                                          initTor();
-                                    }
-                                    catch (Exception e)
-                                    {                          
-                                       
-                                       logException("Unable to start Tor: " + 
e.toString(),e); 
-                                        currentStatus = STATUS_OFF;
-                                        
showToolbarNotification(getString(R.string.unable_to_start_tor) + ": " + 
e.getMessage(), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr, false);
-                                    }
-                       }
-                       else
-                       {
-                               currentStatus = STATUS_OFF;
-                           sendCallbackStatusMessage 
(getString(R.string.status_shutting_down));
-                         
-                           stopTor();
-                           
-                       }
-                       
-                       
-                   return true;
-               }
-
-           }
-
+                   stopTor();
+                   
+               }
+               }
+               
 
        public void message(String severity, String msg) {
                
@@ -1290,7 +1293,27 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
         
         public void setProfile (int profile)
         {
-               setTorProfile(profile);
+        
+               new AsyncTask<Integer, Void, Boolean>() {
+                @Override
+                protected Boolean doInBackground(Integer... params) {
+                  
+                       try
+                       {               
+                               
+                               setTorProfile(params[0].intValue());
+
+                       }
+                       catch (Exception e)
+                       {
+                               Log.e(TAG,"error onBind",e);
+                       }
+                       
+                       
+                    return true;
+                }
+
+            }.execute(profile);
                
         }
         



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

Reply via email to