ensure setConft on control port works consistently

This commit is contained in:
Nathan Freitas 2014-05-02 00:39:37 -04:00
parent b056e7f6cd
commit b9f14b318b
1 changed files with 47 additions and 18 deletions

View File

@ -18,6 +18,7 @@ import java.io.PrintWriter;
import java.net.Socket; import java.net.Socket;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.StringTokenizer; import java.util.StringTokenizer;
@ -75,8 +76,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
private static final int MAX_START_TRIES = 3; private static final int MAX_START_TRIES = 3;
private ArrayList<String> configBuffer = null; private LinkedHashMap<String,String> configBuffer = null;
private ArrayList<String> resetBuffer = null; private LinkedHashMap<String,String> resetBuffer = null;
// private String appHome; // private String appHome;
private File appBinHome; private File appBinHome;
@ -144,7 +145,11 @@ public class TorService extends Service implements TorServiceConstants, TorConst
processSettingsImpl(); processSettingsImpl();
currentStatus = STATUS_ON; String state = conn.getInfo("dormant");
if (state != null && Integer.parseInt(state) == 0)
currentStatus = STATUS_ON;
else
currentStatus = STATUS_CONNECTING;
return true; return true;
} }
@ -1188,7 +1193,24 @@ public class TorService extends Service implements TorServiceConstants, TorConst
logNotice(sb.toString()); logNotice(sb.toString());
} }
/**
if (currentStatus != STATUS_ON)
{
try {
String state;
state = conn.getInfo("dormant");
if (state != null && Integer.parseInt(state) == 0)
currentStatus = STATUS_ON;
else
currentStatus = STATUS_CONNECTING;
} catch (IOException e) {
logException("Error getting state from Tor control port",e);
}
}*/
} }
@ -1349,19 +1371,19 @@ public class TorService extends Service implements TorServiceConstants, TorConst
public boolean updateConfiguration (String name, String value, boolean saveToDisk) public boolean updateConfiguration (String name, String value, boolean saveToDisk)
{ {
if (configBuffer == null) if (configBuffer == null)
configBuffer = new ArrayList<String>(); configBuffer = new LinkedHashMap<String,String>();
if (resetBuffer == null) if (resetBuffer == null)
resetBuffer = new ArrayList<String>(); resetBuffer = new LinkedHashMap<String,String>();
if (value == null || value.length() == 0) if (value == null || value.length() == 0)
{ {
resetBuffer.add(name); resetBuffer.put(name,"");
} }
else else
{ {
configBuffer.add(name + ' ' + value); configBuffer.put(name,value);
} }
return false; return false;
@ -1398,14 +1420,24 @@ public class TorService extends Service implements TorServiceConstants, TorConst
if (resetBuffer != null && resetBuffer.size() > 0) if (resetBuffer != null && resetBuffer.size() > 0)
{ {
conn.resetConf(resetBuffer); conn.resetConf(resetBuffer.keySet());
resetBuffer = null; resetBuffer = null;
} }
if (configBuffer != null && configBuffer.size() > 0) if (configBuffer != null && configBuffer.size() > 0)
{ {
conn.setConf(configBuffer); for (String key : configBuffer.keySet())
{
String value = configBuffer.get(key);
if (TorService.ENABLE_DEBUG_LOG)
logMessage("Setting conf: " + key + "=" + value);
conn.setConf(key, value);
}
configBuffer = null; configBuffer = null;
} }
@ -1420,11 +1452,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
{ {
logException("Unable to update Tor configuration: " + ioe.getMessage(),ioe); logException("Unable to update Tor configuration: " + ioe.getMessage(),ioe);
if (configBuffer != null)
for (String config : configBuffer)
{
logNotice("Error applying config: " + config);
}
} }
@ -1701,8 +1728,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
return false; return false;
} }
mBinder.updateConfiguration("UseBridges", "1", false);
String bridgeDelim = "\n"; String bridgeDelim = "\n";
if (bridgeList.indexOf(",") != -1) if (bridgeList.indexOf(",") != -1)
@ -1724,6 +1749,11 @@ public class TorService extends Service implements TorServiceConstants, TorConst
} }
mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false); mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
mBinder.updateConfiguration("UseBridges", "1", false);
} }
else else
{ {
@ -1835,8 +1865,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
private void enableSocks (String ip, int port, boolean safeSocks) throws RemoteException private void enableSocks (String ip, int port, boolean safeSocks) throws RemoteException
{ {
mBinder.updateConfiguration("SOCKSPort", port + "", false); mBinder.updateConfiguration("SOCKSPort", ip + ":" + port + "", false);
mBinder.updateConfiguration("SOCKSListenAddress", ip, false);
mBinder.updateConfiguration("SafeSocks", safeSocks ? "1" : "0", false); mBinder.updateConfiguration("SafeSocks", safeSocks ? "1" : "0", false);
mBinder.updateConfiguration("TestSocks", "1", false); mBinder.updateConfiguration("TestSocks", "1", false);
mBinder.updateConfiguration("WarnUnsafeSocks", "1", false); mBinder.updateConfiguration("WarnUnsafeSocks", "1", false);