commit 410ae032564e0a57b3df20391b7023085087d628 Author: n8fr8 nathan@guardianproject.info Date: Fri Apr 24 16:59:19 2020 -0400
tweaks to app data storage and control port interaction - in some cases, Orbot connection to local control port can hang. Make changes to address that. --- .../torproject/android/service/OrbotService.java | 63 +++++++++++----------- .../android/service/TorEventHandler.java | 4 ++ 2 files changed, 37 insertions(+), 30 deletions(-)
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java index dbd36dbd..a5731fae 100644 --- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java +++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java @@ -29,6 +29,7 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.Build; +import android.os.Debug; import android.os.IBinder; import android.os.RemoteException; import android.provider.BaseColumns; @@ -462,7 +463,7 @@ public class OrbotService extends Service implements TorServiceConstants, OrbotC
try { logNotice("sending HALT signal to Tor process"); - conn.shutdownTor("HALT"); + conn.shutdownTor("SHUTDOWN");
} catch (IOException e) { Log.d(OrbotConstants.TAG, "error shutting down Tor via connection", e); @@ -471,25 +472,6 @@ public class OrbotService extends Service implements TorServiceConstants, OrbotC conn = null; }
- /** - if (mLastProcessId != -1) - killProcess(mLastProcessId + "", "-9"); - - if (filePid != null && filePid.exists()) - { - List<String> lines = IOUtils.readLines(new FileReader(filePid)); - String torPid = lines.get(0); - killProcess(torPid,"-9"); - - } - - - // if that fails, try again using native utils - try { - killProcess(fileTor, "-9"); // this is -HUP - } catch (Exception e) { - e.printStackTrace(); - }**/
}
@@ -532,7 +514,13 @@ public class OrbotService extends Service implements TorServiceConstants, OrbotC if (!appBinHome.exists()) appBinHome.mkdirs();
- appCacheHome = getDir(DIRECTORY_TOR_DATA, Application.MODE_PRIVATE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + appCacheHome = getDataDir();//getDir(DIRECTORY_TOR_DATA, Application.MODE_PRIVATE); + } + else { + appCacheHome = getDir(DIRECTORY_TOR_DATA, Application.MODE_PRIVATE); + } + if (!appCacheHome.exists()) appCacheHome.mkdirs();
@@ -664,8 +652,8 @@ public class OrbotService extends Service implements TorServiceConstants, OrbotC
extraLines.append("PidFile").append(' ').append(filePid.getCanonicalPath()).append('\n');
- // extraLines.append("RunAsDaemon 1").append('\n'); - // extraLines.append("AvoidDiskWrites 1").append('\n'); + extraLines.append("RunAsDaemon 1").append('\n'); + extraLines.append("AvoidDiskWrites 1").append('\n');
String socksPortPref = prefs.getString(OrbotConstants.PREF_SOCKS, (TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT));
@@ -1064,11 +1052,7 @@ public class OrbotService extends Service implements TorServiceConstants, OrbotC { logNotice( "Connecting to control port: " + controlPort);
- Socket torConnSocket = new Socket(IP_LOCALHOST, controlPort); - torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT);
- conn = new TorControlConnection(torConnSocket); - conn.launchThread(true);//is daemon
break; } @@ -1088,20 +1072,36 @@ public class OrbotService extends Service implements TorServiceConstants, OrbotC catch (Exception e){} }
+ + if (controlPort != -1) + { + Socket torConnSocket = new Socket(IP_LOCALHOST, controlPort); + torConnSocket.setSoTimeout(CONTROL_SOCKET_TIMEOUT); + + conn = new TorControlConnection(torConnSocket); + + conn.launchThread(true);//is daemon + + } + if (conn != null) { + logNotice( "SUCCESS connected to Tor control port.");
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);
+ addEventHandler(); + logNotice( "SUCCESS - authenticated to control port.");
sendCallbackLogMessage(getString(R.string.tor_process_starting) + ' ' + getString(R.string.tor_process_complete)); @@ -1141,7 +1141,6 @@ public class OrbotService extends Service implements TorServiceConstants, OrbotC
sendCallbackPorts(mPortSOCKS, mPortHTTP, mPortDns, mPortTrans);
- addEventHandler();
return Integer.parseInt(torProcId);
@@ -1212,12 +1211,16 @@ public class OrbotService extends Service implements TorServiceConstants, OrbotC // ... logNotice( "adding control port event handler");
- conn.setEventHandler(mEventHandler);
conn.setEvents(Arrays.asList(new String[]{ - "ORCONN", "CIRC", "NOTICE", "WARN", "ERR","BW"})); + "CIRC","STREAM", "ORCONN" , "BW" , "INFO" ,"NOTICE" , "WARN" , "ERR" , "NEWDESC" , "ADDRMAP"})); + + conn.setEventHandler(mEventHandler);
logNotice( "SUCCESS added control port event handler"); + + conn.setConf("DisableNetwork","0"); + }
/** diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java b/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java index e8de7024..d8f50d19 100644 --- a/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java +++ b/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java @@ -63,6 +63,10 @@ public class TorEventHandler implements EventHandler, TorServiceConstants {
@Override public void newDescriptors(List<String> orList) { + + for (String desc : orList) + mService.debug("descriptors: " + desc); + }
@Override
tor-commits@lists.torproject.org