continue to migrate service and VPN code
This commit is contained in:
parent
d5f2c063b5
commit
1db567698d
|
@ -42,6 +42,8 @@ import org.torproject.android.service.util.Prefs;
|
|||
import org.torproject.android.service.util.TorResourceInstaller;
|
||||
import org.torproject.android.service.util.TorServiceUtils;
|
||||
import org.torproject.android.service.util.Utils;
|
||||
import org.torproject.android.service.vpn.OrbotVpnManager;
|
||||
import org.torproject.android.service.vpn.TorVpnService;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
@ -314,7 +316,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
|||
if (action.equals(ACTION_START)) {
|
||||
replyWithStatus(mIntent);
|
||||
startTor();
|
||||
// stopTor() is called when the Service is destroyed
|
||||
}
|
||||
else if (action.equals(ACTION_STATUS)) {
|
||||
replyWithStatus(mIntent);
|
||||
|
@ -328,7 +329,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
|||
} else if (action.equals(CMD_UPDATE_TRANS_PROXY)) {
|
||||
processTransparentProxying();
|
||||
} else if (action.equals(CMD_VPN)) {
|
||||
enableVpnProxy();
|
||||
startVPNService();
|
||||
} else if (action.equals(CMD_VPN_CLEAR)) {
|
||||
clearVpnProxy();
|
||||
} else if (action.equals(CMD_SET_EXIT)) {
|
||||
|
@ -745,7 +746,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
|||
if (Prefs.bridgesEnabled())
|
||||
if (Prefs.useVpn() && !mIsLollipop)
|
||||
{
|
||||
//TODO customEnv.add("TOR_PT_PROXY=socks5://" + OrbotVpnManager.sSocksProxyLocalhost + ":" + OrbotVpnManager.sSocksProxyServerPort);
|
||||
customEnv.add("TOR_PT_PROXY=socks5://" + OrbotVpnManager.sSocksProxyLocalhost + ":" + OrbotVpnManager.sSocksProxyServerPort);
|
||||
}
|
||||
|
||||
// String baseDirectory = fileTor.getParent();
|
||||
|
@ -1179,23 +1180,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
|||
}
|
||||
|
||||
|
||||
@TargetApi(14)
|
||||
public void clearVpnProxy ()
|
||||
{
|
||||
debug ("clearing VPN Proxy");
|
||||
Prefs.putUseVpn(false);
|
||||
processTransparentProxying();
|
||||
|
||||
/**
|
||||
if (mVpnManager != null)
|
||||
{
|
||||
Intent intent = new Intent();
|
||||
intent.setAction("stop");
|
||||
mVpnManager.handleIntent(new Builder(), intent);
|
||||
mVpnManager = null;
|
||||
} **/
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -1565,7 +1549,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
|||
if (!mIsLollipop)
|
||||
{
|
||||
String proxyType = "socks5";
|
||||
//TODO VPN extraLines.append(proxyType + "Proxy" + ' ' + OrbotVpnManager.sSocksProxyLocalhost + ':' + OrbotVpnManager.sSocksProxyServerPort).append('\n');
|
||||
extraLines.append(proxyType + "Proxy" + ' ' + OrbotVpnManager.sSocksProxyLocalhost + ':' + OrbotVpnManager.sSocksProxyServerPort).append('\n');
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -1978,4 +1962,26 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
|||
return NOTIFY_ID;
|
||||
}
|
||||
|
||||
private void startVPNService ()
|
||||
{
|
||||
Intent intentVpn = new Intent(this,TorVpnService.class);
|
||||
intentVpn.setAction("start");
|
||||
intentVpn.putExtra("torSocks",mPortSOCKS);
|
||||
startService(intentVpn);
|
||||
}
|
||||
|
||||
|
||||
@TargetApi(14)
|
||||
public void clearVpnProxy ()
|
||||
{
|
||||
debug ("clearing VPN Proxy");
|
||||
Prefs.putUseVpn(false);
|
||||
processTransparentProxying();
|
||||
|
||||
Intent intentVpn = new Intent(this,TorVpnService.class);
|
||||
intentVpn.setAction("stop");
|
||||
startService(intentVpn);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,21 @@
|
|||
package org.torproject.android.service.transproxy;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
import org.torproject.android.service.OrbotConstants;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
public class TorifiedApp implements Comparable {
|
||||
|
||||
private boolean enabled;
|
||||
|
@ -136,4 +150,112 @@ public class TorifiedApp implements Comparable {
|
|||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
public static ArrayList<TorifiedApp> getApps (Context context, SharedPreferences prefs)
|
||||
{
|
||||
|
||||
String tordAppString = prefs.getString(OrbotConstants.PREFS_KEY_TORIFIED, "");
|
||||
String[] tordApps;
|
||||
|
||||
StringTokenizer st = new StringTokenizer(tordAppString,"|");
|
||||
tordApps = new String[st.countTokens()];
|
||||
int tordIdx = 0;
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
tordApps[tordIdx++] = st.nextToken();
|
||||
}
|
||||
|
||||
Arrays.sort(tordApps);
|
||||
|
||||
//else load the apps up
|
||||
PackageManager pMgr = context.getPackageManager();
|
||||
|
||||
List<ApplicationInfo> lAppInfo = pMgr.getInstalledApplications(0);
|
||||
|
||||
Iterator<ApplicationInfo> itAppInfo = lAppInfo.iterator();
|
||||
|
||||
ArrayList<TorifiedApp> apps = new ArrayList<TorifiedApp>();
|
||||
|
||||
ApplicationInfo aInfo = null;
|
||||
|
||||
int appIdx = 0;
|
||||
TorifiedApp app = null;
|
||||
|
||||
while (itAppInfo.hasNext())
|
||||
{
|
||||
aInfo = itAppInfo.next();
|
||||
|
||||
app = new TorifiedApp();
|
||||
|
||||
try {
|
||||
PackageInfo pInfo = pMgr.getPackageInfo(aInfo.packageName, PackageManager.GET_PERMISSIONS);
|
||||
|
||||
if (pInfo != null && pInfo.requestedPermissions != null)
|
||||
{
|
||||
for (String permInfo:pInfo.requestedPermissions)
|
||||
{
|
||||
if (permInfo.equals("android.permission.INTERNET"))
|
||||
{
|
||||
app.setUsesInternet(true);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if ((aInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
|
||||
{
|
||||
//System app
|
||||
app.setUsesInternet(true);
|
||||
}
|
||||
|
||||
|
||||
if (!app.usesInternet())
|
||||
continue;
|
||||
else
|
||||
{
|
||||
apps.add(app);
|
||||
}
|
||||
|
||||
|
||||
app.setEnabled(aInfo.enabled);
|
||||
app.setUid(aInfo.uid);
|
||||
app.setUsername(pMgr.getNameForUid(app.getUid()));
|
||||
app.setProcname(aInfo.processName);
|
||||
app.setPackageName(aInfo.packageName);
|
||||
|
||||
try
|
||||
{
|
||||
app.setName(pMgr.getApplicationLabel(aInfo).toString());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
app.setName(aInfo.packageName);
|
||||
}
|
||||
|
||||
|
||||
//app.setIcon(pMgr.getApplicationIcon(aInfo));
|
||||
|
||||
// check if this application is allowed
|
||||
if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) {
|
||||
app.setTorified(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
app.setTorified(false);
|
||||
}
|
||||
|
||||
appIdx++;
|
||||
}
|
||||
|
||||
Collections.sort(apps);
|
||||
|
||||
return apps;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,11 +35,10 @@ import android.widget.Toast;
|
|||
import com.runjva.sourceforge.jsocks.protocol.ProxyServer;
|
||||
import com.runjva.sourceforge.jsocks.server.ServerAuthenticatorNone;
|
||||
|
||||
import org.torproject.android.R;
|
||||
import org.torproject.android.service.R;
|
||||
import org.torproject.android.service.TorServiceConstants;
|
||||
import org.torproject.android.service.transproxy.TorifiedApp;
|
||||
import org.torproject.android.service.util.TorServiceUtils;
|
||||
import org.torproject.android.ui.AppManager;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
|
@ -67,7 +66,6 @@ public class OrbotVpnManager implements Handler.Callback {
|
|||
public static String sSocksProxyLocalhost = null;
|
||||
private ProxyServer mSocksProxyServer;
|
||||
|
||||
|
||||
private final static int VPN_MTU = 1500;
|
||||
|
||||
private final static boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
|
||||
|
@ -359,7 +357,7 @@ public class OrbotVpnManager implements Handler.Callback {
|
|||
private void doLollipopAppRouting (Builder builder) throws NameNotFoundException
|
||||
{
|
||||
|
||||
ArrayList<TorifiedApp> apps = AppManager.getApps(mService, TorServiceUtils.getSharedPrefs(mService.getApplicationContext()));
|
||||
ArrayList<TorifiedApp> apps = TorifiedApp.getApps(mService, TorServiceUtils.getSharedPrefs(mService.getApplicationContext()));
|
||||
|
||||
boolean perAppEnabled = false;
|
||||
|
||||
|
|
|
@ -19,44 +19,24 @@ import org.torproject.android.service.util.Prefs;
|
|||
public class TorVpnService extends VpnService {
|
||||
|
||||
|
||||
OrbotVpnManager mVpnManager;
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
mVpnManager = new OrbotVpnManager(this);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Service#onStart(android.content.Intent, int)
|
||||
*/
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
|
||||
|
||||
|
||||
if (!TextUtils.isEmpty(intent.getAction()))
|
||||
{
|
||||
if (intent.getAction().equals("start"))
|
||||
enableVpnProxy();;
|
||||
}
|
||||
mVpnManager.handleIntent(new Builder(),intent);
|
||||
|
||||
return Service.START_STICKY;
|
||||
}
|
||||
|
||||
|
||||
public void enableVpnProxy () {
|
||||
// debug ("enabling VPN Proxy");
|
||||
|
||||
OrbotVpnManager vpnManager = new OrbotVpnManager(this);
|
||||
|
||||
int portSocks = 9050;
|
||||
|
||||
Prefs.putUseVpn(true);
|
||||
// processTransparentProxying();
|
||||
|
||||
//updateConfiguration("DNSPort",TOR_VPN_DNS_LISTEN_ADDRESS + ":" + TorServiceConstants.TOR_DNS_PORT_DEFAULT,false);
|
||||
|
||||
// if (mVpnManager == null)
|
||||
// mVpnManager = new OrbotVpnManager (this);
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setAction("start");
|
||||
intent.putExtra("torSocks", portSocks);
|
||||
|
||||
vpnManager.handleIntent(new Builder(),intent);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue