fixes for tor setConf/control port
fixes hidden service support manages socks port conflicts
This commit is contained in:
parent
93451865f8
commit
da3c95575a
|
@ -257,4 +257,8 @@
|
||||||
<string name="network_connectivity_is_good_waking_tor_up_">Network connectivity is good. Waking Tor up...</string>
|
<string name="network_connectivity_is_good_waking_tor_up_">Network connectivity is good. Waking Tor up...</string>
|
||||||
<string name="updating_settings_in_tor_service">updating settings in Tor service</string>
|
<string name="updating_settings_in_tor_service">updating settings in Tor service</string>
|
||||||
|
|
||||||
|
<string name="pref_socks_title">Tor SOCKS</string>
|
||||||
|
<string name="pref_socks_summary">IP and Port that Tor offers its SOCKS proxy on (default: 9050)</string>
|
||||||
|
<string name="pref_socks_dialog">SOCKS Config (ip:port)</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -196,6 +196,14 @@ android:dialogTitle="@string/pref_proxy_password_dialog"
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="Debug">
|
<PreferenceCategory android:title="Debug">
|
||||||
|
|
||||||
|
<EditTextPreference android:key="pref_socks"
|
||||||
|
android:title="@string/pref_socks_title"
|
||||||
|
android:summary="@string/pref_socks_summary"
|
||||||
|
android:dialogTitle="@string/pref_socks_dialog"
|
||||||
|
android:defaultValue="auto"
|
||||||
|
/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="pref_enable_logging"
|
android:key="pref_enable_logging"
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
|
|
|
@ -56,4 +56,6 @@ public interface TorConstants {
|
||||||
|
|
||||||
public final static int MAX_LOG_LENGTH = 10000;
|
public final static int MAX_LOG_LENGTH = 10000;
|
||||||
|
|
||||||
|
public final static String PREF_SOCKS = "pref_socks";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
private TorControlConnection conn = null;
|
private TorControlConnection conn = null;
|
||||||
private Socket torConnSocket = null;
|
private Socket torConnSocket = null;
|
||||||
private int mLastProcessId = -1;
|
private int mLastProcessId = -1;
|
||||||
|
private int mSocksPort = 9050;
|
||||||
|
|
||||||
private static final int NOTIFY_ID = 1;
|
private static final int NOTIFY_ID = 1;
|
||||||
private static final int TRANSPROXY_NOTIFY_ID = 2;
|
private static final int TRANSPROXY_NOTIFY_ID = 2;
|
||||||
|
@ -81,8 +82,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 LinkedHashMap<String,String> configBuffer = null;
|
private ArrayList<String> configBuffer = null;
|
||||||
private LinkedHashMap<String,String> resetBuffer = null;
|
private ArrayList<String> resetBuffer = null;
|
||||||
|
|
||||||
// private String appHome;
|
// private String appHome;
|
||||||
private File appBinHome;
|
private File appBinHome;
|
||||||
|
@ -120,7 +121,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
|
|
||||||
public void logMessage(String msg)
|
public void logMessage(String msg)
|
||||||
{
|
{
|
||||||
if (ENABLE_DEBUG_LOG)
|
if (ENABLE_DEBUG_LOG)
|
||||||
|
|
||||||
{
|
{
|
||||||
Log.d(TAG,msg);
|
Log.d(TAG,msg);
|
||||||
sendCallbackLogMessage(msg);
|
sendCallbackLogMessage(msg);
|
||||||
|
@ -154,8 +156,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
|
|
||||||
sendCallbackLogMessage (getString(R.string.found_existing_tor_process));
|
sendCallbackLogMessage (getString(R.string.found_existing_tor_process));
|
||||||
|
|
||||||
processSettingsImpl();
|
|
||||||
|
|
||||||
String state = conn.getInfo("dormant");
|
String state = conn.getInfo("dormant");
|
||||||
if (state != null && Integer.parseInt(state) == 0)
|
if (state != null && Integer.parseInt(state) == 0)
|
||||||
currentStatus = STATUS_ON;
|
currentStatus = STATUS_ON;
|
||||||
|
@ -892,9 +892,9 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
catch (Exception ce)
|
catch (Exception ce)
|
||||||
{
|
{
|
||||||
conn = null;
|
conn = null;
|
||||||
logNotice( "Error connecting to Tor local control port: " + ce.getLocalizedMessage());
|
logNotice( "Error connecting to Tor local control port");
|
||||||
|
|
||||||
Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
|
//Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -990,7 +990,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
* Returns the port number that the SOCKS proxy is running on
|
* Returns the port number that the SOCKS proxy is running on
|
||||||
*/
|
*/
|
||||||
public int getSOCKSPort() throws RemoteException {
|
public int getSOCKSPort() throws RemoteException {
|
||||||
return TorServiceConstants.PORT_SOCKS;
|
return mSocksPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1318,9 +1318,10 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void processSettings ()
|
public void processSettings ()
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
Thread thread = new Thread()
|
Thread thread = new Thread()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1338,6 +1339,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
};
|
};
|
||||||
|
|
||||||
thread.start();
|
thread.start();
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1394,25 +1396,31 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final static String RESET_STRING = "=\"\"";
|
||||||
/**
|
/**
|
||||||
* Set configuration
|
* Set configuration
|
||||||
**/
|
**/
|
||||||
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 LinkedHashMap<String,String>();
|
configBuffer = new ArrayList<String>();
|
||||||
|
|
||||||
if (resetBuffer == null)
|
if (resetBuffer == null)
|
||||||
resetBuffer = new LinkedHashMap<String,String>();
|
resetBuffer = new ArrayList<String>();
|
||||||
|
|
||||||
if (value == null || value.length() == 0)
|
if (value == null || value.length() == 0)
|
||||||
{
|
{
|
||||||
resetBuffer.put(name,"");
|
resetBuffer.add(name + RESET_STRING);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
configBuffer.put(name,value);
|
StringBuffer sbConf = new StringBuffer();
|
||||||
|
sbConf.append(name);
|
||||||
|
sbConf.append(' ');
|
||||||
|
sbConf.append(value);
|
||||||
|
|
||||||
|
configBuffer.add(sbConf.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -1449,24 +1457,31 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
|
|
||||||
if (resetBuffer != null && resetBuffer.size() > 0)
|
if (resetBuffer != null && resetBuffer.size() > 0)
|
||||||
{
|
{
|
||||||
conn.resetConf(resetBuffer.keySet());
|
for (String value : configBuffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
logMessage("removing torrc conf: " + value);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.resetConf(resetBuffer);
|
||||||
resetBuffer = null;
|
resetBuffer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (configBuffer != null && configBuffer.size() > 0)
|
if (configBuffer != null && configBuffer.size() > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
for (String key : configBuffer.keySet())
|
for (String value : configBuffer)
|
||||||
{
|
{
|
||||||
|
|
||||||
String value = configBuffer.get(key);
|
logMessage("Setting torrc conf: " + value);
|
||||||
|
|
||||||
if (TorService.ENABLE_DEBUG_LOG)
|
|
||||||
logMessage("Setting conf: " + key + "=" + value);
|
}
|
||||||
|
|
||||||
conn.setConf(key, value);
|
conn.setConf(configBuffer);
|
||||||
|
|
||||||
}
|
|
||||||
configBuffer = null;
|
configBuffer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1657,7 +1672,9 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
|
|
||||||
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
||||||
|
|
||||||
enableSocks ("127.0.0.1",9050,false);
|
String socksConfig = prefs.getString(TorConstants.PREF_SOCKS, "auto");
|
||||||
|
|
||||||
|
enableSocks (socksConfig,false);
|
||||||
|
|
||||||
boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
|
boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
|
||||||
|
|
||||||
|
@ -1859,7 +1876,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
{
|
{
|
||||||
logNotice("hidden services are enabled");
|
logNotice("hidden services are enabled");
|
||||||
|
|
||||||
mBinder.updateConfiguration("HiddenServiceDir",appCacheHome.getAbsolutePath(), false);
|
|
||||||
//mBinder.updateConfiguration("RendPostPeriod", "600 seconds", false); //possible feature to investigate
|
//mBinder.updateConfiguration("RendPostPeriod", "600 seconds", false); //possible feature to investigate
|
||||||
|
|
||||||
String hsPorts = prefs.getString("pref_hs_ports","");
|
String hsPorts = prefs.getString("pref_hs_ports","");
|
||||||
|
@ -1872,15 +1889,19 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
hsPortConfig = st.nextToken();
|
hsPortConfig = st.nextToken().trim();
|
||||||
|
|
||||||
if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
|
if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
|
||||||
{
|
{
|
||||||
hsPortConfig = hsPortConfig + " 0.0.0.0:" + hsPortConfig;
|
hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
logMessage("Adding hidden service on port: " + hsPortConfig);
|
logMessage("Adding hidden service on port: " + hsPortConfig);
|
||||||
|
|
||||||
|
//String hsDirPath = new File(appCacheHome,"hs" + hsPortConfig).getAbsolutePath();
|
||||||
|
String hsDirPath = appCacheHome.getAbsolutePath();
|
||||||
|
|
||||||
|
mBinder.updateConfiguration("HiddenServiceDir",hsDirPath, false);
|
||||||
mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
|
mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
|
||||||
|
|
||||||
hsPort = Integer.parseInt(hsPortConfig.split(" ")[0]);
|
hsPort = Integer.parseInt(hsPortConfig.split(" ")[0]);
|
||||||
|
@ -1905,9 +1926,9 @@ public class TorService extends Service implements TorServiceConstants, TorConst
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableSocks (String ip, int port, boolean safeSocks) throws RemoteException
|
private void enableSocks (String socks, boolean safeSocks) throws RemoteException
|
||||||
{
|
{
|
||||||
mBinder.updateConfiguration("SOCKSPort", ip + ":" + port + "", false);
|
mBinder.updateConfiguration("SOCKSPort", socks, 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);
|
||||||
|
|
Loading…
Reference in New Issue