Android Open Source - lildebi Tor Service Utils






From Project

Back to project page lildebi.

License

The source code is released under:

GNU General Public License

If you think the Android project lildebi listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
/* See LICENSE for licensing information */
package org.torproject.android.service;
//from  w w w .jav  a 2  s .c o  m
import info.guardianproject.lildebi.LilDebi;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

import android.util.Log;

public class TorServiceUtils implements TorServiceConstants {

    /**
     * Check if we have root access
     * @return boolean true if we have root
     */
    public static boolean checkRootAccess() {


        StringBuilder log = new StringBuilder();

        try {

            // Run an empty script just to check root access
            String[] cmd = {"exit 0"};
            int exitCode = TorServiceUtils.doShellCommand(cmd, log, true, true);
            if (exitCode == 0) {

                return true;
            }

        } catch (IOException e) {
            //this means that there is no root to be had (normally) so we won't log anything
            Log.e(LilDebi.TAG, "Error checking for root access", e);

        }
        catch (Exception e) {
            Log.e(LilDebi.TAG, "Error checking for root access", e);
            //this means that there is no root to be had (normally)
        }

        Log.i(LilDebi.TAG, "Could not acquire root permissions");
        return false;
    }



    public static int findProcessId(String command)
    {
        int procId = -1;

        try
        {
            procId = findProcessIdWithPidOf(command);

            if (procId == -1)
                procId = findProcessIdWithPS(command);
        }
        catch (Exception e)
        {
            try
            {
                procId = findProcessIdWithPS(command);
            }
            catch (Exception e2)
            {
                Log.w(TAG,"Unable to get proc id for: " + command,e2);
            }
        }

        return procId;
    }

    //use 'pidof' command
    public static int findProcessIdWithPidOf(String command) throws Exception
    {

        int procId = -1;

        Runtime r = Runtime.getRuntime();

        Process procPs = null;

        String baseName = new File(command).getName();
        //fix contributed my mikos on 2010.12.10
        procPs = r.exec(new String[] {SHELL_CMD_PIDOF, baseName});
        //procPs = r.exec(SHELL_CMD_PIDOF);

        BufferedReader reader = new BufferedReader(new InputStreamReader(procPs.getInputStream()));
        String line = null;

        while ((line = reader.readLine())!=null)
        {

            try
            {
                //this line should just be the process id
                procId = Integer.parseInt(line.trim());
                break;
            }
            catch (NumberFormatException e)
            {
                Log.e(LilDebi.TAG, "unable to parse process pid: " + line, e);
            }
        }


        return procId;

    }

    //use 'ps' command
    public static int findProcessIdWithPS(String command) throws Exception
    {

        int procId = -1;

        Runtime r = Runtime.getRuntime();

        Process procPs = null;

        procPs = r.exec(SHELL_CMD_PS);

        BufferedReader reader = new BufferedReader(new InputStreamReader(procPs.getInputStream()));
        String line = null;

        while ((line = reader.readLine())!=null)
        {
            if (line.indexOf(' ' + command)!=-1)
            {

                StringTokenizer st = new StringTokenizer(line," ");
                st.nextToken(); //proc owner

                procId = Integer.parseInt(st.nextToken().trim());

                break;
            }
        }



        return procId;

    }


    public static int doShellCommand(String[] cmds, StringBuilder log, boolean runAsRoot, boolean waitFor) throws Exception
    {
        Log.i(LilDebi.TAG, "executing shell cmds: " + cmds[0] + "; runAsRoot=" + runAsRoot);


        Process proc = null;
        int exitCode = -1;


            if (runAsRoot)
                proc = Runtime.getRuntime().exec("su");
            else
                proc = Runtime.getRuntime().exec("sh");


            OutputStreamWriter out = new OutputStreamWriter(proc.getOutputStream());

            for (int i = 0; i < cmds.length; i++)
            {
                out.write(cmds[i]);
                out.write("\n");
            }

            out.flush();
            out.write("exit\n");
            out.flush();

            if (waitFor)
            {

                final char buf[] = new char[10];

                // Consume the "stdout"
                InputStreamReader reader = new InputStreamReader(proc.getInputStream());
                int read=0;
                while ((read=reader.read(buf)) != -1) {
                    if (log != null) log.append(buf, 0, read);
                }

                // Consume the "stderr"
                reader = new InputStreamReader(proc.getErrorStream());
                read=0;
                while ((read=reader.read(buf)) != -1) {
                    if (log != null) log.append(buf, 0, read);
                }

                exitCode = proc.waitFor();
                log.append("process exit code: ");
                log.append(exitCode);
                log.append("\n");

                Log.i(LilDebi.TAG, "command process exit value: " + exitCode);
            }


        return exitCode;

    }
}




Java Source Code List

info.guardianproject.lildebi.BootCompletedReceiver.java
info.guardianproject.lildebi.InstallActivity.java
info.guardianproject.lildebi.InstallLogViewActivity.java
info.guardianproject.lildebi.InstallService.java
info.guardianproject.lildebi.LilDebiAction.java
info.guardianproject.lildebi.LilDebiApplication.java
info.guardianproject.lildebi.LilDebi.java
info.guardianproject.lildebi.MediaEjectReceiver.java
info.guardianproject.lildebi.MediaMountedReceiver.java
info.guardianproject.lildebi.MediaUnmountedReceiver.java
info.guardianproject.lildebi.NativeHelper.java
info.guardianproject.lildebi.PreferencesActivity.java
info.guardianproject.lildebi.SelectArch.java
info.guardianproject.lildebi.SelectMirror.java
info.guardianproject.lildebi.SelectRelease.java
info.guardianproject.lildebi.StreamDisplay.java
info.guardianproject.lildebi.StreamThread.java
info.guardianproject.lildebi.UnsupportedDeviceActivity.java
org.torproject.android.service.TorServiceConstants.java
org.torproject.android.service.TorServiceUtils.java