[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [orbot/master] Address issues related to onionoo relay/node info lookup
commit 31cf9816fb64e2afaeb5eda052079c543308d179
Author: Nathan Freitas <nathan@xxxxxxxxxxx>
Date: Sat Aug 2 00:57:18 2014 -0400
Address issues related to onionoo relay/node info lookup
-Ensure streams, files are closed
-Add timeout values to socket, streams
-Change torrc CircuitStreamTimeout to 120
---
src/org/torproject/android/service/TorService.java | 263 +++++++++++---------
.../android/service/TorServiceUtils.java | 2 +-
2 files changed, 150 insertions(+), 115 deletions(-)
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 88e8082..a147bae 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -17,6 +17,7 @@ import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
@@ -33,6 +34,8 @@ import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;
import java.util.regex.Pattern;
@@ -62,10 +65,8 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
-import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.os.AsyncTask;
import android.os.Build;
import android.os.IBinder;
import android.os.RemoteException;
@@ -132,6 +133,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
private boolean mTransProxyAll = false;
private boolean mTransProxyTethering = false;
+ private ExecutorService mExecutor = Executors.newCachedThreadPool();
+
public void debug(String msg)
{
if (ENABLE_DEBUG_LOG)
@@ -251,7 +254,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
if (hmBuiltNodes.size() > 0)
{
- sbInfo.append("Your Tor Public IPs:\n");
+ //sbInfo.append(getString(R.string.your_tor_public_ips_) + '\n');
+
Set<String> itBuiltNodes = hmBuiltNodes.keySet();
for (String key : itBuiltNodes)
{
@@ -303,7 +307,11 @@ public class TorService extends Service implements TorServiceConstants, TorConst
if (notifyType != NOTIFY_ID)
{
mNotifyBuilder.setTicker(notifyMsg);
- mNotifyBuilder.setLights(Color.GREEN, 1000, 1000);
+ // mNotifyBuilder.setLights(Color.GREEN, 1000, 1000);
+ }
+ else
+ {
+ mNotifyBuilder.setTicker(null);
}
mNotifyBuilder.setOngoing(prefPersistNotifications);
@@ -330,7 +338,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
try
{
- new startTorOperation().execute(intent);
+ mExecutor.execute (new TorStarter(intent));
return Service.START_STICKY;
@@ -343,45 +351,46 @@ public class TorService extends Service implements TorServiceConstants, TorConst
}
+ private class TorStarter implements Runnable
+ {
+ Intent mIntent;
+
+ public TorStarter (Intent intent)
+ {
+ mIntent = intent;
+ }
+
+ public void run ()
+ {
+ try
+ {
+
+ if (mNotificationManager == null)
+ {
+
+ IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
+ registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
+
+ mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ if (mIntent != null && mIntent.getAction()!=null && mIntent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
+ {
+ setTorProfile(PROFILE_ON);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Log.e(TAG,"error onBind",e);
+ }
+ }
+ }
+
@Override
public void onTaskRemoved(Intent rootIntent) {
logNotice("Orbot was swiped away... background service will keep running");
}
- private class startTorOperation extends AsyncTask<Intent, Void, Boolean> {
- @Override
- protected Boolean doInBackground(Intent... params) {
-
- try
- {
- Intent intent = params[0];
-
- if (mNotificationManager == null)
- {
-
- IntentFilter mNetworkStateFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
- registerReceiver(mNetworkStateReceiver , mNetworkStateFilter);
-
- mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
- if (intent != null && intent.getAction()!=null && intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
- {
- setTorProfile(PROFILE_ON);
- }
- }
- }
- catch (Exception e)
- {
- Log.e(TAG,"error onBind",e);
- }
-
-
- return true;
- }
-
- }
-
-
@@ -561,6 +570,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
public void onCreate() {
super.onCreate();
+// android.os.Debug.waitForDebugger();
+
try
{
initBinariesAndDirectories();
@@ -635,6 +646,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
extraLines.append("AvoidDiskWrites 1").append('\n');
+ extraLines.append("CircuitStreamTimeout 120").append('\n');
extraLines.append("SOCKSPort ").append(socksPort).append('\n');
extraLines.append("SafeSocks 0").append('\n');
@@ -909,7 +921,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
props.store(new FileWriter(file), "updated");
- props.list(System.out);
}
@@ -1371,7 +1382,9 @@ public class TorService extends Service implements TorServiceConstants, TorConst
//get IP from last nodename
if(status.equals("BUILT")){
- new getExternalIP().execute(node);
+
+ if (node.ipAddress == null)
+ mExecutor.execute(new ExternalIPFetcher(node));
hmBuiltNodes.put(node.id, node);
}
@@ -1379,6 +1392,16 @@ public class TorService extends Service implements TorServiceConstants, TorConst
if (status.equals("CLOSED"))
{
hmBuiltNodes.remove(node.id);
+
+ //how check the IP's of any other nodes we have
+ for (String nodeId : hmBuiltNodes.keySet())
+ {
+ node = hmBuiltNodes.get(nodeId);
+
+ if (node.ipAddress == null)
+ mExecutor.execute(new ExternalIPFetcher(node));
+
+ }
}
@@ -1397,49 +1420,74 @@ public class TorService extends Service implements TorServiceConstants, TorConst
String organization;
}
- private class getExternalIP extends AsyncTask<Node, Void, Void>{
+ private class ExternalIPFetcher implements Runnable {
+ private Node mNode;
+ private int MAX_ATTEMPTS = 3;
- @Override
- protected Void doInBackground(Node... nodes) {
+ public ExternalIPFetcher (Node node)
+ {
+ mNode = node;
+ }
+
+ public void run ()
+ {
- if (conn != null)
+ if (mNode.ipAddress != null)
+ return;
+
+ for (int i = 0; i < MAX_ATTEMPTS; i++)
{
- try {
- //String nodeDetails = conn.getInfo("ns/id/"+nodes[0].id);
- Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8118));
-
- URLConnection conn = new URL("https://onionoo.torproject.org/details?lookup=" + nodes[0].id).openConnection(proxy);
- // getting JSON string from URL
-
- StringBuffer json = new StringBuffer();
- String line = null;
- BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
- while ((line = reader.readLine())!=null)
- json.append(line);
-
- JSONObject jsonNodeInfo = new org.json.JSONObject(json.toString());
+ if (conn != null)
+ {
+ try {
+ //String nodeDetails = conn.getInfo("ns/id/"+nodes[0].id);
+ Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8118));
+
+ URLConnection conn = new URL("https://onionoo.torproject.org/details?lookup=" + mNode.id).openConnection(proxy);
+ conn.setRequestProperty("Connection","Close");
+ conn.setConnectTimeout(60000);
+ conn.setReadTimeout(60000);
- JSONArray jsonRelays = jsonNodeInfo.getJSONArray("relays");
- if (jsonRelays.length() > 0)
- {
- nodes[0].ipAddress = jsonRelays.getJSONObject(0).getJSONArray("or_addresses").getString(0).split(":")[0];
+ InputStream is = conn.getInputStream();
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+
+ // getting JSON string from URL
+
+ StringBuffer json = new StringBuffer();
+ String line = null;
+
+ while ((line = reader.readLine())!=null)
+ json.append(line);
+
+ JSONObject jsonNodeInfo = new org.json.JSONObject(json.toString());
+
+ JSONArray jsonRelays = jsonNodeInfo.getJSONArray("relays");
+ if (jsonRelays.length() > 0)
+ {
+ mNode.ipAddress = jsonRelays.getJSONObject(0).getJSONArray("or_addresses").getString(0).split(":")[0];
+
+ mNode.country = jsonRelays.getJSONObject(0).getString("country_name");
+ mNode.organization = jsonRelays.getJSONObject(0).getString("as_name");
+
+
+
+ }
+
+ reader.close();
+ is.close();
- nodes[0].country = jsonRelays.getJSONObject(0).getString("country_name");
- nodes[0].organization = jsonRelays.getJSONObject(0).getString("as_name");
+ break;
+ } catch (Exception e) {
+
+ debug ("Error getting node details from onionoo: " + e.getMessage());
}
-
- return null;
-
- } catch (Exception e) {
-
- logException ("Error getting node details from onionoo",e);
}
}
- return null;
}
@@ -1461,30 +1509,26 @@ public class TorService extends Service implements TorServiceConstants, TorConst
public IBinder onBind(Intent intent) {
- new initTorOperation().execute(true);
+ mExecutor.execute(new Runnable ()
+ {
+ public void run ()
+ {
+ try
+ {
+ findExistingProc ();
+ }
+ catch (Exception e)
+ {
+ Log.e(TAG,"error onBind",e);
+ }
+
+ }
+ });
return mBinder;
}
- private class initTorOperation extends AsyncTask<Boolean, Void, Boolean> {
- @Override
- protected Boolean doInBackground(Boolean... params) {
-
- try
- {
- findExistingProc ();
- }
- catch (Exception e)
- {
- Log.e(TAG,"error onBind",e);
- }
-
-
- return true;
- }
-
- }
-
+
/**
* The IRemoteInterface is defined through IDL
@@ -1495,29 +1539,20 @@ public class TorService extends Service implements TorServiceConstants, TorConst
return getTorStatus();
}
- public void setProfile (int profile)
+
+ public void setProfile (final int profileNew)
{
-
- 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);
+
+ mExecutor.execute(new Runnable()
+ {
+
+ @Override
+ public void run() {
+ setTorProfile(profileNew);
+ }
+
+ });
+
}
diff --git a/src/org/torproject/android/service/TorServiceUtils.java b/src/org/torproject/android/service/TorServiceUtils.java
index af83709..18ae550 100644
--- a/src/org/torproject/android/service/TorServiceUtils.java
+++ b/src/org/torproject/android/service/TorServiceUtils.java
@@ -90,7 +90,7 @@ public class TorServiceUtils implements TorServiceConstants {
if (line.contains("PID"))
continue;
- if (line.contains(processKey))
+ if (line.contains('/' + processKey))
{
String[] lineParts = line.split("\\s+");
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits