[tor-commits] [orbot/master] include dynamic proxy config info in ACTION_STATUS replies

n8fr8 at torproject.org n8fr8 at torproject.org
Thu Jun 25 14:59:59 UTC 2015


commit b620f828a1a86875bf93fa3291c7a753d02070fd
Author: Hans-Christoph Steiner <hans at eds.org>
Date:   Thu Jun 11 17:02:56 2015 -0400

    include dynamic proxy config info in ACTION_STATUS replies
    
    This includes extras in the Intents that are sent as replies to the two
    different requests to start tor (ACTION_START and ACTION_START_TOR).  These
    extras give all of the current SOCKS and HTTP proxy settings, so that the
    app can dynamically use the correct settings.  Sometimes there are port
    conflicts, so apps should dynamically adjust in order to reliably find tor.
    
    closes #3612 https://dev.guardianproject.info/issues/3612
    refs #4419 https://dev.guardianproject.info/issues/4419
    refs #3690 https://dev.guardianproject.info/issues/3690
    refs #3687 https://dev.guardianproject.info/issues/3687
    refs #3859 https://dev.guardianproject.info/issues/3859
---
 src/org/torproject/android/OrbotMainActivity.java  |   35 ++++++++++----------
 src/org/torproject/android/service/TorService.java |    6 ++++
 .../android/service/TorServiceConstants.java       |   12 +++++++
 3 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 978d8cc..b1635f2 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -85,7 +85,8 @@ public class OrbotMainActivity extends Activity
 		
     /* Some tracking bits */
     private String torStatus = TorServiceConstants.STATUS_OFF; //latest status reported from the tor service
-    
+    private Intent lastStatusIntent;  // the last ACTION_STATUS Intent received
+
     private SharedPreferences mPrefs = null;
 
     private boolean autoStartFromIntent = false;
@@ -164,6 +165,7 @@ public class OrbotMainActivity extends Activity
                 mStatusUpdateHandler.sendMessage(msg);
 
             } else if (action.equals(TorServiceConstants.ACTION_STATUS)) {
+                lastStatusIntent = intent;
                 torStatus = intent.getStringExtra(TorServiceConstants.EXTRA_STATUS);
                 Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
                 msg.obj = "";
@@ -554,24 +556,21 @@ public class OrbotMainActivity extends Activity
 		else if (action.equals("org.torproject.android.START_TOR"))
 		{
 			autoStartFromIntent = true;
-		    try {
-		        Log.i(TAG, "action equals org.torproject.android.START_TOR");
-		        startTor();
-
-		        Intent resultIntent = new Intent(intent);
-		        resultIntent.putExtra("socks_proxy", "socks://127.0.0.1:" + TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT);
-                resultIntent.putExtra("socks_proxy_host", "127.0.0.1");
-                resultIntent.putExtra("socks_proxy_port", TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT);
-                resultIntent.putExtra("http_proxy", "http://127.0.0.1" + TorServiceConstants.HTTP_PROXY_PORT_DEFAULT);
-                resultIntent.putExtra("http_proxy_host", "127.0.0.1");
-                resultIntent.putExtra("http_proxy_port", TorServiceConstants.HTTP_PROXY_PORT_DEFAULT);
-		        setResult(RESULT_OK, resultIntent);
-		        finish();
-		    } catch (RemoteException e) {
-		        // TODO Auto-generated catch block
-		        e.printStackTrace();
-		    }
+            try {
+                startTor();
 
+                Intent resultIntent;
+                if (lastStatusIntent == null) {
+                    resultIntent = new Intent(intent);
+                } else {
+                    resultIntent = lastStatusIntent;
+                }
+                resultIntent.putExtra(TorServiceConstants.EXTRA_STATUS, torStatus);
+                setResult(RESULT_OK, resultIntent);
+                finish();
+            } catch (RemoteException e) {
+                e.printStackTrace();
+            }
 		}
 		else if (action.equals(Intent.ACTION_VIEW))
 		{
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 46b55ae..7e057a0 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -762,6 +762,12 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         }
         Intent reply = new Intent(ACTION_STATUS);
         reply.putExtra(EXTRA_STATUS, mCurrentStatus);
+        reply.putExtra(EXTRA_SOCKS_PROXY, "socks://127.0.0.1:" + mPortSOCKS);
+        reply.putExtra(EXTRA_SOCKS_PROXY_HOST, "127.0.0.1");
+        reply.putExtra(EXTRA_SOCKS_PROXY_PORT, mPortSOCKS);
+        reply.putExtra(EXTRA_HTTP_PROXY, "http://127.0.0.1" + mPortHTTP);
+        reply.putExtra(EXTRA_HTTP_PROXY_HOST, "127.0.0.1");
+        reply.putExtra(EXTRA_HTTP_PROXY_PORT, mPortHTTP);
         reply.setPackage(packageName);
         sendBroadcast(reply);
     }
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index a0aed24..adaa674 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -84,6 +84,18 @@ public interface TorServiceConstants {
      * to, used in {@link #ACTION_START} {@link Intent}s sent to Orbot
      */
     public final static String EXTRA_PACKAGE_NAME = "org.torproject.android.intent.extra.PACKAGE_NAME";
+    /**
+     * The SOCKS proxy settings in URL form.
+     */
+    public final static String EXTRA_SOCKS_PROXY = "org.torproject.android.intent.extra.SOCKS_PROXY";
+    public final static String EXTRA_SOCKS_PROXY_HOST = "org.torproject.android.intent.extra.SOCKS_PROXY_HOST";
+    public final static String EXTRA_SOCKS_PROXY_PORT = "org.torproject.android.intent.extra.SOCKS_PROXY_PORT";
+    /**
+     * The HTTP proxy settings in URL form.
+     */
+    public final static String EXTRA_HTTP_PROXY = "org.torproject.android.intent.extra.HTTP_PROXY";
+    public final static String EXTRA_HTTP_PROXY_HOST = "org.torproject.android.intent.extra.HTTP_PROXY_HOST";
+    public final static String EXTRA_HTTP_PROXY_PORT = "org.torproject.android.intent.extra.HTTP_PROXY_PORT";
 
     public final static String LOCAL_ACTION_LOG = "log";
     public final static String LOCAL_ACTION_BANDWIDTH = "bandwidth";





More information about the tor-commits mailing list