[tor-commits] [orbot/master] strictly target local broadcasts
n8fr8 at torproject.org
n8fr8 at torproject.org
Thu Jun 25 14:59:59 UTC 2015
commit 90b731cc8d6c7935cf3ac95144e642b0b6eedc71
Author: Hans-Christoph Steiner <hans at eds.org>
Date: Tue Jun 9 15:10:52 2015 -0400
strictly target local broadcasts
This sets an action for each kind of local broadcast, and uses the action
to choose how to handle it. Before, it was a mix of the action and which
extras the Intent included.
---
src/org/torproject/android/OrbotMainActivity.java | 79 ++++++++++----------
src/org/torproject/android/service/TorService.java | 26 ++-----
.../android/service/TorServiceConstants.java | 1 +
3 files changed, 48 insertions(+), 58 deletions(-)
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index a73e0db..c540163 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -107,11 +107,13 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
/* receive the internal status broadcasts, which are separate from the public
* status broadcasts to prevent other apps from sending fake/wrong status
* info to this app */
- LocalBroadcastManager.getInstance(this).registerReceiver(mLocalBroadcastReceiver,
- new IntentFilter(TorServiceConstants.LOCAL_ACTION_STATUS));
-
- LocalBroadcastManager.getInstance(this).registerReceiver(mLocalBroadcastReceiver,
- new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
+ LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_STATUS));
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_BANDWIDTH));
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
}
@@ -127,43 +129,44 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
stopService(torService);
}
- // Our handler for received Intents. This will be called whenever an Intent
- // with an action named "custom-event-name" is broadcasted.
+ /**
+ * The state and log info from {@link TorService} are sent to the UI here in
+ * the form of a local broadcast. Regular broadcasts can be sent by any app,
+ * so local ones are used here so other apps cannot interfere with Orbot's
+ * operation.
+ */
private BroadcastReceiver mLocalBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- // Get extra data included in the Intent
-
- if (intent.hasExtra(TorServiceConstants.LOCAL_EXTRA_LOG))
- {
- String log = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_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 = mStatusUpdateHandler.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);
- mStatusUpdateHandler.sendMessage(msg);
-
- }
- else if (intent.hasExtra(TorServiceConstants.EXTRA_STATUS))
- {
- torStatus = intent.getStringExtra(TorServiceConstants.EXTRA_STATUS);
- updateStatus("");
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action == null)
+ return;
+
+ if (action.equals(TorServiceConstants.LOCAL_ACTION_LOG)) {
+ String log = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
+ updateStatus(log);
+
+ } else if (action.equals(TorServiceConstants.LOCAL_ACTION_BANDWIDTH)) {
+ 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 = mStatusUpdateHandler
+ .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);
+ mStatusUpdateHandler.sendMessage(msg);
+
+ } else if (action.equals(TorServiceConstants.LOCAL_ACTION_STATUS)) {
+ torStatus = intent.getStringExtra(TorServiceConstants.EXTRA_STATUS);
+ updateStatus("");
+ }
}
-
- }
};
-
private void doLayout ()
{
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 516b56e..089e2c6 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -1441,7 +1441,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
lastWritten = written;
lastRead = read;
- sendCallbackStatusMessage(lastWritten, lastRead, mTotalTrafficWritten, mTotalTrafficRead);
+ sendCallbackBandwidth(lastWritten, lastRead, mTotalTrafficWritten, mTotalTrafficRead);
}
private String formatCount(long count) {
@@ -1841,39 +1841,25 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
catch (Exception ioe)
{
-
logException("Unable to update Tor configuration: " + ioe.getMessage(),ioe);
-
}
return false;
-
}
-
-
-
-
- private void sendCallbackStatusMessage (long upload, long download, long written, long read)
- {
-
-
- Intent intent = new Intent(LOCAL_ACTION_LOG);
- // You can also include some extra data.
+ private void sendCallbackBandwidth(long upload, long download, long written, long read) {
+ Intent intent = new Intent(LOCAL_ACTION_BANDWIDTH);
+
intent.putExtra("up",upload);
intent.putExtra("down",download);
intent.putExtra("written",written);
intent.putExtra("read",read);
-
- LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
+ LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
-
- // private ArrayList<String> mLogBuffer = new ArrayList<String>();
-
+
private void sendCallbackLogMessage (String logMessage)
{
-
Intent intent = new Intent(LOCAL_ACTION_LOG);
// You can also include some extra data.
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index 745d74f..a79b7d7 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -71,6 +71,7 @@ public interface TorServiceConstants {
public final static String EXTRA_STATUS = "org.torproject.android.intent.extra.STATUS";
public final static String LOCAL_ACTION_STATUS = "status";
public final static String LOCAL_ACTION_LOG = "log";
+ public final static String LOCAL_ACTION_BANDWIDTH = "bandwidth";
public final static String LOCAL_EXTRA_LOG = "log";
public final static String STATUS_OFF = "OFF";
More information about the tor-commits
mailing list