Skip to content

Commit

Permalink
Merge pull request #84 from guardianproject/proxy_hardcoding_fix
Browse files Browse the repository at this point in the history
Removes SOCKS/HTTP Proxy Hardcoding
  • Loading branch information
n8fr8 authored Jul 25, 2022
2 parents 51c50e5 + cd09074 commit 4ed04d4
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@
import android.widget.TextView;
import android.widget.Toast;

import net.freehaven.tor.control.TorControlConnection;

import org.torproject.jni.TorService;

public class MainActivity extends Activity {
Expand Down Expand Up @@ -65,9 +63,8 @@ public void onServiceConnected(ComponentName name, IBinder service) {

//moved torService to a local variable, since we only need it once
TorService torService = ((TorService.LocalBinder) service).getService();
TorControlConnection conn = torService.getTorControlConnection();

while ((conn = torService.getTorControlConnection())==null)
while (torService.getTorControlConnection() ==null)
{
try {
Thread.sleep(500);
Expand All @@ -76,10 +73,7 @@ public void onServiceConnected(ComponentName name, IBinder service) {
}
}

if (conn != null)
{
Toast.makeText(MainActivity.this, "Got Tor control connection", Toast.LENGTH_LONG).show();
}
Toast.makeText(MainActivity.this, "Got Tor control connection", Toast.LENGTH_LONG).show();
}

@Override
Expand Down
65 changes: 44 additions & 21 deletions tor-android-binary/src/main/java/org/torproject/jni/TorService.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
Expand All @@ -44,16 +47,19 @@ public class TorService extends Service {

public static final String TAG = "TorService";

@SuppressWarnings("unused")
public static final String VERSION_NAME = org.torproject.jni.BuildConfig.VERSION_NAME;

/**
* Request to transparently start Tor services.
*/
@SuppressWarnings("unused")
public static final String ACTION_START = "org.torproject.android.intent.action.START";

/**
* Internal request to stop Tor services.
*/
@SuppressWarnings("unused")
private static final String ACTION_STOP = "org.torproject.android.intent.action.STOP";

/**
Expand Down Expand Up @@ -81,6 +87,7 @@ public class TorService extends Service {
* {@code TorService} to send redundant replies to that single app, rather than
* broadcasting to all apps after every request.
*/
@SuppressWarnings("unused")
public final static String EXTRA_PACKAGE_NAME = "org.torproject.android.intent.extra.PACKAGE_NAME";

/**
Expand Down Expand Up @@ -120,7 +127,7 @@ public static File getDefaultsTorrc(Context context) {
}

public static String getBroadcastPackageName(Context context) {
if (broadcastPackageName == UNINITIALIZED) {
if (broadcastPackageName.equals(UNINITIALIZED)) {
broadcastPackageName = context.getPackageName();
}
return broadcastPackageName;
Expand Down Expand Up @@ -189,7 +196,9 @@ private static File getAppTorServiceDataDir(Context context) {
public static int httpTunnelPort = -1;

// Store the opaque reference as a long (pointer) for the native code
@SuppressWarnings({"FieldMayBeFinal", "unused"})
private long torConfiguration = -1;
@SuppressWarnings({"FieldMayBeFinal"," unused"})
private int torControlFd = -1;

private volatile TorControlConnection torControlConnection;
Expand Down Expand Up @@ -297,7 +306,7 @@ public void onEvent(int event, @Nullable String name) {
torControlConnection.launchThread(true);
torControlConnection.authenticate(new byte[0]);
torControlConnection.addRawEventListener(startedEventListener);
torControlConnection.setEvents(Arrays.asList(TorControlCommands.EVENT_CIRCUIT_STATUS));
torControlConnection.setEvents(Collections.singletonList(TorControlCommands.EVENT_CIRCUIT_STATUS));

socksPort = getPortFromGetInfo("net/listeners/socks");
httpTunnelPort = getPortFromGetInfo("net/listeners/httptunnel");
Expand All @@ -318,16 +327,9 @@ public void onEvent(int event, @Nullable String name) {
public void run() {
final Context context = getApplicationContext();
try {
String socksPort = "auto";
if (isPortAvailable(9050)) {
socksPort = Integer.toString(9050);
}
String httpTunnelPort = "auto";
if (isPortAvailable(8118)) {
httpTunnelPort = Integer.toString(8118);
}

createTorConfiguration();
setDefaultProxyPorts();

ArrayList<String> lines = new ArrayList<>(Arrays.asList("tor", "--verify-config", // must always be here
"--RunAsDaemon", "0",
"-f", getTorrc(context).getAbsolutePath(),
Expand All @@ -338,9 +340,6 @@ public void run() {
"--DataDirectory", getAppTorServiceDataDir(context).getAbsolutePath(),
"--ControlSocket", getControlSocket(context).getAbsolutePath(),
"--CookieAuthentication", "0",
"--SOCKSPort", socksPort,
"--HTTPTunnelPort", httpTunnelPort,

// can be moved to ControlPort messages
"--LogMessageDomains", "1",
"--TruncateLogFile", "1"
Expand Down Expand Up @@ -384,8 +383,32 @@ public void run() {
}
};

private void setDefaultProxyPorts() {
String socksPort = "auto";
if (isPortAvailable(9050)) {
socksPort = Integer.toString(9050);
}
String httpTunnelPort = "auto";
if (isPortAvailable(8118)) {
httpTunnelPort = Integer.toString(8118);
}

String defaults = "SOCKSPort " + socksPort;
defaults += "\nHTTPTunnelPort " + httpTunnelPort + "\n";

try {
PrintWriter pw = new PrintWriter(new FileWriter(getDefaultsTorrc(this), false));
pw.append(defaults);
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}

private int getPortFromGetInfo(String key) {
final String value = getInfo(key);
if (value.trim().isEmpty()) return 0; // port is disabled
return Integer.parseInt(value.substring(value.lastIndexOf(':') + 1, value.length() - 1));
}

Expand Down Expand Up @@ -424,7 +447,7 @@ public void onDestroy() {
Log.i(TAG, "Releasing lock");
runLock.unlock();
}
shutdownTor(TorControlCommands.SIGNAL_SHUTDOWN);
shutdownTor();
broadcastStatus(TorService.this, STATUS_OFF);
}

Expand Down Expand Up @@ -455,10 +478,10 @@ public String getInfo(String key) {
*
* @see TorControlConnection#shutdownTor(String)
*/
private void shutdownTor(String signal) {
private void shutdownTor() {
try {
if (torControlConnection != null) {
torControlConnection.shutdownTor(signal);
torControlConnection.shutdownTor(TorControlCommands.SIGNAL_SHUTDOWN);
}
} catch (IOException e) {
e.printStackTrace();
Expand All @@ -479,7 +502,7 @@ public TorControlConnection getTorControlConnection() {
* Broadcasts the current status to any apps following the status of TorService.
*/
static void sendBroadcastStatusIntent(Context context) {
Intent intent = getBroadcastIntent(context, ACTION_STATUS, currentStatus);
Intent intent = getBroadcastIntent(context, currentStatus);
context.sendBroadcast(intent);
}

Expand All @@ -489,7 +512,7 @@ static void sendBroadcastStatusIntent(Context context) {
*/
static void broadcastStatus(Context context, String currentStatus) {
TorService.currentStatus = currentStatus;
Intent intent = getBroadcastIntent(context, ACTION_STATUS, currentStatus);
Intent intent = getBroadcastIntent(context, currentStatus);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
context.sendBroadcast(intent);
}
Expand All @@ -509,8 +532,8 @@ static void broadcastError(Context context, Throwable e) {
context.sendBroadcast(intent);
}

private static Intent getBroadcastIntent(Context context, String action, String currentStatus) {
Intent intent = new Intent(action);
private static Intent getBroadcastIntent(Context context, String currentStatus) {
Intent intent = new Intent(TorService.ACTION_STATUS);
intent.putExtra(EXTRA_SERVICE_PACKAGE_NAME, context.getPackageName());
intent.setPackage(getBroadcastPackageName(context));
intent.putExtra(EXTRA_STATUS, currentStatus);
Expand Down

0 comments on commit 4ed04d4

Please sign in to comment.