[tor-commits] r24756: {projects} Release 1.0.5 (in projects/android/tags: . 0.2.2.14-alpha-orbot-1.0.4/Orbot 0.2.2.25-alpha-orbot-1.0.5 0.2.2.25-alpha-orbot-1.0.5/Orbot 0.2.2.25-alpha-orbot-1.0.5/Orbot/libs 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/drawable 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv 0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh 0 .2.2.25-alpha-orbot-1.0.5/Orbot/res/xml 0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android 0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service 0.2.2.25-alpha-orbot-1.0.5-RC1 0.2.2.25-alpha-orbot-1.0.5-RC1/res/drawable 0.2.2.25-alpha-orbot-1.0.5-RC1/res/layout 0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ar 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ca 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-de 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-es 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-fa 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-mk 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nb 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nl 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pl 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pt 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ru 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-sv 0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-zh 0.2.2.25-alpha-orbot-1.0.5-RC1/src/org /torproject/android 0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service)

Nathan Freitas nathan at freitas.net
Mon May 16 03:55:03 UTC 2011


Author: n8fr8
Date: 2011-05-16 03:55:02 +0000 (Mon, 16 May 2011)
New Revision: 24756

Added:
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/drawable/torerror.png
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/libs/jtorctrl.jar
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/drawable/torerror.png
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java
Removed:
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java
Modified:
   projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/AndroidManifest.xml
   projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/build.xml
   projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/default.properties
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.debug
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.production
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/layout/layout_about.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ar/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ca/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-de/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-es/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-fa/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-mk/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nb/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pl/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pt/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ru/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-sv/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-zh/strings.xml
   projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values/strings.xml
Log:
Release 1.0.5


Modified: projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/AndroidManifest.xml
===================================================================
--- projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/AndroidManifest.xml	2011-05-16 03:52:10 UTC (rev 24755)
+++ projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.torproject.android" android:versionName="1.0.4" android:versionCode="11">
+      package="org.torproject.android" android:versionName="1.0.4.1" android:versionCode="12">
        
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

Modified: projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/build.xml
===================================================================
--- projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/build.xml	2011-05-16 03:52:10 UTC (rev 24755)
+++ projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/build.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,66 +1,78 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project name="Orbot">
+<project name="Orbot" default="help">
 
-    <!-- The local.properties file is created and updated by the 'android' tool.
-         It contains the path to the SDK. It should *NOT* be checked in in Version
-         Control Systems. -->
+<!-- The local.properties file is created and updated by the 'android'
+     tool.
+     It contains the path to the SDK. It should *NOT* be checked into
+     Version Control Systems. -->
     <property file="local.properties" />
 
     <!-- The build.properties file can be created by you and is never touched
-         by the 'android' tool. This is the place to change some of the default property values
-         used by the Ant rules.
+         by the 'android' tool. This is the place to change some of the
+         default property values used by the Ant rules.
          Here are some properties you may want to change/update:
 
-         application.package
-             the name of your application package as defined in the manifest. Used by the
-             'uninstall' rule.
          source.dir
-             the name of the source directory. Default is 'src'.
+             The name of the source directory. Default is 'src'.
          out.dir
-             the name of the output directory. Default is 'bin'.
+             The name of the output directory. Default is 'bin'.
 
-         Properties related to the SDK location or the project target should be updated
-          using the 'android' tool with the 'update' action.
+         Properties related to the SDK location or the project target should
+         be updated using the 'android' tool with the 'update' action.
 
-         This file is an integral part of the build system for your application and
-         should be checked in in Version Control Systems.
+         This file is an integral part of the build system for your
+         application and should be checked into Version Control Systems.
 
          -->
     <property file="build.properties" />
 
-    <!-- The default.properties file is created and updated by the 'android' tool, as well
-         as ADT.
-         This file is an integral part of the build system for your application and
-         should be checked in in Version Control Systems. -->
+    <!-- The default.properties file is created and updated by the 'android'
+         tool, as well as ADT.
+         This file is an integral part of the build system for your
+         application and should be checked into Version Control Systems. -->
     <property file="default.properties" />
 
-    <!-- Custom Android task to deal with the project target, and import the proper rules.
-         This requires ant 1.6.0 or above. -->
-    <path id="android.antlibs">
-        <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
-    </path>
 
-    <taskdef name="setup"
-        classname="com.android.ant.SetupTask"
-        classpathref="android.antlibs" />
+    <!-- Required pre-setup import -->
+    <import file="${sdk.dir}/tools/ant/pre_setup.xml" />
 
-    <!-- Execute the Android Setup task that will setup some properties specific to the target,
-         and import the build rules files.
 
+<!-- extension targets. Uncomment the ones where you want to do custom work
+     in between standard targets -->
+<!--
+    <target name="-pre-build">
+    </target>
+    <target name="-pre-compile">
+    </target>
+
+    [This is typically used for code obfuscation.
+     Compiled code location: ${out.classes.absolute.dir}
+     If this is not done in place, override ${out.dex.input.absolute.dir}]
+    <target name="-post-compile">
+    </target>
+-->
+
+    <!-- Execute the Android Setup task that will setup some properties
+         specific to the target, and import the build rules files.
+
          The rules file is imported from
-            <SDK>/platforms/<target_platform>/templates/android_rules.xml
+            <SDK>/tools/ant/
+         Depending on the project type it can be either:
+         - main_rules.xml
+         - lib_rules.xml
+         - test_rules.xml
 
-         To customize some build steps for your project:
-         - copy the content of the main node <project> from android_rules.xml
-         - paste it in this build.xml below the <setup /> task.
-         - disable the import by changing the setup task below to <setup import="false" />
-
-         This will ensure that the properties are setup correctly but that your customized
-         build steps are used.
+         To customize existing targets, there are two options:
+         - Customize only one target:
+             - copy/paste the target into this file, *before* the
+               <setup> task.
+             - customize it to your needs.
+         - Customize the whole script.
+             - copy/paste the content of the rules files (minus the top node)
+               into this file, *after* the <setup> task
+             - disable the import of the rules by changing the setup task
+               below to <setup import="false" />.
+             - customize to your needs.
     -->
     <setup />
 

Modified: projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/default.properties
===================================================================
--- projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/default.properties	2011-05-16 03:52:10 UTC (rev 24755)
+++ projects/android/tags/0.2.2.14-alpha-orbot-1.0.4/Orbot/default.properties	2011-05-16 03:55:02 UTC (rev 24756)
@@ -10,5 +10,5 @@
 # Indicates whether an apk should be generated for each density.
 split.density=false
 # Project target.
-target=android-4
+target=android-7
 apk-configurations=

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS
===================================================================
--- projects/android/trunk/Orbot/AUTHORS	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,33 +0,0 @@
-This file lists the authors for Orbot, a free software project to provide
-anonymity on the Internet on Android smartphones.
-
-For more information about Orbot, see https://guardianproject.info/apps/orbot
-
-If you got this file as a part of a larger bundle, there are probably
-other authors that you should be aware of.
-
-Main Authors:
--------------
-Nathan Freitas <nathan at freitas.net> developed the primary Android
-application and managed the porting of Tor to Android.
-
-Jake Appelbaum <jacob at appelbaum.net> regularly gave Nathan a swift kick
-in the rear to get this done. He has also provided extensive guidance
-and review. Most recently he has been promoted to Chief Application
-Resource Editor.
-
-Derek Halliday <derek at guardianproject.info> has designed and implemented
-new user interface components and layouts since the 1.0.4 release. 
-
-Contributors:
--------------
-Nick Mathewson <nickm at freehaven.net> wrote some of the patch code to
-support the compiling of Tor and Libevent on Android, and generally
-provided guidance in the entire effort.
-
-Adam Langley made the original valiant effort to port Tor to Android.
-
-Sathyanarayanan <gsathya.ceg at gmail.com> created a patch for the wizard
-which updated the icon and link for the secure chat app info to point
-to Gibberbot, and hopefully will continue to contribute useful patches.
- 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS (from rev 24719, projects/android/trunk/Orbot/AUTHORS)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AUTHORS	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,38 @@
+This file lists the authors for Orbot, a free software project to provide
+anonymity on the Internet on Android smartphones.
+
+For more information about Orbot, see https://guardianproject.info/apps/orbot
+
+If you got this file as a part of a larger bundle, there are probably
+other authors that you should be aware of.
+
+Main Authors:
+-------------
+Nathan Freitas <nathan at freitas.net> developed the primary Android
+application and managed the porting of Tor to Android.
+
+Jake Appelbaum <jacob at appelbaum.net> regularly gave Nathan a swift kick
+in the rear to get this done. He has also provided extensive guidance
+and review. Most recently he has been promoted to Chief Application
+Resource Editor.
+
+Derek Halliday <derek at guardianproject.info> has designed and implemented
+new user interface components and layouts since the 1.0.4 release. 
+
+Contributors:
+-------------
+Nick Mathewson <nickm at freehaven.net> wrote some of the patch code to
+support the compiling of Tor and Libevent on Android, and generally
+provided guidance in the entire effort.
+
+Adam Langley made the original valiant effort to port Tor to Android.
+
+Sathyanarayanan <gsathya.ceg at gmail.com> created a patch for the wizard
+which updated the icon and link for the secure chat app info to point
+to Gibberbot, and hopefully will continue to contribute useful patches.
+
+__sporkbomb <manuel at acanthephyra.net> implemented an updated set of logic
+in TorTransProxy for handling the "transproxy all" mode of operation. Before
+certain system processes were leaking traffic, and this was also detected
+by his excellent auditing.
+ 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110503a-dev" android:versionCode="11">
-       
-       <uses-permission android:name="android.permission.INTERNET" />
- 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
-      
-        <activity android:name=".Orbot"
-                  android:theme="@android:style/Theme.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-          </intent-filter>
-            <intent-filter>
-            <action android:name="android.intent.action.VIEW" />
-            <category android:name="android.intent.category.DEFAULT" />
-            <category android:name="android.intent.category.BROWSABLE" />
-        </intent-filter>
-        
-         <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
-            </intent-filter>
-             <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.START_TOR" />
-            </intent-filter>
-        </activity>
-      
-        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
-        <activity android:name=".AppManager"  android:label="@string/app_name"/>
-        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
-      
-    	<service android:enabled="true"
-    		android:name=".service.TorService" 
-    		android:exported="false"
-    		>
-	            <intent-filter>
-	                <action android:name="org.torproject.android.service.ITorService" />
-	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
-            </intent-filter>
-    	</service>
-    	
-    	
-    	<receiver android:name=".OnBootReceiver">
-			<intent-filter>
-			<action
-			android:name="android.intent.action.BOOT_COMPLETED" />
-			<category android:name="android.intent.category.HOME" />
-			</intent-filter>
-		</receiver>
-    	
-    </application>
-    
-    <uses-sdk android:minSdkVersion="4"/>
-
-
-
-</manifest> 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml (from rev 24737, projects/android/trunk/Orbot/AndroidManifest.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5" android:versionCode="11">
+       
+       <uses-permission android:name="android.permission.INTERNET" />
+ 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ 
+    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
+      
+        <activity android:name=".Orbot"
+                  android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+          </intent-filter>
+            <intent-filter>
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+        </intent-filter>
+        
+         <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+             <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+      
+        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
+        <activity android:name=".AppManager"  android:label="@string/app_name"/>
+        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
+      
+    	<service android:enabled="true"
+    		android:name=".service.TorService" 
+    		android:exported="false"
+    		>
+	            <intent-filter>
+	                <action android:name="org.torproject.android.service.ITorService" />
+	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
+            </intent-filter>
+    	</service>
+    	
+    	
+    	<receiver android:name=".OnBootReceiver">
+			<intent-filter>
+				<action	android:name="android.intent.action.BOOT_COMPLETED" />
+				<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
+    	
+    </application>
+    
+    <uses-sdk android:minSdkVersion="4"/>
+
+
+
+</manifest> 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.debug	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.torproject.android" android:versionName="1.0.4" android:versionCode="10">
-       
-       <uses-permission android:name="android.permission.INTERNET" />
-
- 
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
-      
-        <activity android:name=".Orbot"
-                  android:theme="@android:style/Theme.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-          </intent-filter>
-            <intent-filter>
-            <action android:name="android.intent.action.VIEW" />
-            <category android:name="android.intent.category.DEFAULT" />
-            <category android:name="android.intent.category.BROWSABLE" />
-        </intent-filter>
-        
-         <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
-            </intent-filter>
-             <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.START_TOR" />
-            </intent-filter>
-        </activity>
-      
-        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
-        <activity android:name=".AppManager"  android:label="@string/app_name"/>
-        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
-      
-    	<!-- <service android:name=".service.TorService" android:process=":remote"> -->
-    	<service android:name=".service.TorService">
-	            <intent-filter>
-	                <action android:name="org.torproject.android.service.ITorService" />
-	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
-            </intent-filter>
-    	</service>
-    	
-    	<!--
-    	<receiver android:name=".OnBootReceiver">
-			<intent-filter>
-			<action
-			android:name="android.intent.action.BOOT_COMPLETED" />
-			<category android:name="android.intent.category.HOME" />
-			</intent-filter>
-		</receiver>
-    	-->
-    	
-    </application>
-    
-    <uses-sdk android:minSdkVersion="4"/>
-
-
-
-</manifest> 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug (from rev 24752, projects/android/trunk/Orbot/AndroidManifest.xml.debug)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.debug	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5.20110503a-dev-debug" android:versionCode="10">
+       
+       <uses-permission android:name="android.permission.INTERNET" />
+
+ 
+    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
+      
+        <activity android:name=".Orbot"
+                  android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+          </intent-filter>
+            <intent-filter>
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+        </intent-filter>
+        
+         <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+             <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+      
+        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
+        <activity android:name=".AppManager"  android:label="@string/app_name"/>
+        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
+      
+    	<!-- <service android:name=".service.TorService" android:process=":remote"> -->
+    	<service android:name=".service.TorService">
+	            <intent-filter>
+	                <action android:name="org.torproject.android.service.ITorService" />
+	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
+            </intent-filter>
+    	</service>
+    	
+    	<!--
+    	<receiver android:name=".OnBootReceiver">
+			<intent-filter>
+			<action
+			android:name="android.intent.action.BOOT_COMPLETED" />
+			<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
+    	-->
+    	
+    </application>
+    
+    <uses-sdk android:minSdkVersion="4"/>
+
+
+
+</manifest> 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.production	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110416a-dev" android:versionCode="11">
-       
-       <uses-permission android:name="android.permission.INTERNET" />
- 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
-      
-        <activity android:name=".Orbot"
-                  android:theme="@android:style/Theme.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-          </intent-filter>
-            <intent-filter>
-            <action android:name="android.intent.action.VIEW" />
-            <category android:name="android.intent.category.DEFAULT" />
-            <category android:name="android.intent.category.BROWSABLE" />
-        </intent-filter>
-        
-         <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
-            </intent-filter>
-             <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.START_TOR" />
-            </intent-filter>
-        </activity>
-      
-        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
-        <activity android:name=".AppManager"  android:label="@string/app_name"/>
-        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
-      
-    	<service android:enabled="true"
-    		android:name=".service.TorService" 
-    		android:exported="false"
-    		>
-	            <intent-filter>
-	                <action android:name="org.torproject.android.service.ITorService" />
-	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
-            </intent-filter>
-    	</service>
-    	
-    	
-    	<receiver android:name=".OnBootReceiver">
-			<intent-filter>
-			<action
-			android:name="android.intent.action.BOOT_COMPLETED" />
-			<category android:name="android.intent.category.HOME" />
-			</intent-filter>
-		</receiver>
-    	
-    </application>
-    
-    <uses-sdk android:minSdkVersion="4"/>
-
-
-
-</manifest> 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production (from rev 24752, projects/android/trunk/Orbot/AndroidManifest.xml.production)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/AndroidManifest.xml.production	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5.20110503a" android:versionCode="11">
+       
+       <uses-permission android:name="android.permission.INTERNET" />
+ 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ 
+    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
+      
+        <activity android:name=".Orbot"
+                  android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+          </intent-filter>
+            <intent-filter>
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+        </intent-filter>
+        
+         <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+             <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+      
+        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
+        <activity android:name=".AppManager"  android:label="@string/app_name"/>
+        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
+      
+    	<service android:enabled="true"
+    		android:name=".service.TorService" 
+    		android:exported="false"
+    		>
+	            <intent-filter>
+	                <action android:name="org.torproject.android.service.ITorService" />
+	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
+            </intent-filter>
+    	</service>
+    	
+    	
+    	<receiver android:name=".OnBootReceiver">
+			<intent-filter>
+			<action
+			android:name="android.intent.action.BOOT_COMPLETED" />
+			<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
+    	
+    </application>
+    
+    <uses-sdk android:minSdkVersion="4"/>
+
+
+
+</manifest> 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD
===================================================================
--- projects/android/trunk/Orbot/BUILD	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,163 +0,0 @@
-
-// 2011/04/15 this document is a bit out of date. We will be updating to use
-// the standalone cross-compiler that is offered by the Android NDK soon
-
-This document explains how to properly build an Android package of Orbot from
-source. It covers building on Debian Lenny (5.0.3).
-
-Please install the following prerequisites (instructions for each follows):
-	ant: http://ant.apache.org/
-	Android OS SDK: http://source.android.com/download
-	droid-wrapper: http://github.com/tmurakam/droid-wrapper
-	libevent source (1.4.12-stable from svn)
-	Tor source (most recent git master branch)
-	Privoxy source (http://sourceforge.net/projects/ijbswa/)
-
-Install and prepare the Android OS SDK ( http://source.android.com/download )
-on Debian Lenny:
-
-	sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
-		libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
-		curl libncurses5-dev zlib1g-dev valgrind libtool automake \
-		ruby subversion
-	update-java-alternatives -s java-1.5.0-sun
-
-	curl http://android.git.kernel.org/repo >~/bin/repo
-	chmod a+x ~/bin/repo
-
-	mkdir ~/mydroid
-	cd ~/mydroid
-
-	repo init -u git://android.git.kernel.org/platform/manifest.git
-	repo sync
-
-	# Paste in key from http://source.android.com/download next...
-	gpg --import
-
-	cd ~/mydroid
-
-	# This takes a long while...
-	make
-
-Install droid-wrapper:
-
-	cd /tmp
-	git clone git://github.com/tmurakam/droid-wrapper.git
-	cd droid-wrapper
-	sudo make install
-
-zlib and OpenSSL are included with the Android OS SDK. You'll need to build
-libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
-
-	mkdir -p ~/mydroid/external/{libevent,tor,privoxy}
-
-We need to set to environment variables for droid-gcc:
-	export DROID_ROOT=~/mydroid/
-	export DROID_TARGET=generic
-
-Fetch and build Privoxy:
-	cd ~/mydroid/external/privoxy
-	wget http://sourceforge.net/projects/ijbswa/files/Sources/3.0.12%20%28stable%29/privoxy-3.0.12-stable-src.tar.gz/download
-	tar xzvf privoxy-3.0.12-stable-src.tar.gz
-	cd privoxy-3.0.12-stable
-	autoheader
-	autoconf
-	#need to disable setpgrp check in configure
-	export ac_cv_func_setpgrp_void=yes
-	#replace FOO with your actual username
-	CC=droid-gcc LD=droid-ld CPPFLAGS="-I/home/FOO/mydroid/external/zlib/" ./configure --host=arm-none-linux-gnueabi
-	#don't mind the "unrecognized option '-pthread'" error message that you'll see when you run make
-	make
-	
-Fetch and build libevent:
-
-	cd ~/mydroid/external/libevent
-	svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
-	export LIBEVENTDIR=`pwd`
-	./autogen.sh
-	# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
-	patch < /tmp/libevent-patch
-	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
-	make
-
-Copy over the libevent library:
-	cp .libs/libevent.a ~/mydroid/out/target/product/generic/obj/lib
-
-Fetch and build Tor:
-
-	export OPENSSLDIR=`cd ~/mydroid/external/openssl/include/ && pwd`
-	export ZLIBDIR=`cd ~/mydroid/external/zlib && pwd`
-
-	cd ~/mydroid/external/tor
-	git clone git://git.torproject.org/git/tor.git
-	cd tor/
-	./autogen.sh
-	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
-	--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
-	--with-zlib-dir=$ZLIBDIR --disable-asciidoc
-	make
-
-At this point, you'll have a Tor binary that can be run on an Android handset.
-This isn't enough though and we'll now sew up the binary into a small package
-that will handle basic Tor controlling features.
-
-We need to build our Java SOCKS library:
-
-	# If you're in Orbot's directory already...
-	cd ../asocks/
-	ant compile
-	ant jar
-	cp bin/jar/asocks.jar ../Orbot/libs
-
-We need to get the TorControl library for Java:
-(see also https://svn.torproject.org/svn/torctl/trunk/doc/howto.txt)
-
-	git clone git://git.torproject.org/git/jtorctl
-	cd jtorctl
-	mkdir bin
-	javac net/freehaven/tor/control/TorControlConnection.java -d bin
-	cd bin
-	jar cvf jtorctrl.jar *
-	cp jtorctrl.jar {Orbot Home}/libs
-	
-Finally, we'll make a proper Android package with ant and the Android App SDK:
-
-	export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
-	cd ../Orbot/
-	cp ~/mydroid/external/privoxy/privoxy-3.0.12-stable/privoxy assets/privoxy
-	cp ~/mydroid/external/tor/tor/src/or/tor assets/tor
-	$APP_SDK/android update project --name Orbot --target 3 --path .
-	ant release
-
-This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
-
-To produce a usable package, you'll need to sign the .apk. The basics on
-signing can be found on the Android developer site:
-
-	http://developer.android.com/guide/publishing/app-signing.html
-
-The three steps are quite simple. First, you'll generate a key. Secondly,
-you'll sign the application. Thirdly, you'll verify the the apk.
-
-Generating a signing key:
-
-	keytool -genkey -v -keystore my-release-key.keystore \
-		-alias orbots_key -keyalg RSA -validity 10000
-
-Sign the apk:
-
-	jarsigner -verbose -keystore my-release-key.keystore \
-		bin/Orbot-unsigned.apk orbots_key
-
-Verify the signature for the apk:
-
-	jarsigner -verify bin/Orbot-unsigned.apk
-	mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
-
-You can also GPG sign the apk and generate an .asc:
-
-	gpg -ab Orbot-signed-alpha.apk
-
-Now you should have a fully signed and production ready alpha release of Orbot!
-Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD (from rev 24737, projects/android/trunk/Orbot/BUILD)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/BUILD	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,162 @@
+
+// 2011/04/15 this document is a bit out of date. We will be updating to use
+// the standalone cross-compiler that is offered by the Android NDK soon
+
+This document explains how to properly build an Android package of Orbot from
+source. It covers building on Debian Lenny (5.0.3).
+
+Please install the following prerequisites (instructions for each follows):
+	ant: http://ant.apache.org/
+	Android OS SDK: http://source.android.com/download
+	droid-wrapper: http://github.com/tmurakam/droid-wrapper
+	libevent source (1.4.12-stable from svn)
+	Tor source (most recent git master branch)
+	Privoxy source (http://sourceforge.net/projects/ijbswa/)
+
+Install and prepare the Android OS SDK ( http://source.android.com/download )
+on Debian Lenny:
+
+	sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
+		libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
+		curl libncurses5-dev zlib1g-dev valgrind libtool automake \
+		ruby subversion
+	update-java-alternatives -s java-1.5.0-sun
+
+	curl http://android.git.kernel.org/repo >~/bin/repo
+	chmod a+x ~/bin/repo
+
+	mkdir ~/mydroid
+	cd ~/mydroid
+
+	repo init -u git://android.git.kernel.org/platform/manifest.git
+	repo sync
+
+	# Paste in key from http://source.android.com/download next...
+	gpg --import
+
+	cd ~/mydroid
+
+	# This takes a long while...
+	make
+
+Install droid-wrapper:
+
+	cd /tmp
+	git clone git://github.com/tmurakam/droid-wrapper.git
+	cd droid-wrapper
+	sudo make install
+
+zlib and OpenSSL are included with the Android OS SDK. You'll need to build
+libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
+
+	mkdir -p ~/mydroid/external/{libevent,tor,privoxy}
+
+We need to set to environment variables for droid-gcc:
+	export DROID_ROOT=~/mydroid/
+	export DROID_TARGET=generic
+
+Fetch and build Privoxy:
+	cd ~/mydroid/external/privoxy
+	wget http://sourceforge.net/projects/ijbswa/files/Sources/3.0.12%20%28stable%29/privoxy-3.0.12-stable-src.tar.gz/download
+	tar xzvf privoxy-3.0.12-stable-src.tar.gz
+	cd privoxy-3.0.12-stable
+	autoheader
+	autoconf
+	#need to disable setpgrp check in configure
+	export ac_cv_func_setpgrp_void=yes
+	#replace FOO with your actual username
+	CC=droid-gcc LD=droid-ld CPPFLAGS="-I/home/FOO/mydroid/external/zlib/" ./configure --host=arm-none-linux-gnueabi
+	#don't mind the "unrecognized option '-pthread'" error message that you'll see when you run make
+	make
+	
+Fetch and build libevent:
+
+	cd ~/mydroid/external/libevent
+	svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
+	export LIBEVENTDIR=`cd $DROID_ROOT/external/libevent && pwd`
+	./autogen.sh
+	# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
+	patch < /tmp/libevent-patch
+	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
+	make
+
+Copy over the libevent library:
+	cp .libs/libevent.a $DROID_ROOT/out/target/product/generic/obj/lib
+
+Fetch and build Tor:
+
+	export OPENSSLDIR=`cd $DROID_ROOT/external/openssl/include/ && pwd`
+	export ZLIBDIR=`cd $DROID_ROOT/external/zlib && pwd`
+
+	cd $DROID_ROOT/external/tor
+	git clone git://git.torproject.org/git/tor.git
+	cd tor/
+	./autogen.sh
+	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
+	--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
+	--with-zlib-dir=$ZLIBDIR --disable-asciidoc
+	make
+
+At this point, you'll have a Tor binary that can be run on an Android handset.
+You can verify the ARM binary was properly built using the following command:
+
+file src/or/tor
+	
+You should see something like:
+src/or/tor: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
+
+This isn't enough though and we'll now sew up the binary into a small package
+that will handle basic Tor controlling features.
+
+We need to get the TorControl library for Java:
+(see also https://svn.torproject.org/svn/torctl/trunk/doc/howto.txt)
+
+	git clone git://git.torproject.org/git/jtorctl
+	cd jtorctl
+	mkdir bin
+	javac net/freehaven/tor/control/TorControlConnection.java -d bin
+	cd bin
+	jar cvf jtorctrl.jar *
+	cp jtorctrl.jar {Orbot Home}/libs
+	
+Finally, we'll make a proper Android package with ant and the Android App SDK:
+
+	export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
+	cd ../Orbot/
+	cp $DROID_ROOT/external/privoxy/privoxy-3.0.12-stable/privoxy assets/privoxy
+	cp $DROID_ROOT/external/tor/tor/src/or/tor assets/tor
+	$APP_SDK/android update project --name Orbot --target 3 --path .
+	ant release
+
+This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
+
+To produce a usable package, you'll need to sign the .apk. The basics on
+signing can be found on the Android developer site:
+
+	http://developer.android.com/guide/publishing/app-signing.html
+
+The three steps are quite simple. First, you'll generate a key. Secondly,
+you'll sign the application. Thirdly, you'll verify the the apk.
+
+Generating a signing key:
+
+	keytool -genkey -v -keystore my-release-key.keystore \
+		-alias orbots_key -keyalg RSA -validity 10000
+
+Sign the apk:
+
+	jarsigner -verbose -keystore my-release-key.keystore \
+		bin/Orbot-unsigned.apk orbots_key
+
+Verify the signature for the apk:
+
+	jarsigner -verify bin/Orbot-unsigned.apk
+	mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
+
+You can also GPG sign the apk and generate an .asc:
+
+	gpg -ab Orbot-signed-alpha.apk
+
+Now you should have a fully signed and production ready alpha release of Orbot!
+Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG
===================================================================
--- projects/android/trunk/Orbot/CHANGELOG	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,105 +0,0 @@
-NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
-
-1.0.5
-- Added new toolbar notifications and alerts for displaying notifications and Tor messages
-- Removed unused Socks client code from android.net package
-- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
-- Bundled iptables 1.4.7 for ARM instead of relying on installed version
-- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
-- Changed how settings changed are processed through the control port (batched instead of one by one)
-- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
-- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
-
-1.0.4
-- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
-- Fixed incorrect try to clear iptables rules for non-root devices
-- Fixed bug that stopped wizard helper from showing first time
-- Added new green notification icon when Tor is connected
-- Fixed app selector layout in settings
-- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
-- Fixed log screen touch disable tor bug
-- Debugged issues around network status change causing FC/crash
-- Added "Start on Boot" option
-
-1.0.3
-- Fixed spanish language issues with settings screen
-- Cleaned up logging, and moved most of it to debug output only
-- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
-- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
-- Hidden services now support through option in settings
-- removed double apostrophes from value/strings.xml files
-
-1.0.2
-- Added "check" yes/no dialog prompt
-- Debugged iptables/transprox settings on Android 1.6 and 2.2
-- Added proxy settings help screen and fixed processSettings() NPE
-
-1.0.1
-- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
- 
-1.0.0 - 2010-08-10
-- Added "Proxy Settings" help screen
-- Handle potential null pointers on process settings where service not yet active 
-
-0.0.9x - 2010-08-03
-- Revised Orbot install wizard
-- Integrated Tor 0.2.2.14 and iptables 4.x binary
-- Fixed "got root" detection method 
-- Fixed Per App Torification handling so it updates on exit from Settings screen
-
-0.0.8x - 2010-07-15
-- Updated Settings & App configuration screens
-- Changed progress dialog display
-- Significant application re-arch
-- Fixed force stop crash on install
-- Integrated Tor 0.2.2.13-alpha-dev binary
-- Fixed su shell cmd error handling & root perms issue
-- #1570: Added new setup wizard on install to clarify root / non-root capabilities 
-- #1716: Per-app traffic routing prefs not persisted
-- #1509: Help window is too big for the screen on android 1.6
-- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
-- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
-- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
-- #1272: Orbot should store Tor files in the cache
-- #1273: Info should mention anonymity problems with ProxySurf
-
-0.0.5x
-- #1388: Error parsing PID from output of "ps"
-- #1277, #1278: Enabling bridges issues
-- #1279: Misleading message when initialization is finished
-- #1292: Tor version in About screen is wrong
-
-0.0.3x - 2010-03-15
-- Added Start/Stop menu item for non-touch activation
-- Improved parsing and validation of settings screen
-- UI now compatible with landscape mode (#1276)
-- Added relay support for static/publicly accessible IP devices
-
-0.0.3a - 2010-02-07
-- Integrated iptables support for transparent proxying of outbound port
-  80 and DNS
-- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
-- New UI layout and graphics
-- Android settings screen for generated torrc file
-- Improved performance and error handling
-
-0.0.2a - 2009-11-30
-- Update user interface layout and graphics
-- Modified service launch, shutdown and handling
-- Improved event handler on Tor Control port callbacks
-- Added Help page
-
-0.0.2 - 2009-11-27
-- Major improvement to the user interface including relative layout for
-  different screens
-- New graphics resources
-- Implemented Tor Control Port using official Java library
-- Added 'clear' button to the log screen
-- Added 'save' and editable textbox for the settings screen
-- Moved screen navigation to a pop-up menu
-
-0.0.1-alpha - 2009-10-21
-- First code release
-- Major Features: Tor binary application is fully operational, UI:
-  Start/Stop Tor, View Message Log, View Settings (torrc)
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG (from rev 24755, projects/android/trunk/Orbot/CHANGELOG)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/CHANGELOG	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,112 @@
+NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
+
+1.0.5
+- added exit node and "StrictExitNode" preference
+- fixed tor binary installation issue related to max resource size and compression
+- updated "start on boot" code to test for proper launch event
+- updated to Tor 0.2.2.25-alpha binary
+- moved back to single notification bar id to avoid double entries
+- cleaned up progress dialog and alert handling to avoid leaky windows
+- Merged __sporkbomb's patch for how transproxy all works; now does "everything but Tor"
+- Added new toolbar notifications and alerts for displaying notifications and Tor messages
+- Removed unused Socks client code from android.net package
+- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
+- Bundled iptables 1.4.7 for ARM instead of relying on installed version
+- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
+- Changed how settings changed are processed through the control port (batched instead of one by one)
+- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
+- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
+
+1.0.4
+- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
+- Fixed incorrect try to clear iptables rules for non-root devices
+- Fixed bug that stopped wizard helper from showing first time
+- Added new green notification icon when Tor is connected
+- Fixed app selector layout in settings
+- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
+- Fixed log screen touch disable tor bug
+- Debugged issues around network status change causing FC/crash
+- Added "Start on Boot" option
+
+1.0.3
+- Fixed spanish language issues with settings screen
+- Cleaned up logging, and moved most of it to debug output only
+- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
+- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
+- Hidden services now support through option in settings
+- removed double apostrophes from value/strings.xml files
+
+1.0.2
+- Added "check" yes/no dialog prompt
+- Debugged iptables/transprox settings on Android 1.6 and 2.2
+- Added proxy settings help screen and fixed processSettings() NPE
+
+1.0.1
+- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
+ 
+1.0.0 - 2010-08-10
+- Added "Proxy Settings" help screen
+- Handle potential null pointers on process settings where service not yet active 
+
+0.0.9x - 2010-08-03
+- Revised Orbot install wizard
+- Integrated Tor 0.2.2.14 and iptables 4.x binary
+- Fixed "got root" detection method 
+- Fixed Per App Torification handling so it updates on exit from Settings screen
+
+0.0.8x - 2010-07-15
+- Updated Settings & App configuration screens
+- Changed progress dialog display
+- Significant application re-arch
+- Fixed force stop crash on install
+- Integrated Tor 0.2.2.13-alpha-dev binary
+- Fixed su shell cmd error handling & root perms issue
+- #1570: Added new setup wizard on install to clarify root / non-root capabilities 
+- #1716: Per-app traffic routing prefs not persisted
+- #1509: Help window is too big for the screen on android 1.6
+- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
+- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
+- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
+- #1272: Orbot should store Tor files in the cache
+- #1273: Info should mention anonymity problems with ProxySurf
+
+0.0.5x
+- #1388: Error parsing PID from output of "ps"
+- #1277, #1278: Enabling bridges issues
+- #1279: Misleading message when initialization is finished
+- #1292: Tor version in About screen is wrong
+
+0.0.3x - 2010-03-15
+- Added Start/Stop menu item for non-touch activation
+- Improved parsing and validation of settings screen
+- UI now compatible with landscape mode (#1276)
+- Added relay support for static/publicly accessible IP devices
+
+0.0.3a - 2010-02-07
+- Integrated iptables support for transparent proxying of outbound port
+  80 and DNS
+- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
+- New UI layout and graphics
+- Android settings screen for generated torrc file
+- Improved performance and error handling
+
+0.0.2a - 2009-11-30
+- Update user interface layout and graphics
+- Modified service launch, shutdown and handling
+- Improved event handler on Tor Control port callbacks
+- Added Help page
+
+0.0.2 - 2009-11-27
+- Major improvement to the user interface including relative layout for
+  different screens
+- New graphics resources
+- Implemented Tor Control Port using official Java library
+- Added 'clear' button to the log screen
+- Added 'save' and editable textbox for the settings screen
+- Moved screen navigation to a pop-up menu
+
+0.0.1-alpha - 2009-10-21
+- First code release
+- Major Features: Tor binary application is fully operational, UI:
+  Start/Stop Tor, View Message Log, View Settings (torrc)
+

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/libs/jtorctrl.jar (from rev 24754, projects/android/trunk/Orbot/libs/jtorctrl.jar)
===================================================================
(Binary files differ)

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/drawable/torerror.png (from rev 24738, projects/android/trunk/Orbot/res/drawable/torerror.png)
===================================================================
(Binary files differ)

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml
===================================================================
--- projects/android/trunk/Orbot/res/layout/layout_about.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-	<ScrollView android:id="@+id/aboutscrollview" 
-		android:orientation="vertical"
-		android:layout_width="fill_parent" 
-		android:layout_height="fill_parent">    
-		<LinearLayout
-		    android:orientation="vertical"
-		    android:layout_width="fill_parent"
-		    android:layout_height="fill_parent">
-		    <TextView android:text="@string/wizard_details"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"		
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />	
-			<TextView android:text="@string/wizard_details_msg"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"		
-				android:textColor="#ffffff" />
-				
-			<TextView android:text="Version: "
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />
-			<TextView android:text="- Unknown -"
-				android:id="@+id/versionName"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:paddingLeft="15px"		
-				android:layout_gravity="center_vertical"
-				android:textColor="#ffffff" />	
-			<TextView android:text="Project Home(s): "
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"		
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />
-			<TextView android:text="https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/orbot/"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"		
-				android:textColor="#ffffff" />
-			<TextView android:text="License: "
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />	
-			<TextView android:text="The Tor License"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:paddingLeft="15px"								
-				android:textColor="#ffffff" />	
-			<TextView android:text="https://torproject.org"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"		
-				android:textColor="#ffffff" />				
-			<TextView android:text="3rd-Party-Software: "
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"		
-				android:paddingTop="15px"
-				android:paddingLeft="15px"
-				android:textStyle="bold"
-				android:textColor="#00ff00" />	
-			<TextView android:text="Tor v0.2.2.14: https://www.torproject.org"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"
-				android:textColor="#ffffff" />				
-			<TextView android:text="LibEvent v1.4.13: http://www.monkey.org/~provos/libevent/"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"	
-				android:textColor="#ffffff" />	
-			<TextView android:text="Privoxy v3.0.12: http://www.privoxy.org"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"	
-				android:textColor="#ffffff" />	
-			<TextView android:text="Iptables v1.4.7: http://www.netfilter.org"
-				android:layout_width="fill_parent" 
-				android:layout_height="wrap_content"
-				android:autoLink="web"
-				android:textColorLink="#ffffff"
-				android:paddingLeft="15px"	
-				android:textColor="#ffffff" />					
-			</LinearLayout>
-		</ScrollView>			
-</LinearLayout>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml (from rev 24751, projects/android/trunk/Orbot/res/layout/layout_about.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_about.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+	<ScrollView android:id="@+id/aboutscrollview" 
+		android:orientation="vertical"
+		android:layout_width="fill_parent" 
+		android:layout_height="fill_parent">    
+		<LinearLayout
+		    android:orientation="vertical"
+		    android:layout_width="fill_parent"
+		    android:layout_height="fill_parent">
+		    <TextView android:text="@string/wizard_details"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"		
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />	
+			<TextView android:text="@string/wizard_details_msg"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"		
+				android:textColor="#ffffff" />
+				
+			<TextView android:text="Version: "
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />
+			<TextView android:text="- Unknown -"
+				android:id="@+id/versionName"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:paddingLeft="15px"		
+				android:layout_gravity="center_vertical"
+				android:textColor="#ffffff" />	
+			<TextView android:text="Project Home(s): "
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"		
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />
+			<TextView android:text="https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/orbot/"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"		
+				android:textColor="#ffffff" />
+			<TextView android:text="License: "
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />	
+			<TextView android:text="The Tor License"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:paddingLeft="15px"								
+				android:textColor="#ffffff" />	
+			<TextView android:text="https://torproject.org"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"		
+				android:textColor="#ffffff" />				
+			<TextView android:text="3rd-Party-Software: "
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"		
+				android:paddingTop="15px"
+				android:paddingLeft="15px"
+				android:textStyle="bold"
+				android:textColor="#00ff00" />	
+			<TextView android:text="Tor v0.2.2.25: https://www.torproject.org"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"
+				android:textColor="#ffffff" />				
+			<TextView android:text="LibEvent v1.4.13: http://www.monkey.org/~provos/libevent/"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"	
+				android:textColor="#ffffff" />	
+			<TextView android:text="Privoxy v3.0.12: http://www.privoxy.org"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"	
+				android:textColor="#ffffff" />	
+			<TextView android:text="Iptables v1.4.7: http://www.netfilter.org"
+				android:layout_width="fill_parent" 
+				android:layout_height="wrap_content"
+				android:autoLink="web"
+				android:textColorLink="#ffffff"
+				android:paddingLeft="15px"	
+				android:textColor="#ffffff" />					
+			</LinearLayout>
+		</ScrollView>			
+</LinearLayout>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml
===================================================================
--- projects/android/trunk/Orbot/res/layout/layout_main.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:background="@drawable/bgtitanium"
-    android:id="@+id/viewMain"
-    >
-    
-    	<RelativeLayout android:id="@+id/layoutHeaderMain"
-		android:layout_width="fill_parent"
-		android:layout_height="30dp"
-		android:layout_gravity="center_horizontal"
-		android:background="#A0909090">
-        <ImageView android:id="@+id/radioModeImage"
- 		    android:layout_width="wrap_content"
-		    android:layout_height="wrap_content"
-			android:layout_marginTop="0px"
-			android:layout_marginRight="3px"
-			android:gravity="right"
-			android:layout_toRightOf="@+id/radioModeLabel"
-			android:layout_alignParentRight="true"
-			android:layout_alignParentTop="true"
-			android:src="@drawable/tor25"
-			/>
-		<TextView android:id="@+id/radioModeText"
- 		    android:layout_width="wrap_content"
-		    android:layout_height="wrap_content"           
-            android:text="@string/powered_by"
-			android:layout_marginTop="9px"
-			android:layout_marginRight="0px"
-			android:gravity="right"
-			android:layout_toLeftOf="@+id/radioModeImage"
-            android:textColor="#333333" />
-	</RelativeLayout>
-    
-   <ScrollView android:id="@+id/mainview" 
-		android:orientation="vertical"
-		android:layout_width="fill_parent" 
-		android:layout_height="fill_parent">
-   		<TableLayout android:id="@+id/mainLayout"
-			android:layout_gravity="center"
-			android:layout_height="wrap_content" 
-			android:layout_width="wrap_content">
-			<TableRow android:id="@+id/startRow">
-				<TableLayout
-					android:layout_gravity="center"
-					android:layout_height="wrap_content" 
-					android:layout_width="wrap_content">
-					<TableRow>
-							<ImageView
-							android:id="@+id/imgStatus"
-							android:layout_width="wrap_content"
-							android:layout_height="wrap_content"
-							android:src="@drawable/toroff"/>
-					</TableRow>
-					<TableRow>
-						<TextView android:id="@+id/lblStatus"
-							android:text="@string/press_to_start"
-							android:layout_gravity="center_horizontal"
-							android:gravity="center_horizontal"
-							android:textStyle="bold"
-							android:width="330px"
-							android:height="75px"
-							android:textColor="#ffffff"
-							 />
-					</TableRow>
-				</TableLayout>
-			</TableRow>
-			
-		</TableLayout>
-	</ScrollView>
-
-
-       
-</LinearLayout>
-
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml (from rev 24751, projects/android/trunk/Orbot/res/layout/layout_main.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/layout/layout_main.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:background="@drawable/bgtitanium"
+    android:id="@+id/viewMain"
+    >
+    
+    	<RelativeLayout android:id="@+id/layoutHeaderMain"
+		android:layout_width="fill_parent"
+		android:layout_height="30dp"
+		android:layout_gravity="center_horizontal"
+		android:background="#A0909090">
+        <ImageView android:id="@+id/radioModeImage"
+ 		    android:layout_width="wrap_content"
+		    android:layout_height="wrap_content"
+			android:layout_marginTop="3dip"
+			android:layout_marginRight="3dip"
+			android:gravity="right"
+			android:layout_toRightOf="@+id/radioModeLabel"
+			android:layout_alignParentRight="true"
+			android:layout_alignParentTop="true"
+			android:src="@drawable/tor25"
+			/>
+		<TextView android:id="@+id/radioModeText"
+ 		    android:layout_width="wrap_content"
+		    android:layout_height="wrap_content"           
+            android:text="@string/powered_by"
+			android:layout_marginTop="9px"
+			android:layout_marginRight="0px"
+			android:gravity="right"
+			android:layout_toLeftOf="@+id/radioModeImage"
+            android:textColor="#333333" />
+	</RelativeLayout>
+    
+   		<TableLayout android:id="@+id/mainLayout"
+			android:layout_gravity="center"
+			android:layout_height="wrap_content" 
+			android:layout_width="wrap_content">
+			<TableRow android:id="@+id/startRow">
+				<TableLayout
+					android:layout_gravity="center"
+					android:layout_height="wrap_content" 
+					android:layout_width="wrap_content">
+					<TableRow>
+							<ImageView
+							android:id="@+id/imgStatus"
+							android:layout_marginTop="30dip"
+							android:layout_width="wrap_content"
+							android:layout_height="wrap_content"
+							android:src="@drawable/toroff"/>
+					</TableRow>
+					<TableRow>
+						<TextView android:id="@+id/lblStatus"
+							android:text="@string/press_to_start"
+							android:layout_gravity="center_horizontal"
+							android:gravity="center_horizontal"
+							android:textStyle="bold"
+							android:layout_width="fill_parent"
+							android:layout_height="75px"
+							android:textColor="#ffffff"
+							 />
+					</TableRow>
+				</TableLayout>
+			</TableRow>
+			
+		</TableLayout>
+
+
+       
+</LinearLayout>
+
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc
===================================================================
--- projects/android/trunk/Orbot/res/raw/torrc	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,12 +0,0 @@
-SocksPort 9050
-SocksListenAddress 127.0.0.1
-SafeSocks 1
-Log notice stdout
-ControlPort 9051
-CookieAuthentication 1
-RelayBandwidthRate 20 KBytes
-RelayBandwidthBurst 20 KBytes
-UseBridges 0
-AutomapHostsOnResolve 1
-TransPort 9040
-DNSPort 5400

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc (from rev 24736, projects/android/trunk/Orbot/res/raw/torrc)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/raw/torrc	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,11 @@
+SocksPort 9050
+SafeSocks 1
+Log notice stdout
+ControlPort 9051
+CookieAuthentication 1
+RelayBandwidthRate 20 KBytes
+RelayBandwidthBurst 20 KBytes
+UseBridges 0
+AutomapHostsOnResolve 1
+TransPort 9040
+DNSPort 5400

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">start and stop Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot is starting...</string>
-<string name="status_activated">Connected to the Tor network</string>
-<string name="status_disabled">"Orbot is Deactivated</string>
-<string name="status_shutting_down">Orbot is shutting down</string>
-
-<string name="tor_process_connecting">Starting Tor...</string>
-<string name="tor_process_connecting_step2">Setting up control...</string>
-<string name="tor_process_connecting_step3">complete.</string>
-<string name="tor_process_connecting_step4">waiting.</string>
-
-<string name="not_anonymous_yet">WARNING: Your traffic is not anonymous yet! Please configure your applications to use HTTP proxy 127.0.0.1:8118 or SOCKS4A or SOCKS5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Home</string>
-<string name="menu_browse">Browse</string>
-<string name="menu_settings">Settings</string>
-<string name="menu_log">Log</string>
-<string name="menu_info">Help</string>
-<string name="menu_apps">Apps</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stop</string>
-
-<string name="menu_about">About</string>
-<string name="menu_wizard">Wizard</string>
-
-
-
-<string name="button_help">Help</string>
-<string name="button_close">Close</string>
-<string name="button_about">About</string>
-
-<string name="button_clear_log">Clear Log</string>
-
-
-<string name="menu_verify">Check</string>
-<string name="menu_exit">Exit</string>
-<string name="powered_by">powered by the Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Transparent Proxying (Requires Root)</string>
-<string name="pref_trans_proxy_title">Transparent Proxying</string>
-<string name="pref_trans_proxy_summary">Automatic Torifying of Apps</string>
-
-<string name="pref_transparent_all_title">Tor Everything</string>
-<string name="pref_transparent_all_summary">Proxy traffic for all apps through Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Tor binaries successfully installed!</string>
-<string name="status_install_fail">The Tor binary files were unable to be installed. Please check the log and notify tor-assistants at torproject.org</string>
-
-<string name="title_error">Application Error</string>
-
-<string name="wizard_title">Welcome to Orbot</string>
-
-<string name="wizard_btn_tell_me_more">About Orbot</string>
-<string name="btn_next">Next</string>
-<string name="btn_back">Back</string>
-<string name="btn_finish">Finish</string>
-
-<string name="btn_okay">Okay</string>
-<string name="btn_cancel">Cancel</string>
-
-
- <!-- Welcome Wizard strings (DJH) -->
-    <string name="wizard_welcome_msg">Orbot brings Tor to Android. Tor is free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.\n\n*WARNING:* Simply installing Orbot will _not_ magically anonymize your mobile traffic! This wizard will help you get started.</string>
-    <string name="wizard_details">Some Orbot Details</string>
-    <string name="wizard_details_msg">Orbot is an open-source application that contains Tor, LibEvent and Privoxy. It provides a local HTTP proxy (8118) and a SOCKS proxy (9050) into the Tor network. Orbot also has the ability, on rooted device, to send all internet traffic through Tor.</string>
-    <string name="wizard_permissions_root">Permission Granted</string>
-    <string name="wizard_permissions_stock">Orbot Permissions</string>
-    <string name="wizard_premissions_msg_root">Excellent! We\'ve detected that you have root permissions enabled for Orbot. We will use this power wisely.</string>
-    <string name="wizard_permissions_msg_stock"> While it is not required, Orbot can become a more powerful tool if your device has root access. Use the button below to grant Orbot superpowers! </string>
-   
-    <string name="wizard_permissions_no_root">If you don\'t have root access or have no idea what we\'re talking about, just be sure to use apps made to work with Orbot.</string>
-    <string name="wizard_permissions_consent">I understand and would like to continue without root</string>
-   
-    <string name="wizard_permission_enable_root">Grant Root for Orbot</string>
-    <string name="wizard_configure">Configure Torification</string>
-    <string name="wizard_configure_msg">Orbot gives you the option to route all application traffic through Tor OR to choose your applications individually.</string> 
-    <string name="wizard_configure_all">Proxy All Apps Through Tor</string>
-    <string name="wizard_configure_select_apps">Select Individual Apps for Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Orbot-enabled Apps</string>
-    <string name="wizard_tips_msg">We encourage you to download &amp; use apps that know how to connect directly to Orbot. Click on the buttons below to install.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Android 1.x Only) - Browser designed for privacy &amp; for Orbot</string>
-    <string name="wizard_tips_proxy">Proxy Settings - Learn how to configure apps to work with Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Proxy Settings</string>
-    <string name="wizard_proxy_help_msg">If the Android app you are using can support the use of an HTTP or SOCKS proxy, then you can configure it to connect to Orbot and use Tor.\n\n
-    The host settings is 127.0.0.1 or "localhost". For HTTP, the port setting is 8118. For SOCKS, the proxy is 9050. You should use SOCKS4A or SOCKS5 if possible.
-    \n\n
-    You can learn more about proxying on Android via the FAQ at: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Orbot is ready!</string>
-    <string name="wizard_final_msg">Hundreds of thousands of people around the world use Tor for a wide variety of reasons: journalists and bloggers, human rights workers, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens... and now you are ready to, as well!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
- <!-- END Welcome Wizard strings (DJH) -->
-
-	<string name="connect_first_time"> You\'ve successfully connected to the Tor network - but this does NOT mean your device is secure. You can use the \'Check\' option from the menu to test your browser. \n\nVisit us at https://guardianproject.info/apps/orbot or send an email to help at guardianproject.info to learn more.</string>
-
-	<string name="tor_check">This will open your default web browser to https://check.torproject.org in order to see if Orbot is probably configured and you are connected to Tor.</string>
-
-	
-    <string name="pref_hs_group">Hidden Services</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+             <string name="app_version">1.0.5</string>
+     
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">start and stop Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot is starting...</string>
+<string name="status_activated">Connected to the Tor network</string>
+<string name="status_disabled">"Orbot is Deactivated</string>
+<string name="status_shutting_down">Orbot is shutting down</string>
+
+<string name="tor_process_connecting">Starting Tor...</string>
+<string name="tor_process_connecting_step2">Setting up control...</string>
+<string name="tor_process_connecting_step3">complete.</string>
+<string name="tor_process_connecting_step4">waiting.</string>
+
+<string name="not_anonymous_yet">WARNING: Your traffic is not anonymous yet! Please configure your applications to use HTTP proxy 127.0.0.1:8118 or SOCKS4A or SOCKS5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Home</string>
+<string name="menu_browse">Browse</string>
+<string name="menu_settings">Settings</string>
+<string name="menu_log">Log</string>
+<string name="menu_info">Help</string>
+<string name="menu_apps">Apps</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stop</string>
+
+<string name="menu_about">About</string>
+<string name="menu_wizard">Wizard</string>
+
+
+
+<string name="button_help">Help</string>
+<string name="button_close">Close</string>
+<string name="button_about">About</string>
+
+<string name="button_clear_log">Clear Log</string>
+
+
+<string name="menu_verify">Check</string>
+<string name="menu_exit">Exit</string>
+<string name="powered_by">powered by the Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Transparent Proxying (Requires Root)</string>
+<string name="pref_trans_proxy_title">Transparent Proxying</string>
+<string name="pref_trans_proxy_summary">Automatic Torifying of Apps</string>
+
+<string name="pref_transparent_all_title">Tor Everything</string>
+<string name="pref_transparent_all_summary">Proxy traffic for all apps through Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Tor binaries successfully installed!</string>
+<string name="status_install_fail">The Tor binary files were unable to be installed. Please check the log and notify tor-assistants at torproject.org</string>
+
+<string name="title_error">Application Error</string>
+
+<string name="wizard_title">Welcome to Orbot</string>
+
+<string name="wizard_btn_tell_me_more">About Orbot</string>
+<string name="btn_next">Next</string>
+<string name="btn_back">Back</string>
+<string name="btn_finish">Finish</string>
+
+<string name="btn_okay">Okay</string>
+<string name="btn_cancel">Cancel</string>
+
+
+ <!-- Welcome Wizard strings (DJH) -->
+    <string name="wizard_welcome_msg">Orbot brings Tor to Android. Tor is free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.\n\n*WARNING:* Simply installing Orbot will _not_ magically anonymize your mobile traffic! This wizard will help you get started.</string>
+    <string name="wizard_details">Some Orbot Details</string>
+    <string name="wizard_details_msg">Orbot is an open-source application that contains Tor, LibEvent and Privoxy. It provides a local HTTP proxy (8118) and a SOCKS proxy (9050) into the Tor network. Orbot also has the ability, on rooted device, to send all internet traffic through Tor.</string>
+    <string name="wizard_permissions_root">Permission Granted</string>
+    <string name="wizard_permissions_stock">Orbot Permissions</string>
+    <string name="wizard_premissions_msg_root">Excellent! We\'ve detected that you have root permissions enabled for Orbot. We will use this power wisely.</string>
+    <string name="wizard_permissions_msg_stock"> While it is not required, Orbot can become a more powerful tool if your device has root access. Use the button below to grant Orbot superpowers! </string>
+   
+    <string name="wizard_permissions_no_root">If you don\'t have root access or have no idea what we\'re talking about, just be sure to use apps made to work with Orbot.</string>
+    <string name="wizard_permissions_consent">I understand and would like to continue without root</string>
+   
+    <string name="wizard_permission_enable_root">Grant Root for Orbot</string>
+    <string name="wizard_configure">Configure Torification</string>
+    <string name="wizard_configure_msg">Orbot gives you the option to route all application traffic through Tor OR to choose your applications individually.</string> 
+    <string name="wizard_configure_all">Proxy All Apps Through Tor</string>
+    <string name="wizard_configure_select_apps">Select Individual Apps for Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Orbot-enabled Apps</string>
+    <string name="wizard_tips_msg">We encourage you to download &amp; use apps that know how to connect directly to Orbot. Click on the buttons below to install.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Android 1.x Only) - Browser designed for privacy &amp; for Orbot</string>
+    <string name="wizard_tips_proxy">Proxy Settings - Learn how to configure apps to work with Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Proxy Settings</string>
+    <string name="wizard_proxy_help_msg">If the Android app you are using can support the use of an HTTP or SOCKS proxy, then you can configure it to connect to Orbot and use Tor.\n\n
+    The host settings is 127.0.0.1 or "localhost". For HTTP, the port setting is 8118. For SOCKS, the proxy is 9050. You should use SOCKS4A or SOCKS5 if possible.
+    \n\n
+    You can learn more about proxying on Android via the FAQ at: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Orbot is ready!</string>
+    <string name="wizard_final_msg">Hundreds of thousands of people around the world use Tor for a wide variety of reasons: journalists and bloggers, human rights workers, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens... and now you are ready to, as well!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+ <!-- END Welcome Wizard strings (DJH) -->
+
+	<string name="connect_first_time"> You\'ve successfully connected to the Tor network - but this does NOT mean your device is secure. You can use the \'Check\' option from the menu to test your browser. \n\nVisit us at https://guardianproject.info/apps/orbot or send an email to help at guardianproject.info to learn more.</string>
+
+	<string name="tor_check">This will open your default web browser to https://check.torproject.org in order to see if Orbot is probably configured and you are connected to Tor.</string>
+
+	
+    <string name="pref_hs_group">Hidden Services</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ar/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">اوربوت (Orbot)</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">بدء وإيقاف تور</string>
-    <string name="tor_proxy_service_process">خدمة وكيل تور</string>
-   
-<string name="status_starting_up">اوربوت يبدأ...</string>
-<string name="status_activated">أنا متصل بشبكة تور</string>
-<string name="status_disabled">"تم إيقاف اوربوت</string>
-<string name="status_shutting_down">جاري إغلاق اوربوت</string>
-
-<string name="tor_process_connecting">بدء تور...</string>
-<string name="tor_process_connecting_step2">ضبط التحكم...</string>
-<string name="tor_process_connecting_step3">مكتمل.</string>
-<string name="tor_process_connecting_step4">انتظار.</string>
-
-<string name="not_anonymous_yet">تحذير: حركة مرورك ليست خفية الى الآن! من فضلك قم بتكوين التطبيقات الخاصة بك لإستخدام HTTP proxy 127.0.0.1:8118 أو SOCK4A أو SOKS5 127.0.0.1:9050</string>
-<string name="menu_home">الصفحة الرئيسية</string>
-<string name="menu_browse">تصفّح</string>
-<string name="menu_settings">إعدادات</string>
-<string name="menu_log">السجل</string>
-<string name="menu_info">مساعدة</string>
-<string name="menu_apps">تطبيقات</string>
-<string name="menu_start">بدء</string>
-<string name="menu_stop">إيقاف</string>
-
-<string name="menu_about">حول</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">مساعدة</string>
-<string name="button_close">إغلاق</string>
-<string name="button_about">حول</string>
-
-<string name="button_clear_log">مسح السجل</string>
-
-
-<string name="menu_verify">فحص</string>
-<string name="menu_exit">خروج</string>
-<string name="powered_by">بدعم من مشروع تور</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">عملية توكيل غير مرئية أو ضمنية (يتطلب حقوق المسؤول- Root-)</string>
-<string name="pref_trans_proxy_title">عملية توكيل غير مرئية أو ضمنية</string>
-<string name="pref_trans_proxy_summary">عملية توريفاي أوتوماتيكية للتطبيقات</string>
-
-<string name="pref_transparent_all_title">تور كل شيء</string>
-<string name="pref_transparent_all_summary">حركة مرور الوكيل لجميع التطبيقات عبر تور</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">تم تثبيت ثنائيات تور بنجاح!</string>
-<string name="status_install_fail">غير قادر على تثبيت ملفات ثنائيات تور. يرجى التحقق من السجل وإعلامنا على البريد الإلكتروني tor-assistants at torproject.org</string>
-
-<string name="title_error">خطأ في التطبيق</string>
-
-<string name="wizard_title">مرحبا بك في أوربوت</string>
-
-<string name="wizard_btn_tell_me_more">عن أوربوت</string>
-<string name="btn_next">التالي</string>
-<string name="btn_back">رجوع</string>
-<string name="btn_finish">إنهاء</string>
-
-<string name="btn_okay">موافق</string>
-<string name="btn_cancel">إلغاء</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">بفضل أوربوت، صار ممكنا استعمال تور في أندرويد. تور هو برنامج مجاني وشبكة مفتوحة تساعد على حمايتك من مراقبة الشبكات التي تهدد الخصوصية والحرية الشخصية والعلاقات والأنشطة التجارية السرية ورقابة الدول المعروفة بإسم تحليل حركة المرور.
-
-*تحذير: *تثبيت أوربوت على جهازك_لن_يقوم بإخفاء تحركات حركة مرورك بشكل سحري! سوف يساعدك هذا المعالج على البدء.</string>
-    <string name="wizard_details">بعض التفاصيل عن أوربوت</string>
-    <string name="wizard_details_msg">أوربوت هو تطبيق مفتوح المصدر والذي يضم تور, LibEvent وPrixovy. يعمل على توفير وكيل HTTP محلي (8118) ووكيل SOCKS (9050) إلى شبكة تور. يتوفر لدى أوربوت القدرة على إرسال جميع حركات مرور الانترنت من خلال تور على الجهاز ذات حقوق المسؤول (root). </string>
-    <string name="wizard_permissions_root">تم منح الإذن</string>
-    <string name="wizard_permissions_stock">أذونات أوربوت</string>
-    <string name="wizard_premissions_msg_root">ممتاز! لقد وجدنا بأنه لديك أذونات حقوق المسؤول (root) لتمكين أوربوت. سوف نستخدم هذه السلطة بحكمة.</string>
-    <string name="wizard_permissions_msg_stock">رغم أنه ليس ضروريا، يمكن ان يصبح أوربوت أداة قوية إذا كان لدى جهازك صلاحية حقوق المسؤول (root). استخدم الزر بالأسفل لمنح أوربوت قوة أكبر!</string>
-   
-    <string name="wizard_permissions_no_root">إذا لم يكن لديك صلاحية حقوق المسؤول (root) أو ليست لديك أدنى فكرة عما نتحدث عنه، تأكد فقط من استخدام تطبيقات تعمل مع أوربوت.</string>
-    <string name="wizard_permissions_consent">أفهم ذلك وأود أن أستمر بدون حقوق المسؤول (root)</string>
-   
-    <string name="wizard_permission_enable_root">منح أوربوت حقوق المسؤول (root)</string>
-    <string name="wizard_configure">تكوين توريفاي</string>
-    <string name="wizard_configure_msg">أوربوت يعطيك الخيار لتوجيه جميع حركات مرور التطبيقات عبر تور OR لإختيار تطبيقاتك بشكل فردي.</string> 
-    <string name="wizard_configure_all">توكيل جميع التطبيقات عبر تور</string>
-    <string name="wizard_configure_select_apps">اختر التطبيقات الفردية لتور</string>
-    
-    
-    <string name="wizard_tips_tricks">تطبيقات مهيئة لأوربوت</string>
-    <string name="wizard_tips_msg">نشجعكم على تحميل واستخدام التطبيقات التي تعرف كيفية الاتصال مباشرة بأوربوت. اضغط على الأزرار في الأسفل للتثبيت.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (أندرويد 1.x فقط) - متصفح مصمّم للخصوصية لأوربوت </string>
-    <string name="wizard_tips_proxy">إعدادات الوكيل - تعلم كيفية تكوين التطبيقات لتعمل مع أوربوت</string>
-    
-    <string name="wizard_proxy_help_info">إعدادات الوكيل</string>
-    <string name="wizard_proxy_help_msg">اذا كان تطبيق أندرويد الذي تستخدمه يمكن ان يدعم استخدام وكيل HTTP او SOCKS , عندها يمكنك تكوينه للإتصال بأوربوت واستخدام تور.
-
-
-    اعدادات المستضيف هي 127.0.0.1 او "المستضيف المحلي". بالنسبة الى HTTP, فإن ضبط المنفذ هو 8118. بالنسبة الى SOCKS, فإن الوكيل هو 9050. يجب عليك استخدام SOCKS4A او SOCKS5 اذا امكن.
-    
-
-
-    يمكنك معرفة المزيد عن عملية توكيل غير مرئية للأندرويد عن طريق الأسئلة المتداولة (FAQ)  في: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">أوربوت جاهز!</string>
-    <string name="wizard_final_msg">مئات الآلاف من الناس في جميع أنحاء العالم يستخدمون تور لأسباب عديدة: الصحفيين والمدونين، والعاملين في مجال حقوق الإنسان، والجنود والشركات والمواطنين من الأنظمة القمعية، والمواطنين العاديين ... والآن أنت مستعد لأن تستخدمه كذلك!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time"> لقد قمت بإتصال ناجح الى شبكة تور - لكن هذا لا يعني بأن جهازك في مأمن. يمكنك استخدام خيار \'تحقق\' من القائمة لإختبار المتصفح الخاص بك. 
-
- قم بزيارتنا على https://guardianproject.info/apps/orbot او ارسل رسالة الكترونية الى help at guardianproject.info لمعرفة المزيد.</string>
-
-	<string name="tor_check">سيؤدي هذا إلى فتح المتصفح الافتراضي الخاص بك على العنوان https://check.torproject.org من اجل التحقق من تكوين أوربوت بشكل صحيح وبأنك متصل بتور.</string>
-
-	
-    <string name="pref_hs_group">خدمات خفية</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-ar/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ar/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">اوربوت (Orbot)</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">بدء وإيقاف تور</string>
+    <string name="tor_proxy_service_process">خدمة وكيل تور</string>
+   
+<string name="status_starting_up">اوربوت يبدأ...</string>
+<string name="status_activated">أنا متصل بشبكة تور</string>
+<string name="status_disabled">"تم إيقاف اوربوت</string>
+<string name="status_shutting_down">جاري إغلاق اوربوت</string>
+
+<string name="tor_process_connecting">بدء تور...</string>
+<string name="tor_process_connecting_step2">ضبط التحكم...</string>
+<string name="tor_process_connecting_step3">مكتمل.</string>
+<string name="tor_process_connecting_step4">انتظار.</string>
+
+<string name="not_anonymous_yet">تحذير: حركة مرورك ليست خفية الى الآن! من فضلك قم بتكوين التطبيقات الخاصة بك لإستخدام HTTP proxy 127.0.0.1:8118 أو SOCK4A أو SOKS5 127.0.0.1:9050</string>
+<string name="menu_home">الصفحة الرئيسية</string>
+<string name="menu_browse">تصفّح</string>
+<string name="menu_settings">إعدادات</string>
+<string name="menu_log">السجل</string>
+<string name="menu_info">مساعدة</string>
+<string name="menu_apps">تطبيقات</string>
+<string name="menu_start">بدء</string>
+<string name="menu_stop">إيقاف</string>
+
+<string name="menu_about">حول</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">مساعدة</string>
+<string name="button_close">إغلاق</string>
+<string name="button_about">حول</string>
+
+<string name="button_clear_log">مسح السجل</string>
+
+
+<string name="menu_verify">فحص</string>
+<string name="menu_exit">خروج</string>
+<string name="powered_by">بدعم من مشروع تور</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">عملية توكيل غير مرئية أو ضمنية (يتطلب حقوق المسؤول- Root-)</string>
+<string name="pref_trans_proxy_title">عملية توكيل غير مرئية أو ضمنية</string>
+<string name="pref_trans_proxy_summary">عملية توريفاي أوتوماتيكية للتطبيقات</string>
+
+<string name="pref_transparent_all_title">تور كل شيء</string>
+<string name="pref_transparent_all_summary">حركة مرور الوكيل لجميع التطبيقات عبر تور</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">تم تثبيت ثنائيات تور بنجاح!</string>
+<string name="status_install_fail">غير قادر على تثبيت ملفات ثنائيات تور. يرجى التحقق من السجل وإعلامنا على البريد الإلكتروني tor-assistants at torproject.org</string>
+
+<string name="title_error">خطأ في التطبيق</string>
+
+<string name="wizard_title">مرحبا بك في أوربوت</string>
+
+<string name="wizard_btn_tell_me_more">عن أوربوت</string>
+<string name="btn_next">التالي</string>
+<string name="btn_back">رجوع</string>
+<string name="btn_finish">إنهاء</string>
+
+<string name="btn_okay">موافق</string>
+<string name="btn_cancel">إلغاء</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">بفضل أوربوت، صار ممكنا استعمال تور في أندرويد. تور هو برنامج مجاني وشبكة مفتوحة تساعد على حمايتك من مراقبة الشبكات التي تهدد الخصوصية والحرية الشخصية والعلاقات والأنشطة التجارية السرية ورقابة الدول المعروفة بإسم تحليل حركة المرور.
+
+*تحذير: *تثبيت أوربوت على جهازك_لن_يقوم بإخفاء تحركات حركة مرورك بشكل سحري! سوف يساعدك هذا المعالج على البدء.</string>
+    <string name="wizard_details">بعض التفاصيل عن أوربوت</string>
+    <string name="wizard_details_msg">أوربوت هو تطبيق مفتوح المصدر والذي يضم تور, LibEvent وPrixovy. يعمل على توفير وكيل HTTP محلي (8118) ووكيل SOCKS (9050) إلى شبكة تور. يتوفر لدى أوربوت القدرة على إرسال جميع حركات مرور الانترنت من خلال تور على الجهاز ذات حقوق المسؤول (root). </string>
+    <string name="wizard_permissions_root">تم منح الإذن</string>
+    <string name="wizard_permissions_stock">أذونات أوربوت</string>
+    <string name="wizard_premissions_msg_root">ممتاز! لقد وجدنا بأنه لديك أذونات حقوق المسؤول (root) لتمكين أوربوت. سوف نستخدم هذه السلطة بحكمة.</string>
+    <string name="wizard_permissions_msg_stock">رغم أنه ليس ضروريا، يمكن ان يصبح أوربوت أداة قوية إذا كان لدى جهازك صلاحية حقوق المسؤول (root). استخدم الزر بالأسفل لمنح أوربوت قوة أكبر!</string>
+   
+    <string name="wizard_permissions_no_root">إذا لم يكن لديك صلاحية حقوق المسؤول (root) أو ليست لديك أدنى فكرة عما نتحدث عنه، تأكد فقط من استخدام تطبيقات تعمل مع أوربوت.</string>
+    <string name="wizard_permissions_consent">أفهم ذلك وأود أن أستمر بدون حقوق المسؤول (root)</string>
+   
+    <string name="wizard_permission_enable_root">منح أوربوت حقوق المسؤول (root)</string>
+    <string name="wizard_configure">تكوين توريفاي</string>
+    <string name="wizard_configure_msg">أوربوت يعطيك الخيار لتوجيه جميع حركات مرور التطبيقات عبر تور OR لإختيار تطبيقاتك بشكل فردي.</string> 
+    <string name="wizard_configure_all">توكيل جميع التطبيقات عبر تور</string>
+    <string name="wizard_configure_select_apps">اختر التطبيقات الفردية لتور</string>
+    
+    
+    <string name="wizard_tips_tricks">تطبيقات مهيئة لأوربوت</string>
+    <string name="wizard_tips_msg">نشجعكم على تحميل واستخدام التطبيقات التي تعرف كيفية الاتصال مباشرة بأوربوت. اضغط على الأزرار في الأسفل للتثبيت.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (أندرويد 1.x فقط) - متصفح مصمّم للخصوصية لأوربوت </string>
+    <string name="wizard_tips_proxy">إعدادات الوكيل - تعلم كيفية تكوين التطبيقات لتعمل مع أوربوت</string>
+    
+    <string name="wizard_proxy_help_info">إعدادات الوكيل</string>
+    <string name="wizard_proxy_help_msg">اذا كان تطبيق أندرويد الذي تستخدمه يمكن ان يدعم استخدام وكيل HTTP او SOCKS , عندها يمكنك تكوينه للإتصال بأوربوت واستخدام تور.
+
+
+    اعدادات المستضيف هي 127.0.0.1 او "المستضيف المحلي". بالنسبة الى HTTP, فإن ضبط المنفذ هو 8118. بالنسبة الى SOCKS, فإن الوكيل هو 9050. يجب عليك استخدام SOCKS4A او SOCKS5 اذا امكن.
+    
+
+
+    يمكنك معرفة المزيد عن عملية توكيل غير مرئية للأندرويد عن طريق الأسئلة المتداولة (FAQ)  في: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">أوربوت جاهز!</string>
+    <string name="wizard_final_msg">مئات الآلاف من الناس في جميع أنحاء العالم يستخدمون تور لأسباب عديدة: الصحفيين والمدونين، والعاملين في مجال حقوق الإنسان، والجنود والشركات والمواطنين من الأنظمة القمعية، والمواطنين العاديين ... والآن أنت مستعد لأن تستخدمه كذلك!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time"> لقد قمت بإتصال ناجح الى شبكة تور - لكن هذا لا يعني بأن جهازك في مأمن. يمكنك استخدام خيار \'تحقق\' من القائمة لإختبار المتصفح الخاص بك. 
+
+ قم بزيارتنا على https://guardianproject.info/apps/orbot او ارسل رسالة الكترونية الى help at guardianproject.info لمعرفة المزيد.</string>
+
+	<string name="tor_check">سيؤدي هذا إلى فتح المتصفح الافتراضي الخاص بك على العنوان https://check.torproject.org من اجل التحقق من تكوين أوربوت بشكل صحيح وبأنك متصل بتور.</string>
+
+	
+    <string name="pref_hs_group">خدمات خفية</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ca/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">Engega o atura Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot s\'està iniciant...</string>
-<string name="status_activated">Connectat a la xarxa Tor</string>
-<string name="status_disabled">Orbot està desactivat</string>
-<string name="status_shutting_down">Orbot s\'està aturant</string>
-
-<string name="tor_process_connecting">Iniciant Tor...</string>
-<string name="tor_process_connecting_step2">Preparant el control...</string>
-<string name="tor_process_connecting_step3">acomplert.</string>
-<string name="tor_process_connecting_step4">esperant.</string>
-
-<string name="not_anonymous_yet">ATENCIÓ : El trànsit de la teva connexió ja no es anònim! Siusplau, configura les teves aplicacions per a usar HTTP proxy 127.0.0.1:8118, per SOCKS4A o SOCKS5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Lloc d\'inici</string>
-<string name="menu_browse">Navega</string>
-<string name="menu_settings">Preferències</string>
-<string name="menu_log">Registre</string>
-<string name="menu_info">Ajut</string>
-<string name="menu_apps">Aplicacions</string>
-<string name="menu_start">Inici</string>
-<string name="menu_stop">Atura</string>
-
-<string name="menu_about">Quant a...</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Ajut</string>
-<string name="button_close">Tanca</string>
-<string name="button_about">Quant a...</string>
-
-<string name="button_clear_log">Esborra el registre</string>
-
-
-<string name="menu_verify">Prova</string>
-<string name="menu_exit">Surt</string>
-<string name="powered_by">Funciona gràcies al Projecte Tor</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Utilitza un proxy transparent (requereix accés)</string>
-<string name="pref_trans_proxy_title">Utilitza un proxy transparent</string>
-<string name="pref_trans_proxy_summary">Automatitza Tor per a les aplicacions</string>
-
-<string name="pref_transparent_all_title">Automatitza Tor per a tot</string>
-<string name="pref_transparent_all_summary">Canalitza tot el trànsit de proxy de les aplicacions per Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Binaris de Tor instal·lats correctament!</string>
-<string name="status_install_fail">Els fitxers binaris de Tor no s\'han pogut instalar. Per favor, comprova el registre i notifica-ho a tor-assistants at torproject.org</string>
-
-<string name="title_error">Error de l\'aplicació</string>
-
-<string name="wizard_title">Benvingut/da a Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Quant a Orbot...</string>
-<string name="btn_next">Següent</string>
-<string name="btn_back">Enrere</string>
-<string name="btn_finish">Fi</string>
-
-<string name="btn_okay">D\'acord</string>
-<string name="btn_cancel">Cancel·la</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot et porta Tor a l\'Android. Tor és programari lliure i una xarxa oberta que t\'ajuda a defensar-te d\'una vigilància a través de la xarxa, amenaçant la teva privacitat i llibertat personal, informació confidencial, activitats i relacions, i seguretat estatal coneguda com anàlisi de trànsit.
-
-*ALERTA:* Instal·lar Orbot _no_ convertirà la teva connexió en anònima instantàniament! Aquest assistent t\'ajudarà a començar.</string>
-    <string name="wizard_details">Alguns detalls d\'Orbot...</string>
-    <string name="wizard_details_msg">Orbot és una aplicació de codi lliure que conté Tor, LibEvent i Privoxy. Proporciona un Proxy HTTP local (8118) i un proxy SOCKS (9050) a la xarxa Tor. Orbot també té capacitat d\'enviar tot el trànsit de dades d\'internet a través de Tor.</string>
-    <string name="wizard_permissions_root">Permís concedit</string>
-    <string name="wizard_permissions_stock">Permisos d\'Orbot</string>
-    <string name="wizard_premissions_msg_root">Perfecte! Hem detectat que tens els permisos matriu activats per a Orbot. Utilitzarem aquest poder sàviament.</string>
-    <string name="wizard_permissions_msg_stock">Encara que no és imprescindible, Orbot pot esdevenir una eina molt més potent si el teu terminal té accés complet. Utilitza el botó d\'aquí sota per conferir superpoders a Orbot!</string>
-   
-    <string name="wizard_permissions_no_root">Si no tens accés complet, o no tens ni idea del què t\'estem parlant, simplement assegura\'t d\'utilitzar aplicacions fetes per a funcionar amb Orbot.</string>
-    <string name="wizard_permissions_consent">Ho entenc i vull continuar sense accés complet.</string>
-   
-    <string name="wizard_permission_enable_root">Concedeix accés complet a Orbot</string>
-    <string name="wizard_configure">Configura la connexió a Tor</string>
-    <string name="wizard_configure_msg">Orbot t\'ofereix l\'opció de conduir el trànsit de totes les aplicacions per Tor o bé escollir quines aplicacions vols utilitzar amb Tor.</string> 
-    <string name="wizard_configure_all">Connecta totes les aplicacions per Proxy per Tor.</string>
-    <string name="wizard_configure_select_apps">Selecciona aplicacions individuals per a funcionar amb Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Aplicacions per a usar-se amb Orbot</string>
-    <string name="wizard_tips_msg">T\'animem a descarregar-te &amp; utilitza aplicacions que sàpiguen com connectar-se directament a Orbot. Fes clic als botons de sota per instal·lar.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Només Android 1.x) - Navegador dissenyat per la privacitat &amp; per a Orbot</string>
-    <string name="wizard_tips_proxy">Coniguració de Proxy - Aprèn a configurar aplicacions per a què funcionin amb Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Configuració de Proxy</string>
-    <string name="wizard_proxy_help_msg">Si l\'aplicació d\'Android que estàs utilitzant admet l\'ús d\'un proxy HTTP o SOCKS, pots configurar-la per a connectar-se a Orbot i utilitzar Tor.
-
-
-La configuració de l\'amfitrió és 127.0.0.1 o "localhost". Per a HTTP, el port actiu és 8118. Per a SOCKS, el proxy és 9050. Hauries d\'utlitzar SOCKS4A o SOCKS5 si és possible.
-
-
-
-Pots aprendre més coses sobre l\'ús dels proxys a Android al FAQ de: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Orbot és a punt!</string>
-    <string name="wizard_final_msg">Centenars de milers de persones arreu del món utilitzen Tor per un gran ventall de raons: periodistes i blocaires, treballadors pels drets humans, agents de l\'autoritat, soldats, corporacions, ciutadans de règims opressors, i ciutadans qualssevol... I ara tu també ho pots fer!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">T\'has connectat correctament a la xarxa Tor, però això NO vol dir que el teu dispositiu sigui segur. Pots utilitzar la opció \'Comprova\' del menú per provar el teu navegador. 
-
-Visita\'ns a https://guardianproject.info/apps/orbot o envia\'ns un correu electrònic a help at guardianproject.info per a saber-ne més.</string>
-
-	<string name="tor_check">Això obrirà el teu navegador web per defecte i es connectarà a https://check.torproject.org per tal de comprovar si Orbot està configurat correctament i estàs connectat/da a Tor.</string>
-
-	
-    <string name="pref_hs_group">Serveis ocults</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-ca/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ca/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">Engega o atura Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot s\'està iniciant...</string>
+<string name="status_activated">Connectat a la xarxa Tor</string>
+<string name="status_disabled">Orbot està desactivat</string>
+<string name="status_shutting_down">Orbot s\'està aturant</string>
+
+<string name="tor_process_connecting">Iniciant Tor...</string>
+<string name="tor_process_connecting_step2">Preparant el control...</string>
+<string name="tor_process_connecting_step3">acomplert.</string>
+<string name="tor_process_connecting_step4">esperant.</string>
+
+<string name="not_anonymous_yet">ATENCIÓ : El trànsit de la teva connexió ja no es anònim! Siusplau, configura les teves aplicacions per a usar HTTP proxy 127.0.0.1:8118, per SOCKS4A o SOCKS5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Lloc d\'inici</string>
+<string name="menu_browse">Navega</string>
+<string name="menu_settings">Preferències</string>
+<string name="menu_log">Registre</string>
+<string name="menu_info">Ajut</string>
+<string name="menu_apps">Aplicacions</string>
+<string name="menu_start">Inici</string>
+<string name="menu_stop">Atura</string>
+
+<string name="menu_about">Quant a...</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Ajut</string>
+<string name="button_close">Tanca</string>
+<string name="button_about">Quant a...</string>
+
+<string name="button_clear_log">Esborra el registre</string>
+
+
+<string name="menu_verify">Prova</string>
+<string name="menu_exit">Surt</string>
+<string name="powered_by">Funciona gràcies al Projecte Tor</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Utilitza un proxy transparent (requereix accés)</string>
+<string name="pref_trans_proxy_title">Utilitza un proxy transparent</string>
+<string name="pref_trans_proxy_summary">Automatitza Tor per a les aplicacions</string>
+
+<string name="pref_transparent_all_title">Automatitza Tor per a tot</string>
+<string name="pref_transparent_all_summary">Canalitza tot el trànsit de proxy de les aplicacions per Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Binaris de Tor instal·lats correctament!</string>
+<string name="status_install_fail">Els fitxers binaris de Tor no s\'han pogut instalar. Per favor, comprova el registre i notifica-ho a tor-assistants at torproject.org</string>
+
+<string name="title_error">Error de l\'aplicació</string>
+
+<string name="wizard_title">Benvingut/da a Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Quant a Orbot...</string>
+<string name="btn_next">Següent</string>
+<string name="btn_back">Enrere</string>
+<string name="btn_finish">Fi</string>
+
+<string name="btn_okay">D\'acord</string>
+<string name="btn_cancel">Cancel·la</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot et porta Tor a l\'Android. Tor és programari lliure i una xarxa oberta que t\'ajuda a defensar-te d\'una vigilància a través de la xarxa, amenaçant la teva privacitat i llibertat personal, informació confidencial, activitats i relacions, i seguretat estatal coneguda com anàlisi de trànsit.
+
+*ALERTA:* Instal·lar Orbot _no_ convertirà la teva connexió en anònima instantàniament! Aquest assistent t\'ajudarà a començar.</string>
+    <string name="wizard_details">Alguns detalls d\'Orbot...</string>
+    <string name="wizard_details_msg">Orbot és una aplicació de codi lliure que conté Tor, LibEvent i Privoxy. Proporciona un Proxy HTTP local (8118) i un proxy SOCKS (9050) a la xarxa Tor. Orbot també té capacitat d\'enviar tot el trànsit de dades d\'internet a través de Tor.</string>
+    <string name="wizard_permissions_root">Permís concedit</string>
+    <string name="wizard_permissions_stock">Permisos d\'Orbot</string>
+    <string name="wizard_premissions_msg_root">Perfecte! Hem detectat que tens els permisos matriu activats per a Orbot. Utilitzarem aquest poder sàviament.</string>
+    <string name="wizard_permissions_msg_stock">Encara que no és imprescindible, Orbot pot esdevenir una eina molt més potent si el teu terminal té accés complet. Utilitza el botó d\'aquí sota per conferir superpoders a Orbot!</string>
+   
+    <string name="wizard_permissions_no_root">Si no tens accés complet, o no tens ni idea del què t\'estem parlant, simplement assegura\'t d\'utilitzar aplicacions fetes per a funcionar amb Orbot.</string>
+    <string name="wizard_permissions_consent">Ho entenc i vull continuar sense accés complet.</string>
+   
+    <string name="wizard_permission_enable_root">Concedeix accés complet a Orbot</string>
+    <string name="wizard_configure">Configura la connexió a Tor</string>
+    <string name="wizard_configure_msg">Orbot t\'ofereix l\'opció de conduir el trànsit de totes les aplicacions per Tor o bé escollir quines aplicacions vols utilitzar amb Tor.</string> 
+    <string name="wizard_configure_all">Connecta totes les aplicacions per Proxy per Tor.</string>
+    <string name="wizard_configure_select_apps">Selecciona aplicacions individuals per a funcionar amb Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Aplicacions per a usar-se amb Orbot</string>
+    <string name="wizard_tips_msg">T\'animem a descarregar-te &amp; utilitza aplicacions que sàpiguen com connectar-se directament a Orbot. Fes clic als botons de sota per instal·lar.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Només Android 1.x) - Navegador dissenyat per la privacitat &amp; per a Orbot</string>
+    <string name="wizard_tips_proxy">Coniguració de Proxy - Aprèn a configurar aplicacions per a què funcionin amb Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Configuració de Proxy</string>
+    <string name="wizard_proxy_help_msg">Si l\'aplicació d\'Android que estàs utilitzant admet l\'ús d\'un proxy HTTP o SOCKS, pots configurar-la per a connectar-se a Orbot i utilitzar Tor.
+
+
+La configuració de l\'amfitrió és 127.0.0.1 o "localhost". Per a HTTP, el port actiu és 8118. Per a SOCKS, el proxy és 9050. Hauries d\'utlitzar SOCKS4A o SOCKS5 si és possible.
+
+
+
+Pots aprendre més coses sobre l\'ús dels proxys a Android al FAQ de: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Orbot és a punt!</string>
+    <string name="wizard_final_msg">Centenars de milers de persones arreu del món utilitzen Tor per un gran ventall de raons: periodistes i blocaires, treballadors pels drets humans, agents de l\'autoritat, soldats, corporacions, ciutadans de règims opressors, i ciutadans qualssevol... I ara tu també ho pots fer!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">T\'has connectat correctament a la xarxa Tor, però això NO vol dir que el teu dispositiu sigui segur. Pots utilitzar la opció \'Comprova\' del menú per provar el teu navegador. 
+
+Visita\'ns a https://guardianproject.info/apps/orbot o envia\'ns un correu electrònic a help at guardianproject.info per a saber-ne més.</string>
+
+	<string name="tor_check">Això obrirà el teu navegador web per defecte i es connectarà a https://check.torproject.org per tal de comprovar si Orbot està configurat correctament i estàs connectat/da a Tor.</string>
+
+	
+    <string name="pref_hs_group">Serveis ocults</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-de/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">starte und beende Tor</string>
-    <string name="tor_proxy_service_process">Tor Proxydienst</string>
-   
-<string name="status_starting_up">Orbot startet...</string>
-<string name="status_activated">Verbunden mit dem Tor-Netzwerk</string>
-<string name="status_disabled">"Orbot ist deaktiviert</string>
-<string name="status_shutting_down">Orbot wird beendet</string>
-
-<string name="tor_process_connecting">Starte Tor...</string>
-<string name="tor_process_connecting_step2">Baue Kontrollverbindung auf...</string>
-<string name="tor_process_connecting_step3">erfolgreich abgeschlossen.</string>
-<string name="tor_process_connecting_step4">warte.</string>
-
-<string name="not_anonymous_yet">WARNUNG: Die Verbindung ist noch nicht anonymisiert! Bitte stellen Sie Ihre Programme so ein, dass sie entwederden  HTTP proxy 127.0.0.1:8118, SOCKS4A oder SOCKS proxy 127.0.0.1:9050 nutzen.</string>
-<string name="menu_home">Home</string>
-<string name="menu_browse">Durchstöbern</string>
-<string name="menu_settings">Einstellungen</string>
-<string name="menu_log">Log</string>
-<string name="menu_info">Hilfe</string>
-<string name="menu_apps">Apps</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stop</string>
-
-<string name="menu_about">Über</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Hilfe</string>
-<string name="button_close">Schließen</string>
-<string name="button_about">Über</string>
-
-<string name="button_clear_log">Log löschen</string>
-
-
-<string name="menu_verify">Überprüfen</string>
-<string name="menu_exit">Beenden</string>
-<string name="powered_by">ermöglicht durch das Tor Projekt</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Transparenter Proxy (benötigt Administratorrechte)</string>
-<string name="pref_trans_proxy_title">Transparenter Proxy</string>
-<string name="pref_trans_proxy_summary">Anwendungen automatisch durch Tor leiten</string>
-
-<string name="pref_transparent_all_title">Alles durch Tor leiten</string>
-<string name="pref_transparent_all_summary">Verbindungen aller Anwendungen durch Tor leiten</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Die Tor-Pakete wurden erfolgreich installiert!</string>
-<string name="status_install_fail">Die Tor-Pakete konnten nicht erfolgreich installiert werden. Bitte prüfen Sie das Logfile und wenden Sie sich an tor-assistants at torproject.org.</string>
-
-<string name="title_error">Anwendungsfehler</string>
-
-<string name="wizard_title">Willkommen bei Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Über Orbot</string>
-<string name="btn_next">Weiter</string>
-<string name="btn_back">Zurück</string>
-<string name="btn_finish">Fertigstellen</string>
-
-<string name="btn_okay">OK</string>
-<string name="btn_cancel">Abbrechen</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot bringt Tor auf Android Geräte. Tor ist ein freies Programm und ein offenes Netzwerk, dass Ihnen hilft sich gegen Datenverkehrsüberwachung zu wehren, eine Form der Onlineüberwachung, die Ihre persönliche Freiheit, Privatsphäre, vertrauliche Geschäfte und Geschäftseziehungen bedroht.
-
-*WARNUNG:* Durch die Installation von Orbot wird _nicht_ sofort Ihr kompletter Datenverkehr anonymisiert! Hilfestellung erhalten Sie von diesem Assitenten.</string>
-    <string name="wizard_details">Nähere Informationen zu Orbot</string>
-    <string name="wizard_details_msg">Orbot ist eine quelloffene Anwendung die Tor, LibEvent und Privoxy enthält. Es stellt einen lokalen HTTP Proxy (8118) und einen SOCKS Proxy (9050) zum Tor-Netzwerk zur Verfügung. Orbot hat auf einem System mit Administrationsrechten auch die Fähigkeit, jeglichen Internetverkehr über das Tor-Netzwerk abzuwickeln.</string>
-    <string name="wizard_permissions_root">Erlaubnis erteilt</string>
-    <string name="wizard_permissions_stock">Orbot Rechte</string>
-    <string name="wizard_premissions_msg_root">Exzellent! Wir haben festgestellt, dass Sie Orbot Administrator-Rechte eingeräumt haben. Wir werden diese Macht weise nutzen.</string>
-    <string name="wizard_permissions_msg_stock">Obwohl es nicht nötig ist, kann Orbot ein mächtigeres Tool werden, wenn Sie ihm Administrator-Rechte einräumen. Drücken Sie auf den Kopf unten um Orbot diese Superkräfte einzuräumen.</string>
-   
-    <string name="wizard_permissions_no_root">Falls Sie keinen Administrator-Zugang haben oder nicht wissen was das ist, stellen Sie sicher, dass Sie Anwendungen benutzen die mit Orbot kompatibel können.</string>
-    <string name="wizard_permissions_consent">Ich habe verstanden und möchte ohne Administrator-Rechte weitermachen.</string>
-   
-    <string name="wizard_permission_enable_root">Orbot Administrator-Rechte einräumen</string>
-    <string name="wizard_configure">Configure Torification</string>
-    <string name="wizard_configure_msg">Orbot gibt Ihnen die Wahl den Datenverkehr aller Programme durch Tor zu leiten ODER die Wahl für alle Programme einzeln zu treffen.</string> 
-    <string name="wizard_configure_all">Den Verkehr aller Programme durch Tor leiten</string>
-    <string name="wizard_configure_select_apps">Programme einzeln wählen</string>
-    
-    
-    <string name="wizard_tips_tricks">Programme, für die Orbot aktiviert ist</string>
-    <string name="wizard_tips_msg">Wir raten Ihnen Programme herunterzuladen &amp; zu nutzen, die wissen, wie sie sich direkt mit Orbot verbinden. Klicken Sie zum Installieren auf den Knopf unten.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Nur Android 1.x) - Ein für Privatsphäre &amp; Orbot entworfener Browser</string>
-    <string name="wizard_tips_proxy">Proxy-Einstellungen - Lernen Sie Anwendungen so zu konfigurieren, dass sie mit Orbot zusammenarbeiten.</string>
-    
-    <string name="wizard_proxy_help_info">Proxy-Einstellungen</string>
-    <string name="wizard_proxy_help_msg">Wenn das Android-Programm, das Sie benutzten die Verwendung von HTTP- oder SOCKS-Proxys unterstützt, können Sie es konfigurieren sich mit Orbot zu verbinden und Tor zu nutzen.
-
-
-Die Host-Einstellungen sind 127.0.0.1 oder "localhost". Die Port-Einstellungen sind 8118 für HTTP und 9050 für SOCKS. Sie sollten versuchen SOCKS4A oder SOCKS5 zu benutzen.
-
-
-
-Erfahren Sie mehr über die Verwendung von Proxys unter Android in den FAQ unter http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Orbot ist bereit!</string>
-    <string name="wizard_final_msg">Hunderttausende Menschen auf der ganzen Welt nutzen Tor aus einer Vielzahl von Gründen: Journalisten und Blogger, Menschenrechtsaktivisten, Strafverfolgungsbehörden, Soldaten, Unternehmen, Bürger repressiver Regime und ganz normale Menschen... und sind Sie ebenfalls bereit!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">Sie haben sich erfolgreich mit dem Tor-Netzwerk verbunden - das bedeutet aber NICHT, dass Ihr Gerät sicher ist. Sie können die \'Überprüfen\'-Option aus dem Menü benutzen, um Ihren Browser zu testen. 
-
-Besuchen Sie https://guardianproject.info/apps/orbot oder senden Sie eine E-Mail an help at guardianproject.info um mehr zu erfahren.</string>
-
-	<string name="tor_check">Das wird die Seite https://check.torproject.org in Ihrem Webbrowser öffnen, so dass Sie überprüfen können, ob Orbot richtig configuriert ist und Sie mit Tor verbunden sind.</string>
-
-	
-    <string name="pref_hs_group">Versteckte Dienste</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-de/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-de/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">starte und beende Tor</string>
+    <string name="tor_proxy_service_process">Tor Proxydienst</string>
+   
+<string name="status_starting_up">Orbot startet...</string>
+<string name="status_activated">Verbunden mit dem Tor-Netzwerk</string>
+<string name="status_disabled">"Orbot ist deaktiviert</string>
+<string name="status_shutting_down">Orbot wird beendet</string>
+
+<string name="tor_process_connecting">Starte Tor...</string>
+<string name="tor_process_connecting_step2">Baue Kontrollverbindung auf...</string>
+<string name="tor_process_connecting_step3">erfolgreich abgeschlossen.</string>
+<string name="tor_process_connecting_step4">warte.</string>
+
+<string name="not_anonymous_yet">WARNUNG: Die Verbindung ist noch nicht anonymisiert! Bitte stellen Sie Ihre Programme so ein, dass sie entwederden  HTTP proxy 127.0.0.1:8118, SOCKS4A oder SOCKS proxy 127.0.0.1:9050 nutzen.</string>
+<string name="menu_home">Home</string>
+<string name="menu_browse">Durchstöbern</string>
+<string name="menu_settings">Einstellungen</string>
+<string name="menu_log">Log</string>
+<string name="menu_info">Hilfe</string>
+<string name="menu_apps">Apps</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stop</string>
+
+<string name="menu_about">Über</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Hilfe</string>
+<string name="button_close">Schließen</string>
+<string name="button_about">Über</string>
+
+<string name="button_clear_log">Log löschen</string>
+
+
+<string name="menu_verify">Überprüfen</string>
+<string name="menu_exit">Beenden</string>
+<string name="powered_by">ermöglicht durch das Tor Projekt</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Transparenter Proxy (benötigt Administratorrechte)</string>
+<string name="pref_trans_proxy_title">Transparenter Proxy</string>
+<string name="pref_trans_proxy_summary">Anwendungen automatisch durch Tor leiten</string>
+
+<string name="pref_transparent_all_title">Alles durch Tor leiten</string>
+<string name="pref_transparent_all_summary">Verbindungen aller Anwendungen durch Tor leiten</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Die Tor-Pakete wurden erfolgreich installiert!</string>
+<string name="status_install_fail">Die Tor-Pakete konnten nicht erfolgreich installiert werden. Bitte prüfen Sie das Logfile und wenden Sie sich an tor-assistants at torproject.org.</string>
+
+<string name="title_error">Anwendungsfehler</string>
+
+<string name="wizard_title">Willkommen bei Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Über Orbot</string>
+<string name="btn_next">Weiter</string>
+<string name="btn_back">Zurück</string>
+<string name="btn_finish">Fertigstellen</string>
+
+<string name="btn_okay">OK</string>
+<string name="btn_cancel">Abbrechen</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot bringt Tor auf Android Geräte. Tor ist ein freies Programm und ein offenes Netzwerk, dass Ihnen hilft sich gegen Datenverkehrsüberwachung zu wehren, eine Form der Onlineüberwachung, die Ihre persönliche Freiheit, Privatsphäre, vertrauliche Geschäfte und Geschäftseziehungen bedroht.
+
+*WARNUNG:* Durch die Installation von Orbot wird _nicht_ sofort Ihr kompletter Datenverkehr anonymisiert! Hilfestellung erhalten Sie von diesem Assitenten.</string>
+    <string name="wizard_details">Nähere Informationen zu Orbot</string>
+    <string name="wizard_details_msg">Orbot ist eine quelloffene Anwendung die Tor, LibEvent und Privoxy enthält. Es stellt einen lokalen HTTP Proxy (8118) und einen SOCKS Proxy (9050) zum Tor-Netzwerk zur Verfügung. Orbot hat auf einem System mit Administrationsrechten auch die Fähigkeit, jeglichen Internetverkehr über das Tor-Netzwerk abzuwickeln.</string>
+    <string name="wizard_permissions_root">Erlaubnis erteilt</string>
+    <string name="wizard_permissions_stock">Orbot Rechte</string>
+    <string name="wizard_premissions_msg_root">Exzellent! Wir haben festgestellt, dass Sie Orbot Administrator-Rechte eingeräumt haben. Wir werden diese Macht weise nutzen.</string>
+    <string name="wizard_permissions_msg_stock">Obwohl es nicht nötig ist, kann Orbot ein mächtigeres Tool werden, wenn Sie ihm Administrator-Rechte einräumen. Drücken Sie auf den Kopf unten um Orbot diese Superkräfte einzuräumen.</string>
+   
+    <string name="wizard_permissions_no_root">Falls Sie keinen Administrator-Zugang haben oder nicht wissen was das ist, stellen Sie sicher, dass Sie Anwendungen benutzen die mit Orbot kompatibel können.</string>
+    <string name="wizard_permissions_consent">Ich habe verstanden und möchte ohne Administrator-Rechte weitermachen.</string>
+   
+    <string name="wizard_permission_enable_root">Orbot Administrator-Rechte einräumen</string>
+    <string name="wizard_configure">Configure Torification</string>
+    <string name="wizard_configure_msg">Orbot gibt Ihnen die Wahl den Datenverkehr aller Programme durch Tor zu leiten ODER die Wahl für alle Programme einzeln zu treffen.</string> 
+    <string name="wizard_configure_all">Den Verkehr aller Programme durch Tor leiten</string>
+    <string name="wizard_configure_select_apps">Programme einzeln wählen</string>
+    
+    
+    <string name="wizard_tips_tricks">Programme, für die Orbot aktiviert ist</string>
+    <string name="wizard_tips_msg">Wir raten Ihnen Programme herunterzuladen &amp; zu nutzen, die wissen, wie sie sich direkt mit Orbot verbinden. Klicken Sie zum Installieren auf den Knopf unten.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Nur Android 1.x) - Ein für Privatsphäre &amp; Orbot entworfener Browser</string>
+    <string name="wizard_tips_proxy">Proxy-Einstellungen - Lernen Sie Anwendungen so zu konfigurieren, dass sie mit Orbot zusammenarbeiten.</string>
+    
+    <string name="wizard_proxy_help_info">Proxy-Einstellungen</string>
+    <string name="wizard_proxy_help_msg">Wenn das Android-Programm, das Sie benutzten die Verwendung von HTTP- oder SOCKS-Proxys unterstützt, können Sie es konfigurieren sich mit Orbot zu verbinden und Tor zu nutzen.
+
+
+Die Host-Einstellungen sind 127.0.0.1 oder "localhost". Die Port-Einstellungen sind 8118 für HTTP und 9050 für SOCKS. Sie sollten versuchen SOCKS4A oder SOCKS5 zu benutzen.
+
+
+
+Erfahren Sie mehr über die Verwendung von Proxys unter Android in den FAQ unter http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Orbot ist bereit!</string>
+    <string name="wizard_final_msg">Hunderttausende Menschen auf der ganzen Welt nutzen Tor aus einer Vielzahl von Gründen: Journalisten und Blogger, Menschenrechtsaktivisten, Strafverfolgungsbehörden, Soldaten, Unternehmen, Bürger repressiver Regime und ganz normale Menschen... und sind Sie ebenfalls bereit!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">Sie haben sich erfolgreich mit dem Tor-Netzwerk verbunden - das bedeutet aber NICHT, dass Ihr Gerät sicher ist. Sie können die \'Überprüfen\'-Option aus dem Menü benutzen, um Ihren Browser zu testen. 
+
+Besuchen Sie https://guardianproject.info/apps/orbot oder senden Sie eine E-Mail an help at guardianproject.info um mehr zu erfahren.</string>
+
+	<string name="tor_check">Das wird die Seite https://check.torproject.org in Ihrem Webbrowser öffnen, so dass Sie überprüfen können, ob Orbot richtig configuriert ist und Sie mit Tor verbunden sind.</string>
+
+	
+    <string name="pref_hs_group">Versteckte Dienste</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-es/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">iniciar y detener Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot está iniciando...</string>
-<string name="status_activated">Conectado a la Red de Tor</string>
-<string name="status_disabled">"Orbot está desactivado</string>
-<string name="status_shutting_down">Orbot se está cerrando</string>
-
-<string name="tor_process_connecting">Iniciando Tor...</string>
-<string name="tor_process_connecting_step2">Configurción de control...</string>
-<string name="tor_process_connecting_step3">completo.</string>
-<string name="tor_process_connecting_step4">esperando.</string>
-
-<string name="not_anonymous_yet">ADVERTENCIA: ¡Su tráfico no es anónimo aún! Por favor, configure sus aplicaciones para usar el Proxy HTTP 127.0.0.1:8118, el SOCKS4A o el Proxy SOCKS5 127.0.0.1:9050</string>
-<string name="menu_home">Principal</string>
-<string name="menu_browse">Examinar</string>
-<string name="menu_settings">Configuración</string>
-<string name="menu_log">Historial</string>
-<string name="menu_info">Ayuda</string>
-<string name="menu_apps">Aplicaciones</string>
-<string name="menu_start">Iniciar</string>
-<string name="menu_stop">Detener</string>
-
-<string name="menu_about">Acerca de</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Ayuda</string>
-<string name="button_close">Cerrar</string>
-<string name="button_about">Acerca de</string>
-
-<string name="button_clear_log">Limpiar Historial</string>
-
-
-<string name="menu_verify">Comprobar</string>
-<string name="menu_exit">Salir</string>
-<string name="powered_by">potenciado por Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Proxy transparente (Requiere ser Administrador)</string>
-<string name="pref_trans_proxy_title">Proxy transparente</string>
-<string name="pref_trans_proxy_summary">Torificado automático de las Aplicaciones</string>
-
-<string name="pref_transparent_all_title">Pasar todo el tráfico por Tor</string>
-<string name="pref_transparent_all_summary">Tráfico Proxy para todas las aplicaciones mediante Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">¡Binarios de Tor instalados con éxito!</string>
-<string name="status_install_fail">Los archivos binarios de Tor no se han podido instalar. Por favor, verifique el Historial y notifique a: tor-assistants at torproject.org</string>
-
-<string name="title_error">Error de aplicación</string>
-
-<string name="wizard_title">Bienvenido a Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Acerca de Orbot</string>
-<string name="btn_next">Siguiente</string>
-<string name="btn_back">Atrás</string>
-<string name="btn_finish">Finalizar</string>
-
-<string name="btn_okay">OK</string>
-<string name="btn_cancel">Cancelar</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot proporciona Tor a Android. Tor es un software libre y una red abierta que le ayuda a defenderse contra una forma de vigilancia que amenaza su libertad y privacidad personal, la confidencialidad en los negocios y en las relaciones, y la seguridad del Estado conocida como análisis de tráfico.
-
-*ADVERTENCIA:* ¡Instalando Orbot _NO_ anonimizará mágicamente su tráfico del móvil! Este assitente le ayudará a empezar.</string>
-    <string name="wizard_details">Algunos detalles de Orbot</string>
-    <string name="wizard_details_msg">Orbot es una aplicación de código abierto que contiene Tor, LibEvent y Privoxy. Provee un Proxy HTTP local (8118) y un Proxy SOCKS (9050) en la red Tor. Orbot también tiene la habilidad, en un dispositivo enrutador, de enviar todo el tráfico de Internet a través de Tor.</string>
-    <string name="wizard_permissions_root">Permiso Concedido</string>
-    <string name="wizard_permissions_stock">Permisos de Orbot</string>
-    <string name="wizard_premissions_msg_root">¡Excelente! Hemos detectado que usted tiene permisos administravitos activados para Orbot. Utilizaremos estos poderes sabiamente.</string>
-    <string name="wizard_permissions_msg_stock">Mientras no sea requerido, Orbot puede convertirse en una herramienta aún más poderosa si su dispositivo tiene acceso de administrador. Utilice el botón a continuación para conceder superpoderes a Orbot</string>
-   
-    <string name="wizard_permissions_no_root">Si no tiene acceso de admnistrador o no tiene idea de qué estamos hablando, sólo asegúrese de utilizar aplicaciones hechas para trabajar con Orbot.</string>
-    <string name="wizard_permissions_consent">Comprendo y quiero continuar sin poderes administrativos</string>
-   
-    <string name="wizard_permission_enable_root">Conceder poderes administrativos a Orbot</string>
-    <string name="wizard_configure">Configurar Torificación</string>
-    <string name="wizard_configure_msg">Orbot le da la opción de dirigir todo el tráfico de las aplicaciones a través de Tor O de seleccionar sus aplicaciones individualmente.</string> 
-    <string name="wizard_configure_all">Configurar Proxy para todas las aplicaciones a través de Tor</string>
-    <string name="wizard_configure_select_apps">Seleccionar aplicaciones individualmente para Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Aplicaciones activas en Orbot</string>
-    <string name="wizard_tips_msg">Le invitamos a descargar y utilizar aplicaciones que saben cómo conectarse directamente a Orbot. Haga clic en los botones a continuación para Instalar.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Sólo Android 1.x) - Navegador diseñado para la privacidad y para Orbot</string>
-    <string name="wizard_tips_proxy">Configuraciones Proxy - Aprenda cómo configurar aplicaciones para que trabajen con Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Configuraciones Proxy</string>
-    <string name="wizard_proxy_help_msg">Si la aplicación Android que está utilizando puede soportar el uso de un Proxy HTTP o SOCKS, entonces puede configurarla para conectar a Orbot y utilizar Tor.
-
-
-La configuración del dominio es 127.0.0.1 o "localhost". Para HTTP, la configuración del puerto es 8118. Para SOCKS, el proxy es 9050. Puede utilizar SOCKS4A o SOCKS5 si es posible.
-
-
-
-Puede aprender más acerca de los proxys en Android a través de las Preguntas Frecuentes ubicadas en: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">¡Orbot está listo!</string>
-    <string name="wizard_final_msg">Cientos de miles de personas alrededor del mundo usan Tor por una amplia variedad de razones: periodistas y bloggers, trabajadores de los derechos humanos, oficiales de policía, soldados, corporaciones, ciudadanos de regímenes represivos y ciudadanos ordinarios... ¡y ahora también lo estás!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">Se ha conectado con éxito a la red Tor, pero eso NO significa que su dispositivo es seguro. Puede utilizar la opción \'Comprobar\' desde el menú para probar su navegador.
-
-Visítenos en https://guardianproject.info/apps/orbot o envíenos un correo electrónico a help at guardianproject.info para aprender más.</string>
-
-	<string name="tor_check">Esto abrirá https://check.torproject.org en su navegador predeterminado con el fin de comprobar si Orbot está configurado y si está conectado a Tor.</string>
-
-	
-    <string name="pref_hs_group">Servicios Ocultados</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-es/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-es/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">iniciar y detener Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot está iniciando...</string>
+<string name="status_activated">Conectado a la Red de Tor</string>
+<string name="status_disabled">"Orbot está desactivado</string>
+<string name="status_shutting_down">Orbot se está cerrando</string>
+
+<string name="tor_process_connecting">Iniciando Tor...</string>
+<string name="tor_process_connecting_step2">Configurción de control...</string>
+<string name="tor_process_connecting_step3">completo.</string>
+<string name="tor_process_connecting_step4">esperando.</string>
+
+<string name="not_anonymous_yet">ADVERTENCIA: ¡Su tráfico no es anónimo aún! Por favor, configure sus aplicaciones para usar el Proxy HTTP 127.0.0.1:8118, el SOCKS4A o el Proxy SOCKS5 127.0.0.1:9050</string>
+<string name="menu_home">Principal</string>
+<string name="menu_browse">Examinar</string>
+<string name="menu_settings">Configuración</string>
+<string name="menu_log">Historial</string>
+<string name="menu_info">Ayuda</string>
+<string name="menu_apps">Aplicaciones</string>
+<string name="menu_start">Iniciar</string>
+<string name="menu_stop">Detener</string>
+
+<string name="menu_about">Acerca de</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Ayuda</string>
+<string name="button_close">Cerrar</string>
+<string name="button_about">Acerca de</string>
+
+<string name="button_clear_log">Limpiar Historial</string>
+
+
+<string name="menu_verify">Comprobar</string>
+<string name="menu_exit">Salir</string>
+<string name="powered_by">potenciado por Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Proxy transparente (Requiere ser Administrador)</string>
+<string name="pref_trans_proxy_title">Proxy transparente</string>
+<string name="pref_trans_proxy_summary">Torificado automático de las Aplicaciones</string>
+
+<string name="pref_transparent_all_title">Pasar todo el tráfico por Tor</string>
+<string name="pref_transparent_all_summary">Tráfico Proxy para todas las aplicaciones mediante Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">¡Binarios de Tor instalados con éxito!</string>
+<string name="status_install_fail">Los archivos binarios de Tor no se han podido instalar. Por favor, verifique el Historial y notifique a: tor-assistants at torproject.org</string>
+
+<string name="title_error">Error de aplicación</string>
+
+<string name="wizard_title">Bienvenido a Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Acerca de Orbot</string>
+<string name="btn_next">Siguiente</string>
+<string name="btn_back">Atrás</string>
+<string name="btn_finish">Finalizar</string>
+
+<string name="btn_okay">OK</string>
+<string name="btn_cancel">Cancelar</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot proporciona Tor a Android. Tor es un software libre y una red abierta que le ayuda a defenderse contra una forma de vigilancia que amenaza su libertad y privacidad personal, la confidencialidad en los negocios y en las relaciones, y la seguridad del Estado conocida como análisis de tráfico.
+
+*ADVERTENCIA:* ¡Instalando Orbot _NO_ anonimizará mágicamente su tráfico del móvil! Este assitente le ayudará a empezar.</string>
+    <string name="wizard_details">Algunos detalles de Orbot</string>
+    <string name="wizard_details_msg">Orbot es una aplicación de código abierto que contiene Tor, LibEvent y Privoxy. Provee un Proxy HTTP local (8118) y un Proxy SOCKS (9050) en la red Tor. Orbot también tiene la habilidad, en un dispositivo enrutador, de enviar todo el tráfico de Internet a través de Tor.</string>
+    <string name="wizard_permissions_root">Permiso Concedido</string>
+    <string name="wizard_permissions_stock">Permisos de Orbot</string>
+    <string name="wizard_premissions_msg_root">¡Excelente! Hemos detectado que usted tiene permisos administravitos activados para Orbot. Utilizaremos estos poderes sabiamente.</string>
+    <string name="wizard_permissions_msg_stock">Mientras no sea requerido, Orbot puede convertirse en una herramienta aún más poderosa si su dispositivo tiene acceso de administrador. Utilice el botón a continuación para conceder superpoderes a Orbot</string>
+   
+    <string name="wizard_permissions_no_root">Si no tiene acceso de admnistrador o no tiene idea de qué estamos hablando, sólo asegúrese de utilizar aplicaciones hechas para trabajar con Orbot.</string>
+    <string name="wizard_permissions_consent">Comprendo y quiero continuar sin poderes administrativos</string>
+   
+    <string name="wizard_permission_enable_root">Conceder poderes administrativos a Orbot</string>
+    <string name="wizard_configure">Configurar Torificación</string>
+    <string name="wizard_configure_msg">Orbot le da la opción de dirigir todo el tráfico de las aplicaciones a través de Tor O de seleccionar sus aplicaciones individualmente.</string> 
+    <string name="wizard_configure_all">Configurar Proxy para todas las aplicaciones a través de Tor</string>
+    <string name="wizard_configure_select_apps">Seleccionar aplicaciones individualmente para Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Aplicaciones activas en Orbot</string>
+    <string name="wizard_tips_msg">Le invitamos a descargar y utilizar aplicaciones que saben cómo conectarse directamente a Orbot. Haga clic en los botones a continuación para Instalar.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Sólo Android 1.x) - Navegador diseñado para la privacidad y para Orbot</string>
+    <string name="wizard_tips_proxy">Configuraciones Proxy - Aprenda cómo configurar aplicaciones para que trabajen con Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Configuraciones Proxy</string>
+    <string name="wizard_proxy_help_msg">Si la aplicación Android que está utilizando puede soportar el uso de un Proxy HTTP o SOCKS, entonces puede configurarla para conectar a Orbot y utilizar Tor.
+
+
+La configuración del dominio es 127.0.0.1 o "localhost". Para HTTP, la configuración del puerto es 8118. Para SOCKS, el proxy es 9050. Puede utilizar SOCKS4A o SOCKS5 si es posible.
+
+
+
+Puede aprender más acerca de los proxys en Android a través de las Preguntas Frecuentes ubicadas en: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">¡Orbot está listo!</string>
+    <string name="wizard_final_msg">Cientos de miles de personas alrededor del mundo usan Tor por una amplia variedad de razones: periodistas y bloggers, trabajadores de los derechos humanos, oficiales de policía, soldados, corporaciones, ciudadanos de regímenes represivos y ciudadanos ordinarios... ¡y ahora también lo estás!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">Se ha conectado con éxito a la red Tor, pero eso NO significa que su dispositivo es seguro. Puede utilizar la opción \'Comprobar\' desde el menú para probar su navegador.
+
+Visítenos en https://guardianproject.info/apps/orbot o envíenos un correo electrónico a help at guardianproject.info para aprender más.</string>
+
+	<string name="tor_check">Esto abrirá https://check.torproject.org en su navegador predeterminado con el fin de comprobar si Orbot está configurado y si está conectado a Tor.</string>
+
+	
+    <string name="pref_hs_group">Servicios Ocultados</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-fa/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">اوربات</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">شروع و پایان Tor</string>
-    <string name="tor_proxy_service_process">سرويس پروكسي تُر</string>
-   
-<string name="status_starting_up">Orbat آغاز می شود..</string>
-<string name="status_activated">پیوسته به شبکه ی Tor</string>
-<string name="status_disabled">اوربات غیرفعال شده است.</string>
-<string name="status_shutting_down">اوربات در حال بسته شدن است.</string>
-
-<string name="tor_process_connecting">شروع تُر ...</string>
-<string name="tor_process_connecting_step2">راه اندازی نظارت...</string>
-<string name="tor_process_connecting_step3">كامل شد.</string>
-<string name="tor_process_connecting_step4">در انتظار.</string>
-
-<string name="not_anonymous_yet">هشدار: فعالیت شما هنوز "گمنام" نیست! لطفن اپلیکیشن خود را تنظیم کنید تا از HTTP پروکسی 127.0.0.1:8118 و یا SOCKS4A و یا SOCKS5 پروکسی 127.0.01:9050 استفاده کند.</string>
-<string name="menu_home">خانه</string>
-<string name="menu_browse">جستجو</string>
-<string name="menu_settings">تنظیمات</string>
-<string name="menu_log">ورود</string>
-<string name="menu_info">کمک</string>
-<string name="menu_apps">واژ ه نامه</string>
-<string name="menu_start">آغاز</string>
-<string name="menu_stop">ایست</string>
-
-<string name="menu_about">درباره</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">کمک</string>
-<string name="button_close">بسته</string>
-<string name="button_about">درباره</string>
-
-<string name="button_clear_log">Clear Log</string>
-
-
-<string name="menu_verify">بررسی</string>
-<string name="menu_exit">خروج</string>
-<string name="powered_by">فعال شده توسط Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">پروکسیدن شفاف (نیاز به Root دارد)</string>
-<string name="pref_trans_proxy_title">پروکسیدن شفاف</string>
-<string name="pref_trans_proxy_summary">Tori-نمایی اتوماتیک اپلیکیشن ها</string>
-
-<string name="pref_transparent_all_title">شامل همه</string>
-<string name="pref_transparent_all_summary">فعالیت همه اپلیکیشن ها را از طریق Tor پروکسی کنید.</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">دوتایی های Tor با موفقیت نصب شدند!</string>
-<string name="status_install_fail">نصب فایل های دوتایی Tor ممکن نبود. لطفن قطعه را وارسی کنید و به tor-assistance at torproject.org اطلاع دهید.</string>
-
-<string name="title_error">خطای اپلیکیشین</string>
-
-<string name="wizard_title">به اوربات خوش آمدید</string>
-
-<string name="wizard_btn_tell_me_more">درباره اوربات</string>
-<string name="btn_next">بعدی</string>
-<string name="btn_back">بازگشت</string>
-<string name="btn_finish">پایان</string>
-
-<string name="btn_okay">لغو</string>
-<string name="btn_cancel">لغو</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">اوربات Tor را به آندرونید وارد می کند. Tor نرم افزاری رایگان و شبکه ای باز است که در مقابل تهدید شبکه های نظارتی علیه آزادی و حریم فردی، فعالیت ها و روابط محرمانه شرکت ها، و امنیت ملی، که "کاوش فعالیت" معروف است، به شما کمک می کند. *هشدار:* نصب اوربات به تنهایی قادر نیست معجزه ای صورت دهد و فعالیت آنلاین شما را مخفی کند! این ابزار تنها کمک می کند که قدم اول را بردارید.</string>
-    <string name="wizard_details">برخی جزئیات در مورد اوربات</string>
-    <string name="wizard_details_msg">اوربات اپلیکیشنی با متن-باز است که شامل Tor, LibEvent و Privoxy. این اپلیکیشن، HTTP پروکسی (8118) محلی و SOCKS پروکسی (9050) را در شبکه Tor در دسترس قرار می دهد. اوربات همچنین قادر است بر روی ابزار root شده، تمام ترافیک اینترنت را از Tor ارسال کند.</string>
-    <string name="wizard_permissions_root">مجوز صادر گردید</string>
-    <string name="wizard_permissions_stock">مجوزهای اوربات</string>
-    <string name="wizard_premissions_msg_root">بسیار عالی! اینطور که معلوم است شما دارای مجوز root برای فعال کردن اوربات هستید. این امکان را بخوبی مورد استفاده قرار خواهیم داد. </string>
-    <string name="wizard_permissions_msg_stock">هرچند ضرورت ندارد اما اگر سیستم شما دارای دسترسی root باشد اوربات با ظرفیت بسیار بیشتری عمل خواهد کرد. دکمه زیر را فشار دهید تا اوربات دارای ظرفیت حداکثری بشود.</string>
-   
-    <string name="wizard_permissions_no_root">اگر سیستم شما دارای دسترسی root نیست و یا اصلن چیزی از این عبارت متوجه نمی شوید، حتمن سعی کنید از اپلکیشن هایی استفاده کنید که ویژه اوربات تهیه شده اند. </string>
-    <string name="wizard_permissions_consent">متوجه هستم و ترجیح می دهم بدون root ادامه بدهم.</string>
-   
-    <string name="wizard_permission_enable_root">واگذاری root برای اوربات</string>
-    <string name="wizard_configure">تنظیمات تبدیل به Tor</string>
-    <string name="wizard_configure_msg">اوربات به شما امکان می دهد که تمام اپلیکشین ها را از طریق Tor  منتقل کنید و یا اپلیکیشن مورد نظر خود را شخصن انتخاب کنید.</string> 
-    <string name="wizard_configure_all">تمام اپلیکیشن ها را از طریق Tor منتقل کنید.</string>
-    <string name="wizard_configure_select_apps">اپلیکیشن های منفرد برای Tor انتخاب کنید.</string>
-    
-    
-    <string name="wizard_tips_tricks">اپلیکیشن هایی که برای اوربات تنظیم شده اند</string>
-    <string name="wizard_tips_msg">توصیه می کنیم داون لود و فعال کنید؛ اپلیکیشن هایی را استفاده کنید که مستقیم به اوربات وصل می شوند. دکمه های زیر را فشار دهید تا نصب شود. </string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (فقط آندروید 1.x) - مرورگر طراحی شده برای حفظ حریم خصوصی و افزونساز اوربات</string>
-    <string name="wizard_tips_proxy">تنظیمات پروکسی - یادگیری تنظیم اپلیکیشن ها برای کار با اوربات</string>
-    
-    <string name="wizard_proxy_help_info">تنظیمات پروکسی</string>
-    <string name="wizard_proxy_help_msg">اگر اپلیکشین آندرونوید مورد استفاده شما قابلیت کار با HTTP و یا SOCKS پروکسی دارد می توانید تنظیمش کنید تا به اوربات وصل شود و از Tor استفاده کند. تنظیمات سرویس دهنده 127.0.0.1 و یا "سرویس-ده محلی" است. برای HTTP تنظیمات درگاه (port) 8118 است. برای SOCKS، پروکسی مناسب، 9050 است. شما می بایست SOCKS4A  و یا  در صورت امکان از socks5 استفاده کنید. در صورت نیاز به اطلاعات بیشتر در مورد انتقالده آندروید، می توانید به FAQ (سوالهای معمول) در http://tinyurl.com/proxyandroid مراجعه کنید.</string>
-    
-    <string name="wizard_final">اوربات آماده استفاده میباشد!</string>
-    <string name="wizard_final_msg">صدها هزار نفر در سراسر جهان به دلایل گوناگون از Tor استفاده می کنند: روزنامه نویسها و بلاگرها، کارکنان حقوق بشر، ماموران انتظامی، سربازان، شرکتها، شهروندان دولتهای سرکوبگر، و شهروندان عادی، و حالا شما نیز آماده استفاده از آن هستید!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">اکنون با موفقیت به شبکه Tor وصل شده اید اما به آن معنا نیست که سیستم شما ایمن است. می توانید از منیو گزینه /"Check/" را برای آزمایش مرورگر انتخاب کنید. به ما در صفحه https://guardianproject.info/apps/orbot مراجعه کنید و به آدرس help at guardianproject.info  ایمیلی بفرستید تا اطلاعات بیشتری دریافت کنید. </string>
-
-	<string name="tor_check">با این قدم پیشفرض مرورگر وب شما به صفحه   https://check.torproject.org باز می شود تا شما مشاهده کنید آیا اوربات تنظیم شده است و آیا شما به Tor وصل شده اید یا نه.</string>
-
-	
-    <string name="pref_hs_group">سرويس هاي مخفي</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-fa/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-fa/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">اوربات</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">شروع و پایان Tor</string>
+    <string name="tor_proxy_service_process">سرويس پروكسي تُر</string>
+   
+<string name="status_starting_up">Orbat آغاز می شود..</string>
+<string name="status_activated">پیوسته به شبکه ی Tor</string>
+<string name="status_disabled">اوربات غیرفعال شده است.</string>
+<string name="status_shutting_down">اوربات در حال بسته شدن است.</string>
+
+<string name="tor_process_connecting">شروع تُر ...</string>
+<string name="tor_process_connecting_step2">راه اندازی نظارت...</string>
+<string name="tor_process_connecting_step3">كامل شد.</string>
+<string name="tor_process_connecting_step4">در انتظار.</string>
+
+<string name="not_anonymous_yet">هشدار: فعالیت شما هنوز "گمنام" نیست! لطفن اپلیکیشن خود را تنظیم کنید تا از HTTP پروکسی 127.0.0.1:8118 و یا SOCKS4A و یا SOCKS5 پروکسی 127.0.01:9050 استفاده کند.</string>
+<string name="menu_home">خانه</string>
+<string name="menu_browse">جستجو</string>
+<string name="menu_settings">تنظیمات</string>
+<string name="menu_log">ورود</string>
+<string name="menu_info">کمک</string>
+<string name="menu_apps">واژ ه نامه</string>
+<string name="menu_start">آغاز</string>
+<string name="menu_stop">ایست</string>
+
+<string name="menu_about">درباره</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">کمک</string>
+<string name="button_close">بسته</string>
+<string name="button_about">درباره</string>
+
+<string name="button_clear_log">Clear Log</string>
+
+
+<string name="menu_verify">بررسی</string>
+<string name="menu_exit">خروج</string>
+<string name="powered_by">فعال شده توسط Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">پروکسیدن شفاف (نیاز به Root دارد)</string>
+<string name="pref_trans_proxy_title">پروکسیدن شفاف</string>
+<string name="pref_trans_proxy_summary">Tori-نمایی اتوماتیک اپلیکیشن ها</string>
+
+<string name="pref_transparent_all_title">شامل همه</string>
+<string name="pref_transparent_all_summary">فعالیت همه اپلیکیشن ها را از طریق Tor پروکسی کنید.</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">دوتایی های Tor با موفقیت نصب شدند!</string>
+<string name="status_install_fail">نصب فایل های دوتایی Tor ممکن نبود. لطفن قطعه را وارسی کنید و به tor-assistance at torproject.org اطلاع دهید.</string>
+
+<string name="title_error">خطای اپلیکیشین</string>
+
+<string name="wizard_title">به اوربات خوش آمدید</string>
+
+<string name="wizard_btn_tell_me_more">درباره اوربات</string>
+<string name="btn_next">بعدی</string>
+<string name="btn_back">بازگشت</string>
+<string name="btn_finish">پایان</string>
+
+<string name="btn_okay">لغو</string>
+<string name="btn_cancel">لغو</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">اوربات Tor را به آندرونید وارد می کند. Tor نرم افزاری رایگان و شبکه ای باز است که در مقابل تهدید شبکه های نظارتی علیه آزادی و حریم فردی، فعالیت ها و روابط محرمانه شرکت ها، و امنیت ملی، که "کاوش فعالیت" معروف است، به شما کمک می کند. *هشدار:* نصب اوربات به تنهایی قادر نیست معجزه ای صورت دهد و فعالیت آنلاین شما را مخفی کند! این ابزار تنها کمک می کند که قدم اول را بردارید.</string>
+    <string name="wizard_details">برخی جزئیات در مورد اوربات</string>
+    <string name="wizard_details_msg">اوربات اپلیکیشنی با متن-باز است که شامل Tor, LibEvent و Privoxy. این اپلیکیشن، HTTP پروکسی (8118) محلی و SOCKS پروکسی (9050) را در شبکه Tor در دسترس قرار می دهد. اوربات همچنین قادر است بر روی ابزار root شده، تمام ترافیک اینترنت را از Tor ارسال کند.</string>
+    <string name="wizard_permissions_root">مجوز صادر گردید</string>
+    <string name="wizard_permissions_stock">مجوزهای اوربات</string>
+    <string name="wizard_premissions_msg_root">بسیار عالی! اینطور که معلوم است شما دارای مجوز root برای فعال کردن اوربات هستید. این امکان را بخوبی مورد استفاده قرار خواهیم داد. </string>
+    <string name="wizard_permissions_msg_stock">هرچند ضرورت ندارد اما اگر سیستم شما دارای دسترسی root باشد اوربات با ظرفیت بسیار بیشتری عمل خواهد کرد. دکمه زیر را فشار دهید تا اوربات دارای ظرفیت حداکثری بشود.</string>
+   
+    <string name="wizard_permissions_no_root">اگر سیستم شما دارای دسترسی root نیست و یا اصلن چیزی از این عبارت متوجه نمی شوید، حتمن سعی کنید از اپلکیشن هایی استفاده کنید که ویژه اوربات تهیه شده اند. </string>
+    <string name="wizard_permissions_consent">متوجه هستم و ترجیح می دهم بدون root ادامه بدهم.</string>
+   
+    <string name="wizard_permission_enable_root">واگذاری root برای اوربات</string>
+    <string name="wizard_configure">تنظیمات تبدیل به Tor</string>
+    <string name="wizard_configure_msg">اوربات به شما امکان می دهد که تمام اپلیکشین ها را از طریق Tor  منتقل کنید و یا اپلیکیشن مورد نظر خود را شخصن انتخاب کنید.</string> 
+    <string name="wizard_configure_all">تمام اپلیکیشن ها را از طریق Tor منتقل کنید.</string>
+    <string name="wizard_configure_select_apps">اپلیکیشن های منفرد برای Tor انتخاب کنید.</string>
+    
+    
+    <string name="wizard_tips_tricks">اپلیکیشن هایی که برای اوربات تنظیم شده اند</string>
+    <string name="wizard_tips_msg">توصیه می کنیم داون لود و فعال کنید؛ اپلیکیشن هایی را استفاده کنید که مستقیم به اوربات وصل می شوند. دکمه های زیر را فشار دهید تا نصب شود. </string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (فقط آندروید 1.x) - مرورگر طراحی شده برای حفظ حریم خصوصی و افزونساز اوربات</string>
+    <string name="wizard_tips_proxy">تنظیمات پروکسی - یادگیری تنظیم اپلیکیشن ها برای کار با اوربات</string>
+    
+    <string name="wizard_proxy_help_info">تنظیمات پروکسی</string>
+    <string name="wizard_proxy_help_msg">اگر اپلیکشین آندرونوید مورد استفاده شما قابلیت کار با HTTP و یا SOCKS پروکسی دارد می توانید تنظیمش کنید تا به اوربات وصل شود و از Tor استفاده کند. تنظیمات سرویس دهنده 127.0.0.1 و یا "سرویس-ده محلی" است. برای HTTP تنظیمات درگاه (port) 8118 است. برای SOCKS، پروکسی مناسب، 9050 است. شما می بایست SOCKS4A  و یا  در صورت امکان از socks5 استفاده کنید. در صورت نیاز به اطلاعات بیشتر در مورد انتقالده آندروید، می توانید به FAQ (سوالهای معمول) در http://tinyurl.com/proxyandroid مراجعه کنید.</string>
+    
+    <string name="wizard_final">اوربات آماده استفاده میباشد!</string>
+    <string name="wizard_final_msg">صدها هزار نفر در سراسر جهان به دلایل گوناگون از Tor استفاده می کنند: روزنامه نویسها و بلاگرها، کارکنان حقوق بشر، ماموران انتظامی، سربازان، شرکتها، شهروندان دولتهای سرکوبگر، و شهروندان عادی، و حالا شما نیز آماده استفاده از آن هستید!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">اکنون با موفقیت به شبکه Tor وصل شده اید اما به آن معنا نیست که سیستم شما ایمن است. می توانید از منیو گزینه /"Check/" را برای آزمایش مرورگر انتخاب کنید. به ما در صفحه https://guardianproject.info/apps/orbot مراجعه کنید و به آدرس help at guardianproject.info  ایمیلی بفرستید تا اطلاعات بیشتری دریافت کنید. </string>
+
+	<string name="tor_check">با این قدم پیشفرض مرورگر وب شما به صفحه   https://check.torproject.org باز می شود تا شما مشاهده کنید آیا اوربات تنظیم شده است و آیا شما به Tor وصل شده اید یا نه.</string>
+
+	
+    <string name="pref_hs_group">سرويس هاي مخفي</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-mk/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Орбот</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">вклучи и исклучи го Тор</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Орбот се вклучува...</string>
-<string name="status_activated">Поврзан на мрежата Тор</string>
-<string name="status_disabled">"Орбот е дезактивиран</string>
-<string name="status_shutting_down">Орбот се исклучува</string>
-
-<string name="tor_process_connecting">Вклучување на Тор...</string>
-<string name="tor_process_connecting_step2">Воспоставување контрола...</string>
-<string name="tor_process_connecting_step3">готово.</string>
-<string name="tor_process_connecting_step4">чекање.</string>
-
-<string name="not_anonymous_yet">ВНИМАНИЕ: Вашиот сообраќај сеуште не е анонимен! Треба да ги конфигурирате Вашите апликации да го користат проксито за HTTP, 127.0.0.1:8118, или проксито за SOCKS4A или SOCKS5, 127.0.0.1:9050</string>
-<string name="menu_home">Дома</string>
-<string name="menu_browse">Прелистување</string>
-<string name="menu_settings">Подесувања</string>
-<string name="menu_log">Лог</string>
-<string name="menu_info">Помош</string>
-<string name="menu_apps">Апликации</string>
-<string name="menu_start">Вклучи</string>
-<string name="menu_stop">Исклучи</string>
-
-<string name="menu_about">За</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Помош</string>
-<string name="button_close">Затвори</string>
-<string name="button_about">За</string>
-
-<string name="button_clear_log">Избриши лог</string>
-
-
-<string name="menu_verify">Провери</string>
-<string name="menu_exit">Излез</string>
-<string name="powered_by">напојувано од проектот Тор</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Транспарентно прокси (бара root пристап)</string>
-<string name="pref_trans_proxy_title">Транспарентно прокси</string>
-<string name="pref_trans_proxy_summary">Автоматско торифицирање на апликациите</string>
-
-<string name="pref_transparent_all_title">Целосно торифицирање</string>
-<string name="pref_transparent_all_summary">Проксирај го сообраќајот на сите апликации низ Тор</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Извршните програми за Тор се успешно инсталирани!</string>
-<string name="status_install_fail">Извршните фајлови на Тор не можеа да се инсталираат. Видете го логот и известете нè за ова на tor-assistants at torproject.org</string>
-
-<string name="title_error">Апликациска грешка</string>
-
-<string name="wizard_title">Добредојдовте во Орбот</string>
-
-<string name="wizard_btn_tell_me_more">За Орбот</string>
-<string name="btn_next">Напред</string>
-<string name="btn_back">Назад</string>
-<string name="btn_finish">Крај</string>
-
-<string name="btn_okay">Во ред</string>
-<string name="btn_cancel">Откажи се</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Орбот овозможува работа со Тор на Андроид. Тор е слободен софтвер и отворена мрежа којашто Ви помага да се заштитите од одреден вид мрежно прислушкување, познат како анализа на сообраќај (traffic analysis), кој претставуваат закана за личната слобода и приватност, за стопанските дејности и односи од доверлив карактер, како и за државната безбедност.\n\n*ВНИМАНИЕ:*Самиот факт што сте го инсталирале Орбот _нема_ автоматски да го направи Вашиот мобилен сообраќај анонимен! Но, овој прозор ќе Ви помогне да се иницирате.</string>
-    <string name="wizard_details">Некои детали за Орбот</string>
-    <string name="wizard_details_msg">Орбот е апликација со отворен код којашто го содржи Тор, LibEvent и Privoxy. Таа Ви нуди локални проксиња за HTTP (порт 8118) и SOCKS (порт 9050) за поврзување со мрежата Тор. Орбот исто така нуди можност, на уреди со root пристап, целиот сообраќај да се пренасочи преку Тор.</string>
-    <string name="wizard_permissions_root">Дозволата е издадена</string>
-    <string name="wizard_permissions_stock">Дозволи на орбот</string>
-    <string name="wizard_premissions_msg_root">Одлично! Детектиравме дека сте овозможиле root пристап за Орбот. Внимателно ќе се користиме со таа можност.</string>
-    <string name="wizard_permissions_msg_stock"> Иако тоа не е задолжително, Орбот може да стане помоќна алатка доколку вашиот уред има root пристап. Со копчето подолу можете на Орбот да му дадете таква супер-моќ.</string>
-   
-    <string name="wizard_permissions_no_root">Ако немате root пристап или ако не разбирате за што зборуваме, единствено осигурајте се дека користите апликации кои што работат со Орбот.</string>
-    <string name="wizard_permissions_consent">Разбирам и сакам да продолжам без root пристап</string>
-   
-    <string name="wizard_permission_enable_root">Дозволи root за Орбот</string>
-    <string name="wizard_configure">Подесување на торифицињето</string>
-    <string name="wizard_configure_msg">Орбот ви овозможува, или да го рутирате сиот сообраќај на сите апликации низ Тор, или поединечно да ги избирате апликациите.</string> 
-    <string name="wizard_configure_all">Проксирај ги сите апликации низ Тор</string>
-    <string name="wizard_configure_select_apps">Избери поединечно апликации за Тор</string>
-    
-    
-    <string name="wizard_tips_tricks">Орбот-вклучени апликации</string>
-    <string name="wizard_tips_msg">Ви препорачуваме да презимате и користите апликации кои што знаат како директно да се поврзат со Орбот. Притиснете на копчињата подолу за инсталирање.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (само Андроид 1.x) - Браусер дизајниран за приватност и за Орбот</string>
-    <string name="wizard_tips_proxy">Подесувања на прокси - Научете како да ги конфигурирате апликациите да работат со Орбот</string>
-    
-    <string name="wizard_proxy_help_info">Подесувања на прокси</string>
-    <string name="wizard_proxy_help_msg">Ако апликацијата за Андроид што ја користите поддржува употреба на прокси за HTTP или SOCKS, тогаш може да ја конфигурирате да се поврзе со Орбот и да користи Тор. \n\n
-    Подесувањето за хост е 127.0.0.1 или „localhost“. За HTTP, подесувањето на порт е 8118. За SOCKS, портот е 9050. Доколку можете, користете SOCKS4A или SOCKS5.
-    \n\n
-    Можете да научите повеќе за проксирањето на Андроид преку ЧПП на: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Орбот е спремен!</string>
-    <string name="wizard_final_msg">Стотици илјади луѓе низ целиот Свет го користат Тор од многу различни причини: новинари и блогери, борци за човекови права, полицајци, војници, корпорации, граѓани на репресивни режими, и обични граѓани... а сега и Вие сте спремин да го користите!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time"> Успешно се поврзавте на мрежата Тор - но ова НЕ значи дека важиот уред е сигурен. За да го проверите Вашиот браусер, изберете ја опцијата „Провери“ во менито. \n\nПосетете нѐ на https://guardianproject.info/apps/orbot или испратете порака на help at guardianproject.info за повеќе информации.</string>
-
-	<string name="tor_check">Ова ќе ја отвори страницата https://check.torproject.org во Вашиот веб браусер за да видите дали Орбот е правилно конфигуриран и дали сте поврзани на Тор.</string>
-
-	
-    <string name="pref_hs_group">Скриени сервиси </string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-mk/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-mk/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Орбот</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">вклучи и исклучи го Тор</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Орбот се вклучува...</string>
+<string name="status_activated">Поврзан на мрежата Тор</string>
+<string name="status_disabled">"Орбот е дезактивиран</string>
+<string name="status_shutting_down">Орбот се исклучува</string>
+
+<string name="tor_process_connecting">Вклучување на Тор...</string>
+<string name="tor_process_connecting_step2">Воспоставување контрола...</string>
+<string name="tor_process_connecting_step3">готово.</string>
+<string name="tor_process_connecting_step4">чекање.</string>
+
+<string name="not_anonymous_yet">ВНИМАНИЕ: Вашиот сообраќај сеуште не е анонимен! Треба да ги конфигурирате Вашите апликации да го користат проксито за HTTP, 127.0.0.1:8118, или проксито за SOCKS4A или SOCKS5, 127.0.0.1:9050</string>
+<string name="menu_home">Дома</string>
+<string name="menu_browse">Прелистување</string>
+<string name="menu_settings">Подесувања</string>
+<string name="menu_log">Лог</string>
+<string name="menu_info">Помош</string>
+<string name="menu_apps">Апликации</string>
+<string name="menu_start">Вклучи</string>
+<string name="menu_stop">Исклучи</string>
+
+<string name="menu_about">За</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Помош</string>
+<string name="button_close">Затвори</string>
+<string name="button_about">За</string>
+
+<string name="button_clear_log">Избриши лог</string>
+
+
+<string name="menu_verify">Провери</string>
+<string name="menu_exit">Излез</string>
+<string name="powered_by">напојувано од проектот Тор</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Транспарентно прокси (бара root пристап)</string>
+<string name="pref_trans_proxy_title">Транспарентно прокси</string>
+<string name="pref_trans_proxy_summary">Автоматско торифицирање на апликациите</string>
+
+<string name="pref_transparent_all_title">Целосно торифицирање</string>
+<string name="pref_transparent_all_summary">Проксирај го сообраќајот на сите апликации низ Тор</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Извршните програми за Тор се успешно инсталирани!</string>
+<string name="status_install_fail">Извршните фајлови на Тор не можеа да се инсталираат. Видете го логот и известете нè за ова на tor-assistants at torproject.org</string>
+
+<string name="title_error">Апликациска грешка</string>
+
+<string name="wizard_title">Добредојдовте во Орбот</string>
+
+<string name="wizard_btn_tell_me_more">За Орбот</string>
+<string name="btn_next">Напред</string>
+<string name="btn_back">Назад</string>
+<string name="btn_finish">Крај</string>
+
+<string name="btn_okay">Во ред</string>
+<string name="btn_cancel">Откажи се</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Орбот овозможува работа со Тор на Андроид. Тор е слободен софтвер и отворена мрежа којашто Ви помага да се заштитите од одреден вид мрежно прислушкување, познат како анализа на сообраќај (traffic analysis), кој претставуваат закана за личната слобода и приватност, за стопанските дејности и односи од доверлив карактер, како и за државната безбедност.\n\n*ВНИМАНИЕ:*Самиот факт што сте го инсталирале Орбот _нема_ автоматски да го направи Вашиот мобилен сообраќај анонимен! Но, овој прозор ќе Ви помогне да се иницирате.</string>
+    <string name="wizard_details">Некои детали за Орбот</string>
+    <string name="wizard_details_msg">Орбот е апликација со отворен код којашто го содржи Тор, LibEvent и Privoxy. Таа Ви нуди локални проксиња за HTTP (порт 8118) и SOCKS (порт 9050) за поврзување со мрежата Тор. Орбот исто така нуди можност, на уреди со root пристап, целиот сообраќај да се пренасочи преку Тор.</string>
+    <string name="wizard_permissions_root">Дозволата е издадена</string>
+    <string name="wizard_permissions_stock">Дозволи на орбот</string>
+    <string name="wizard_premissions_msg_root">Одлично! Детектиравме дека сте овозможиле root пристап за Орбот. Внимателно ќе се користиме со таа можност.</string>
+    <string name="wizard_permissions_msg_stock"> Иако тоа не е задолжително, Орбот може да стане помоќна алатка доколку вашиот уред има root пристап. Со копчето подолу можете на Орбот да му дадете таква супер-моќ.</string>
+   
+    <string name="wizard_permissions_no_root">Ако немате root пристап или ако не разбирате за што зборуваме, единствено осигурајте се дека користите апликации кои што работат со Орбот.</string>
+    <string name="wizard_permissions_consent">Разбирам и сакам да продолжам без root пристап</string>
+   
+    <string name="wizard_permission_enable_root">Дозволи root за Орбот</string>
+    <string name="wizard_configure">Подесување на торифицињето</string>
+    <string name="wizard_configure_msg">Орбот ви овозможува, или да го рутирате сиот сообраќај на сите апликации низ Тор, или поединечно да ги избирате апликациите.</string> 
+    <string name="wizard_configure_all">Проксирај ги сите апликации низ Тор</string>
+    <string name="wizard_configure_select_apps">Избери поединечно апликации за Тор</string>
+    
+    
+    <string name="wizard_tips_tricks">Орбот-вклучени апликации</string>
+    <string name="wizard_tips_msg">Ви препорачуваме да презимате и користите апликации кои што знаат како директно да се поврзат со Орбот. Притиснете на копчињата подолу за инсталирање.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (само Андроид 1.x) - Браусер дизајниран за приватност и за Орбот</string>
+    <string name="wizard_tips_proxy">Подесувања на прокси - Научете како да ги конфигурирате апликациите да работат со Орбот</string>
+    
+    <string name="wizard_proxy_help_info">Подесувања на прокси</string>
+    <string name="wizard_proxy_help_msg">Ако апликацијата за Андроид што ја користите поддржува употреба на прокси за HTTP или SOCKS, тогаш може да ја конфигурирате да се поврзе со Орбот и да користи Тор. \n\n
+    Подесувањето за хост е 127.0.0.1 или „localhost“. За HTTP, подесувањето на порт е 8118. За SOCKS, портот е 9050. Доколку можете, користете SOCKS4A или SOCKS5.
+    \n\n
+    Можете да научите повеќе за проксирањето на Андроид преку ЧПП на: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Орбот е спремен!</string>
+    <string name="wizard_final_msg">Стотици илјади луѓе низ целиот Свет го користат Тор од многу различни причини: новинари и блогери, борци за човекови права, полицајци, војници, корпорации, граѓани на репресивни режими, и обични граѓани... а сега и Вие сте спремин да го користите!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time"> Успешно се поврзавте на мрежата Тор - но ова НЕ значи дека важиот уред е сигурен. За да го проверите Вашиот браусер, изберете ја опцијата „Провери“ во менито. \n\nПосетете нѐ на https://guardianproject.info/apps/orbot или испратете порака на help at guardianproject.info за повеќе информации.</string>
+
+	<string name="tor_check">Ова ќе ја отвори страницата https://check.torproject.org во Вашиот веб браусер за да видите дали Орбот е правилно конфигуриран и дали сте поврзани на Тор.</string>
+
+	
+    <string name="pref_hs_group">Скриени сервиси </string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-nb/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-  
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">start og stopp Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot starter...</string>
-<string name="status_activated">Tilkoblet Tor-nettverket</string>
-<string name="status_disabled">"Orbot er deaktivert</string>
-<string name="status_shutting_down">Orbot skrur seg av</string>
-
-<string name="tor_process_connecting">Starter Tor...</string>
-<string name="tor_process_connecting_step2">autentiserer kontrolltilkobling...</string>
-<string name="tor_process_connecting_step3">ferdig.</string>
-<string name="tor_process_connecting_step4">venter.</string>
-
-<string name="not_anonymous_yet">ADVARSEL: Trafikken din er ikke anonym helt enda! Vær vennlig og konfigurer applikasjonene dine til å bruke HTTP proxy 127.0.0.1:8118 eller SOCKS4A eller SOCKS5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Hjem</string>
-<string name="menu_browse">Gå til</string>
-<string name="menu_settings">Innstillinger</string>
-<string name="menu_log">Logg</string>
-<string name="menu_info">Hjelp</string>
-<string name="menu_apps">Applikasjoner</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stopp</string>
-
-<string name="menu_about">About</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
-
-
-<string name="button_help">Hjelp</string>
-<string name="button_close">Avslutt</string>
-<string name="button_about">Om</string>
-
-<string name="menu_verify">Check</string>
-<string name="menu_exit">Exit</string>
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-nb/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nb/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+  
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">start og stopp Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot starter...</string>
+<string name="status_activated">Tilkoblet Tor-nettverket</string>
+<string name="status_disabled">"Orbot er deaktivert</string>
+<string name="status_shutting_down">Orbot skrur seg av</string>
+
+<string name="tor_process_connecting">Starter Tor...</string>
+<string name="tor_process_connecting_step2">autentiserer kontrolltilkobling...</string>
+<string name="tor_process_connecting_step3">ferdig.</string>
+<string name="tor_process_connecting_step4">venter.</string>
+
+<string name="not_anonymous_yet">ADVARSEL: Trafikken din er ikke anonym helt enda! Vær vennlig og konfigurer applikasjonene dine til å bruke HTTP proxy 127.0.0.1:8118 eller SOCKS4A eller SOCKS5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Hjem</string>
+<string name="menu_browse">Gå til</string>
+<string name="menu_settings">Innstillinger</string>
+<string name="menu_log">Logg</string>
+<string name="menu_info">Hjelp</string>
+<string name="menu_apps">Applikasjoner</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stopp</string>
+
+<string name="menu_about">About</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
+
+
+<string name="button_help">Hjelp</string>
+<string name="button_close">Avslutt</string>
+<string name="button_about">Om</string>
+
+<string name="menu_verify">Check</string>
+<string name="menu_exit">Exit</string>
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-nl/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">start en stop Tor</string>
-    <string name="tor_proxy_service_process">torproxydienst</string>
-   
-<string name="status_starting_up">Orbot is aan het starten...</string>
-<string name="status_activated">Aangesloten op het Tor netwerk</string>
-<string name="status_disabled">Orbot is uitgeschakeld</string>
-<string name="status_shutting_down">Orbot is aan het afsluiten</string>
-
-<string name="tor_process_connecting">Bezig met opstarten van Tor...</string>
-<string name="tor_process_connecting_step2">Bezig met instellen aansturing</string>
-<string name="tor_process_connecting_step3">klaar.</string>
-<string name="tor_process_connecting_step4">aan het wachten.</string>
-
-<string name="not_anonymous_yet">WAARSCHUWING: Uw verkeer is nog niet anononiem! Stel uw programma\'s alstublieft in dat ze gebruik maken van HTTP proxy 127.0.0.1:8118 of SOCKS4A of SOCKS5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Thuis</string>
-<string name="menu_browse">Bladeren</string>
-<string name="menu_settings">Instellingen</string>
-<string name="menu_log">Logboek</string>
-<string name="menu_info">Hulp</string>
-<string name="menu_apps">Applicaties</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stop</string>
-
-<string name="menu_about">Over</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Hulp</string>
-<string name="button_close">Afsluiten</string>
-<string name="button_about">Over</string>
-
-<string name="button_clear_log">Wis logboek</string>
-
-
-<string name="menu_verify">Controleer</string>
-<string name="menu_exit">Verlaten</string>
-<string name="powered_by">aangedreven door het Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Transparant Proxyen (Vereist Root)</string>
-<string name="pref_trans_proxy_title">Transparant Proxyen</string>
-<string name="pref_trans_proxy_summary">Automatisch Tor forceren van aplicaties</string>
-
-<string name="pref_transparent_all_title">Tor Alles</string>
-<string name="pref_transparent_all_summary">Proxy verkeer voor alle toepasingen door Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Tor\'s binaire bestanden succesvol geïnstalleerd</string>
-<string name="status_install_fail">The binaire bestanden konden niet worden geïnstalleerd. Gelieve het log te raadplegen en tor-assistants at torproject.org op de hoogte te stellen</string>
-
-<string name="title_error">Toepassingsfout</string>
-
-<string name="wizard_title">Welkom bij Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Over Orbot</string>
-<string name="btn_next">Volgende</string>
-<string name="btn_back">Terug</string>
-<string name="btn_finish">Einde</string>
-
-<string name="btn_okay">OK</string>
-<string name="btn_cancel">Annuleren</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot brengt Tor naar de Android. Tor is vrije software en een open netwerk dat u helpt te verdedigen tegen netwerk toezicht welke aanvallen zijn op uw vrijheid en privacy, geheime zakelijke documenten en zaken relaties.
-
-*WAARSCHUWING:* Door het installeren van Orbot word uw verkeer _niet_ automatisch geproxyt! Deze wizard helpt u hier mee.</string>
-    <string name="wizard_details">Enkele Orbot Details</string>
-    <string name="wizard_details_msg">Orbot is een open-source applicatie waarin Tor, LibEvent en Privoxy zich bevinden. Het creeërt een lokale HTTP proxy (8118) en een SOCKS proxy (9050) naar het Tor netwerk. Orbot heeft ook de mogelijkheid om al het internet verkeer over het Tor netwerk te sturen.</string>
-    <string name="wizard_permissions_root">Toelating toegestaan</string>
-    <string name="wizard_permissions_stock">Orbot Rechten</string>
-    <string name="wizard_premissions_msg_root">Uitstekend! We hebben gedetecteerd dat je root rechten hebt aangezet voor Orbot. We gebruiken deze kracht met verstand.</string>
-    <string name="wizard_permissions_msg_stock">Alhoewel het niet verplicht is kan Orbot ook nog krachtiger worden. Als u root rechten heeft kunt u op de knop onderaan Orbot super krachten toewijzen.</string>
-   
-    <string name="wizard_permissions_no_root">Als u niet over root toegang beschikt en geen idee hebt waar u mee bezig bent zult u zeker moeten zijn dat de applicaties die u gebruikt geschikt voor Orbot zijn.</string>
-    <string name="wizard_permissions_consent">Ik begrijp dit en wil verdergaan zonder root</string>
-   
-    <string name="wizard_permission_enable_root">Root toestaan voor Orbot</string>
-    <string name="wizard_configure">Torificatie Configureren</string>
-    <string name="wizard_configure_msg">Orbot geeft u de mogelijkheid om induvidueel te bepalen welk van uw applicaties over het Tor netwerk gaan.</string> 
-    <string name="wizard_configure_all">Proxy alle toepasingen door Tor</string>
-    <string name="wizard_configure_select_apps">Selecteer individuele toepasingen voor Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Orbot-beschikbare Apps</string>
-    <string name="wizard_tips_msg">We raden u aan om te apps te downloaden welke zich zich automatisch verbinden met Orbot. Klik op de buttons hier beneden om te installeren.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Alleen Android 1.x) - Browser gemaakt voor privacy &amp; voor Orbot</string>
-    <string name="wizard_tips_proxy">Proxy Instellingen - Leer hoe u uw apps kunt configureren voor Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Proxy Instellingen</string>
-    <string name="wizard_proxy_help_msg">Als de Android app welke u gebruikt beschikt over een HTTP of SOCKS proxy instelling, dan kunt u het configureren zodat het via Orbot over het Tor netwerk gaat.
-
-
-De host instelling is 127.0.0.1 of "localhost". De poort voor SOCS is 9050 en voor HTTP 8118. Gebruik SOCKS4A or SOCKS5 indien nodig.
-
-
-U kunt meer leren over het proxyen op Android door naar de FAQ op http://tinyurl.com/proxyandroid te gaan
-    </string>
-    
-    <string name="wizard_final">Orbot is klaar!</string>
-    <string name="wizard_final_msg">Honderdduizenden verschillende mensen over de wereld gebruiken Tor, zoals: journalisten, bloggers, mensen rechten medewerkers, soldaten, bedrijven, burgers met onderdrukte religies, en natuurlijk normale mensen... En nu bent u ook klaar om te gaan!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">U bent succesvol verbonden met het Tor netwerk, maar dit betekent NIET dat u apparaat volledig veilig is. Gebruik te \'Check\' optie vanuit het menu om u browser te testen.
-
-Bezoek onze website op https://guardianproject.info/apps/orbot of stuuf een email naar help at guardianproject.info voor vragen.</string>
-
-	<string name="tor_check">Dit opent uw standaard browser naar https://check.torproject.org om te controleren of Orbot succesvol is geconfigureerd om te verbinden met het Tor netwerk.</string>
-
-	
-    <string name="pref_hs_group">Verborgen diensten</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-nl/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-nl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">start en stop Tor</string>
+    <string name="tor_proxy_service_process">torproxydienst</string>
+   
+<string name="status_starting_up">Orbot is aan het starten...</string>
+<string name="status_activated">Aangesloten op het Tor netwerk</string>
+<string name="status_disabled">Orbot is uitgeschakeld</string>
+<string name="status_shutting_down">Orbot is aan het afsluiten</string>
+
+<string name="tor_process_connecting">Bezig met opstarten van Tor...</string>
+<string name="tor_process_connecting_step2">Bezig met instellen aansturing</string>
+<string name="tor_process_connecting_step3">klaar.</string>
+<string name="tor_process_connecting_step4">aan het wachten.</string>
+
+<string name="not_anonymous_yet">WAARSCHUWING: Uw verkeer is nog niet anononiem! Stel uw programma\'s alstublieft in dat ze gebruik maken van HTTP proxy 127.0.0.1:8118 of SOCKS4A of SOCKS5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Thuis</string>
+<string name="menu_browse">Bladeren</string>
+<string name="menu_settings">Instellingen</string>
+<string name="menu_log">Logboek</string>
+<string name="menu_info">Hulp</string>
+<string name="menu_apps">Applicaties</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stop</string>
+
+<string name="menu_about">Over</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Hulp</string>
+<string name="button_close">Afsluiten</string>
+<string name="button_about">Over</string>
+
+<string name="button_clear_log">Wis logboek</string>
+
+
+<string name="menu_verify">Controleer</string>
+<string name="menu_exit">Verlaten</string>
+<string name="powered_by">aangedreven door het Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Transparant Proxyen (Vereist Root)</string>
+<string name="pref_trans_proxy_title">Transparant Proxyen</string>
+<string name="pref_trans_proxy_summary">Automatisch Tor forceren van aplicaties</string>
+
+<string name="pref_transparent_all_title">Tor Alles</string>
+<string name="pref_transparent_all_summary">Proxy verkeer voor alle toepasingen door Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Tor\'s binaire bestanden succesvol geïnstalleerd</string>
+<string name="status_install_fail">The binaire bestanden konden niet worden geïnstalleerd. Gelieve het log te raadplegen en tor-assistants at torproject.org op de hoogte te stellen</string>
+
+<string name="title_error">Toepassingsfout</string>
+
+<string name="wizard_title">Welkom bij Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Over Orbot</string>
+<string name="btn_next">Volgende</string>
+<string name="btn_back">Terug</string>
+<string name="btn_finish">Einde</string>
+
+<string name="btn_okay">OK</string>
+<string name="btn_cancel">Annuleren</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot brengt Tor naar de Android. Tor is vrije software en een open netwerk dat u helpt te verdedigen tegen netwerk toezicht welke aanvallen zijn op uw vrijheid en privacy, geheime zakelijke documenten en zaken relaties.
+
+*WAARSCHUWING:* Door het installeren van Orbot word uw verkeer _niet_ automatisch geproxyt! Deze wizard helpt u hier mee.</string>
+    <string name="wizard_details">Enkele Orbot Details</string>
+    <string name="wizard_details_msg">Orbot is een open-source applicatie waarin Tor, LibEvent en Privoxy zich bevinden. Het creeërt een lokale HTTP proxy (8118) en een SOCKS proxy (9050) naar het Tor netwerk. Orbot heeft ook de mogelijkheid om al het internet verkeer over het Tor netwerk te sturen.</string>
+    <string name="wizard_permissions_root">Toelating toegestaan</string>
+    <string name="wizard_permissions_stock">Orbot Rechten</string>
+    <string name="wizard_premissions_msg_root">Uitstekend! We hebben gedetecteerd dat je root rechten hebt aangezet voor Orbot. We gebruiken deze kracht met verstand.</string>
+    <string name="wizard_permissions_msg_stock">Alhoewel het niet verplicht is kan Orbot ook nog krachtiger worden. Als u root rechten heeft kunt u op de knop onderaan Orbot super krachten toewijzen.</string>
+   
+    <string name="wizard_permissions_no_root">Als u niet over root toegang beschikt en geen idee hebt waar u mee bezig bent zult u zeker moeten zijn dat de applicaties die u gebruikt geschikt voor Orbot zijn.</string>
+    <string name="wizard_permissions_consent">Ik begrijp dit en wil verdergaan zonder root</string>
+   
+    <string name="wizard_permission_enable_root">Root toestaan voor Orbot</string>
+    <string name="wizard_configure">Torificatie Configureren</string>
+    <string name="wizard_configure_msg">Orbot geeft u de mogelijkheid om induvidueel te bepalen welk van uw applicaties over het Tor netwerk gaan.</string> 
+    <string name="wizard_configure_all">Proxy alle toepasingen door Tor</string>
+    <string name="wizard_configure_select_apps">Selecteer individuele toepasingen voor Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Orbot-beschikbare Apps</string>
+    <string name="wizard_tips_msg">We raden u aan om te apps te downloaden welke zich zich automatisch verbinden met Orbot. Klik op de buttons hier beneden om te installeren.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Alleen Android 1.x) - Browser gemaakt voor privacy &amp; voor Orbot</string>
+    <string name="wizard_tips_proxy">Proxy Instellingen - Leer hoe u uw apps kunt configureren voor Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Proxy Instellingen</string>
+    <string name="wizard_proxy_help_msg">Als de Android app welke u gebruikt beschikt over een HTTP of SOCKS proxy instelling, dan kunt u het configureren zodat het via Orbot over het Tor netwerk gaat.
+
+
+De host instelling is 127.0.0.1 of "localhost". De poort voor SOCS is 9050 en voor HTTP 8118. Gebruik SOCKS4A or SOCKS5 indien nodig.
+
+
+U kunt meer leren over het proxyen op Android door naar de FAQ op http://tinyurl.com/proxyandroid te gaan
+    </string>
+    
+    <string name="wizard_final">Orbot is klaar!</string>
+    <string name="wizard_final_msg">Honderdduizenden verschillende mensen over de wereld gebruiken Tor, zoals: journalisten, bloggers, mensen rechten medewerkers, soldaten, bedrijven, burgers met onderdrukte religies, en natuurlijk normale mensen... En nu bent u ook klaar om te gaan!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">U bent succesvol verbonden met het Tor netwerk, maar dit betekent NIET dat u apparaat volledig veilig is. Gebruik te \'Check\' optie vanuit het menu om u browser te testen.
+
+Bezoek onze website op https://guardianproject.info/apps/orbot of stuuf een email naar help at guardianproject.info voor vragen.</string>
+
+	<string name="tor_check">Dit opent uw standaard browser naar https://check.torproject.org om te controleren of Orbot succesvol is geconfigureerd om te verbinden met het Tor netwerk.</string>
+
+	
+    <string name="pref_hs_group">Verborgen diensten</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-pl/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">włącz i wyłącz Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot startuje...</string>
-<string name="status_activated">Podłączony do sieci Tor</string>
-<string name="status_disabled">Orbot wyłączony</string>
-<string name="status_shutting_down">Orbot wyłącza się</string>
-
-<string name="tor_process_connecting">Tor startuje...</string>
-<string name="tor_process_connecting_step2">Ustawianie sterowania...</string>
-<string name="tor_process_connecting_step3">zakończono.</string>
-<string name="tor_process_connecting_step4">oczekiwanie.</string>
-
-<string name="not_anonymous_yet">UWAGA: Twoja komunikacja nie jest jeszcze anonimowa! Proszę skonfiguruj aplikacje aby używały serwera proxy HTTP 127.0.0.1:8118 lub SOCKS4A lub SOCKS5 127.0.0.1:9050</string>
-<string name="menu_home">Start</string>
-<string name="menu_browse">Przeglądaj</string>
-<string name="menu_settings">Ustawienia</string>
-<string name="menu_log">Logi</string>
-<string name="menu_info">Pomoc</string>
-<string name="menu_apps">Aplikacje</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stop</string>
-
-<string name="menu_about">O programie</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Pomoc</string>
-<string name="button_close">Zamknij</string>
-<string name="button_about">O programie</string>
-
-<string name="button_clear_log">Czyść dziennik</string>
-
-
-<string name="menu_verify">Sprawdź</string>
-<string name="menu_exit">Wyjście</string>
-<string name="powered_by">napędzane oprogramowaniem Projektu Tor</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Przekierowanie przezroczyste (Wymaga uprawnień administratora)</string>
-<string name="pref_trans_proxy_title">Przekierowanie przezroczyste</string>
-<string name="pref_trans_proxy_summary">Automatyczne toryfikowanie aplikacji</string>
-
-<string name="pref_transparent_all_title">Przepuść wszystko przez Tora</string>
-<string name="pref_transparent_all_summary">Przekierowanie ruchu wszystkich aplikacji przez Tora</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Binarki Tora pomyslnie zainstalowane!</string>
-<string name="status_install_fail">Nie można zainstalować plików binarnych Tora. Zajrzyj do dziennika i powiadom tor-assistants at torproject.org</string>
-
-<string name="title_error">Błąd Aplikacji</string>
-
-<string name="wizard_title">Witamy w Orbocie</string>
-
-<string name="wizard_btn_tell_me_more">O Orbocie</string>
-<string name="btn_next">Dalej</string>
-<string name="btn_back">wstecz</string>
-<string name="btn_finish">Koniec</string>
-
-<string name="btn_okay">OK</string>
-<string name="btn_cancel">Anuluj</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot daje Tora Androidowi. Tor jest otwartym oprogramowaniem i otwartą siecią, która pomaga bronić się przed podsłuchem sieci znanym jako analiza ruchu, który zagraża wolności osobistej i prywatności, poufnym działaniom biznesowym i relacjami oraz bezpieczeństwu państwa.\n\n*UWAGA:* Sama instalacja Orbota _nie_ zanonimizuje magicznie Twojego ruchu! Ten kreator pozwoli Ci w pierwszych krokach.</string>
-    <string name="wizard_details">Niektóre szczegóły o Orbocie</string>
-    <string name="wizard_details_msg">Orbot jest otwartą aplikacją zawierającą Tora, LibEvent i Privoxy. Dostarcza lokalnego pośrednika HTTP (8118) i SOCKS (9050) do sieci Tora. Orbot ma możliwość, na urządzeniu uruchomionym z prawami administratora, wysyłać cały ruch internetowy przez Tora.</string>
-    <string name="wizard_permissions_root">Dostęp zezwolony</string>
-    <string name="wizard_permissions_stock">Prawa dostepu Orbota</string>
-    <string name="wizard_premissions_msg_root">Doskonale! Odkryliśmy, że masz uprawnienia administratora włączone dla Orbota. Będziemy mądrze korzystać z tej władzy.</string>
-    <string name="wizard_permissions_msg_stock"> Podczas gdy nie jest to wymagane, Orbot może stać się znacznie potężniejszym narzędziem, gdy masz prawa administratora na swoim urządzeniu. Użyj przycisku poniżej, by dać Orbotowi duży uprawnienia.</string>
-   
-    <string name="wizard_permissions_no_root">Jeśli nie masz uprawnień administratora lub nie masz pojęcia, o czym mówimy, używaj aplikacji skonfigurowanych do pracy z Orbotem.</string>
-    <string name="wizard_permissions_consent">Rozumiem i chcę kontynuować bez uprawnień administratora</string>
-   
-    <string name="wizard_permission_enable_root">Daj uprawnienia administratora Orbotowi</string>
-    <string name="wizard_configure">Skonfiguruj Toryfikację</string>
-    <string name="wizard_configure_msg">Orbot daje Ci możliwość przekierowania całego ruchu aplikacji przez Tora ALBO wybrania aplikacji pojedynczo.</string> 
-    <string name="wizard_configure_all">Przekierowuj wszystkie aplikacje przez Tora</string>
-    <string name="wizard_configure_select_apps">Wybierz poszczególne aplikacje dla Tora</string>
-    
-    
-    <string name="wizard_tips_tricks">Aplikacje skonfigurowane dla Orbota</string>
-    <string name="wizard_tips_msg">Zachęcamy do pobierania i używania aplikacji, które wiedzą, jak łączyć się bezpośrednio z Orbotem. Kliknij na poniższe przyciski, by zainstalować.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (tylko Android 1.x) - Przeglądarka zaprojektowana do prywatności i dla Orbota</string>
-    <string name="wizard_tips_proxy">Ustawienia Proxy - NDowiedz się, jak konfiguroać aplikacje do współpracy z Orbotem</string>
-    
-    <string name="wizard_proxy_help_info">Ustawienia Proxy</string>
-    <string name="wizard_proxy_help_msg">Jeśli aplikacja na Androida, której używasz ma obsługę proxy HTTP lub SOCKS, możesz skonfigurować ją do łączenia się z Orbotem i używania Tora.\n\n
-    Ustawienie hosta to 127.0.0.1 lub "localhost". Dla HTTP, numer portu to 8118. Dla SOCKS pośrednik to 9050. Powinno się używać SOCKS4A lub SOCKS5, jeśli to możliwe.
-    \n\n
-    Możesz dowiedzieć się więcej o przekierowaniu ruchu na Androidzie z FAQ pod adresem: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Orbot jest gotowy!</string>
-    <string name="wizard_final_msg">Setki tysięcy ludzi na całym świecie używają Tora z różnych powodów: dziennikarze i blogerzy, działacze na rzecz praw człowieka, stróże prawa, żołnierze, korporacje, obywatele represyjnych reżimów i zwykli obywatele... teraz Ty też możesz!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">Pomyślnie połaczono z siecią Tora - ale to NIE oznacza, że Twoje urządzenie jest bezpieczne. Możesz użyć opcji \'Sprawdź\' w menu, aby przetestować swoją przeglądarkę. \n\nOdwiedź nas na https://guardianproject.info/apps/orbot lub wyślij email na help at guardianproject.info, by dowiedzieć się więcej.</string>
-
-	<string name="tor_check">To otworzy Twoją domyślną przeglądarkę na adresie https://check.torproject.org w celu sprawdzenia, czy Orbot jest skonfigurowany i jest poąłczenie z Torem.</string>
-
-	
-    <string name="pref_hs_group">Usługi ukryte</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-pl/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">włącz i wyłącz Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot startuje...</string>
+<string name="status_activated">Podłączony do sieci Tor</string>
+<string name="status_disabled">Orbot wyłączony</string>
+<string name="status_shutting_down">Orbot wyłącza się</string>
+
+<string name="tor_process_connecting">Tor startuje...</string>
+<string name="tor_process_connecting_step2">Ustawianie sterowania...</string>
+<string name="tor_process_connecting_step3">zakończono.</string>
+<string name="tor_process_connecting_step4">oczekiwanie.</string>
+
+<string name="not_anonymous_yet">UWAGA: Twoja komunikacja nie jest jeszcze anonimowa! Proszę skonfiguruj aplikacje aby używały serwera proxy HTTP 127.0.0.1:8118 lub SOCKS4A lub SOCKS5 127.0.0.1:9050</string>
+<string name="menu_home">Start</string>
+<string name="menu_browse">Przeglądaj</string>
+<string name="menu_settings">Ustawienia</string>
+<string name="menu_log">Logi</string>
+<string name="menu_info">Pomoc</string>
+<string name="menu_apps">Aplikacje</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stop</string>
+
+<string name="menu_about">O programie</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Pomoc</string>
+<string name="button_close">Zamknij</string>
+<string name="button_about">O programie</string>
+
+<string name="button_clear_log">Czyść dziennik</string>
+
+
+<string name="menu_verify">Sprawdź</string>
+<string name="menu_exit">Wyjście</string>
+<string name="powered_by">napędzane oprogramowaniem Projektu Tor</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Przekierowanie przezroczyste (Wymaga uprawnień administratora)</string>
+<string name="pref_trans_proxy_title">Przekierowanie przezroczyste</string>
+<string name="pref_trans_proxy_summary">Automatyczne toryfikowanie aplikacji</string>
+
+<string name="pref_transparent_all_title">Przepuść wszystko przez Tora</string>
+<string name="pref_transparent_all_summary">Przekierowanie ruchu wszystkich aplikacji przez Tora</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Binarki Tora pomyslnie zainstalowane!</string>
+<string name="status_install_fail">Nie można zainstalować plików binarnych Tora. Zajrzyj do dziennika i powiadom tor-assistants at torproject.org</string>
+
+<string name="title_error">Błąd Aplikacji</string>
+
+<string name="wizard_title">Witamy w Orbocie</string>
+
+<string name="wizard_btn_tell_me_more">O Orbocie</string>
+<string name="btn_next">Dalej</string>
+<string name="btn_back">wstecz</string>
+<string name="btn_finish">Koniec</string>
+
+<string name="btn_okay">OK</string>
+<string name="btn_cancel">Anuluj</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot daje Tora Androidowi. Tor jest otwartym oprogramowaniem i otwartą siecią, która pomaga bronić się przed podsłuchem sieci znanym jako analiza ruchu, który zagraża wolności osobistej i prywatności, poufnym działaniom biznesowym i relacjami oraz bezpieczeństwu państwa.\n\n*UWAGA:* Sama instalacja Orbota _nie_ zanonimizuje magicznie Twojego ruchu! Ten kreator pozwoli Ci w pierwszych krokach.</string>
+    <string name="wizard_details">Niektóre szczegóły o Orbocie</string>
+    <string name="wizard_details_msg">Orbot jest otwartą aplikacją zawierającą Tora, LibEvent i Privoxy. Dostarcza lokalnego pośrednika HTTP (8118) i SOCKS (9050) do sieci Tora. Orbot ma możliwość, na urządzeniu uruchomionym z prawami administratora, wysyłać cały ruch internetowy przez Tora.</string>
+    <string name="wizard_permissions_root">Dostęp zezwolony</string>
+    <string name="wizard_permissions_stock">Prawa dostepu Orbota</string>
+    <string name="wizard_premissions_msg_root">Doskonale! Odkryliśmy, że masz uprawnienia administratora włączone dla Orbota. Będziemy mądrze korzystać z tej władzy.</string>
+    <string name="wizard_permissions_msg_stock"> Podczas gdy nie jest to wymagane, Orbot może stać się znacznie potężniejszym narzędziem, gdy masz prawa administratora na swoim urządzeniu. Użyj przycisku poniżej, by dać Orbotowi duży uprawnienia.</string>
+   
+    <string name="wizard_permissions_no_root">Jeśli nie masz uprawnień administratora lub nie masz pojęcia, o czym mówimy, używaj aplikacji skonfigurowanych do pracy z Orbotem.</string>
+    <string name="wizard_permissions_consent">Rozumiem i chcę kontynuować bez uprawnień administratora</string>
+   
+    <string name="wizard_permission_enable_root">Daj uprawnienia administratora Orbotowi</string>
+    <string name="wizard_configure">Skonfiguruj Toryfikację</string>
+    <string name="wizard_configure_msg">Orbot daje Ci możliwość przekierowania całego ruchu aplikacji przez Tora ALBO wybrania aplikacji pojedynczo.</string> 
+    <string name="wizard_configure_all">Przekierowuj wszystkie aplikacje przez Tora</string>
+    <string name="wizard_configure_select_apps">Wybierz poszczególne aplikacje dla Tora</string>
+    
+    
+    <string name="wizard_tips_tricks">Aplikacje skonfigurowane dla Orbota</string>
+    <string name="wizard_tips_msg">Zachęcamy do pobierania i używania aplikacji, które wiedzą, jak łączyć się bezpośrednio z Orbotem. Kliknij na poniższe przyciski, by zainstalować.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (tylko Android 1.x) - Przeglądarka zaprojektowana do prywatności i dla Orbota</string>
+    <string name="wizard_tips_proxy">Ustawienia Proxy - NDowiedz się, jak konfiguroać aplikacje do współpracy z Orbotem</string>
+    
+    <string name="wizard_proxy_help_info">Ustawienia Proxy</string>
+    <string name="wizard_proxy_help_msg">Jeśli aplikacja na Androida, której używasz ma obsługę proxy HTTP lub SOCKS, możesz skonfigurować ją do łączenia się z Orbotem i używania Tora.\n\n
+    Ustawienie hosta to 127.0.0.1 lub "localhost". Dla HTTP, numer portu to 8118. Dla SOCKS pośrednik to 9050. Powinno się używać SOCKS4A lub SOCKS5, jeśli to możliwe.
+    \n\n
+    Możesz dowiedzieć się więcej o przekierowaniu ruchu na Androidzie z FAQ pod adresem: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Orbot jest gotowy!</string>
+    <string name="wizard_final_msg">Setki tysięcy ludzi na całym świecie używają Tora z różnych powodów: dziennikarze i blogerzy, działacze na rzecz praw człowieka, stróże prawa, żołnierze, korporacje, obywatele represyjnych reżimów i zwykli obywatele... teraz Ty też możesz!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">Pomyślnie połaczono z siecią Tora - ale to NIE oznacza, że Twoje urządzenie jest bezpieczne. Możesz użyć opcji \'Sprawdź\' w menu, aby przetestować swoją przeglądarkę. \n\nOdwiedź nas na https://guardianproject.info/apps/orbot lub wyślij email na help at guardianproject.info, by dowiedzieć się więcej.</string>
+
+	<string name="tor_check">To otworzy Twoją domyślną przeglądarkę na adresie https://check.torproject.org w celu sprawdzenia, czy Orbot jest skonfigurowany i jest poąłczenie z Torem.</string>
+
+	
+    <string name="pref_hs_group">Usługi ukryte</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-pt/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">iniciar e parar Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">O Orbot está a iniciar...</string>
-<string name="status_activated">Ligação estabelecida à rede Tor</string>
-<string name="status_disabled">"Orbot está Desactivado</string>
-<string name="status_shutting_down">Orbot a encerrar</string>
-
-<string name="tor_process_connecting">A iniciar Tor...</string>
-<string name="tor_process_connecting_step2">a autenticar a ligação de controlo...</string>
-<string name="tor_process_connecting_step3">completo.</string>
-<string name="tor_process_connecting_step4">a aguardar.</string>
-
-<string name="not_anonymous_yet">ATENÇÃO: A sua ligação ainda não é anónima! Por favor configure as suas aplicações para utilizarem o proxy HTTP 127.0.0.1:8118 ou o proxy SOCKS4A ou SOCKS5 127.0.0.1:9050</string>
-<string name="menu_home">Início</string>
-<string name="menu_browse">Explorar</string>
-<string name="menu_settings">Definições</string>
-<string name="menu_log">Relatório</string>
-<string name="menu_info">Ajuda</string>
-<string name="menu_apps">Aplicações</string>
-<string name="menu_start">Iniciar</string>
-<string name="menu_stop">Parar</string>
-
-<string name="menu_about">About</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Ajuda</string>
-<string name="button_close">Encerrar</string>
-<string name="button_about">Sobre</string>
-
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
-
-<string name="menu_verify">Check</string>
-<string name="menu_exit">Exit</string>
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-pt/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-pt/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">iniciar e parar Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">O Orbot está a iniciar...</string>
+<string name="status_activated">Ligação estabelecida à rede Tor</string>
+<string name="status_disabled">"Orbot está Desactivado</string>
+<string name="status_shutting_down">Orbot a encerrar</string>
+
+<string name="tor_process_connecting">A iniciar Tor...</string>
+<string name="tor_process_connecting_step2">a autenticar a ligação de controlo...</string>
+<string name="tor_process_connecting_step3">completo.</string>
+<string name="tor_process_connecting_step4">a aguardar.</string>
+
+<string name="not_anonymous_yet">ATENÇÃO: A sua ligação ainda não é anónima! Por favor configure as suas aplicações para utilizarem o proxy HTTP 127.0.0.1:8118 ou o proxy SOCKS4A ou SOCKS5 127.0.0.1:9050</string>
+<string name="menu_home">Início</string>
+<string name="menu_browse">Explorar</string>
+<string name="menu_settings">Definições</string>
+<string name="menu_log">Relatório</string>
+<string name="menu_info">Ajuda</string>
+<string name="menu_apps">Aplicações</string>
+<string name="menu_start">Iniciar</string>
+<string name="menu_stop">Parar</string>
+
+<string name="menu_about">About</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Ajuda</string>
+<string name="button_close">Encerrar</string>
+<string name="button_about">Sobre</string>
+
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
+
+<string name="menu_verify">Check</string>
+<string name="menu_exit">Exit</string>
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ru/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">запуск и остановка Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Запуск Orbot...</string>
-<string name="status_activated">Подключен к сети Tor</string>
-<string name="status_disabled">"Orbot Отключен</string>
-<string name="status_shutting_down">Orbot выключается</string>
-
-<string name="tor_process_connecting">Запуск Tor...</string>
-<string name="tor_process_connecting_step2">Настройка управления...</string>
-<string name="tor_process_connecting_step3">готово.</string>
-<string name="tor_process_connecting_step4">ожидание.</string>
-
-<string name="not_anonymous_yet">ВНИМАНИЕ! Ваш поток данных еще не анонимен! Пожалуйста, настройте свои приложения на использование HTTP прокси 127.0.0.1:8118 или SOCKS4A или SOCKS5 прокси 127.0.0.1:9050</string>
-<string name="menu_home">Домашняя страница</string>
-<string name="menu_browse">Просмотр</string>
-<string name="menu_settings">Параметры</string>
-<string name="menu_log">Журнал</string>
-<string name="menu_info">Справка</string>
-<string name="menu_apps">Приложения</string>
-<string name="menu_start">Запустить</string>
-<string name="menu_stop">Остановить</string>
-
-<string name="menu_about">О программе</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">Справка</string>
-<string name="button_close">Закрыть</string>
-<string name="button_about">О программе</string>
-
-<string name="button_clear_log">Очистить журнал</string>
-
-
-<string name="menu_verify">Проверка</string>
-<string name="menu_exit">Выход</string>
-<string name="powered_by">powered by the Tor Project</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">Прозрачный прокси (Требуются привилегии root)</string>
-<string name="pref_trans_proxy_title">Прозрачный прокси</string>
-<string name="pref_trans_proxy_summary">Автоматическая торификация приложений</string>
-
-<string name="pref_transparent_all_title">Направлять все через Tor</string>
-<string name="pref_transparent_all_summary">Трафик всех приложений будет проходить через Tor</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Программа Tor успешно установлена!</string>
-<string name="status_install_fail">Не удалось установить программу Tor. Пожалуйста, проверьте системный журнал и сообщите нам: tor-assistants at torproject.org</string>
-
-<string name="title_error">Ошибка приложения</string>
-
-<string name="wizard_title">Добро пожаловать в Orbot</string>
-
-<string name="wizard_btn_tell_me_more">Об Orbot</string>
-<string name="btn_next">Вперед</string>
-<string name="btn_back">Назад</string>
-<string name="btn_finish">Завершить</string>
-
-<string name="btn_okay">Ok</string>
-<string name="btn_cancel">Отмена</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot, и Tor на Android. Tor - это бесплатное программное обеспечение и открытая сеть, которая позволяет вам сберечься от прослушивания в сети, которое угрожает вашей свободе и конфиденциальности в бизнесе, отношениях, Tor позволяет защититься от анализа трафика.\n\n*ВНИМАНИЕ:* Установка Orbot не может магическим образом анонимизировать весь ваш мобильный трафик! Этот мастер поможет вам начать.</string>
-    <string name="wizard_details">Некоторые сведенья о программе Orbot</string>
-    <string name="wizard_details_msg">Orbot - это приложение с открытым кодом, которое содержит Tor, LibEvent и Privoxy. Она обеспечивает работу локального HTTP прокси (8118) и SOCKS прокси (9050) в сети Tor. Orbot также позволяет, из корня устройсва, пересылать весь интернет трафик через Tor.</string>
-    <string name="wizard_permissions_root">Разрешение получено</string>
-    <string name="wizard_permissions_stock">Разрешения Orbot</string>
-    <string name="wizard_premissions_msg_root">Отлично! Мы определили, что доступ к корневому каталогу  в Orbot разрешен. Мы будем использовать это с умом.</string>
-    <string name="wizard_permissions_msg_stock">Хотя это не требуется, Orbot может быть более мощным инструментом, если доступ к корневому каталогу устройства разрешен. Нажимите на кнопку ниже и дайте Orbot суперсилу!</string>
-   
-    <string name="wizard_permissions_no_root">Если у вас нет доступа к корневому каталогу или вы понятия не имеете о чем мы говорим, просто убедитесь, что используете приложения, разработанные для Orbot.</string>
-    <string name="wizard_permissions_consent">Я все понял, продолжу без доступа к корню</string>
-   
-    <string name="wizard_permission_enable_root">Дать доступ к корю программе Orbot</string>
-    <string name="wizard_configure">Настроить Торификацию</string>
-    <string name="wizard_configure_msg">Программа Orbot дает вам возможность маршрутизировать трафик всех приложений через Tor ИЛИ выбрать приложения для маршрутизации самостоятельно.</string> 
-    <string name="wizard_configure_all">Маршрутизировать все приложения через Tor</string>
-    <string name="wizard_configure_select_apps">Выберите приложения для маршрутизации через Tor</string>
-    
-    
-    <string name="wizard_tips_tricks">Orbot-задействованные приложения</string>
-    <string name="wizard_tips_msg">Мы советуем вам скачать и использовать приложения, которые умеют работать напрямую через Orbot. Нажмите на кнопки ниже, чтобы запустить процесс установки.</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (Только для версии Android 1.x) - Браузер, разработанный для обеспечения безопасности и для Orbot</string>
-    <string name="wizard_tips_proxy">Настройки прокси - узнайте как настроить приложения для работы с Orbot</string>
-    
-    <string name="wizard_proxy_help_info">Настройки Прокси</string>
-    <string name="wizard_proxy_help_msg">Если используемое вами приложение для Android поддерживает HTTP или SOCKS, то вы можете настоить его на подключение к Orbot и использование Tor.\n\n
-    Настройки хоста (или localhost) - 127.0.0.1. Для HTTP, номер порта - 8118. Для SOCKS прокси - 9050. По возможности используйте SOCKS4A или SOCKS5.
-    \n\n
-    Вы можете узнать больше о работе через прокси на Android, прочитав этот FAQ: http://tinyurl.com/proxyandroid
-    </string>
-    
-    <string name="wizard_final">Программа Orbot готова к использованию!</string>
-    <string name="wizard_final_msg">Сотни тысяч людей по всему миру используют Tor по различным причинам: журналисты и блоггеры, активисты организаций, выступающих в защиту прав человека, судебные исполнители, солдаты, корпорации, граждане стран с репрессивным режимом, и простые люди... а теперь готовы и вы!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time"> Вы успешно подключились к сети Tor, но это НЕ значит, что ваше устройство безопасно. Вы можете воспользоваться функцией \'Проверки\' из меню, чтобы потестировать ваш браузер. \n\nПосетите наш сайт: https://guardianproject.info/apps/orbot или отправьте нам письмо на адрес: help at guardianproject.info, чтобы узнать больше.</string>
-
-	<string name="tor_check">Это приведет к запуску веб-браузера, выбранного на вашем компьютере по-умолчанию, и подключению к сайту https://check.torproject.org, с целью проверки правильности работы Orbot и определения, подключены ли вы к сети Tor.</string>
-
-	
-    <string name="pref_hs_group">Скрытые сервисы</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-ru/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-ru/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">запуск и остановка Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Запуск Orbot...</string>
+<string name="status_activated">Подключен к сети Tor</string>
+<string name="status_disabled">"Orbot Отключен</string>
+<string name="status_shutting_down">Orbot выключается</string>
+
+<string name="tor_process_connecting">Запуск Tor...</string>
+<string name="tor_process_connecting_step2">Настройка управления...</string>
+<string name="tor_process_connecting_step3">готово.</string>
+<string name="tor_process_connecting_step4">ожидание.</string>
+
+<string name="not_anonymous_yet">ВНИМАНИЕ! Ваш поток данных еще не анонимен! Пожалуйста, настройте свои приложения на использование HTTP прокси 127.0.0.1:8118 или SOCKS4A или SOCKS5 прокси 127.0.0.1:9050</string>
+<string name="menu_home">Домашняя страница</string>
+<string name="menu_browse">Просмотр</string>
+<string name="menu_settings">Параметры</string>
+<string name="menu_log">Журнал</string>
+<string name="menu_info">Справка</string>
+<string name="menu_apps">Приложения</string>
+<string name="menu_start">Запустить</string>
+<string name="menu_stop">Остановить</string>
+
+<string name="menu_about">О программе</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">Справка</string>
+<string name="button_close">Закрыть</string>
+<string name="button_about">О программе</string>
+
+<string name="button_clear_log">Очистить журнал</string>
+
+
+<string name="menu_verify">Проверка</string>
+<string name="menu_exit">Выход</string>
+<string name="powered_by">powered by the Tor Project</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">Прозрачный прокси (Требуются привилегии root)</string>
+<string name="pref_trans_proxy_title">Прозрачный прокси</string>
+<string name="pref_trans_proxy_summary">Автоматическая торификация приложений</string>
+
+<string name="pref_transparent_all_title">Направлять все через Tor</string>
+<string name="pref_transparent_all_summary">Трафик всех приложений будет проходить через Tor</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Программа Tor успешно установлена!</string>
+<string name="status_install_fail">Не удалось установить программу Tor. Пожалуйста, проверьте системный журнал и сообщите нам: tor-assistants at torproject.org</string>
+
+<string name="title_error">Ошибка приложения</string>
+
+<string name="wizard_title">Добро пожаловать в Orbot</string>
+
+<string name="wizard_btn_tell_me_more">Об Orbot</string>
+<string name="btn_next">Вперед</string>
+<string name="btn_back">Назад</string>
+<string name="btn_finish">Завершить</string>
+
+<string name="btn_okay">Ok</string>
+<string name="btn_cancel">Отмена</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot, и Tor на Android. Tor - это бесплатное программное обеспечение и открытая сеть, которая позволяет вам сберечься от прослушивания в сети, которое угрожает вашей свободе и конфиденциальности в бизнесе, отношениях, Tor позволяет защититься от анализа трафика.\n\n*ВНИМАНИЕ:* Установка Orbot не может магическим образом анонимизировать весь ваш мобильный трафик! Этот мастер поможет вам начать.</string>
+    <string name="wizard_details">Некоторые сведенья о программе Orbot</string>
+    <string name="wizard_details_msg">Orbot - это приложение с открытым кодом, которое содержит Tor, LibEvent и Privoxy. Она обеспечивает работу локального HTTP прокси (8118) и SOCKS прокси (9050) в сети Tor. Orbot также позволяет, из корня устройсва, пересылать весь интернет трафик через Tor.</string>
+    <string name="wizard_permissions_root">Разрешение получено</string>
+    <string name="wizard_permissions_stock">Разрешения Orbot</string>
+    <string name="wizard_premissions_msg_root">Отлично! Мы определили, что доступ к корневому каталогу  в Orbot разрешен. Мы будем использовать это с умом.</string>
+    <string name="wizard_permissions_msg_stock">Хотя это не требуется, Orbot может быть более мощным инструментом, если доступ к корневому каталогу устройства разрешен. Нажимите на кнопку ниже и дайте Orbot суперсилу!</string>
+   
+    <string name="wizard_permissions_no_root">Если у вас нет доступа к корневому каталогу или вы понятия не имеете о чем мы говорим, просто убедитесь, что используете приложения, разработанные для Orbot.</string>
+    <string name="wizard_permissions_consent">Я все понял, продолжу без доступа к корню</string>
+   
+    <string name="wizard_permission_enable_root">Дать доступ к корю программе Orbot</string>
+    <string name="wizard_configure">Настроить Торификацию</string>
+    <string name="wizard_configure_msg">Программа Orbot дает вам возможность маршрутизировать трафик всех приложений через Tor ИЛИ выбрать приложения для маршрутизации самостоятельно.</string> 
+    <string name="wizard_configure_all">Маршрутизировать все приложения через Tor</string>
+    <string name="wizard_configure_select_apps">Выберите приложения для маршрутизации через Tor</string>
+    
+    
+    <string name="wizard_tips_tricks">Orbot-задействованные приложения</string>
+    <string name="wizard_tips_msg">Мы советуем вам скачать и использовать приложения, которые умеют работать напрямую через Orbot. Нажмите на кнопки ниже, чтобы запустить процесс установки.</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (Только для версии Android 1.x) - Браузер, разработанный для обеспечения безопасности и для Orbot</string>
+    <string name="wizard_tips_proxy">Настройки прокси - узнайте как настроить приложения для работы с Orbot</string>
+    
+    <string name="wizard_proxy_help_info">Настройки Прокси</string>
+    <string name="wizard_proxy_help_msg">Если используемое вами приложение для Android поддерживает HTTP или SOCKS, то вы можете настоить его на подключение к Orbot и использование Tor.\n\n
+    Настройки хоста (или localhost) - 127.0.0.1. Для HTTP, номер порта - 8118. Для SOCKS прокси - 9050. По возможности используйте SOCKS4A или SOCKS5.
+    \n\n
+    Вы можете узнать больше о работе через прокси на Android, прочитав этот FAQ: http://tinyurl.com/proxyandroid
+    </string>
+    
+    <string name="wizard_final">Программа Orbot готова к использованию!</string>
+    <string name="wizard_final_msg">Сотни тысяч людей по всему миру используют Tor по различным причинам: журналисты и блоггеры, активисты организаций, выступающих в защиту прав человека, судебные исполнители, солдаты, корпорации, граждане стран с репрессивным режимом, и простые люди... а теперь готовы и вы!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time"> Вы успешно подключились к сети Tor, но это НЕ значит, что ваше устройство безопасно. Вы можете воспользоваться функцией \'Проверки\' из меню, чтобы потестировать ваш браузер. \n\nПосетите наш сайт: https://guardianproject.info/apps/orbot или отправьте нам письмо на адрес: help at guardianproject.info, чтобы узнать больше.</string>
+
+	<string name="tor_check">Это приведет к запуску веб-браузера, выбранного на вашем компьютере по-умолчанию, и подключению к сайту https://check.torproject.org, с целью проверки правильности работы Orbot и определения, подключены ли вы к сети Tor.</string>
+
+	
+    <string name="pref_hs_group">Скрытые сервисы</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-sv/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-             <string name="app_version">1.0.5-dev</string>
-     
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">start and stop Tor</string>
-    <string name="tor_proxy_service_process">torproxyservice</string>
-   
-<string name="status_starting_up">Orbot startar...</string>
-<string name="status_activated">Uppkopplad till Tor nätverket</string>
-<string name="status_disabled">"Orbot är inaktiverad</string>
-<string name="status_shutting_down">Orbot avslutas</string>
-
-<string name="tor_process_connecting">Startar Tor...</string>
-<string name="tor_process_connecting_step2">verifierar kontroll uppkopplingen...</string>
-<string name="tor_process_connecting_step3">klar.</string>
-<string name="tor_process_connecting_step4">väntar.</string>
-
-<string name="not_anonymous_yet">VARNING: Din trafik är inte anonym än! Vänligen konfigurera dina apps att använda HTTP proxy 127.0.0.1:8118 eller SOCKS4A/5 proxy 127.0.0.1:9050</string>
-<string name="menu_home">Hem</string>
-<string name="menu_browse">Browse</string>
-<string name="menu_settings">Inställningar</string>
-<string name="menu_log">Logg</string>
-<string name="menu_info">Hjälp</string>
-<string name="menu_apps">Apps</string>
-<string name="menu_start">Start</string>
-<string name="menu_stop">Stopp</string>
-
-<string name="menu_about">About</string>
-<string name="menu_wizard">Wizard</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
-
-
-<string name="button_help">Hjälp</string>
-<string name="button_close">Stäng</string>
-<string name="button_about">Om</string>
-
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-sv/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-sv/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+             <string name="app_version">1.0.5</string>
+     
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">start and stop Tor</string>
+    <string name="tor_proxy_service_process">torproxyservice</string>
+   
+<string name="status_starting_up">Orbot startar...</string>
+<string name="status_activated">Uppkopplad till Tor nätverket</string>
+<string name="status_disabled">"Orbot är inaktiverad</string>
+<string name="status_shutting_down">Orbot avslutas</string>
+
+<string name="tor_process_connecting">Startar Tor...</string>
+<string name="tor_process_connecting_step2">verifierar kontroll uppkopplingen...</string>
+<string name="tor_process_connecting_step3">klar.</string>
+<string name="tor_process_connecting_step4">väntar.</string>
+
+<string name="not_anonymous_yet">VARNING: Din trafik är inte anonym än! Vänligen konfigurera dina apps att använda HTTP proxy 127.0.0.1:8118 eller SOCKS4A/5 proxy 127.0.0.1:9050</string>
+<string name="menu_home">Hem</string>
+<string name="menu_browse">Browse</string>
+<string name="menu_settings">Inställningar</string>
+<string name="menu_log">Logg</string>
+<string name="menu_info">Hjälp</string>
+<string name="menu_apps">Apps</string>
+<string name="menu_start">Start</string>
+<string name="menu_stop">Stopp</string>
+
+<string name="menu_about">About</string>
+<string name="menu_wizard">Wizard</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
+
+
+<string name="button_help">Hjälp</string>
+<string name="button_close">Stäng</string>
+<string name="button_about">Om</string>
+
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-zh/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
-    <string name="internal_web_url">http://orbot/</string>
-    <string name="default_web_url">http://check.torproject.org</string>
-    <string name="secure_default_web_url">https://check.torproject.org</string>
-    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
-    <string name="control_permission_label">启动和停止 Tor</string>
-    <string name="tor_proxy_service_process">Tor 代理服务</string>
-   
-<string name="status_starting_up">Orbot 正在启动...</string>
-<string name="status_activated">已连接到 Tor 网络</string>
-<string name="status_disabled">Orbot 已停用</string>
-<string name="status_shutting_down">Orbot 正在关闭</string>
-
-<string name="tor_process_connecting">正在启动Tor....</string>
-<string name="tor_process_connecting_step2">设置控制...</string>
-<string name="tor_process_connecting_step3">完毕。</string>
-<string name="tor_process_connecting_step4">等待中。</string>
-
-<string name="not_anonymous_yet">警告: 您的通讯还不是匿名的! 请设置您的应用程序使用代理服务器 127.0.0.1:8118 或者 SOCKS4A 或者 SOCKS5 代理服务器 127.0.0.1:9050</string>
-<string name="menu_home">首页</string>
-<string name="menu_browse">浏览</string>
-<string name="menu_settings">设置</string>
-<string name="menu_log">日志</string>
-<string name="menu_info">帮助</string>
-<string name="menu_apps">应用</string>
-<string name="menu_start">启动</string>
-<string name="menu_stop">停止</string>
-
-<string name="menu_about">关于</string>
-<string name="menu_wizard">Wizard</string>
-
-
-<string name="button_help">帮助</string>
-<string name="button_close">关闭</string>
-<string name="button_about">关于</string>
-
-<string name="button_clear_log">Clear Log</string>
-
-
-<string name="menu_verify">检查</string>
-<string name="menu_exit">退出</string>
-<string name="powered_by">由 Tor 项目强力驱动</string>
-<string name="press_to_start">- long press to start -</string>
-
-<string name="pref_trans_proxy_group">透明代理(需要 root)</string>
-<string name="pref_trans_proxy_title">透明代理</string>
-<string name="pref_trans_proxy_summary">自动对应用程序使用 Tor</string>
-
-<string name="pref_transparent_all_title">对所有应用使用 Tor</string>
-<string name="pref_transparent_all_summary">使用 Tor 代理所有程序的流量</string>
-
-<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
-<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
-
-<string name="pref_transparent_port_title">Port List</string>
-<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
-<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
-
-<string name="pref_has_root">Request Root Access</string>
-<string name="pref_has_root_summary">Request root access for transparent proxying</string>
-
-<string name="status_install_success">Tor 二进制程序安装成功!</string>
-<string name="status_install_fail">Tor 二进制程序无法安装。请查看日志 tor-assistants at torproject.org</string>
-
-<string name="title_error">应用程序错误</string>
-
-<string name="wizard_title">欢迎使用 Orbot</string>
-
-<string name="wizard_btn_tell_me_more">关于 Orbot</string>
-<string name="btn_next">下一步</string>
-<string name="btn_back">上一步</string>
-<string name="btn_finish">完成</string>
-
-<string name="btn_okay">确定</string>
-<string name="btn_cancel">取消</string>
-
-
-<!-- Welcome Wizard strings (DJH) -->
- 
-    <string name="wizard_welcome_msg">Orbot 将 Tor 带到 Android 之上。Tor 是自由软件,致力于构建开放网络,帮助保护网络访问的自由和隐私,可以抵御秘密的商业活动、关系以及已知的流量分析技术。\n\n*警告:*仅仅安装 Orbot 不会自动使您的移动流量匿名化!这个向导将带您入门。</string>
-    <string name="wizard_details">一些 Orbot 详情</string>
-    <string name="wizard_details_msg">Orbot 是包含 Tor、LibEvent 和 Privoxy 的开源软件。它包含了一个本地 HTTP 代理(8118)和 SOCKS 代理(9050),使您接入 Tor 网络。Orbot 在可以获得 root 权限的设备上接管所有流量经由 Tor 网络。</string>
-    <string name="wizard_permissions_root">已赋予权限</string>
-    <string name="wizard_permissions_stock">Orbot 权限</string>
-    <string name="wizard_premissions_msg_root">非常好!我们检测到您已经为 Orbot 配置了 root 权限。我们会聪明地使用这个特权。</string>
-    <string name="wizard_permissions_msg_stock">虽然并非必须,如果你的设备有 root 权限,Orbot 可以表现得更为强大。使用以下按钮来赋予 Orbot 超级能力!</string>
-   
-    <string name="wizard_permissions_no_root">如果你没有 root 权限,或不明白上面说的是什么,那么只需使用可与 Orbot 工作的应用程序。</string>
-    <string name="wizard_permissions_consent">我明白并会以非 root 继续</string>
-   
-    <string name="wizard_permission_enable_root">为 Orbot 赋予 root 权限</string>
-    <string name="wizard_configure">配置 Tor 使用</string>
-    <string name="wizard_configure_msg">Orbot 给予您路由所有应用程序流量通过 Tor 或者为单个程序设置选择的选项。</string> 
-    <string name="wizard_configure_all">通过 Tor 代理全部应用程序</string>
-    <string name="wizard_configure_select_apps">选择使用 Tor 的单个应用程序</string>
-    
-    
-    <string name="wizard_tips_tricks">可用 Orbot 的应用程序</string>
-    <string name="wizard_tips_msg">我们建议您下载和使用能直接连接到 Orbot 的应用程序。点击以下按钮安装。</string>
-    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
-    <string name="wizard_tips_orweb">ORWEB (仅 Android 1.x) - 着重隐私设计的浏览器</string>
-    <string name="wizard_tips_proxy">代理设置 - 学习如何配置应用程序使用 Orbot</string>
-    
-    <string name="wizard_proxy_help_info">代理设置</string>
-    <string name="wizard_proxy_help_msg">如果您正在使用的 Android 应用程序支持使用 HTTP 或 SOCKS 代理,您可以配置它连接到 Orbot 并使用 Tor。\n\n
-    主机设置为 127.0.0.1 或 localhost。对于 HTTP,端口为 8118,对于 SOCKS 端口为 9050。如果可能,应当使用 SOCKS4A 或 SOCKS5。
-    \n\n
-    您可以通过 http://tinyurl.com/proxyandroid 了解更多 Android 上使用代理的知识。</string>
-    
-    <string name="wizard_final">Orbot 已就绪!</string>
-    <string name="wizard_final_msg">数以万计的各国人们因为各种原因使用 Tor:记者、人权工作者、法律工作者、士兵、公司、迫于实际情况使用的市民,当然也有普通的市民。现在你也即将成为其中的一员!</string>
-    
-    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
-    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
-    
-<!-- END Welcome Wizard strings (DJH) -->
- 
-
-	<string name="connect_first_time">您已成功连接至 Tor 网络 - 但这并不意味着您的设备安全。您可以使用“检查”选项测试您的浏览器。\n\n访问 https://guardianproject.info/apps/orbot 或发送邮件到 help at guardianproject.info 以了解更多信息。</string>
-
-	<string name="tor_check">这将启动默认浏览器并访问 https://check.torproject.org 以测试是否正确配置了 Orbot 并确认您是否已经连接到 Tor。</string>
-
-	
-    <string name="pref_hs_group">隐藏服务</string>
-    
-    <string name="pref_general_group">General</string>
-    <string name="pref_start_boot_title">Start Orbot on Boot</string>
-    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
-    
-</resources>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml (from rev 24751, projects/android/trunk/Orbot/res/values-zh/strings.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/values-zh/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Orbot</string>
+        <string name="app_version">1.0.5</string>
+    
+    <string name="internal_web_url">http://orbot/</string>
+    <string name="default_web_url">http://check.torproject.org</string>
+    <string name="secure_default_web_url">https://check.torproject.org</string>
+    <string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
+    <string name="control_permission_label">启动和停止 Tor</string>
+    <string name="tor_proxy_service_process">Tor 代理服务</string>
+   
+<string name="status_starting_up">Orbot 正在启动...</string>
+<string name="status_activated">已连接到 Tor 网络</string>
+<string name="status_disabled">Orbot 已停用</string>
+<string name="status_shutting_down">Orbot 正在关闭</string>
+
+<string name="tor_process_connecting">正在启动Tor....</string>
+<string name="tor_process_connecting_step2">设置控制...</string>
+<string name="tor_process_connecting_step3">完毕。</string>
+<string name="tor_process_connecting_step4">等待中。</string>
+
+<string name="not_anonymous_yet">警告: 您的通讯还不是匿名的! 请设置您的应用程序使用代理服务器 127.0.0.1:8118 或者 SOCKS4A 或者 SOCKS5 代理服务器 127.0.0.1:9050</string>
+<string name="menu_home">首页</string>
+<string name="menu_browse">浏览</string>
+<string name="menu_settings">设置</string>
+<string name="menu_log">日志</string>
+<string name="menu_info">帮助</string>
+<string name="menu_apps">应用</string>
+<string name="menu_start">启动</string>
+<string name="menu_stop">停止</string>
+
+<string name="menu_about">关于</string>
+<string name="menu_wizard">Wizard</string>
+
+
+<string name="button_help">帮助</string>
+<string name="button_close">关闭</string>
+<string name="button_about">关于</string>
+
+<string name="button_clear_log">Clear Log</string>
+
+
+<string name="menu_verify">检查</string>
+<string name="menu_exit">退出</string>
+<string name="powered_by">由 Tor 项目强力驱动</string>
+<string name="press_to_start">- long press to start -</string>
+
+<string name="pref_trans_proxy_group">透明代理(需要 root)</string>
+<string name="pref_trans_proxy_title">透明代理</string>
+<string name="pref_trans_proxy_summary">自动对应用程序使用 Tor</string>
+
+<string name="pref_transparent_all_title">对所有应用使用 Tor</string>
+<string name="pref_transparent_all_summary">使用 Tor 代理所有程序的流量</string>
+
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
+<string name="pref_has_root">Request Root Access</string>
+<string name="pref_has_root_summary">Request root access for transparent proxying</string>
+
+<string name="status_install_success">Tor 二进制程序安装成功!</string>
+<string name="status_install_fail">Tor 二进制程序无法安装。请查看日志 tor-assistants at torproject.org</string>
+
+<string name="title_error">应用程序错误</string>
+
+<string name="wizard_title">欢迎使用 Orbot</string>
+
+<string name="wizard_btn_tell_me_more">关于 Orbot</string>
+<string name="btn_next">下一步</string>
+<string name="btn_back">上一步</string>
+<string name="btn_finish">完成</string>
+
+<string name="btn_okay">确定</string>
+<string name="btn_cancel">取消</string>
+
+
+<!-- Welcome Wizard strings (DJH) -->
+ 
+    <string name="wizard_welcome_msg">Orbot 将 Tor 带到 Android 之上。Tor 是自由软件,致力于构建开放网络,帮助保护网络访问的自由和隐私,可以抵御秘密的商业活动、关系以及已知的流量分析技术。\n\n*警告:*仅仅安装 Orbot 不会自动使您的移动流量匿名化!这个向导将带您入门。</string>
+    <string name="wizard_details">一些 Orbot 详情</string>
+    <string name="wizard_details_msg">Orbot 是包含 Tor、LibEvent 和 Privoxy 的开源软件。它包含了一个本地 HTTP 代理(8118)和 SOCKS 代理(9050),使您接入 Tor 网络。Orbot 在可以获得 root 权限的设备上接管所有流量经由 Tor 网络。</string>
+    <string name="wizard_permissions_root">已赋予权限</string>
+    <string name="wizard_permissions_stock">Orbot 权限</string>
+    <string name="wizard_premissions_msg_root">非常好!我们检测到您已经为 Orbot 配置了 root 权限。我们会聪明地使用这个特权。</string>
+    <string name="wizard_permissions_msg_stock">虽然并非必须,如果你的设备有 root 权限,Orbot 可以表现得更为强大。使用以下按钮来赋予 Orbot 超级能力!</string>
+   
+    <string name="wizard_permissions_no_root">如果你没有 root 权限,或不明白上面说的是什么,那么只需使用可与 Orbot 工作的应用程序。</string>
+    <string name="wizard_permissions_consent">我明白并会以非 root 继续</string>
+   
+    <string name="wizard_permission_enable_root">为 Orbot 赋予 root 权限</string>
+    <string name="wizard_configure">配置 Tor 使用</string>
+    <string name="wizard_configure_msg">Orbot 给予您路由所有应用程序流量通过 Tor 或者为单个程序设置选择的选项。</string> 
+    <string name="wizard_configure_all">通过 Tor 代理全部应用程序</string>
+    <string name="wizard_configure_select_apps">选择使用 Tor 的单个应用程序</string>
+    
+    
+    <string name="wizard_tips_tricks">可用 Orbot 的应用程序</string>
+    <string name="wizard_tips_msg">我们建议您下载和使用能直接连接到 Orbot 的应用程序。点击以下按钮安装。</string>
+    <string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
+    <string name="wizard_tips_orweb">ORWEB (仅 Android 1.x) - 着重隐私设计的浏览器</string>
+    <string name="wizard_tips_proxy">代理设置 - 学习如何配置应用程序使用 Orbot</string>
+    
+    <string name="wizard_proxy_help_info">代理设置</string>
+    <string name="wizard_proxy_help_msg">如果您正在使用的 Android 应用程序支持使用 HTTP 或 SOCKS 代理,您可以配置它连接到 Orbot 并使用 Tor。\n\n
+    主机设置为 127.0.0.1 或 localhost。对于 HTTP,端口为 8118,对于 SOCKS 端口为 9050。如果可能,应当使用 SOCKS4A 或 SOCKS5。
+    \n\n
+    您可以通过 http://tinyurl.com/proxyandroid 了解更多 Android 上使用代理的知识。</string>
+    
+    <string name="wizard_final">Orbot 已就绪!</string>
+    <string name="wizard_final_msg">数以万计的各国人们因为各种原因使用 Tor:记者、人权工作者、法律工作者、士兵、公司、迫于实际情况使用的市民,当然也有普通的市民。现在你也即将成为其中的一员!</string>
+    
+    <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
+    <string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
+    
+<!-- END Welcome Wizard strings (DJH) -->
+ 
+
+	<string name="connect_first_time">您已成功连接至 Tor 网络 - 但这并不意味着您的设备安全。您可以使用“检查”选项测试您的浏览器。\n\n访问 https://guardianproject.info/apps/orbot 或发送邮件到 help at guardianproject.info 以了解更多信息。</string>
+
+	<string name="tor_check">这将启动默认浏览器并访问 https://check.torproject.org 以测试是否正确配置了 Orbot 并确认您是否已经连接到 Tor。</string>
+
+	
+    <string name="pref_hs_group">隐藏服务</string>
+    
+    <string name="pref_general_group">General</string>
+    <string name="pref_start_boot_title">Start Orbot on Boot</string>
+    <string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
+    
+</resources>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml
===================================================================
--- projects/android/trunk/Orbot/res/xml/preferences.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,138 +0,0 @@
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-<PreferenceCategory android:title="@string/pref_general_group">
-<CheckBoxPreference 
-android:defaultValue="true" 
-android:key="pref_start_boot"
-android:title="@string/pref_start_boot_title"
-android:summary="@string/pref_start_boot_summary"
-android:enabled="true"/>
-
-<CheckBoxPreference 
-android:defaultValue="false" 
-android:key="has_root"
-android:title="@string/pref_has_root"
-android:summary="@string/pref_has_root_summary"
-android:enabled="true"/>
-</PreferenceCategory>
-
-<PreferenceCategory android:title="@string/pref_trans_proxy_group">
-
-<CheckBoxPreference 
-android:defaultValue="false" 
-android:key="pref_transparent"
-android:title="@string/pref_trans_proxy_title"
-android:summary="@string/pref_trans_proxy_summary"
-android:enabled="true"/>
-
-<CheckBoxPreference
-android:defaultValue="false" 
-android:key="pref_transparent_all"
-android:summary="@string/pref_transparent_all_summary"
-android:enabled="true" 
-android:title="@string/pref_transparent_all_title"/>
-
-<Preference
-android:defaultValue="" 
-android:key="pref_transparent_app_list"
-android:title="Select Apps"
-android:summary="Choose Apps to Route Through Tor"
-android:enabled="true"/>
-
-
-</PreferenceCategory>
-
- 
-<PreferenceCategory android:title="Bridges">
-
-<CheckBoxPreference android:defaultValue="false" 
-android:title="Use Bridges" android:key="pref_bridges_enabled" 
-android:summary="Enable alternate entrance nodes into the Tor Network"></CheckBoxPreference>
-
-<!-- 5/8/2010 NF: Arma says this doesn't actually work, so commenting out for now
-<CheckBoxPreference android:defaultValue="false" 
-android:title="Update from Authority" android:key="pref_bridges_update" 
-android:summary="Modify bridge list automatically"></CheckBoxPreference>
- -->
- 
-<EditTextPreference android:key="pref_bridges_list"
-android:title="Bridges"
-android:summary="IP address and port of bridges"
-android:dialogTitle="Enter Bridge Addresses"
-/>
-</PreferenceCategory>
-
-
-
-<PreferenceCategory android:title="Relays">
-<CheckBoxPreference android:key="pref_or"
-android:defaultValue="false"
-android:title="Relaying"
-android:summary="Enable your device to be a non-exit relay"
-android:enabled="true"
-/>
-
-<EditTextPreference android:key="pref_or_port"
-android:defaultValue="9001"
-android:title="Relay Port"
-android:summary="Listening port for your Tor relay"
-android:dialogTitle="Enter OR port"
-/>
-
-<EditTextPreference android:key="pref_or_nickname"
-android:defaultValue="Orbot"
-android:title="Relay nickname"
-android:summary="The nickname for your Tor relay"
-android:dialogTitle="Enter a custom relay nickname"
-/>
-
-</PreferenceCategory>
-
-<PreferenceCategory android:title="ReachableAddresses">
-<CheckBoxPreference
-android:key="pref_reachable_addresses"
-android:defaultValue="false"
-android:title="ReachableAddresses"
-android:summary="Run as a client behind a firewall with restrictive policies"
-android:enabled="true"></CheckBoxPreference>
-
-<EditTextPreference
-android:key="pref_reachable_addresses_ports"
-android:defaultValue="*:80,*:443"
-android:title="Reachable ports"
-android:summary="Ports reachable behind a restrictive firewall"
-android:dialogTitle="Enter ports"
-/>
-</PreferenceCategory>
-
-<PreferenceCategory android:title="@string/pref_hs_group">
-<CheckBoxPreference android:title="Enable Hidden Services" android:summary="run servers accessible via the Tor network" android:key="pref_hs_enable"></CheckBoxPreference>
-<EditTextPreference android:summary="enter localhost ports for hidden services" android:title="Hidden Service Ports" android:enabled="false" android:key="pref_hs_ports"></EditTextPreference>
-
-<EditTextPreference android:key="pref_hs_hostname" android:summary="the addressable name for your hidden service (generated automatically)" android:title=".Onion Hostname"></EditTextPreference>
-</PreferenceCategory>
-
-<PreferenceCategory android:title="Debug">
-<CheckBoxPreference
-android:key="pref_enable_logging"
-android:defaultValue="false"
-android:title="Debug Log"
-android:summary="enable debug log to output (must use adb or aLogCat to view)"
-android:enabled="true"></CheckBoxPreference>
-
-
-<CheckBoxPreference
-android:defaultValue="false" 
-android:key="pref_transparent_port_fallback"
-android:summary="@string/pref_transparent_port_fallback_summary"
-android:enabled="true" 
-android:title="@string/pref_transparent_port_fallback_title"/>
-
-<EditTextPreference android:key="pref_port_list"
-android:defaultValue="80,443,8080,8888,8443"
-android:title="@string/pref_transparent_port_title"
-android:summary="@string/pref_transparent_port_summary"
-android:dialogTitle="@string/pref_transparent_port_dialog"
-/>
-</PreferenceCategory>
-</PreferenceScreen>

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml (from rev 24751, projects/android/trunk/Orbot/res/xml/preferences.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/res/xml/preferences.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,150 @@
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+<PreferenceCategory android:title="@string/pref_general_group">
+<CheckBoxPreference 
+android:defaultValue="true" 
+android:key="pref_start_boot"
+android:title="@string/pref_start_boot_title"
+android:summary="@string/pref_start_boot_summary"
+android:enabled="true"/>
+
+<CheckBoxPreference 
+android:defaultValue="false" 
+android:key="has_root"
+android:title="@string/pref_has_root"
+android:summary="@string/pref_has_root_summary"
+android:enabled="true"/>
+</PreferenceCategory>
+
+<PreferenceCategory android:title="@string/pref_trans_proxy_group">
+
+<CheckBoxPreference 
+android:defaultValue="false" 
+android:key="pref_transparent"
+android:title="@string/pref_trans_proxy_title"
+android:summary="@string/pref_trans_proxy_summary"
+android:enabled="true"/>
+
+<CheckBoxPreference
+android:defaultValue="false" 
+android:key="pref_transparent_all"
+android:summary="@string/pref_transparent_all_summary"
+android:enabled="true" 
+android:title="@string/pref_transparent_all_title"/>
+
+<Preference
+android:defaultValue="" 
+android:key="pref_transparent_app_list"
+android:title="Select Apps"
+android:summary="Choose Apps to Route Through Tor"
+android:enabled="true"/>
+
+
+</PreferenceCategory>
+
+<PreferenceCategory android:title="Exit Nodes">
+
+<EditTextPreference android:key="pref_exit_nodes"
+android:title="Exit Nodes"
+android:summary="Fingerprints, nicknames, country codes and address patterns for the last hop"
+android:dialogTitle="Enter Exit Nodes"
+/>
+
+<CheckBoxPreference android:defaultValue="false" 
+android:title="Strict Exit Nodes" android:key="pref_strict_exit_nodes" 
+android:summary="Use only these specific exit nodes"/>
+
+</PreferenceCategory> 
+<PreferenceCategory android:title="Bridges">
+
+<CheckBoxPreference android:defaultValue="false" 
+android:title="Use Bridges" android:key="pref_bridges_enabled" 
+android:summary="Enable alternate entrance nodes into the Tor Network"></CheckBoxPreference>
+
+<!-- 5/8/2010 NF: Arma says this doesn't actually work, so commenting out for now
+<CheckBoxPreference android:defaultValue="false" 
+android:title="Update from Authority" android:key="pref_bridges_update" 
+android:summary="Modify bridge list automatically"></CheckBoxPreference>
+ -->
+ 
+<EditTextPreference android:key="pref_bridges_list"
+android:title="Bridges"
+android:summary="IP address and port of bridges"
+android:dialogTitle="Enter Bridge Addresses"
+/>
+</PreferenceCategory>
+
+
+
+<PreferenceCategory android:title="Relays">
+<CheckBoxPreference android:key="pref_or"
+android:defaultValue="false"
+android:title="Relaying"
+android:summary="Enable your device to be a non-exit relay"
+android:enabled="true"
+/>
+
+<EditTextPreference android:key="pref_or_port"
+android:defaultValue="9001"
+android:title="Relay Port"
+android:summary="Listening port for your Tor relay"
+android:dialogTitle="Enter OR port"
+/>
+
+<EditTextPreference android:key="pref_or_nickname"
+android:defaultValue="Orbot"
+android:title="Relay nickname"
+android:summary="The nickname for your Tor relay"
+android:dialogTitle="Enter a custom relay nickname"
+/>
+
+</PreferenceCategory>
+
+<PreferenceCategory android:title="ReachableAddresses">
+<CheckBoxPreference
+android:key="pref_reachable_addresses"
+android:defaultValue="false"
+android:title="ReachableAddresses"
+android:summary="Run as a client behind a firewall with restrictive policies"
+android:enabled="true"></CheckBoxPreference>
+
+<EditTextPreference
+android:key="pref_reachable_addresses_ports"
+android:defaultValue="*:80,*:443"
+android:title="Reachable ports"
+android:summary="Ports reachable behind a restrictive firewall"
+android:dialogTitle="Enter ports"
+/>
+</PreferenceCategory>
+
+<PreferenceCategory android:title="@string/pref_hs_group">
+<CheckBoxPreference android:title="Enable Hidden Services" android:summary="run servers accessible via the Tor network" android:key="pref_hs_enable"></CheckBoxPreference>
+<EditTextPreference android:summary="enter localhost ports for hidden services" android:title="Hidden Service Ports" android:enabled="false" android:key="pref_hs_ports"></EditTextPreference>
+
+<EditTextPreference android:key="pref_hs_hostname" android:summary="the addressable name for your hidden service (generated automatically)" android:title=".Onion Hostname"></EditTextPreference>
+</PreferenceCategory>
+
+<PreferenceCategory android:title="Debug">
+<CheckBoxPreference
+android:key="pref_enable_logging"
+android:defaultValue="false"
+android:title="Debug Log"
+android:summary="enable debug log to output (must use adb or aLogCat to view)"
+android:enabled="true"></CheckBoxPreference>
+
+
+<CheckBoxPreference
+android:defaultValue="false" 
+android:key="pref_transparent_port_fallback"
+android:summary="@string/pref_transparent_port_fallback_summary"
+android:enabled="true" 
+android:title="@string/pref_transparent_port_fallback_title"/>
+
+<EditTextPreference android:key="pref_port_list"
+android:defaultValue="80,443,8080,8888,8443"
+android:title="@string/pref_transparent_port_title"
+android:summary="@string/pref_transparent_port_summary"
+android:dialogTitle="@string/pref_transparent_port_dialog"
+/>
+</PreferenceCategory>
+</PreferenceScreen>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/OnBootReceiver.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,19 +0,0 @@
-package org.torproject.android;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-public class OnBootReceiver extends BroadcastReceiver {
-	
-	@Override
-	public void onReceive(Context context, Intent intent) {
-		Intent serviceIntent = new Intent();
-		serviceIntent.setAction("org.torproject.android.service.TorService");
-		context.startService(serviceIntent);
-
-	}
-
-	
-}
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/OnBootReceiver.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/OnBootReceiver.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,29 @@
+package org.torproject.android;
+
+import org.torproject.android.service.TorService;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+public class OnBootReceiver extends BroadcastReceiver {
+	
+	@Override
+	public void onReceive(Context context, Intent intent) {
+
+		if (intent.getAction() != null 
+				&& intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
+		{
+			//Phase 1: Launch a service
+			Intent service = new Intent();
+			service.setAction("onboot");
+			service.setClass(context, TorService.class);
+			context.startService(service);
+		}
+	
+		
+	}
+
+	
+}
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,830 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-package org.torproject.android;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.util.StringTokenizer;
-
-import org.torproject.android.service.ITorService;
-import org.torproject.android.service.ITorServiceCallback;
-import org.torproject.android.service.TorServiceConstants;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.NotificationManager;
-import android.app.ProgressDialog;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLongClickListener;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-public class Orbot extends Activity implements OnLongClickListener, TorConstants
-{
-	
-	/* Useful UI bits */
-	private TextView lblStatus = null; //the main text display widget
-	private ImageView imgStatus = null; //the main touchable image for activating Orbot
-	private ProgressDialog progressDialog;
-	private MenuItem mItemOnOff = null;
-	
-	/* Some tracking bits */
-	private int torStatus = STATUS_READY; //latest status reported from the tor service
-	
-	/* Tor Service interaction */
-		/* The primary interface we will be calling on the service. */
-    ITorService mService = null;
-	private boolean autoStartOnBind = false;
-
-	SharedPreferences prefs;
-	
-    /** Called when the activity is first created. */
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        
-      //if Tor binary is not running, then start the service up
-		startService(new Intent(INTENT_TOR_SERVICE));
-		bindService ();
-		
-
-    	setTheme(android.R.style.Theme_Black_NoTitleBar);
-    	
-    	prefs = PreferenceManager.getDefaultSharedPreferences(this);
-    	
-    	setContentView(R.layout.layout_main);
-		
-    	lblStatus = (TextView)findViewById(R.id.lblStatus);
-		lblStatus.setOnLongClickListener(this);
-    	imgStatus = (ImageView)findViewById(R.id.imgStatus);
-    	imgStatus.setOnLongClickListener(this);
-    }
-    
-   /*
-    * Create the UI Options Menu (non-Javadoc)
-    * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
-    */
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-        
-        MenuItem mItem = null;
-        
-        mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
-        mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
-        mItemOnOff.setAlphabeticShortcut('t');
-        
-        mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
-        mItem.setIcon(R.drawable.ic_menu_register);
-       
-        mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
-        mItem.setIcon(R.drawable.ic_menu_check);
-      
-        mItem =  menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
-        mItem.setIcon(R.drawable.ic_menu_about);
-        
-        mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
-        mItem.setIcon(R.drawable.ic_menu_goto);
-       
-        mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
-        mItem.setIcon(R.drawable.ic_menu_exit);
-       
-        
-        return true;
-    }
-    
-
-    private void showAbout ()
-	{
-		
-		LayoutInflater li = LayoutInflater.from(this);
-        View view = li.inflate(R.layout.layout_about, null); 
-        
-        TextView versionName = (TextView)view.findViewById(R.id.versionName);
-        versionName.setText(R.string.app_version);    
-        
-		new AlertDialog.Builder(this)
-        .setTitle(getString(R.string.button_about))
-        .setView(view)
-        .show();
-	}
-    
-    /* When a menu item is selected launch the appropriate view or activity
-     * (non-Javadoc)
-	 * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
-	 */
-	public boolean onMenuItemSelected(int featureId, MenuItem item) {
-		
-		super.onMenuItemSelected(featureId, item);
-		
-		if (item.getItemId() == 1)
-		{
-			
-			try
-			{
-				
-				if (mService == null)
-				{
-				
-				}
-				else if (mService.getStatus() == STATUS_READY)
-				{
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-					startTor();
-					
-				}
-				else
-				{
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-					stopTor();
-					
-				}
-				
-			}
-			catch (RemoteException re)
-			{
-				Log.w(TAG, "Unable to start/top Tor from menu UI", re);
-			}
-		}
-		else if (item.getItemId() == 4)
-		{
-			showSettings();
-		}
-		else if (item.getItemId() == 3)
-		{
-			showHelp();
-		}
-		else if (item.getItemId() == 7)
-		{
-			doTorCheck();
-		}
-		else if (item.getItemId() == 8)
-		{
-			//exit app
-			doExit();
-			
-			
-		}
-		else if (item.getItemId() == 6)
-		{
-			showAbout();
-			
-			
-		}
-		
-        return true;
-	}
-	
-	private void doExit ()
-	{
-		try {
-		
-			stopTor();
-			
-			stopService(new Intent(ITorService.class.getName()));
-			
-        	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-			mNotificationManager.cancelAll();
-		
-			
-		} catch (RemoteException e) {
-			Log.w(TAG, e);
-		}
-		
-		finish();
-		
-	}
-	
-	/* Return to the main view when the back key is pressed
-	 * (non-Javadoc)
-	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
-	 */
-	/*
-	public boolean onKeyDown(int keyCode, KeyEvent event){
-		
-		if(keyCode==KeyEvent.KEYCODE_BACK){
-
-			if(currentView != R.layout.layout_main){
-					
-					showMain ();
-					return true;
-			}
-			else{
-				return super.onKeyDown(keyCode, event);
-			}
-		}
-	
-		return super.onKeyDown(keyCode, event);
-		
-	}*/
- 
-    /* (non-Javadoc)
-	 * @see android.app.Activity#onPause()
-	 */
-	protected void onPause() {
-		super.onPause();
-		
-
-	}
-
-	public void onSaveInstanceState(Bundle savedInstanceState) {
-		  // Save UI state changes to the savedInstanceState.
-		  // This bundle will be passed to onCreate if the process is
-		  // killed and restarted.
-		  // etc.
-		  super.onSaveInstanceState(savedInstanceState);
-		}
-	
-	public void onRestoreInstanceState(Bundle savedInstanceState) {
-	  super.onRestoreInstanceState(savedInstanceState);
-	  // Restore UI state from the savedInstanceState.
-	  // This bundle has also been passed to onCreate.
-	 
-	}
-	
-	private void doTorCheck ()
-	{
-		
-		DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-			
-		    @Override
-		    public void onClick(DialogInterface dialog, int which) {
-		        switch (which){
-		        case DialogInterface.BUTTON_POSITIVE:
-		            
-		    		openBrowser(URL_TOR_CHECK);
-
-					
-		        	
-		            break;
-
-		        case DialogInterface.BUTTON_NEGATIVE:
-		        
-		        	//do nothing
-		            break;
-		        }
-		    }
-		};
-
-		AlertDialog.Builder builder = new AlertDialog.Builder(this);
-		builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
-		    .setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
-
-	}
-	
-	private void enableHiddenServicePort (int hsPort)
-	{
-		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		Editor pEdit = prefs.edit();
-		
-		String hsPortString = prefs.getString("pref_hs_ports", "");
-		
-		if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
-			hsPortString += ',' + hsPort;
-		else
-			hsPortString = hsPort + "";
-		
-		pEdit.putString("pref_hs_ports", hsPortString);
-		pEdit.putBoolean("pref_hs_enable", true);
-		
-		pEdit.commit();
-		
-		String onionHostname = prefs.getString("pref_hs_hostname","");
-
-		Intent nResult = new Intent();
-		nResult.putExtra("hs_host", onionHostname);
-		setResult(RESULT_OK, nResult);
-	
-	}
-	
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onResume()
-	 */
-	protected void onResume() {
-		super.onResume();
-		
-		 updateStatus("");
-		 
-		if (getIntent() == null)
-			return;
-		
-		String action = getIntent().getAction();
-		
-		if (action == null)
-			return;
-		
-		if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
-		{
-			
-			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-			    @Override
-			    public void onClick(DialogInterface dialog, int which) {
-			        switch (which){
-			        case DialogInterface.BUTTON_POSITIVE:
-			            
-			        	int hsPort = getIntent().getIntExtra("hs_port", -1);
-						
-			        	enableHiddenServicePort (hsPort);
-			        	
-						finish();
-						
-			        	
-			            break;
-
-			        case DialogInterface.BUTTON_NEGATIVE:
-			            //No button clicked
-			        	finish();
-			            break;
-			        }
-			    }
-			};
-
-        	int hsPort = getIntent().getIntExtra("hs_port", -1);
-
-			String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
-			AlertDialog.Builder builder = new AlertDialog.Builder(this);
-			builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
-			    .setNegativeButton("Deny", dialogClickListener).show();
-			
-		
-		}
-		else if (action.equals("org.torproject.android.START_TOR"))
-		{
-			autoStartOnBind = true;
-			
-			if (mService == null)
-				bindService();
-			
-		}
-		else
-		{
-			
-			//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
-	    
-			NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-			mNotificationManager.cancelAll();
-			
-			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-	
-			boolean showWizard = prefs.getBoolean("show_wizard",true);
-			
-			if (showWizard)
-			{
-			
-				Editor pEdit = prefs.edit();
-				
-				pEdit.putBoolean("show_wizard",false);
-				
-				pEdit.commit();
-				
-			    new WizardHelper(this).showWizard();
-
-			}
-			
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStart()
-	 */
-	protected void onStart() {
-		super.onStart();
-		
-		
-		updateStatus ("");
-		
-
-	}
-
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStop()
-	 */
-	protected void onStop() {
-		super.onStop();
-		
-		unbindService();
-	}
-
-
-
-	/*
-	 * Launch the system activity for Uri viewing with the provided url
-	 */
-	private void openBrowser(String url)
-	{
-		startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
-		
-	}
-	
-	
-	
-	/*
-	 * Show the help view - a popup dialog
-	 */
-	private void showHelp ()
-	{
-		
-       new WizardHelper(this).showWizard();
-	}
-	
-	
-    /*
-     * Load the basic settings application to display torrc
-     */
-	private void showSettings ()
-	{
-		
-		startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
-	}
-	
-	
-	@Override
-	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-		super.onActivityResult(requestCode, resultCode, data);
-		
-		if (requestCode == 1 && resultCode == 1010 && mService != null)
-		{
-			new ProcessSettingsAsyncTask().execute(mService);	
-		}
-	}
-	
-	private AlertDialog aDialog = null;
-	
-	private void showAlert(String title, String msg, boolean button)
-	{
-		if (aDialog != null)
-			aDialog.dismiss();
-		
-		 if (button)
-		 {
-			 aDialog = new AlertDialog.Builder(this)
-		 .setIcon(R.drawable.icon)
-         .setTitle(title)
-         .setMessage(msg)
-         .setPositiveButton(android.R.string.ok, null)
-         .show();
-		 }
-		 else
-		 {
-			 aDialog = new AlertDialog.Builder(this)
-			 .setIcon(R.drawable.icon)
-	         .setTitle(title)
-	         .setMessage(msg)
-	         .show();
-		 }
-	}
-    /*
-     * Set the state of the running/not running graphic and label
-     */
-    public void updateStatus (String torServiceMsg)
-    {
-    	try
-    	{
-    		
-    		if (mService != null)
-    			torStatus = mService.getStatus();
-    		
-	    	if (imgStatus != null)
-	    	{
-	    		
-		    	if (torStatus == STATUS_ON)
-		    	{
-		    		imgStatus.setImageResource(R.drawable.toron);
-		    	
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		
-		    		String lblMsg = getString(R.string.status_activated);
-		    		//+ "\n" + torServiceMsg;
-		    		
-		    		lblStatus.setText(lblMsg);
-		    		
-		    		if (torServiceMsg.length() > 0)
-		    			showAlert("Update", torServiceMsg, false);
-		    		
-		    		boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
-		    		
-		    		if (showFirstTime)
-		    		{
-		    		
-		    			Editor pEdit = prefs.edit();
-		    			
-		    			pEdit.putBoolean("connect_first_time",false);
-		    			
-		    			pEdit.commit();
-		    			
-		    			showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
-		    			
-		    		}
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-
-		    	}
-		    	else if (torStatus == STATUS_CONNECTING)
-		    	{
-		    		
-		    		imgStatus.setImageResource(R.drawable.torstarting);
-		    		if (progressDialog == null)
-		    		{
-		    			progressDialog =ProgressDialog.show(this, "", getString(R.string.status_starting_up));
-		    		}
-		    		else
-		    			progressDialog.setMessage(torServiceMsg);
-		    		
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-		    			
-		    	}
-		    	else if (torStatus == STATUS_OFF)
-		    	{
-		    		imgStatus.setImageResource(R.drawable.toroff);
-		    		
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		lblStatus.setText(getString(R.string.status_shutting_down));
-		    			
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-		    	}
-		    	else
-		    	{
-
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		
-		    		imgStatus.setImageResource(R.drawable.toroff);
-		    		lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
-		    		
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-		    		
-		    	}
-	    	}
-		    	
-    	}
-    	catch (RemoteException e)
-    	{
-    		Log.e(TAG,"remote exception updating status",e);
-    	}
-    	
-        
-    }
-  
-    private void startTor () throws RemoteException
-    {
-    	
-    	mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
-		
-		imgStatus.setImageResource(R.drawable.torstarting);
-		lblStatus.setText(getString(R.string.status_starting_up));
-		
-		Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
-    	mHandler.sendMessage(msg);
-    	
-    	
-    	
-    }
-    
-    private void stopTor () throws RemoteException
-    {
-    	if (mService != null)
-    	{
-    		mService.setProfile(TorServiceConstants.PROFILE_OFF);
-    		Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
-    		mHandler.sendMessage(msg);
-    	}
-    	
-       // stopService(new Intent(ITorService.class.getName()));
-	
-    	
-    }
-    
-	/*
-     * (non-Javadoc)
-     * @see android.view.View.OnClickListener#onClick(android.view.View)
-     */
-	public boolean onLongClick(View view) {
-		
-		
-		try
-		{
-			
-			if (mService == null)
-			{
-			
-			}
-			else if (mService.getStatus() == STATUS_READY)
-			{
-				
-				startTor();
-				
-			}
-			else
-			{
-				
-				stopTor();
-				
-			}
-			
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG,"error onclick",e);
-		}
-			
-		return true;
-	}
-	
-
-    /**
-     * This implementation is used to receive callbacks from the remote
-     * service.
-     */
-    private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
-        /**
-         * This is called by the remote service regularly to tell us about
-         * new values.  Note that IPC calls are dispatched through a thread
-         * pool running in each process, so the code executing here will
-         * NOT be running in our main thread like most other things -- so,
-         * to update the UI, we need to use a Handler to hop over there.
-         */
-        public void statusChanged(String value) {
-           
-        	Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
-        	msg.getData().putString(HANDLER_TOR_MSG, value);
-        	mHandler.sendMessage(msg);
-        }
-
-		@Override
-		public void logMessage(String value) throws RemoteException {
-			
-			Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
-        	msg.getData().putString(HANDLER_TOR_MSG, value);
-        	mHandler.sendMessage(msg);
-			
-		}
-    };
-    
-
-    private Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case TorServiceConstants.STATUS_MSG:
-
-                	String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
-                	
-                	updateStatus(torServiceMsg);
-                	
-                    break;
-                case TorServiceConstants.LOG_MSG:
-                	
-                	
-                    break;
-                case TorServiceConstants.ENABLE_TOR_MSG:
-                	
-                	if (progressDialog == null)
-					{
-						progressDialog = ProgressDialog.show(Orbot.this, "", getString(R.string.status_starting_up));
-					}
-    	
-                	
-                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
-                	
-                	break;
-                case TorServiceConstants.DISABLE_TOR_MSG:
-                	
-                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
-                	
-                	break;
-                		
-                default:
-                    super.handleMessage(msg);
-            }
-        }
-        
-    };
-
-    
-    /**
-     * Class for interacting with the main interface of the service.
-     */
-    private ServiceConnection mConnection = new ServiceConnection() {
-        public void onServiceConnected(ComponentName className,
-                IBinder service) {
-            // This is called when the connection with the service has been
-            // established, giving us the service object we can use to
-            // interact with the service.  We are communicating with our
-            // service through an IDL interface, so get a client-side
-            // representation of that from the raw service object.
-            mService = ITorService.Stub.asInterface(service);
-       
-            // We want to monitor the service for as long as we are
-            // connected to it.
-            try {
-                mService.registerCallback(mCallback);
-           
-                updateStatus("");
-                
-                if (autoStartOnBind)
-                {
-                	autoStartOnBind = false;
-                	
-                	startTor();
-                	
-                }
-            
-            } catch (RemoteException e) {
-                // In this case the service has crashed before we could even
-                // do anything with it; we can count on soon being
-                // disconnected (and then reconnected if it can be restarted)
-                // so there is no need to do anything here.
-            	Log.d(TAG,"error registering callback to service",e);
-            }
-            
-
-
-           
-       
-          
-        }
-
-        public void onServiceDisconnected(ComponentName className) {
-            // This is called when the connection with the service has been
-            // unexpectedly disconnected -- that is, its process crashed.
-            mService = null;
-          
-        }
-    };
-    
-    boolean mIsBound = false;
-    
-    private void bindService ()
-    {
-    	 bindService(new Intent(ITorService.class.getName()),
-                 mConnection, Context.BIND_AUTO_CREATE);
-    	 
-    	 mIsBound = true;
-    
-    	
-    	
-    }
-    
-    private void unbindService ()
-    {
-    	if (mIsBound) {
-            // If we have received the service, and hence registered with
-            // it, then now is the time to unregister.
-            if (mService != null) {
-                try {
-                    mService.unregisterCallback(mCallback);
-                    
-                } catch (RemoteException e) {
-                    // There is nothing special we need to do if the service
-                    // has crashed.
-                }
-            }
-            
-            // Detach our existing connection.
-            unbindService(mConnection);
-            mIsBound = false;
-            
-        }
-    }
-	
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/Orbot.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,846 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+
+package org.torproject.android;
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.StringTokenizer;
+
+import org.torproject.android.service.ITorService;
+import org.torproject.android.service.ITorServiceCallback;
+import org.torproject.android.service.TorServiceConstants;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.NotificationManager;
+import android.app.ProgressDialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class Orbot extends Activity implements OnLongClickListener, TorConstants
+{
+	
+	/* Useful UI bits */
+	private TextView lblStatus = null; //the main text display widget
+	private ImageView imgStatus = null; //the main touchable image for activating Orbot
+	private ProgressDialog progressDialog;
+	private MenuItem mItemOnOff = null;
+	
+	/* Some tracking bits */
+	private int torStatus = STATUS_READY; //latest status reported from the tor service
+	
+	/* Tor Service interaction */
+		/* The primary interface we will be calling on the service. */
+    ITorService mService = null;
+	private boolean autoStartOnBind = false;
+
+	SharedPreferences prefs;
+	
+    /** Called when the activity is first created. */
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+      //if Tor binary is not running, then start the service up
+		startService(new Intent(INTENT_TOR_SERVICE));
+		
+
+    	setTheme(android.R.style.Theme_Black_NoTitleBar);
+    	
+    	prefs = PreferenceManager.getDefaultSharedPreferences(this);
+    	
+    	setContentView(R.layout.layout_main);
+		
+    	lblStatus = (TextView)findViewById(R.id.lblStatus);
+		lblStatus.setOnLongClickListener(this);
+    	imgStatus = (ImageView)findViewById(R.id.imgStatus);
+    	imgStatus.setOnLongClickListener(this);
+    	
+    	
+
+    }
+    
+   /*
+    * Create the UI Options Menu (non-Javadoc)
+    * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
+    */
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        
+        MenuItem mItem = null;
+        
+        mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
+        mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
+        mItemOnOff.setAlphabeticShortcut('t');
+        
+        mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
+        mItem.setIcon(R.drawable.ic_menu_register);
+       
+        mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
+        mItem.setIcon(R.drawable.ic_menu_check);
+      
+        mItem =  menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
+        mItem.setIcon(R.drawable.ic_menu_about);
+        
+        mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
+        mItem.setIcon(R.drawable.ic_menu_goto);
+       
+        mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
+        mItem.setIcon(R.drawable.ic_menu_exit);
+       
+        
+        return true;
+    }
+    
+
+    private void showAbout ()
+	{
+		
+		LayoutInflater li = LayoutInflater.from(this);
+        View view = li.inflate(R.layout.layout_about, null); 
+        
+        TextView versionName = (TextView)view.findViewById(R.id.versionName);
+        versionName.setText(R.string.app_version);    
+        
+		new AlertDialog.Builder(this)
+        .setTitle(getString(R.string.button_about))
+        .setView(view)
+        .show();
+	}
+    
+    /* When a menu item is selected launch the appropriate view or activity
+     * (non-Javadoc)
+	 * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
+	 */
+	public boolean onMenuItemSelected(int featureId, MenuItem item) {
+		
+		super.onMenuItemSelected(featureId, item);
+		
+		if (item.getItemId() == 1)
+		{
+			
+			try
+			{
+				
+				if (mService == null)
+				{
+				
+				}
+				else if (mService.getStatus() == STATUS_READY)
+				{
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+					startTor();
+					
+				}
+				else
+				{
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+					stopTor();
+					
+				}
+				
+			}
+			catch (RemoteException re)
+			{
+				Log.w(TAG, "Unable to start/top Tor from menu UI", re);
+			}
+		}
+		else if (item.getItemId() == 4)
+		{
+			showSettings();
+		}
+		else if (item.getItemId() == 3)
+		{
+			showHelp();
+		}
+		else if (item.getItemId() == 7)
+		{
+			doTorCheck();
+		}
+		else if (item.getItemId() == 8)
+		{
+			//exit app
+			doExit();
+			
+			
+		}
+		else if (item.getItemId() == 6)
+		{
+			showAbout();
+			
+			
+		}
+		
+        return true;
+	}
+	
+	private void doExit ()
+	{
+		try {
+		
+			stopTor();
+			
+			stopService(new Intent(ITorService.class.getName()));
+			
+        	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+			mNotificationManager.cancelAll();
+		
+			
+		} catch (RemoteException e) {
+			Log.w(TAG, e);
+		}
+		
+		finish();
+		
+	}
+	
+	/* Return to the main view when the back key is pressed
+	 * (non-Javadoc)
+	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
+	 */
+	/*
+	public boolean onKeyDown(int keyCode, KeyEvent event){
+		
+		if(keyCode==KeyEvent.KEYCODE_BACK){
+
+			if(currentView != R.layout.layout_main){
+					
+					showMain ();
+					return true;
+			}
+			else{
+				return super.onKeyDown(keyCode, event);
+			}
+		}
+	
+		return super.onKeyDown(keyCode, event);
+		
+	}*/
+ 
+    /* (non-Javadoc)
+	 * @see android.app.Activity#onPause()
+	 */
+	protected void onPause() {
+		super.onPause();
+		
+		hideProgressDialog();
+
+		if (aDialog != null)
+			aDialog.dismiss();
+	}
+
+	public void onSaveInstanceState(Bundle savedInstanceState) {
+		  // Save UI state changes to the savedInstanceState.
+		  // This bundle will be passed to onCreate if the process is
+		  // killed and restarted.
+		  // etc.
+		  super.onSaveInstanceState(savedInstanceState);
+		}
+	
+	public void onRestoreInstanceState(Bundle savedInstanceState) {
+	  super.onRestoreInstanceState(savedInstanceState);
+	  // Restore UI state from the savedInstanceState.
+	  // This bundle has also been passed to onCreate.
+	 
+	}
+	
+	private void doTorCheck ()
+	{
+		
+		DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+			
+		    @Override
+		    public void onClick(DialogInterface dialog, int which) {
+		        switch (which){
+		        case DialogInterface.BUTTON_POSITIVE:
+		            
+		    		openBrowser(URL_TOR_CHECK);
+
+					
+		        	
+		            break;
+
+		        case DialogInterface.BUTTON_NEGATIVE:
+		        
+		        	//do nothing
+		            break;
+		        }
+		    }
+		};
+
+		AlertDialog.Builder builder = new AlertDialog.Builder(this);
+		builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
+		    .setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
+
+	}
+	
+	private void enableHiddenServicePort (int hsPort)
+	{
+		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		Editor pEdit = prefs.edit();
+		
+		String hsPortString = prefs.getString("pref_hs_ports", "");
+		
+		if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
+			hsPortString += ',' + hsPort;
+		else
+			hsPortString = hsPort + "";
+		
+		pEdit.putString("pref_hs_ports", hsPortString);
+		pEdit.putBoolean("pref_hs_enable", true);
+		
+		pEdit.commit();
+		
+		String onionHostname = prefs.getString("pref_hs_hostname","");
+
+		Intent nResult = new Intent();
+		nResult.putExtra("hs_host", onionHostname);
+		setResult(RESULT_OK, nResult);
+	
+	}
+	
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onResume()
+	 */
+	protected void onResume() {
+		super.onResume();
+		
+		bindService();
+		
+		 updateStatus("");
+		 
+		if (getIntent() == null)
+			return;
+		
+		String action = getIntent().getAction();
+		
+		if (action == null)
+			return;
+		
+		if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
+		{
+			
+			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+			    @Override
+			    public void onClick(DialogInterface dialog, int which) {
+			        switch (which){
+			        case DialogInterface.BUTTON_POSITIVE:
+			            
+			        	int hsPort = getIntent().getIntExtra("hs_port", -1);
+						
+			        	enableHiddenServicePort (hsPort);
+			        	
+						finish();
+						
+			        	
+			            break;
+
+			        case DialogInterface.BUTTON_NEGATIVE:
+			            //No button clicked
+			        	finish();
+			            break;
+			        }
+			    }
+			};
+
+        	int hsPort = getIntent().getIntExtra("hs_port", -1);
+
+			String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
+			AlertDialog.Builder builder = new AlertDialog.Builder(this);
+			builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
+			    .setNegativeButton("Deny", dialogClickListener).show();
+			
+		
+		}
+		else if (action.equals("org.torproject.android.START_TOR"))
+		{
+			autoStartOnBind = true;
+			
+			if (mService == null)
+				bindService();
+			
+		}
+		else
+		{
+			
+			//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
+	    
+			NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+			mNotificationManager.cancelAll();
+			
+			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+	
+			boolean showWizard = prefs.getBoolean("show_wizard",true);
+			
+			if (showWizard)
+			{
+			
+				Editor pEdit = prefs.edit();
+				
+				pEdit.putBoolean("show_wizard",false);
+				
+				pEdit.commit();
+				
+			    new WizardHelper(this).showWizard();
+
+			}
+			
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStart()
+	 */
+	protected void onStart() {
+		super.onStart();
+		
+		
+		updateStatus ("");
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStop()
+	 */
+	protected void onStop() {
+		super.onStop();
+		
+		//unbindService();
+	}
+
+
+
+	/*
+	 * Launch the system activity for Uri viewing with the provided url
+	 */
+	private void openBrowser(String url)
+	{
+		startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+		
+	}
+	
+	
+	
+	/*
+	 * Show the help view - a popup dialog
+	 */
+	private void showHelp ()
+	{
+		
+       new WizardHelper(this).showWizard();
+	}
+	
+	
+    /*
+     * Load the basic settings application to display torrc
+     */
+	private void showSettings ()
+	{
+		
+		startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
+	}
+	
+	
+	@Override
+	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+		super.onActivityResult(requestCode, resultCode, data);
+		
+		if (requestCode == 1 && resultCode == 1010 && mService != null)
+		{
+			new ProcessSettingsAsyncTask().execute(mService);	
+		}
+	}
+	
+	AlertDialog aDialog = null;
+	
+	private void showAlert(String title, String msg, boolean button)
+	{
+		try
+		{
+			if (aDialog != null && aDialog.isShowing())
+				aDialog.dismiss();
+		}
+		catch (Exception e){} //swallow any errors
+		
+		 if (button)
+		 {
+				aDialog = new AlertDialog.Builder(this)
+			 .setIcon(R.drawable.icon)
+	         .setTitle(title)
+	         .setMessage(msg)
+	         .setPositiveButton(android.R.string.ok, null)
+	         .show();
+		 }
+		 else
+		 {
+			 aDialog = new AlertDialog.Builder(this)
+			 .setIcon(R.drawable.icon)
+	         .setTitle(title)
+	         .setMessage(msg)
+	         .show();
+		 }
+	
+		 aDialog.setCanceledOnTouchOutside(true);
+	}
+    /*
+     * Set the state of the running/not running graphic and label
+     */
+    public void updateStatus (String torServiceMsg)
+    {
+    	try
+    	{
+    		
+    		if (mService != null)
+    			torStatus = mService.getStatus();
+    		
+	    	if (imgStatus != null)
+	    	{
+	    		
+		    	if (torStatus == STATUS_ON)
+		    	{
+		    		imgStatus.setImageResource(R.drawable.toron);
+
+		    		hideProgressDialog();
+		    		
+		    		String lblMsg = getString(R.string.status_activated);
+		    		//+ "\n" + torServiceMsg;
+		    		
+		    		lblStatus.setText(lblMsg);
+		    		
+		    		if (torServiceMsg.length() > 0)
+		    			showAlert("Update", torServiceMsg, false);
+		    		
+		    		boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
+		    		
+		    		if (showFirstTime)
+		    		{
+		    		
+		    			Editor pEdit = prefs.edit();
+		    			
+		    			pEdit.putBoolean("connect_first_time",false);
+		    			
+		    			pEdit.commit();
+		    			
+		    			showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
+		    			
+		    		}
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+		    		
+
+		    	}
+		    	else if (torStatus == STATUS_CONNECTING)
+		    	{
+		    		
+		    		imgStatus.setImageResource(R.drawable.torstarting);
+		    		
+		    		if (progressDialog != null)
+		    			progressDialog.setMessage(torServiceMsg);
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+		    			
+		    	}
+		    	else if (torStatus == STATUS_OFF)
+		    	{
+		    		imgStatus.setImageResource(R.drawable.toroff);
+		    		
+
+		    		hideProgressDialog();
+		    		
+		    		lblStatus.setText(getString(R.string.status_shutting_down));
+		    			
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+		    	}
+		    	else
+		    	{
+
+
+		    		hideProgressDialog();
+		    		
+		    		imgStatus.setImageResource(R.drawable.toroff);
+		    		lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+		    		
+		    	}
+	    	}
+		    	
+    	}
+    	catch (RemoteException e)
+    	{
+    		Log.e(TAG,"remote exception updating status",e);
+    	}
+    	
+        
+    }
+  
+    private void startTor () throws RemoteException
+    {
+    	
+    	bindService();
+    	
+    	mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
+		
+		imgStatus.setImageResource(R.drawable.torstarting);
+		lblStatus.setText(getString(R.string.status_starting_up));
+		
+		Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
+    	mHandler.sendMessage(msg);
+    	
+    	
+    	
+    }
+    
+    private void stopTor () throws RemoteException
+    {
+    	if (mService != null)
+    	{
+    		mService.setProfile(TorServiceConstants.PROFILE_OFF);
+    		Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
+    		mHandler.sendMessage(msg);
+    	}
+    	
+     
+    }
+    
+	/*
+     * (non-Javadoc)
+     * @see android.view.View.OnClickListener#onClick(android.view.View)
+     */
+	public boolean onLongClick(View view) {
+		
+		
+		try
+		{
+			
+			if (mService == null)
+			{
+			
+			}
+			else if (mService.getStatus() == STATUS_READY)
+			{
+				
+				createProgressDialog(getString(R.string.status_starting_up));
+
+				startTor();
+			}
+			else
+			{
+				
+				stopTor();
+				
+			}
+			
+		}
+		catch (Exception e)
+		{
+			Log.d(TAG,"error onclick",e);
+		}
+			
+		return true;
+	}
+	
+
+    /**
+     * This implementation is used to receive callbacks from the remote
+     * service.
+     */
+    private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
+        /**
+         * This is called by the remote service regularly to tell us about
+         * new values.  Note that IPC calls are dispatched through a thread
+         * pool running in each process, so the code executing here will
+         * NOT be running in our main thread like most other things -- so,
+         * to update the UI, we need to use a Handler to hop over there.
+         */
+        public void statusChanged(String value) {
+           
+        	Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
+        	msg.getData().putString(HANDLER_TOR_MSG, value);
+        	mHandler.sendMessage(msg);
+        }
+
+		@Override
+		public void logMessage(String value) throws RemoteException {
+			
+			Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
+        	msg.getData().putString(HANDLER_TOR_MSG, value);
+        	mHandler.sendMessage(msg);
+			
+		}
+    };
+    
+
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case TorServiceConstants.STATUS_MSG:
+
+                	String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
+                	
+                	updateStatus(torServiceMsg);
+                	
+                    break;
+                case TorServiceConstants.LOG_MSG:
+                	
+                	
+                    break;
+                case TorServiceConstants.ENABLE_TOR_MSG:
+                	
+                	
+                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
+                	
+                	break;
+                case TorServiceConstants.DISABLE_TOR_MSG:
+                	
+                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
+                	
+                	break;
+                		
+                default:
+                    super.handleMessage(msg);
+            }
+        }
+        
+        
+        
+    };
+
+    
+    /**
+     * Class for interacting with the main interface of the service.
+     */
+    private ServiceConnection mConnection = new ServiceConnection() {
+        public void onServiceConnected(ComponentName className,
+                IBinder service) {
+            // This is called when the connection with the service has been
+            // established, giving us the service object we can use to
+            // interact with the service.  We are communicating with our
+            // service through an IDL interface, so get a client-side
+            // representation of that from the raw service object.
+            mService = ITorService.Stub.asInterface(service);
+       
+            // We want to monitor the service for as long as we are
+            // connected to it.
+            try {
+                mService.registerCallback(mCallback);
+           
+                updateStatus("");
+                
+                if (autoStartOnBind)
+                {
+                	autoStartOnBind = false;
+                	
+                	startTor();
+                	
+                }
+            
+            } catch (RemoteException e) {
+                // In this case the service has crashed before we could even
+                // do anything with it; we can count on soon being
+                // disconnected (and then reconnected if it can be restarted)
+                // so there is no need to do anything here.
+            	Log.d(TAG,"error registering callback to service",e);
+            }
+            
+
+
+           
+       
+          
+        }
+
+        public void onServiceDisconnected(ComponentName className) {
+            // This is called when the connection with the service has been
+            // unexpectedly disconnected -- that is, its process crashed.
+            mService = null;
+          
+        }
+    };
+    
+    boolean mIsBound = false;
+    
+    private void bindService ()
+    {
+    	 bindService(new Intent(ITorService.class.getName()),
+                 mConnection, Context.BIND_AUTO_CREATE);
+    	 
+    	 mIsBound = true;
+    
+    }
+    
+    private void unbindService ()
+    {
+    	if (mIsBound) {
+            // If we have received the service, and hence registered with
+            // it, then now is the time to unregister.
+            if (mService != null) {
+                try {
+                    mService.unregisterCallback(mCallback);
+                    
+                } catch (RemoteException e) {
+                    // There is nothing special we need to do if the service
+                    // has crashed.
+                }
+            }
+            
+            // Detach our existing connection.
+            unbindService(mConnection);
+            mIsBound = false;
+            
+        }
+    }
+	
+    private void createProgressDialog (String msg)
+    {
+    	if (progressDialog != null && progressDialog.isShowing())
+    		return;
+    	
+    	progressDialog = ProgressDialog.show(Orbot.this, "", msg);	
+		progressDialog.setCancelable(true);
+
+    }
+    
+    private void hideProgressDialog ()
+    {
+
+		if (progressDialog != null && progressDialog.isShowing())
+		{
+			progressDialog.dismiss();
+
+		}
+		
+		
+    }
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/SettingsPreferences.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,132 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-package org.torproject.android;
-
-import org.torproject.android.service.TorServiceUtils;
-import org.torproject.android.service.TorTransProxy;
-
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-import android.preference.PreferenceManager;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceCategory;
-
-
-public class SettingsPreferences 
-		extends PreferenceActivity implements OnPreferenceClickListener {
-
-	private CheckBoxPreference prefCBTransProxy = null;
-	private CheckBoxPreference prefcBTransProxyAll = null;
-	private Preference prefTransProxyApps = null;
-	private CheckBoxPreference prefHiddenServices = null;
-	
-	private boolean hasRoot = false;
-	
-	protected void onCreate(Bundle savedInstanceState)
-	{
-		super.onCreate(savedInstanceState);
-		addPreferencesFromResource(R.xml.preferences);
-		
-		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-		if (prefs.contains("has_root"))
-		{
-			hasRoot = prefs.getBoolean("has_root",false);
-		}
-		else
-		{
-			hasRoot = TorServiceUtils.checkRootAccess();
-			Editor pEdit = prefs.edit();
-			pEdit.putBoolean("has_root",hasRoot);
-			pEdit.commit();
-		}
-	}
-	
-	
-	@Override
-	protected void onResume() {
-	
-		super.onResume();
-	
-
-		int transProxyGroupIdx = 1;
-		
-		if (!hasRoot)
-		{
-			getPreferenceScreen().getPreference(transProxyGroupIdx).setEnabled(false);
-		}
-		else
-		{
-			prefCBTransProxy = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(0));
-			prefcBTransProxyAll = (CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(1);
-			prefTransProxyApps = ((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(2);
-
-			prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
-			
-			prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
-			
-			prefCBTransProxy.setOnPreferenceClickListener(this);
-			prefcBTransProxyAll.setOnPreferenceClickListener(this);
-			prefTransProxyApps.setOnPreferenceClickListener(this);
-			
-		}
-		
-		int hiddenGroupIdx = 5;
-		
-		prefHiddenServices = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(0));
-		prefHiddenServices.setOnPreferenceClickListener(this);
-		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
-		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
-				
-		
-	};
-	
-	
-	
-	
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStop()
-	 */
-	@Override
-	protected void onStop() {
-		super.onStop();
-		
-		//Log.d(getClass().getName(),"Exiting Preferences");
-	}
-
-	@Override
-	public boolean onPreferenceClick(Preference preference) {
-		
-		setResult(1010);
-		
-		if (preference == prefTransProxyApps)
-		{
-			startActivity(new Intent(this, AppManager.class));
-			
-		}
-		else if (preference == prefHiddenServices)
-		{
-			
-			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
-			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
-			
-		}
-		else
-		{
-			prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
-			prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
-			
-		}
-		
-		return true;
-	}
-
-	
-
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java (from rev 24753, projects/android/trunk/Orbot/src/org/torproject/android/SettingsPreferences.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/SettingsPreferences.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,132 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+
+package org.torproject.android;
+
+import org.torproject.android.service.TorServiceUtils;
+import org.torproject.android.service.TorTransProxy;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceManager;
+import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
+
+
+public class SettingsPreferences 
+		extends PreferenceActivity implements OnPreferenceClickListener {
+
+	private CheckBoxPreference prefCBTransProxy = null;
+	private CheckBoxPreference prefcBTransProxyAll = null;
+	private Preference prefTransProxyApps = null;
+	private CheckBoxPreference prefHiddenServices = null;
+	
+	private boolean hasRoot = false;
+	
+	protected void onCreate(Bundle savedInstanceState)
+	{
+		super.onCreate(savedInstanceState);
+		addPreferencesFromResource(R.xml.preferences);
+		
+		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+		if (prefs.contains("has_root"))
+		{
+			hasRoot = prefs.getBoolean("has_root",false);
+		}
+		else
+		{
+			hasRoot = TorServiceUtils.checkRootAccess();
+			Editor pEdit = prefs.edit();
+			pEdit.putBoolean("has_root",hasRoot);
+			pEdit.commit();
+		}
+	}
+	
+	
+	@Override
+	protected void onResume() {
+	
+		super.onResume();
+	
+
+		int transProxyGroupIdx = 1;
+		
+		if (!hasRoot)
+		{
+			getPreferenceScreen().getPreference(transProxyGroupIdx).setEnabled(false);
+		}
+		else
+		{
+			prefCBTransProxy = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(0));
+			prefcBTransProxyAll = (CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(1);
+			prefTransProxyApps = ((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(2);
+
+			prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
+			
+			prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
+			
+			prefCBTransProxy.setOnPreferenceClickListener(this);
+			prefcBTransProxyAll.setOnPreferenceClickListener(this);
+			prefTransProxyApps.setOnPreferenceClickListener(this);
+			
+		}
+		
+		int hiddenGroupIdx = 6;
+		
+		prefHiddenServices = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(0));
+		prefHiddenServices.setOnPreferenceClickListener(this);
+		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
+		((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
+				
+		
+	};
+	
+	
+	
+	
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStop()
+	 */
+	@Override
+	protected void onStop() {
+		super.onStop();
+		
+		//Log.d(getClass().getName(),"Exiting Preferences");
+	}
+
+	@Override
+	public boolean onPreferenceClick(Preference preference) {
+		
+		setResult(1010);
+		
+		if (preference == prefTransProxyApps)
+		{
+			startActivity(new Intent(this, AppManager.class));
+			
+		}
+		else if (preference == prefHiddenServices)
+		{
+			
+			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
+			((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
+			
+		}
+		else
+		{
+			prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
+			prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
+			
+		}
+		
+		return true;
+	}
+
+	
+
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,1433 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-package org.torproject.android.service;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import net.freehaven.tor.control.ConfigEntry;
-import net.freehaven.tor.control.EventHandler;
-import net.freehaven.tor.control.TorControlConnection;
-
-import org.torproject.android.AppManager;
-import org.torproject.android.Orbot;
-import org.torproject.android.ProcessSettingsAsyncTask;
-import org.torproject.android.R;
-import org.torproject.android.TorConstants;
-import org.torproject.android.Utils;
-
-import android.app.AlertDialog;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
-
-public class TorService extends Service implements TorServiceConstants, Runnable, EventHandler
-{
-	
-	public static boolean ENABLE_DEBUG_LOG = false;
-	
-	private static int currentStatus = STATUS_OFF;
-		
-	private TorControlConnection conn = null;
-	private Socket torConnSocket = null;
-	
-	private static TorService _torInstance;
-	
-	private static final int NOTIFY_ID = 1;
-	
-	private static final int MAX_START_TRIES = 3;
-
-    private ArrayList<String> configBuffer = null;
-    private ArrayList<String> resetBuffer = null;
-     
-   
-    private String appHome;
-    private String appBinHome;
-    private String appDataHome;
-    
-    private String torBinaryPath;
-    private String privoxyPath;
-    
-	
-    private boolean hasRoot = false;
-    
-    /** Called when the activity is first created. */
-    public void onCreate() {
-    	super.onCreate();
-       
-    	logMessage("serviced created");
-      
-    }
-    
-    public static void logMessage(String msg)
-    {
-    	if (ENABLE_DEBUG_LOG)
-    		Log.d(TAG,msg);
-    }
-    
-    public static void logException(String msg, Exception e)
-    {
-    	if (ENABLE_DEBUG_LOG)
-    		Log.e(TAG,msg,e);
-    }
-    
-    
-    private boolean findExistingProc ()
-    {
-    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
-
- 		if (procId != -1)
- 		{
- 			logNotice("Found existing Tor process");
- 			
-            sendCallbackLogMessage ("found existing Tor process...");
-
- 			try {
- 				currentStatus = STATUS_CONNECTING;
-				
- 				initControlConnection();
-				
-				currentStatus = STATUS_ON;
-				
-				return true;
- 						
-			} catch (RuntimeException e) {
-				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
-				currentStatus = STATUS_OFF;
-				
-			} catch (Exception e) {
-				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
-				currentStatus = STATUS_OFF;
-				
-				
-			}
- 		}
- 		
- 		return false;
-    	 
-    }
-    
-
-    /* (non-Javadoc)
-	 * @see android.app.Service#onLowMemory()
-	 */
-	public void onLowMemory() {
-		super.onLowMemory();
-		
-		logNotice( "Low Memory Warning!");
-		
-	}
-
-
-	/* (non-Javadoc)
-	 * @see android.app.Service#onUnbind(android.content.Intent)
-	 */
-	public boolean onUnbind(Intent intent) {
-		
-	//	logNotice( "onUnbind Called: " + intent.getAction());
-		
-		
-		
-		return super.onUnbind(intent);
-		
-		
-	}
-
-	public int getTorStatus ()
-    {
-    	
-    	return currentStatus;
-    	
-    }
-	
-   
-	private void showToolbarNotification (String notifyMsg, int notifyId, int icon)
-	{
-	
-		
-		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
-		
-		CharSequence tickerText = notifyMsg;
-		long when = System.currentTimeMillis();
-
-		Notification notification = new Notification(icon, tickerText, when);
-		
-		Context context = getApplicationContext();
-		CharSequence contentTitle = getString(R.string.app_name);
-		CharSequence contentText = notifyMsg;
-		
-		Intent notificationIntent = new Intent(this, Orbot.class);
-		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
-
-		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
-
-
-		mNotificationManager.notify(notifyId, notification);
-
-
-	}
-    
-    /* (non-Javadoc)
-	 * @see android.app.Service#onRebind(android.content.Intent)
-	 */
-	public void onRebind(Intent intent) {
-		super.onRebind(intent);
-		
-		
-	}
-
-
-	/* (non-Javadoc)
-	 * @see android.app.Service#onStart(android.content.Intent, int)
-	 */
-	public void onStart(Intent intent, int startId) {
-		super.onStart(intent, startId);
-
-		_torInstance = this;
-		
-    	Log.i(TAG, "service started: " + intent.getAction());
-
-		try {
-			checkTorBinaries ();
-		} catch (Exception e) {
-
-			logNotice("unable to find tor binaries: " + e.getMessage());
-	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
-
-			Log.e(TAG, "error checking tor binaries", e);
-		}
-
-		if (intent.getAction()!=null && intent.getAction().equals("onboot"))
-		{
-			
-		
-			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-			
-			boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
-			
-			if (startOnBoot)
-			{
-				setTorProfile(PROFILE_ON);
-			}
-		}
-	}
-	 
-	public void run ()
-	{
-		
-		boolean isRunning = _torInstance.findExistingProc ();
-		
-		if (!isRunning)
-		{
-	     try
-	     {
-		   initTor();
-		   isRunning = true;
-	     }
-	     catch (Exception e)
-	     {
-	    	 currentStatus = STATUS_OFF;
-	    	 this.showToolbarNotification(getString(R.string.status_disabled), NOTIFY_ID, R.drawable.tornotificationerr);
-	    	 Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
-	     }
-		}
-	}
-
-	
-    public void onDestroy ()
-    {
-    	super.onDestroy();
-    	
-    	Log.d(TAG,"onDestroy called");
-    	
-    	  // Unregister all callbacks.
-        mCallbacks.kill();
-      
-    }
-    
-    private void stopTor ()
-    {
-    	currentStatus = STATUS_OFF;
-    	
-    	try
-    	{	
-    		killTorProcess ();
-				
-    		currentStatus = STATUS_OFF;
-    
-    		showToolbarNotification (getString(R.string.status_disabled),NOTIFY_ID,R.drawable.tornotificationoff);
-    		sendCallbackStatusMessage(getString(R.string.status_disabled));
-
-    		setupTransProxy(false);
-    	}
-    	catch (Exception e)
-    	{
-    		Log.d(TAG, "An error occured stopping Tor",e);
-    		logNotice("An error occured stopping Tor: " + e.getMessage());
-    		sendCallbackStatusMessage("Something bad happened. Check the log");
-
-    	}
-    }
-    
- 
-   
-    /*
-    public void reloadConfig ()
-    {
-    	try
-		{
-	    	if (conn == null)
-			{
-				initControlConnection ();
-			}
-		
-			if (conn != null)
-			{
-				 conn.signal("RELOAD");
-			}
-		}
-    	catch (Exception e)
-    	{
-    		Log.d(TAG,"Unable to reload configuration",e);
-    	}
-    }*/
-    
-    
-    
-	private void getHiddenServiceHostname ()
-	{
-
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
-
-        if (enableHiddenServices)
-        {
-	    	File file = new File(appDataHome, "hostname");
-	    	
-	    	if (file.exists())
-	    	{
-		    	try {
-					String onionHostname = Utils.readString(new FileInputStream(file));
-					showToolbarNotification("hidden service on: " + onionHostname, NOTIFY_ID, R.drawable.tornotification);
-					Editor pEdit = prefs.edit();
-					pEdit.putString("pref_hs_hostname",onionHostname);
-					pEdit.commit();
-				
-					
-				} catch (FileNotFoundException e) {
-					logException("unable to read onion hostname file",e);
-					showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
-					return;
-				}
-	    	}
-	    	else
-	    	{
-				showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
-	
-	    		
-	    	}
-        }
-        
-        return;
-	}
-	
-    
-    private void killTorProcess () throws Exception
-    {
-		//android.os.Debug.waitForDebugger();
-    	
-    	StringBuilder log = new StringBuilder();
-    	int procId = -1;
-    	
-    	if (conn != null)
-		{
-    		logNotice("Using control port to shutdown Tor");
-    		
-    		
-			try {
-				logNotice("sending SHUTDOWN signal to Tor process");
-				conn.shutdownTor("SHUTDOWN");
-				
-				
-			} catch (Exception e) {
-				Log.d(TAG,"error shutting down Tor via connection",e);
-			}
-			
-			conn = null;
-		}
-    	
-		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
-		{
-			
-			logNotice("Found Tor PID=" + procId + " - killing now...");
-			
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-			try { Thread.sleep(500); }
-			catch (Exception e){}
-		}
-
-		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
-		{
-			
-			logNotice("Found Privoxy PID=" + procId + " - killing now...");
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-			try { Thread.sleep(500); }
-			catch (Exception e){}
-		}
-		
-    }
-   
-    private void logNotice (String msg)
-    {
-    	if (msg != null && msg.trim().length() > 0)
-    	{
-    		if (ENABLE_DEBUG_LOG)        	
-        		Log.d(TAG, msg);
-    	
-    		sendCallbackLogMessage(msg);
-    	}
-    }
-    
-
-    
-    private boolean checkTorBinaries () throws Exception
-    {
-    	//android.os.Debug.waitForDebugger();
-    	
-    	//check and install iptables
-    	Api.assertBinaries(this, true);
-    	
-    	File fileInstall = getDir("",0);
-    	String subBinPath = "bin/";
-    	
-		appHome = fileInstall.getAbsolutePath();
-		appBinHome = appHome + subBinPath;
-		appDataHome = getCacheDir().getAbsolutePath() + '/';
-		logNotice( "appHome=" + appHome);
-		
-		torBinaryPath = appBinHome + TOR_BINARY_ASSET_KEY;
-    	privoxyPath = appBinHome + PRIVOXY_ASSET_KEY;
-    	
-		logNotice( "checking Tor binaries");
-	    
-		boolean torBinaryExists = new File(torBinaryPath).exists();
-		boolean privoxyBinaryExists = new File(privoxyPath).exists();
-		
-		if (!(torBinaryExists && privoxyBinaryExists))
-		{
-			killTorProcess ();
-			
-			TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome, appBinHome); 
-			installer.start(true);
-			
-			torBinaryExists = new File(torBinaryPath).exists();
-			privoxyBinaryExists = new File(privoxyPath).exists();
-			
-    		if (torBinaryExists && privoxyBinaryExists)
-    		{
-    			logNotice(getString(R.string.status_install_success));
-    	
-    			showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.tornotification);
-    		
-    		}
-    		else
-    		{
-    		
-    			logNotice(getString(R.string.status_install_fail));
-
-    			sendCallbackStatusMessage(getString(R.string.status_install_fail));
-    			
-    			return false;
-    		}
-    		
-		}
-		else
-		{
-			logNotice("Found Tor binary: " + torBinaryPath);
-			logNotice("Found Privoxy binary: " + privoxyPath);
-
-		}
-	
-		StringBuilder log = new StringBuilder ();
-		
-		logNotice("(re)Setting permission on Tor binary");
-		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
-		TorServiceUtils.doShellCommand(cmd1, log, false, true);
-		
-		logNotice("(re)Setting permission on Privoxy binary");
-		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
-		TorServiceUtils.doShellCommand(cmd2, log, false, true);
-		
-		
-		return true;
-    }
-    
-    public void initTor () throws Exception
-    {
-
-    	
-    		currentStatus = STATUS_CONNECTING;
-
-    		logNotice(getString(R.string.status_starting_up));
-    		
-    		sendCallbackStatusMessage(getString(R.string.status_starting_up));
-    		
-    		killTorProcess ();
-    		
-    		try {
-
-
-	    		setupTransProxy(true);
-	    		runTorShellCmd();
-	    		runPrivoxyShellCmd();
-
-			} catch (Exception e) {
-		    	logException("Unable to start Tor: " + e.getMessage(),e);	
-		    	sendCallbackStatusMessage("Unable to start Tor: " + e.getMessage());
-		    	
-		    } 
-    		
-    }
-    
-    /*
-     * activate means whether to apply the users preferences
-     * or clear them out
-     * 
-     * the idea is that if Tor is off then transproxy is off
-     */
-    private boolean setupTransProxy (boolean activate) throws Exception
- 	{
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- 		boolean hasRoot;
- 		
- 		if (prefs.contains("has_root"))
- 		{
- 			hasRoot = prefs.getBoolean("has_root",false);
- 		}
- 		else
- 		{
- 			hasRoot = TorServiceUtils.checkRootAccess();
- 			Editor pEdit = prefs.edit();
- 			pEdit.putBoolean("has_root",hasRoot);
- 			pEdit.commit();
- 		}
- 		
- 		if (!hasRoot)
- 			return false;
- 		
-    	if (activate)
-    	{
-	 		
-	 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
-	 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
-	 		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
-	 		
-	     	TorService.logMessage ("Transparent Proxying: " + enableTransparentProxy);
-	     	
-	     	String portProxyList = prefs.getString("pref_port_list", "");
-	
-	 		if (enableTransparentProxy)
-	 		{
-	 			//TODO: Find a nice place for the next (commented) line
-				//TorTransProxy.setDNSProxying(); 
-				
-				int code = 0; // Default state is "okay"
-					
-				if(transProxyPortFallback)
-				{
-					showAlert("Status", "Setting up port-based transparent proxying...");
-					StringTokenizer st = new StringTokenizer(portProxyList, ",");
-					int status = code;
-					while (st.hasMoreTokens())
-					{
-						status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
-						if(status != 0)
-							code = status;
-					}
-				}
-				else
-				{
-					if(transProxyAll)
-					{
-						showAlert("Status", "Setting up full transparent proxying...");
-						code = TorTransProxy.setTransparentProxyingAll(this);
-					}
-					else
-					{
-						showAlert("Status", "Setting up app-based transparent proxying...");
-						code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this));
-					}
-				}
-			
-				TorService.logMessage ("TorTransProxy resp code: " + code);
-				
-				if (code == 0)
-				{
-					showAlert("Status", "Transparent proxying ENABLED");
-				}
-				else
-				{
-					showAlert("Status", "WARNING: error starting transparent proxying!");
-				}
-			
-				return true;
-	 				
-	 		}
-	 		else
-	 		{
-	 			TorTransProxy.purgeIptables(this);
-				showAlert("Status", "Transparent proxying DISABLED");
-
-	 		}
-    	}
-    	else
-    	{	 	
-    		TorTransProxy.purgeIptables(this);
-			showAlert("Status", "Transparent proxying DISABLED");
-
-    	}
-    	
- 		return true;
- 	}
-    
-    private void runTorShellCmd() throws Exception
-    {
-    	
-    	StringBuilder log = new StringBuilder();
-		
-		String torrcPath = appBinHome + TORRC_ASSET_KEY;
-		
-		String[] torCmd = {torBinaryPath + " DataDirectory " + appDataHome + " -f " + torrcPath  + " || exit\n"};
-		
-		boolean runAsRootFalse = false;
-		boolean waitForProcess = false;
-		
-		int procId = -1;
-		int attempts = 0;
-
-		int torRetryWaitTimeMS = 5000;
-		
-		while (procId == -1 && attempts < MAX_START_TRIES)
-		{
-			log = new StringBuilder();
-			
-			logNotice(torCmd[0]);
-			sendCallbackStatusMessage(getString(R.string.status_starting_up));
-			
-			TorServiceUtils.doShellCommand(torCmd, log, runAsRootFalse, waitForProcess);
-		
-			Thread.sleep(torRetryWaitTimeMS);
-			
-			procId = TorServiceUtils.findProcessId(torBinaryPath);
-			
-			logNotice("got tor proc id: " + procId);
-			
-			if (procId == -1)
-			{
-				
-				sendCallbackStatusMessage("Couldn't start Tor process.\nretrying..." + log.toString());
-				Thread.sleep(torRetryWaitTimeMS);
-				attempts++;
-			}
-			
-			logNotice(log.toString());
-		}
-		
-		if (procId == -1)
-		{
-			throw new Exception ("Unable to start Tor");
-		}
-		else
-		{
-		
-			logNotice("Tor process id=" + procId);
-			
-			showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.tornotification);
-			
-			initControlConnection ();
-
-	        applyPreferences();
-	    }
-    }
-    
-    private void runPrivoxyShellCmd () throws Exception
-    {
-    	
-    	logNotice( "Starting privoxy process");
-    	
-			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
-
-			StringBuilder log = null;
-			
-			int attempts = 0;
-			
-    		if (privoxyProcId == -1)
-    		{
-    			log = new StringBuilder();
-    			
-    			String privoxyConfigPath = appBinHome + PRIVOXYCONFIG_ASSET_KEY;
-    			
-    			String[] cmds = 
-    			{ privoxyPath + " " + privoxyConfigPath + " &" };
-    			
-    			logNotice (cmds[0]); 
-    			
-    			boolean runAsRoot = false;
-    			boolean waitFor = false;
-    			
-    			TorServiceUtils.doShellCommand(cmds, log, runAsRoot, waitFor);
-    			
-    			//wait one second to make sure it has started up
-    			Thread.sleep(1000);
-    			
-    			while ((privoxyProcId = TorServiceUtils.findProcessId(privoxyPath)) == -1  && attempts < MAX_START_TRIES)
-    			{
-    				logNotice("Couldn't find Privoxy process... retrying...\n" + log);
-    				Thread.sleep(3000);
-    				attempts++;
-    			}
-    			
-    			
-    			logNotice(log.toString());
-    		}
-    		
-			sendCallbackLogMessage("Privoxy is running on port: " + PORT_HTTP);
-			
-    		logNotice("Privoxy process id=" + privoxyProcId);
-			
-    		
-    		
-    }
-    
-    /*
-	public String generateHashPassword ()
-	{
-		
-		PasswordDigest d = PasswordDigest.generateDigest();
-	      byte[] s = d.getSecret(); // pass this to authenticate
-	      String h = d.getHashedPassword(); // pass this to the Tor on startup.
-
-		return null;
-	}*/
-	
-	public void initControlConnection () throws Exception, RuntimeException
-	{
-			while (true)
-			{
-				try
-				{
-					logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
-					
-					String baseMessage = getString(R.string.tor_process_connecting);
-					sendCallbackStatusMessage(baseMessage);
-					
-					torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
-			        conn = TorControlConnection.getConnection(torConnSocket);
-			        
-			      //  conn.authenticate(new byte[0]); // See section 3.2
-			        
-					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2));
-
-					logNotice( "SUCCESS connected to control port");
-			        
-			        String torAuthCookie = appDataHome + TOR_CONTROL_COOKIE;
-			        
-			        File fileCookie = new File(torAuthCookie);
-			        
-			        if (fileCookie.exists())
-			        {
-				        byte[] cookie = new byte[(int)fileCookie.length()];
-				        new FileInputStream(new File(torAuthCookie)).read(cookie);
-				        conn.authenticate(cookie);
-				        		
-				        logNotice( "SUCCESS authenticated to control port");
-				        
-						sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2) + getString(R.string.tor_process_connecting_step3));
-	
-				        addEventHandler();
-				        
-			        }
-			        
-			        break; //don't need to retry
-				}
-				catch (Exception ce)
-				{
-					conn = null;
-					Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
-					
-					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step4));
-
-					Thread.sleep(1000);
-										
-				}	
-			}
-		
-		
-
-	}
-	
-	
-	/*
-	private void getTorStatus () throws IOException
-	{
-		try
-		{
-			 
-			if (conn != null)
-			{
-				 // get a single value.
-			      
-			       // get several values
-			       
-			       if (currentStatus == STATUS_CONNECTING)
-			       {
-				       //Map vals = conn.getInfo(Arrays.asList(new String[]{
-				         // "status/bootstrap-phase", "status","version"}));
-			
-				       String bsPhase = conn.getInfo("status/bootstrap-phase");
-				       Log.d(TAG, "bootstrap-phase: " + bsPhase);
-				       
-				       
-			       }
-			       else
-			       {
-			    	 //  String status = conn.getInfo("status/circuit-established");
-			    	 //  Log.d(TAG, "status/circuit-established=" + status);
-			       }
-			}
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG, "Unable to get Tor status from control port");
-			currentStatus = STATUS_UNAVAILABLE;
-		}
-		
-	}*/
-	
-	
-	public void addEventHandler () throws IOException
-	{
-	       // We extend NullEventHandler so that we don't need to provide empty
-	       // implementations for all the events we don't care about.
-	       // ...
-		logNotice( "adding control port event handler");
-
-		conn.setEventHandler(this);
-	    
-		conn.setEvents(Arrays.asList(new String[]{
-	          "ORCONN", "CIRC", "NOTICE", "WARN", "ERR"}));
-	      // conn.setEvents(Arrays.asList(new String[]{
-	        //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
-
-		logNotice( "SUCCESS added control port event handler");
-	    
-	    
-
-	}
-	
-		/**
-		 * Returns the port number that the HTTP proxy is running on
-		 */
-		public int getHTTPPort() throws RemoteException {
-			return TorServiceConstants.PORT_HTTP;
-		}
-
-		/**
-		 * Returns the port number that the SOCKS proxy is running on
-		 */
-		public int getSOCKSPort() throws RemoteException {
-			return TorServiceConstants.PORT_SOCKS;
-		}
-
-
-		
-		
-		public int getProfile() throws RemoteException {
-			//return mProfile;
-			return PROFILE_ON;
-		}
-		
-		public void setTorProfile(int profile)  {
-			logNotice("Tor profile set to " + profile);
-			
-			if (profile == PROFILE_ON)
-			{
- 				currentStatus = STATUS_CONNECTING;
-	            sendCallbackStatusMessage ("starting...");
-
-	            Thread thread = new Thread(this);
-	            thread.start();
-	           
-			}
-			else if (profile == PROFILE_OFF)
-			{
-				currentStatus = STATUS_OFF;
-	            sendCallbackStatusMessage ("shutting down...");
-	            
-				_torInstance.stopTor();
-
-				
-			}
-		}
-
-
-
-	public void message(String severity, String msg) {
-		
-		
-		logNotice(  "[Tor Control Port] " + severity + ": " + msg);
-          
-          if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1)
-          {
-        	  currentStatus = STATUS_ON;
-        	
-
-   		   	getHiddenServiceHostname ();
-   		   
-          }
-          
-          
-    	  showToolbarNotification (getString(R.string.status_activated),NOTIFY_ID,R.drawable.tornotificationon);
-    		 
-          sendCallbackStatusMessage (msg);
-          
-	}
-
-	private void showAlert(String title, String msg)
-	{
-		 /*
-		 new AlertDialog.Builder(this)
-         .setTitle(title)
-         .setMessage(msg)
-         .setPositiveButton(android.R.string.ok, null)
-         .show();
-         */
-		showToolbarNotification(msg, NOTIFY_ID, R.drawable.tornotification);
-	}
-	
-	public void newDescriptors(List<String> orList) {
-		
-	}
-
-
-	public void orConnStatus(String status, String orName) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("orConnStatus (");
-			sb.append((orName) );
-			sb.append("): ");
-			sb.append(status);
-			
-			logNotice(sb.toString());
-		}
-	}
-
-
-	public void streamStatus(String status, String streamID, String target) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("StreamStatus (");
-			sb.append((streamID));
-			sb.append("): ");
-			sb.append(status);
-			
-			logNotice(sb.toString());
-		}
-	}
-
-
-	public void unrecognized(String type, String msg) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Message (");
-			sb.append(type);
-			sb.append("): ");
-			sb.append(msg);
-			
-			logNotice(sb.toString());
-		}
-		
-	}
-
-	public void bandwidthUsed(long read, long written) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Bandwidth used: ");
-			sb.append(read/1000);
-			sb.append("kb read / ");
-			sb.append(written/1000);
-			sb.append("kb written");
-			
-			logNotice(sb.toString());
-		}
-
-	}
-
-	public void circuitStatus(String status, String circID, String path) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Circuit (");
-			sb.append((circID));
-			sb.append("): ");
-			sb.append(status);
-			sb.append("; ");
-			sb.append(path);
-			
-			logNotice(sb.toString());
-		}
-		
-	}
-	
-    public IBinder onBind(Intent intent) {
-        // Select the interface to return.  If your service only implements
-        // a single interface, you can just return it here without checking
-        // the Intent.
-        
-    	_torInstance = this;
-    	
-		try
-		{
-	
-			checkTorBinaries();
-    	
-		}
-		catch (Exception e)
-		{
-			logNotice("unable to find tor binaries: " + e.getMessage());
-	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
-
-			Log.d(TAG,"Unable to check for Tor binaries",e);
-			return null;
-		}
-    	
-		findExistingProc ();
-		
-    	if (ITorService.class.getName().equals(intent.getAction())) {
-            return mBinder;
-        }
-        
-
-        return null;
-    }
-	
-    /**
-     * This is a list of callbacks that have been registered with the
-     * service.  Note that this is package scoped (instead of private) so
-     * that it can be accessed more efficiently from inner classes.
-     */
-    final RemoteCallbackList<ITorServiceCallback> mCallbacks
-            = new RemoteCallbackList<ITorServiceCallback>();
-
-
-    /**
-     * The IRemoteInterface is defined through IDL
-     */
-    private final ITorService.Stub mBinder = new ITorService.Stub() {
-    	
-       
-		public void registerCallback(ITorServiceCallback cb) {
-            if (cb != null) mCallbacks.register(cb);
-        }
-        public void unregisterCallback(ITorServiceCallback cb) {
-            if (cb != null) mCallbacks.unregister(cb);
-        }
-        public int getStatus () {
-        	return getTorStatus();
-        }
-        
-        public void setProfile (int profile)
-        {
-        	setTorProfile(profile);
-        	
-        }
-        
-        public void processSettings ()
-        {
-        	
-        	
-        	try {
-				applyPreferences();
-			} catch (RemoteException e) {
-				logException ("error applying prefs",e);
-			}
-        	
-        }
-        
-        
-        
-        public String getConfiguration (String name)
-        {
-        	try
-        	{
-	        	if (conn != null)
-	        	{
-	        		StringBuffer result = new StringBuffer();
-	        		
-	        		List<ConfigEntry> listCe = conn.getConf(name);
-	        		
-	        		Iterator<ConfigEntry> itCe = listCe.iterator();
-	        		ConfigEntry ce = null;
-	        		
-	        		while (itCe.hasNext())
-	        		{
-	        			ce = itCe.next();
-	        			
-	        			result.append(ce.key);
-	        			result.append(' ');
-	        			result.append(ce.value);
-	        			result.append('\n');
-	        		}
-	        		
-	   	       		return result.toString();
-	        	}
-        	}
-        	catch (IOException ioe)
-        	{
-        		Log.e(TAG, "Unable to update Tor configuration", ioe);
-        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
-        	}
-        	
-        	return null;
-        }
-        
-        /**
-         * Set configuration
-         **/
-        public boolean updateConfiguration (String name, String value, boolean saveToDisk)
-        {
-        	if (configBuffer == null)
-        		configBuffer = new ArrayList<String>();
-	        
-        	if (resetBuffer == null)
-        		resetBuffer = new ArrayList<String>();
-	        
-        	if (value == null || value.length() == 0)
-        	{
-        		resetBuffer.add(name);
-        		/*
-        		if (conn != null)
-        		{
-        			try {
-						conn.resetConf(Arrays.asList(new String[]{name}));
-					} catch (IOException e) {
-						Log.w(TAG, "Unable to reset conf",e);
-					}
-        		}*/
-        	}
-        	else
-        		configBuffer.add(name + ' ' + value);
-	        
-        	return false;
-        }
-         
-	    public boolean saveConfiguration ()
-	    {
-	    	try
-        	{
-	        	if (conn != null)
-	        	{
-	        		
-	        		 if (resetBuffer != null && resetBuffer.size() > 0)
-				        {	
-				        	conn.resetConf(resetBuffer);
-				        	resetBuffer = null;
-				        }
-	   	       
-	        		 if (configBuffer != null && configBuffer.size() > 0)
-				        {
-	        			 	
-				        	conn.setConf(configBuffer);
-				        	configBuffer = null;
-				        }
-	   	       
-	   	       		// Flush the configuration to disk.
-	        		//this is doing bad things right now NF 22/07/10
-	   	       		//conn.saveConf();
-	
-	   	       		return true;
-	        	}
-        	}
-        	catch (Exception ioe)
-        	{
-        		Log.e(TAG, "Unable to update Tor configuration", ioe);
-        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
-        	}
-        	
-        	return false;
-        	
-	    }
-    };
-    
-    private ArrayList<String> callbackBuffer = new ArrayList<String>();
-    private boolean inCallbackStatus = false;
-    private boolean inCallback = false;
-    
-    private synchronized void sendCallbackStatusMessage (String newStatus)
-    {
-    	 
-    	if (mCallbacks == null)
-    		return;
-    	
-        // Broadcast to all clients the new value.
-        final int N = mCallbacks.beginBroadcast();
-        
-        inCallback = true;
-        
-        if (N > 0)
-        {
-        	 for (int i=0; i<N; i++) {
-		            try {
-		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
-		                
-		                
-		            } catch (RemoteException e) {
-		                // The RemoteCallbackList will take care of removing
-		                // the dead object for us.
-		            }
-		        }
-        }
-        
-        mCallbacks.finishBroadcast();
-        inCallback = false;
-    }
-    
-    private synchronized void sendCallbackLogMessage (String logMessage)
-    {
-    	 
-    	if (mCallbacks == null)
-    		return;
-    	
-    	callbackBuffer.add(logMessage);
-
-    	if (!inCallback)
-    	{
-
-	        inCallback = true;
-	        // Broadcast to all clients the new value.
-	        final int N = mCallbacks.beginBroadcast();
-	        
-	
-	        if (N > 0)
-	        {
-	        
-	        	Iterator<String> it = callbackBuffer.iterator();
-	        	String status = null;
-	        	
-	        	while (it.hasNext())
-	        	{
-	        		status = it.next();
-	        		
-			        for (int i=0; i<N; i++) {
-			            try {
-			                mCallbacks.getBroadcastItem(i).logMessage(status);
-			                
-			            } catch (RemoteException e) {
-			                // The RemoteCallbackList will take care of removing
-			                // the dead object for us.
-			            }
-			        }
-	        	}
-		        
-		        callbackBuffer.clear();
-	        }
-	        
-	        mCallbacks.finishBroadcast();
-	        inCallback = false;
-    	}
-    	
-    }
-    
-    private boolean applyPreferences () throws RemoteException
-    {
-    	
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-    	ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
-    	Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
-    		
-		boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
-		
-		//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
-
-        boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
-
-        boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
-
-        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
-
-		//boolean enableTransparentProxy = prefs.getBoolean(TorConstants.PREF_TRANSPARENT, false);
-		
-        if (currentStatus == STATUS_ON)
-        {
-        	//reset iptables rules in active mode
-        
-			try
-			{
-				setupTransProxy(true); 		
-			}
-			catch (Exception e)
-			{
-				logException("unable to setup transproxy",e);
-			}
-        }
-		
-		if (useBridges)
-		{
-			String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,"");
-
-			if (bridgeList == null || bridgeList.length() == 0)
-			{
-			
-				showAlert("Bridge Error","In order to use the bridge feature, you must enter at least one bridge IP address." +
-						"Send an email to bridges at torproject.org with the line \"get bridges\" by itself in the body of the mail from a gmail account.");
-				
-			
-				return false;
-			}
-			
-			
-			mBinder.updateConfiguration("UseBridges", "1", false);
-				
-			String bridgeDelim = "\n";
-			
-			if (bridgeList.indexOf(",") != -1)
-			{
-				bridgeDelim = ",";
-			}
-			
-			StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
-			while (st.hasMoreTokens())
-			{
-
-				mBinder.updateConfiguration("bridge", st.nextToken(), false);
-
-			}
-			
-			mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
-			
-		}
-		else
-		{
-			mBinder.updateConfiguration("UseBridges", "0", false);
-
-		}
-
-        try
-        {
-            if (ReachableAddresses)
-            {
-                String ReachableAddressesPorts =
-                    prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
-                
-                mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false);
-
-            }
-            else
-            {
-                mBinder.updateConfiguration("ReachableAddresses", "", false);
-            }
-        }
-        catch (Exception e)
-        {
-           showAlert("Config Error","Your ReachableAddresses settings caused an exception!");
-           
-           return false;
-        }
-
-        try
-        {
-            if (becomeRelay && (!useBridges) && (!ReachableAddresses))
-            {
-                int ORPort =  Integer.parseInt(prefs.getString(TorConstants.PREF_OR_PORT, "9001"));
-                String nickname = prefs.getString(TorConstants.PREF_OR_NICKNAME, "Orbot");
-
-                mBinder.updateConfiguration("ORPort", ORPort + "", false);
-    			mBinder.updateConfiguration("Nickname", nickname, false);
-    			mBinder.updateConfiguration("ExitPolicy", "reject *:*", false);
-
-            }
-            else
-            {
-            	mBinder.updateConfiguration("ORPort", "", false);
-    			mBinder.updateConfiguration("Nickname", "", false);
-    			mBinder.updateConfiguration("ExitPolicy", "", false);
-            }
-        }
-        catch (Exception e)
-        {
-            showAlert("Uh-oh!","Your relay settings caused an exception!");
-          
-            return false;
-        }
-
-        if (enableHiddenServices)
-        {
-        	mBinder.updateConfiguration("HiddenServiceDir",appDataHome, false);
-        	
-        	String hsPorts = prefs.getString("pref_hs_ports","");
-        	
-        	StringTokenizer st = new StringTokenizer (hsPorts,",");
-        	String hsPortConfig = null;
-        	
-        	while (st.hasMoreTokens())
-        	{
-        		hsPortConfig = st.nextToken();
-        		
-        		if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
-        		{
-        			hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
-        		}
-        		
-        		mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
-        	}
-        	
-        	
-        }
-        else
-        {
-        	mBinder.updateConfiguration("HiddenServiceDir","", false);
-        	
-        }
-        
-        mBinder.saveConfiguration();
-	
-        return true;
-    }
-    
-   
-   
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java (from rev 24753, projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorService.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,1444 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+package org.torproject.android.service;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import net.freehaven.tor.control.ConfigEntry;
+import net.freehaven.tor.control.EventHandler;
+import net.freehaven.tor.control.TorControlConnection;
+
+import org.torproject.android.AppManager;
+import org.torproject.android.Orbot;
+import org.torproject.android.ProcessSettingsAsyncTask;
+import org.torproject.android.R;
+import org.torproject.android.TorConstants;
+import org.torproject.android.Utils;
+
+import android.app.AlertDialog;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+public class TorService extends Service implements TorServiceConstants, Runnable, EventHandler
+{
+	
+	public static boolean ENABLE_DEBUG_LOG = false;
+	
+	private static int currentStatus = STATUS_OFF;
+		
+	private TorControlConnection conn = null;
+	private Socket torConnSocket = null;
+	
+	private static TorService _torInstance;
+	
+	private static final int NOTIFY_ID = 1;
+	
+	private static final int MAX_START_TRIES = 3;
+
+    private ArrayList<String> configBuffer = null;
+    private ArrayList<String> resetBuffer = null;
+     
+   
+    private String appHome;
+    private String appBinHome;
+    private String appDataHome;
+    
+    private String torBinaryPath;
+    private String privoxyPath;
+    
+	
+    private boolean hasRoot = false;
+    
+    /** Called when the activity is first created. */
+    public void onCreate() {
+    	super.onCreate();
+       
+    	logMessage("serviced created");
+      
+    }
+    
+    public static void logMessage(String msg)
+    {
+    	if (ENABLE_DEBUG_LOG)
+    		Log.d(TAG,msg);
+    }
+    
+    public static void logException(String msg, Exception e)
+    {
+    	if (ENABLE_DEBUG_LOG)
+    		Log.e(TAG,msg,e);
+    }
+    
+    
+    private boolean findExistingProc ()
+    {
+    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
+
+ 		if (procId != -1)
+ 		{
+ 			logNotice("Found existing Tor process");
+ 			
+            sendCallbackLogMessage ("found existing Tor process...");
+
+ 			try {
+ 				currentStatus = STATUS_CONNECTING;
+				
+ 				initControlConnection();
+				
+				currentStatus = STATUS_ON;
+				
+				return true;
+ 						
+			} catch (RuntimeException e) {
+				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
+				currentStatus = STATUS_OFF;
+				
+			} catch (Exception e) {
+				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
+				currentStatus = STATUS_OFF;
+				
+				
+			}
+ 		}
+ 		
+ 		return false;
+    	 
+    }
+    
+
+    /* (non-Javadoc)
+	 * @see android.app.Service#onLowMemory()
+	 */
+	public void onLowMemory() {
+		super.onLowMemory();
+		
+		logNotice( "Low Memory Warning!");
+		
+	}
+
+
+	/* (non-Javadoc)
+	 * @see android.app.Service#onUnbind(android.content.Intent)
+	 */
+	public boolean onUnbind(Intent intent) {
+		
+	//	logNotice( "onUnbind Called: " + intent.getAction());
+		
+		
+		
+		return super.onUnbind(intent);
+		
+		
+	}
+
+	public int getTorStatus ()
+    {
+    	
+    	return currentStatus;
+    	
+    }
+	
+   
+	private void showToolbarNotification (String notifyMsg, int notifyId, int icon)
+	{
+	
+		
+		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+		
+		CharSequence tickerText = notifyMsg;
+		long when = System.currentTimeMillis();
+
+		Notification notification = new Notification(icon, tickerText, when);
+		
+		Context context = getApplicationContext();
+		CharSequence contentTitle = getString(R.string.app_name);
+		CharSequence contentText = notifyMsg;
+		
+		Intent notificationIntent = new Intent(this, Orbot.class);
+		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
+
+		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
+
+
+		mNotificationManager.notify(notifyId, notification);
+
+
+	}
+    
+    /* (non-Javadoc)
+	 * @see android.app.Service#onRebind(android.content.Intent)
+	 */
+	public void onRebind(Intent intent) {
+		super.onRebind(intent);
+		
+		
+	}
+
+
+	/* (non-Javadoc)
+	 * @see android.app.Service#onStart(android.content.Intent, int)
+	 */
+	public void onStart(Intent intent, int startId) {
+		super.onStart(intent, startId);
+
+		_torInstance = this;
+		
+    	Log.i(TAG, "service started: " + intent.getAction());
+
+		try {
+			checkTorBinaries ();
+		} catch (Exception e) {
+
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
+
+			Log.e(TAG, "error checking tor binaries", e);
+		}
+
+		if (intent.getAction()!=null && intent.getAction().equals("onboot"))
+		{
+			
+		
+			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+			
+			boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
+			
+			if (startOnBoot)
+			{
+				setTorProfile(PROFILE_ON);
+			}
+		}
+	}
+	 
+	public void run ()
+	{
+		
+		boolean isRunning = _torInstance.findExistingProc ();
+		
+		if (!isRunning)
+		{
+	     try
+	     {
+		   initTor();
+		   isRunning = true;
+	     }
+	     catch (Exception e)
+	     {
+	    	 currentStatus = STATUS_OFF;
+	    	 this.showToolbarNotification(getString(R.string.status_disabled), NOTIFY_ID, R.drawable.tornotificationerr);
+	    	 Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
+	     }
+		}
+	}
+
+	
+    public void onDestroy ()
+    {
+    	super.onDestroy();
+    	
+    	Log.d(TAG,"onDestroy called");
+    	
+    	  // Unregister all callbacks.
+        mCallbacks.kill();
+      
+    }
+    
+    private void stopTor ()
+    {
+    	currentStatus = STATUS_OFF;
+    	
+    	try
+    	{	
+    		killTorProcess ();
+				
+    		currentStatus = STATUS_OFF;
+    
+    		showToolbarNotification (getString(R.string.status_disabled),NOTIFY_ID,R.drawable.tornotificationoff);
+    		sendCallbackStatusMessage(getString(R.string.status_disabled));
+
+    		setupTransProxy(false);
+    	}
+    	catch (Exception e)
+    	{
+    		Log.d(TAG, "An error occured stopping Tor",e);
+    		logNotice("An error occured stopping Tor: " + e.getMessage());
+    		sendCallbackStatusMessage("Something bad happened. Check the log");
+
+    	}
+    }
+    
+ 
+   
+    /*
+    public void reloadConfig ()
+    {
+    	try
+		{
+	    	if (conn == null)
+			{
+				initControlConnection ();
+			}
+		
+			if (conn != null)
+			{
+				 conn.signal("RELOAD");
+			}
+		}
+    	catch (Exception e)
+    	{
+    		Log.d(TAG,"Unable to reload configuration",e);
+    	}
+    }*/
+    
+    
+    
+	private void getHiddenServiceHostname ()
+	{
+
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
+
+        if (enableHiddenServices)
+        {
+	    	File file = new File(appDataHome, "hostname");
+	    	
+	    	if (file.exists())
+	    	{
+		    	try {
+					String onionHostname = Utils.readString(new FileInputStream(file));
+					showToolbarNotification("hidden service on: " + onionHostname, NOTIFY_ID, R.drawable.tornotification);
+					Editor pEdit = prefs.edit();
+					pEdit.putString("pref_hs_hostname",onionHostname);
+					pEdit.commit();
+				
+					
+				} catch (FileNotFoundException e) {
+					logException("unable to read onion hostname file",e);
+					showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
+					return;
+				}
+	    	}
+	    	else
+	    	{
+				showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
+	
+	    		
+	    	}
+        }
+        
+        return;
+	}
+	
+    
+    private void killTorProcess () throws Exception
+    {
+		//android.os.Debug.waitForDebugger();
+    	
+    	StringBuilder log = new StringBuilder();
+    	int procId = -1;
+    	
+    	if (conn != null)
+		{
+    		logNotice("Using control port to shutdown Tor");
+    		
+    		
+			try {
+				logNotice("sending SHUTDOWN signal to Tor process");
+				conn.shutdownTor("SHUTDOWN");
+				
+				
+			} catch (Exception e) {
+				Log.d(TAG,"error shutting down Tor via connection",e);
+			}
+			
+			conn = null;
+		}
+    	
+		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
+		{
+			
+			logNotice("Found Tor PID=" + procId + " - killing now...");
+			
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
+			try { Thread.sleep(500); }
+			catch (Exception e){}
+		}
+
+		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
+		{
+			
+			logNotice("Found Privoxy PID=" + procId + " - killing now...");
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
+			try { Thread.sleep(500); }
+			catch (Exception e){}
+		}
+		
+    }
+   
+    private void logNotice (String msg)
+    {
+    	if (msg != null && msg.trim().length() > 0)
+    	{
+    		if (ENABLE_DEBUG_LOG)        	
+        		Log.d(TAG, msg);
+    	
+    		sendCallbackLogMessage(msg);
+    	}
+    }
+    
+
+    
+    private boolean checkTorBinaries () throws Exception
+    {
+    	//android.os.Debug.waitForDebugger();
+    	
+    	//check and install iptables
+    	Api.assertBinaries(this, true);
+    	
+    	File fileInstall = getDir("",0);
+    	String subBinPath = "bin/";
+    	
+		appHome = fileInstall.getAbsolutePath();
+		appBinHome = appHome + subBinPath;
+		appDataHome = getCacheDir().getAbsolutePath() + '/';
+		logNotice( "appHome=" + appHome);
+		
+		torBinaryPath = appBinHome + TOR_BINARY_ASSET_KEY;
+    	privoxyPath = appBinHome + PRIVOXY_ASSET_KEY;
+    	
+		logNotice( "checking Tor binaries");
+	    
+		boolean torBinaryExists = new File(torBinaryPath).exists();
+		boolean privoxyBinaryExists = new File(privoxyPath).exists();
+		
+		if (!(torBinaryExists && privoxyBinaryExists))
+		{
+			killTorProcess ();
+			
+			TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome, appBinHome); 
+			installer.start(true);
+			
+			torBinaryExists = new File(torBinaryPath).exists();
+			privoxyBinaryExists = new File(privoxyPath).exists();
+			
+    		if (torBinaryExists && privoxyBinaryExists)
+    		{
+    			logNotice(getString(R.string.status_install_success));
+    	
+    			showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.tornotification);
+    		
+    		}
+    		else
+    		{
+    		
+    			logNotice(getString(R.string.status_install_fail));
+
+    			sendCallbackStatusMessage(getString(R.string.status_install_fail));
+    			
+    			return false;
+    		}
+    		
+		}
+		else
+		{
+			logNotice("Found Tor binary: " + torBinaryPath);
+			logNotice("Found Privoxy binary: " + privoxyPath);
+
+		}
+	
+		StringBuilder log = new StringBuilder ();
+		
+		logNotice("(re)Setting permission on Tor binary");
+		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
+		TorServiceUtils.doShellCommand(cmd1, log, false, true);
+		
+		logNotice("(re)Setting permission on Privoxy binary");
+		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
+		TorServiceUtils.doShellCommand(cmd2, log, false, true);
+		
+		
+		return true;
+    }
+    
+    public void initTor () throws Exception
+    {
+
+    	
+    		currentStatus = STATUS_CONNECTING;
+
+    		logNotice(getString(R.string.status_starting_up));
+    		
+    		sendCallbackStatusMessage(getString(R.string.status_starting_up));
+    		
+    		killTorProcess ();
+    		
+    		try {
+
+
+	    		setupTransProxy(true);
+	    		runTorShellCmd();
+	    		runPrivoxyShellCmd();
+
+			} catch (Exception e) {
+		    	logException("Unable to start Tor: " + e.getMessage(),e);	
+		    	sendCallbackStatusMessage("Unable to start Tor: " + e.getMessage());
+		    	
+		    } 
+    		
+    }
+    
+    /*
+     * activate means whether to apply the users preferences
+     * or clear them out
+     * 
+     * the idea is that if Tor is off then transproxy is off
+     */
+    private boolean setupTransProxy (boolean activate) throws Exception
+ 	{
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ 		boolean hasRoot;
+ 		
+ 		if (prefs.contains("has_root"))
+ 		{
+ 			hasRoot = prefs.getBoolean("has_root",false);
+ 		}
+ 		else
+ 		{
+ 			hasRoot = TorServiceUtils.checkRootAccess();
+ 			Editor pEdit = prefs.edit();
+ 			pEdit.putBoolean("has_root",hasRoot);
+ 			pEdit.commit();
+ 		}
+ 		
+ 		if (!hasRoot)
+ 			return false;
+ 		
+    	if (activate)
+    	{
+	 		
+	 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
+	 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
+	 		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
+	 		
+	     	TorService.logMessage ("Transparent Proxying: " + enableTransparentProxy);
+	     	
+	     	String portProxyList = prefs.getString("pref_port_list", "");
+	
+	 		if (enableTransparentProxy)
+	 		{
+	 			//TODO: Find a nice place for the next (commented) line
+				//TorTransProxy.setDNSProxying(); 
+				
+				int code = 0; // Default state is "okay"
+					
+				if(transProxyPortFallback)
+				{
+					showAlert("Status", "Setting up port-based transparent proxying...");
+					StringTokenizer st = new StringTokenizer(portProxyList, ",");
+					int status = code;
+					while (st.hasMoreTokens())
+					{
+						status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
+						if(status != 0)
+							code = status;
+					}
+				}
+				else
+				{
+					if(transProxyAll)
+					{
+						showAlert("Status", "Setting up full transparent proxying...");
+						code = TorTransProxy.setTransparentProxyingAll(this);
+					}
+					else
+					{
+						showAlert("Status", "Setting up app-based transparent proxying...");
+						code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this));
+					}
+				}
+			
+				TorService.logMessage ("TorTransProxy resp code: " + code);
+				
+				if (code == 0)
+				{
+					showAlert("Status", "Transparent proxying ENABLED");
+				}
+				else
+				{
+					showAlert("Status", "WARNING: error starting transparent proxying!");
+				}
+			
+				return true;
+	 				
+	 		}
+	 		else
+	 		{
+	 			TorTransProxy.purgeIptables(this);
+				showAlert("Status", "Transparent proxying: DISABLED");
+	 		}
+    	}
+    	else
+    	{	 	
+    		TorTransProxy.purgeIptables(this);
+			showAlert("Status", "Transparent proxying: DISABLED");
+
+    	}
+    	
+ 		return true;
+ 	}
+    
+    private void runTorShellCmd() throws Exception
+    {
+    	
+    	StringBuilder log = new StringBuilder();
+		
+		String torrcPath = appBinHome + TORRC_ASSET_KEY;
+		
+		String[] torCmd = {torBinaryPath + " DataDirectory " + appDataHome + " -f " + torrcPath  + " || exit\n"};
+		
+		boolean runAsRootFalse = false;
+		boolean waitForProcess = false;
+		
+		int procId = -1;
+		int attempts = 0;
+
+		int torRetryWaitTimeMS = 5000;
+		
+		while (procId == -1 && attempts < MAX_START_TRIES)
+		{
+			log = new StringBuilder();
+			
+			logNotice(torCmd[0]);
+			sendCallbackStatusMessage(getString(R.string.status_starting_up));
+			
+			TorServiceUtils.doShellCommand(torCmd, log, runAsRootFalse, waitForProcess);
+		
+			Thread.sleep(torRetryWaitTimeMS);
+			
+			procId = TorServiceUtils.findProcessId(torBinaryPath);
+			
+			logNotice("got tor proc id: " + procId);
+			
+			if (procId == -1)
+			{
+				
+				sendCallbackStatusMessage("Couldn't start Tor process.\nretrying..." + log.toString());
+				Thread.sleep(torRetryWaitTimeMS);
+				attempts++;
+			}
+			
+			logNotice(log.toString());
+		}
+		
+		if (procId == -1)
+		{
+			throw new Exception ("Unable to start Tor");
+		}
+		else
+		{
+		
+			logNotice("Tor process id=" + procId);
+			
+			showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.tornotification);
+			
+			initControlConnection ();
+
+	        applyPreferences();
+	    }
+    }
+    
+    private void runPrivoxyShellCmd () throws Exception
+    {
+    	
+    	logNotice( "Starting privoxy process");
+    	
+			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
+
+			StringBuilder log = null;
+			
+			int attempts = 0;
+			
+    		if (privoxyProcId == -1)
+    		{
+    			log = new StringBuilder();
+    			
+    			String privoxyConfigPath = appBinHome + PRIVOXYCONFIG_ASSET_KEY;
+    			
+    			String[] cmds = 
+    			{ privoxyPath + " " + privoxyConfigPath + " &" };
+    			
+    			logNotice (cmds[0]); 
+    			
+    			boolean runAsRoot = false;
+    			boolean waitFor = false;
+    			
+    			TorServiceUtils.doShellCommand(cmds, log, runAsRoot, waitFor);
+    			
+    			//wait one second to make sure it has started up
+    			Thread.sleep(1000);
+    			
+    			while ((privoxyProcId = TorServiceUtils.findProcessId(privoxyPath)) == -1  && attempts < MAX_START_TRIES)
+    			{
+    				logNotice("Couldn't find Privoxy process... retrying...\n" + log);
+    				Thread.sleep(3000);
+    				attempts++;
+    			}
+    			
+    			
+    			logNotice(log.toString());
+    		}
+    		
+			sendCallbackLogMessage("Privoxy is running on port: " + PORT_HTTP);
+			
+    		logNotice("Privoxy process id=" + privoxyProcId);
+			
+    		
+    		
+    }
+    
+    /*
+	public String generateHashPassword ()
+	{
+		
+		PasswordDigest d = PasswordDigest.generateDigest();
+	      byte[] s = d.getSecret(); // pass this to authenticate
+	      String h = d.getHashedPassword(); // pass this to the Tor on startup.
+
+		return null;
+	}*/
+	
+	public void initControlConnection () throws Exception, RuntimeException
+	{
+			while (true)
+			{
+				try
+				{
+					logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
+					
+					String baseMessage = getString(R.string.tor_process_connecting);
+					sendCallbackStatusMessage(baseMessage);
+					
+					torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
+			        conn = TorControlConnection.getConnection(torConnSocket);
+			        
+			      //  conn.authenticate(new byte[0]); // See section 3.2
+			        
+					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2));
+
+					logNotice( "SUCCESS connected to control port");
+			        
+			        String torAuthCookie = appDataHome + TOR_CONTROL_COOKIE;
+			        
+			        File fileCookie = new File(torAuthCookie);
+			        
+			        if (fileCookie.exists())
+			        {
+				        byte[] cookie = new byte[(int)fileCookie.length()];
+				        new FileInputStream(new File(torAuthCookie)).read(cookie);
+				        conn.authenticate(cookie);
+				        		
+				        logNotice( "SUCCESS authenticated to control port");
+				        
+						sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2) + getString(R.string.tor_process_connecting_step3));
+	
+				        addEventHandler();
+				        
+			        }
+			        
+			        break; //don't need to retry
+				}
+				catch (Exception ce)
+				{
+					conn = null;
+					Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
+					
+					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step4));
+
+					Thread.sleep(1000);
+										
+				}	
+			}
+		
+		
+
+	}
+	
+	
+	/*
+	private void getTorStatus () throws IOException
+	{
+		try
+		{
+			 
+			if (conn != null)
+			{
+				 // get a single value.
+			      
+			       // get several values
+			       
+			       if (currentStatus == STATUS_CONNECTING)
+			       {
+				       //Map vals = conn.getInfo(Arrays.asList(new String[]{
+				         // "status/bootstrap-phase", "status","version"}));
+			
+				       String bsPhase = conn.getInfo("status/bootstrap-phase");
+				       Log.d(TAG, "bootstrap-phase: " + bsPhase);
+				       
+				       
+			       }
+			       else
+			       {
+			    	 //  String status = conn.getInfo("status/circuit-established");
+			    	 //  Log.d(TAG, "status/circuit-established=" + status);
+			       }
+			}
+		}
+		catch (Exception e)
+		{
+			Log.d(TAG, "Unable to get Tor status from control port");
+			currentStatus = STATUS_UNAVAILABLE;
+		}
+		
+	}*/
+	
+	
+	public void addEventHandler () throws IOException
+	{
+	       // We extend NullEventHandler so that we don't need to provide empty
+	       // implementations for all the events we don't care about.
+	       // ...
+		logNotice( "adding control port event handler");
+
+		conn.setEventHandler(this);
+	    
+		conn.setEvents(Arrays.asList(new String[]{
+	          "ORCONN", "CIRC", "NOTICE", "WARN", "ERR"}));
+	      // conn.setEvents(Arrays.asList(new String[]{
+	        //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
+
+		logNotice( "SUCCESS added control port event handler");
+	    
+	    
+
+	}
+	
+		/**
+		 * Returns the port number that the HTTP proxy is running on
+		 */
+		public int getHTTPPort() throws RemoteException {
+			return TorServiceConstants.PORT_HTTP;
+		}
+
+		/**
+		 * Returns the port number that the SOCKS proxy is running on
+		 */
+		public int getSOCKSPort() throws RemoteException {
+			return TorServiceConstants.PORT_SOCKS;
+		}
+
+
+		
+		
+		public int getProfile() throws RemoteException {
+			//return mProfile;
+			return PROFILE_ON;
+		}
+		
+		public void setTorProfile(int profile)  {
+			logNotice("Tor profile set to " + profile);
+			
+			if (profile == PROFILE_ON)
+			{
+ 				currentStatus = STATUS_CONNECTING;
+	            sendCallbackStatusMessage ("starting...");
+
+	            Thread thread = new Thread(this);
+	            thread.start();
+	           
+			}
+			else if (profile == PROFILE_OFF)
+			{
+				currentStatus = STATUS_OFF;
+	            sendCallbackStatusMessage ("shutting down...");
+	            
+				_torInstance.stopTor();
+
+				
+			}
+		}
+
+
+
+	public void message(String severity, String msg) {
+		
+		
+		logNotice(  "[Tor Control Port] " + severity + ": " + msg);
+          
+          if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1)
+          {
+        	  currentStatus = STATUS_ON;
+        	
+
+   		   	getHiddenServiceHostname ();
+   		   
+          }
+          
+          
+    	  showToolbarNotification (getString(R.string.status_activated),NOTIFY_ID,R.drawable.tornotificationon);
+    		 
+          sendCallbackStatusMessage (msg);
+          
+	}
+
+	private void showAlert(String title, String msg)
+	{
+		 /*
+		 new AlertDialog.Builder(this)
+         .setTitle(title)
+         .setMessage(msg)
+         .setPositiveButton(android.R.string.ok, null)
+         .show();
+         */
+		showToolbarNotification(msg, NOTIFY_ID, R.drawable.tornotification);
+	}
+	
+	public void newDescriptors(List<String> orList) {
+		
+	}
+
+
+	public void orConnStatus(String status, String orName) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("orConnStatus (");
+			sb.append((orName) );
+			sb.append("): ");
+			sb.append(status);
+			
+			logNotice(sb.toString());
+		}
+	}
+
+
+	public void streamStatus(String status, String streamID, String target) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("StreamStatus (");
+			sb.append((streamID));
+			sb.append("): ");
+			sb.append(status);
+			
+			logNotice(sb.toString());
+		}
+	}
+
+
+	public void unrecognized(String type, String msg) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Message (");
+			sb.append(type);
+			sb.append("): ");
+			sb.append(msg);
+			
+			logNotice(sb.toString());
+		}
+		
+	}
+
+	public void bandwidthUsed(long read, long written) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Bandwidth used: ");
+			sb.append(read/1000);
+			sb.append("kb read / ");
+			sb.append(written/1000);
+			sb.append("kb written");
+			
+			logNotice(sb.toString());
+		}
+
+	}
+
+	public void circuitStatus(String status, String circID, String path) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Circuit (");
+			sb.append((circID));
+			sb.append("): ");
+			sb.append(status);
+			sb.append("; ");
+			sb.append(path);
+			
+			logNotice(sb.toString());
+		}
+		
+	}
+	
+    public IBinder onBind(Intent intent) {
+        // Select the interface to return.  If your service only implements
+        // a single interface, you can just return it here without checking
+        // the Intent.
+        
+    	_torInstance = this;
+    	
+		try
+		{
+	
+			checkTorBinaries();
+    	
+		}
+		catch (Exception e)
+		{
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
+
+			Log.d(TAG,"Unable to check for Tor binaries",e);
+			return null;
+		}
+    	
+		findExistingProc ();
+		
+    	if (ITorService.class.getName().equals(intent.getAction())) {
+            return mBinder;
+        }
+        
+
+        return null;
+    }
+	
+    /**
+     * This is a list of callbacks that have been registered with the
+     * service.  Note that this is package scoped (instead of private) so
+     * that it can be accessed more efficiently from inner classes.
+     */
+    final RemoteCallbackList<ITorServiceCallback> mCallbacks
+            = new RemoteCallbackList<ITorServiceCallback>();
+
+
+    /**
+     * The IRemoteInterface is defined through IDL
+     */
+    private final ITorService.Stub mBinder = new ITorService.Stub() {
+    	
+       
+		public void registerCallback(ITorServiceCallback cb) {
+            if (cb != null) mCallbacks.register(cb);
+        }
+        public void unregisterCallback(ITorServiceCallback cb) {
+            if (cb != null) mCallbacks.unregister(cb);
+        }
+        public int getStatus () {
+        	return getTorStatus();
+        }
+        
+        public void setProfile (int profile)
+        {
+        	setTorProfile(profile);
+        	
+        }
+        
+        public void processSettings ()
+        {
+        	
+        	
+        	try {
+				applyPreferences();
+			} catch (RemoteException e) {
+				logException ("error applying prefs",e);
+			}
+        	
+        }
+        
+        
+        
+        public String getConfiguration (String name)
+        {
+        	try
+        	{
+	        	if (conn != null)
+	        	{
+	        		StringBuffer result = new StringBuffer();
+	        		
+	        		List<ConfigEntry> listCe = conn.getConf(name);
+	        		
+	        		Iterator<ConfigEntry> itCe = listCe.iterator();
+	        		ConfigEntry ce = null;
+	        		
+	        		while (itCe.hasNext())
+	        		{
+	        			ce = itCe.next();
+	        			
+	        			result.append(ce.key);
+	        			result.append(' ');
+	        			result.append(ce.value);
+	        			result.append('\n');
+	        		}
+	        		
+	   	       		return result.toString();
+	        	}
+        	}
+        	catch (IOException ioe)
+        	{
+        		Log.e(TAG, "Unable to update Tor configuration", ioe);
+        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
+        	}
+        	
+        	return null;
+        }
+        
+        /**
+         * Set configuration
+         **/
+        public boolean updateConfiguration (String name, String value, boolean saveToDisk)
+        {
+        	if (configBuffer == null)
+        		configBuffer = new ArrayList<String>();
+	        
+        	if (resetBuffer == null)
+        		resetBuffer = new ArrayList<String>();
+	        
+        	if (value == null || value.length() == 0)
+        	{
+        		resetBuffer.add(name);
+        		/*
+        		if (conn != null)
+        		{
+        			try {
+						conn.resetConf(Arrays.asList(new String[]{name}));
+					} catch (IOException e) {
+						Log.w(TAG, "Unable to reset conf",e);
+					}
+        		}*/
+        	}
+        	else
+        		configBuffer.add(name + ' ' + value);
+	        
+        	return false;
+        }
+         
+	    public boolean saveConfiguration ()
+	    {
+	    	try
+        	{
+	        	if (conn != null)
+	        	{
+	        		
+	        		 if (resetBuffer != null && resetBuffer.size() > 0)
+				        {	
+				        	conn.resetConf(resetBuffer);
+				        	resetBuffer = null;
+				        }
+	   	       
+	        		 if (configBuffer != null && configBuffer.size() > 0)
+				        {
+	        			 	
+				        	conn.setConf(configBuffer);
+				        	configBuffer = null;
+				        }
+	   	       
+	   	       		// Flush the configuration to disk.
+	        		//this is doing bad things right now NF 22/07/10
+	   	       		//conn.saveConf();
+	
+	   	       		return true;
+	        	}
+        	}
+        	catch (Exception ioe)
+        	{
+        		Log.e(TAG, "Unable to update Tor configuration", ioe);
+        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
+        	}
+        	
+        	return false;
+        	
+	    }
+    };
+    
+    private ArrayList<String> callbackBuffer = new ArrayList<String>();
+    private boolean inCallbackStatus = false;
+    private boolean inCallback = false;
+    
+    private synchronized void sendCallbackStatusMessage (String newStatus)
+    {
+    	 
+    	if (mCallbacks == null)
+    		return;
+    	
+        // Broadcast to all clients the new value.
+        final int N = mCallbacks.beginBroadcast();
+        
+        inCallback = true;
+        
+        if (N > 0)
+        {
+        	 for (int i=0; i<N; i++) {
+		            try {
+		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
+		                
+		                
+		            } catch (RemoteException e) {
+		                // The RemoteCallbackList will take care of removing
+		                // the dead object for us.
+		            }
+		        }
+        }
+        
+        mCallbacks.finishBroadcast();
+        inCallback = false;
+    }
+    
+    private synchronized void sendCallbackLogMessage (String logMessage)
+    {
+    	 
+    	if (mCallbacks == null)
+    		return;
+    	
+    	callbackBuffer.add(logMessage);
+
+    	if (!inCallback)
+    	{
+
+	        inCallback = true;
+	        // Broadcast to all clients the new value.
+	        final int N = mCallbacks.beginBroadcast();
+	        
+	
+	        if (N > 0)
+	        {
+	        
+	        	Iterator<String> it = callbackBuffer.iterator();
+	        	String status = null;
+	        	
+	        	while (it.hasNext())
+	        	{
+	        		status = it.next();
+	        		
+			        for (int i=0; i<N; i++) {
+			            try {
+			                mCallbacks.getBroadcastItem(i).logMessage(status);
+			                
+			            } catch (RemoteException e) {
+			                // The RemoteCallbackList will take care of removing
+			                // the dead object for us.
+			            }
+			        }
+	        	}
+		        
+		        callbackBuffer.clear();
+	        }
+	        
+	        mCallbacks.finishBroadcast();
+	        inCallback = false;
+    	}
+    	
+    }
+    
+    private boolean applyPreferences () throws RemoteException
+    {
+    	
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+    	ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
+    	Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
+    		
+		boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
+		
+		//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
+
+        boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
+
+        boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
+
+        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
+
+        boolean enableStrictExitNodes = prefs.getBoolean("pref_strict_exit_nodes", false);
+        String exitNodes = prefs.getString("pref_exit_nodes", "");
+        
+        
+		//boolean enableTransparentProxy = prefs.getBoolean(TorConstants.PREF_TRANSPARENT, false);
+		
+        if (currentStatus == STATUS_ON)
+        {
+        	//reset iptables rules in active mode
+        
+			try
+			{
+				setupTransProxy(true); 		
+			}
+			catch (Exception e)
+			{
+				logException("unable to setup transproxy",e);
+			}
+        }
+        
+        if (exitNodes.length() > 0)
+        {
+        	
+			mBinder.updateConfiguration("ExitNodes", exitNodes, false);
+			mBinder.updateConfiguration("StrictExitNodes", enableStrictExitNodes ? "1" : "0", false);
+			
+        }
+		
+		if (useBridges)
+		{
+			String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,"");
+
+			if (bridgeList == null || bridgeList.length() == 0)
+			{
+			
+				showAlert("Bridge Error","In order to use the bridge feature, you must enter at least one bridge IP address." +
+						"Send an email to bridges at torproject.org with the line \"get bridges\" by itself in the body of the mail from a gmail account.");
+				
+			
+				return false;
+			}
+			
+			
+			mBinder.updateConfiguration("UseBridges", "1", false);
+				
+			String bridgeDelim = "\n";
+			
+			if (bridgeList.indexOf(",") != -1)
+			{
+				bridgeDelim = ",";
+			}
+			
+			StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
+			while (st.hasMoreTokens())
+			{
+
+				mBinder.updateConfiguration("bridge", st.nextToken(), false);
+
+			}
+			
+			mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
+			
+		}
+		else
+		{
+			mBinder.updateConfiguration("UseBridges", "0", false);
+
+		}
+
+        try
+        {
+            if (ReachableAddresses)
+            {
+                String ReachableAddressesPorts =
+                    prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
+                
+                mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false);
+
+            }
+            else
+            {
+                mBinder.updateConfiguration("ReachableAddresses", "", false);
+            }
+        }
+        catch (Exception e)
+        {
+           showAlert("Config Error","Your ReachableAddresses settings caused an exception!");
+           
+           return false;
+        }
+
+        try
+        {
+            if (becomeRelay && (!useBridges) && (!ReachableAddresses))
+            {
+                int ORPort =  Integer.parseInt(prefs.getString(TorConstants.PREF_OR_PORT, "9001"));
+                String nickname = prefs.getString(TorConstants.PREF_OR_NICKNAME, "Orbot");
+
+                mBinder.updateConfiguration("ORPort", ORPort + "", false);
+    			mBinder.updateConfiguration("Nickname", nickname, false);
+    			mBinder.updateConfiguration("ExitPolicy", "reject *:*", false);
+
+            }
+            else
+            {
+            	mBinder.updateConfiguration("ORPort", "", false);
+    			mBinder.updateConfiguration("Nickname", "", false);
+    			mBinder.updateConfiguration("ExitPolicy", "", false);
+            }
+        }
+        catch (Exception e)
+        {
+            showAlert("Uh-oh!","Your relay settings caused an exception!");
+          
+            return false;
+        }
+
+        if (enableHiddenServices)
+        {
+        	mBinder.updateConfiguration("HiddenServiceDir",appDataHome, false);
+        	
+        	String hsPorts = prefs.getString("pref_hs_ports","");
+        	
+        	StringTokenizer st = new StringTokenizer (hsPorts,",");
+        	String hsPortConfig = null;
+        	
+        	while (st.hasMoreTokens())
+        	{
+        		hsPortConfig = st.nextToken();
+        		
+        		if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
+        		{
+        			hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
+        		}
+        		
+        		mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
+        	}
+        	
+        	
+        }
+        else
+        {
+        	mBinder.updateConfiguration("HiddenServiceDir","", false);
+        	
+        }
+        
+        mBinder.saveConfiguration();
+	
+        return true;
+    }
+    
+   
+   
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,434 +0,0 @@
-package org.torproject.android.service;
-
-import java.io.File;
-
-import org.torproject.android.TorifiedApp;
-
-import android.content.Context;
-import android.util.Log;
-
-public class TorTransProxy implements TorServiceConstants {
-	
-	private final static String TAG = TorServiceConstants.TAG;
-		
-
-	
-	public static int purgeIptables(Context context) throws Exception {
-		
-	String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	final StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -F || exit\n");
-	
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -F || exit\n");
-    	
-    	String[] cmd = {script.toString()};	    	
-		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
-		String msg = res.toString();
-		
-		TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
-			
-		
-		return code;
-	
-	}
-	
-	/*
-	public static int purgeIptablesByApp(Context context, TorifiedApp[] apps) throws Exception {
-
-		//restoreDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	final StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		for (int i = 0; i < apps.length; i++)
-		{
-			//flush nat for every app
-			script.append(ipTablesPath);
-			script.append(" -t nat -m owner --uid-owner ");
-			script.append(apps[i].getUid());
-			script.append(" -F || exit\n");
-		
-			script.append(ipTablesPath);
-			script.append(" -t filter -m owner --uid-owner ");
-			script.append(apps[i].getUid());
-			script.append(" -F || exit\n");
-				
-		}
-		
-    	
-    	String[] cmd = {script.toString()};	    	
-		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
-		String msg = res.toString();
-		logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
-			
-		
-		return code;
-		
-	}*/
-	
-	
-	/*
-	 // 9/19/2010 - NF This code is in process... /etc path on System partition
-	 // is read-only on Android for now.
-	public static int redirectDNSResolvConf () throws Exception
-	{
-    	StringBuilder script = new StringBuilder();
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		//mv resolv.conf to resolve.conf.bak
-		String cmd = "mv /etc/resolv.conf /etc/resolv.conf.bak";
-		script.append(cmd);
-		
-		//create new resolve.conf pointing to localhost/127.0.0.1
-		cmd = "echo \"nameserver 127.0.0.1\" > /etc/resolv.conf";
-		script.append(cmd);
-		
-		String[] cmdFlush = {script.toString()};
-		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
-		//String msg = res.toString(); //get stdout from command
-		
-		
-		return code;
-	}
-	
-	public static int restoreDNSResolvConf () throws Exception
-	{
-		StringBuilder script = new StringBuilder();
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		//mv resolv.conf to resolve.conf.bak
-		String cmd = "mv /etc/resolv.conf.bak /etc/resolv.conf";
-		script.append(cmd);
-		script.append(" || exit\n");
-		
-		String[] cmdFlush = {script.toString()};
-		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
-		//String msg = res.toString(); //get stdout from command
-		
-		return code;
-	}
-	*/
-	
-	public static int testOwnerModule(Context context) throws Exception
-	{
-
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-    	int torUid = context.getApplicationInfo().uid;
-
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	// Allow everything for Tor
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -m owner --uid-owner ");
-		script.append(torUid);
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		
-		return code;
-    }	
-	
-	
-	
-	public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps) throws Exception
-	{
-
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	purgeIptables(context);
-				
-		//build up array of shell cmds to execute under one root context
-		for (int i = 0; i < apps.length; i++)
-		{
-
-			if (apps[i].isTorified()) //if app is set to true
-			{
-				
-				if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
-				{
-					//should never trans proxy the Orbot app (and Tor or Privoxy) itself
-					continue;
-				}
-				
-				TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
-			 
-				//TCP
-				script.append(ipTablesPath);
-				script.append(" -t nat");
-				script.append(" -A OUTPUT -p tcp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m tcp --syn");
-				script.append(" -j REDIRECT --to-ports ");
-				script.append(TOR_TRANSPROXY_PORT);
-				script.append(" || exit\n");
-				
-				//DNS
-				script.append(ipTablesPath);
-				script.append(" -t nat");
-				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m udp --dport "); 
-				script.append(STANDARD_DNS_PORT);
-				script.append(" -j REDIRECT --to-ports ");
-				script.append(TOR_DNS_PORT);
-				script.append(" || exit\n");
-				
-				script.append(ipTablesPath);
-				script.append(" -t filter");
-				script.append(" -A OUTPUT -p tcp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m tcp --dport ");
-				script.append(TOR_TRANSPROXY_PORT);
-				script.append(" -j ACCEPT");
-				script.append(" || exit\n");
-				
-				script.append(ipTablesPath);
-				script.append(" -t filter");
-				script.append(" -A OUTPUT -p udp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m udp --dport ");
-				script.append(TOR_DNS_PORT);
-				script.append(" -j ACCEPT");
-				script.append(" || exit\n");
-									
-				script.append(ipTablesPath);
-				script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -j DROP"); //drop all other packets as Tor won't handle them
-				script.append(" || exit\n");
-				
-				
-			}		
-		}
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		
-		return code;
-    }	
-	
-	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
-	{
-
-		//android.os.Debug.waitForDebugger();
-		
-		//redirectDNSResolvConf(); //not working yet
-		
-		//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	purgeIptables(context);
-		
-		//TCP
-		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
-
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p tcp");
-		script.append(" --dport ");
-		script.append(port);
-		//script.append(" -m tcp --syn");
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp");
-		script.append(" --dport ");
-		script.append(port);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		//DNS
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp ");
-		script.append(" -m udp --dport "); 
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_DNS_PORT);
-		script.append(" || exit\n");
-		
-    	
-    	String[] cmdAdd = {script.toString()};    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		return code;
-    }
-
-	public static int setTransparentProxyingAll(Context context) throws Exception 
-	{
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	purgeIptables(context);
-    	
-    	int torUid = context.getApplicationInfo().uid;
-
-    	// Set up port redirection
-    	script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p tcp");
-		script.append(" -m owner ! --uid-owner ");
-		script.append(torUid);
-		script.append(" -m tcp --syn");
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		// Same for DNS
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
-		script.append(torUid);
-		script.append(" -m udp --dport "); 
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_DNS_PORT);
-		script.append(" || exit\n");
-		
-		// Allow packets to localhost (contains all the port-redirected ones)
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -d 127.0.0.1");
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		// Allow loopback
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -o lo");
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		// Allow everything for Tor
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -m owner --uid-owner ");
-		script.append(torUid);
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		if (TorService.ENABLE_DEBUG_LOG)
-		{
-			//XXX: Comment the following rules for non-debug builds
-			script.append(ipTablesPath);
-			script.append(" -t filter");
-			script.append(" -A OUTPUT");
-			script.append(" -p udp");
-			script.append(" --dport ");
-			script.append(STANDARD_DNS_PORT);
-			script.append(" -j LOG");
-			script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
-			script.append(" --log-uid");
-			script.append(" || exit\n");
-			script.append(ipTablesPath);
-			script.append(" -t filter");
-			script.append(" -A OUTPUT");
-			script.append(" -p tcp");
-			script.append(" -j LOG");
-			script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
-			script.append(" --log-uid");
-			script.append(" || exit\n");
-		}
-		
-		// Reject DNS that is not from Tor (order is important - first matched rule counts!)
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p udp");
-		script.append(" --dport ");
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REJECT");
-		script.append(" || exit\n");
-		
-		// Reject all other outbound TCP packets
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -j REJECT");
-		script.append(" || exit\n");
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-    	return code;
-	}	
-	
-
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java (from rev 24753, projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,483 @@
+package org.torproject.android.service;
+
+import java.io.File;
+
+import org.torproject.android.TorifiedApp;
+
+import android.content.Context;
+import android.util.Log;
+
+public class TorTransProxy implements TorServiceConstants {
+	
+	private final static String TAG = TorServiceConstants.TAG;
+		
+
+	
+	public static int purgeIptables(Context context) throws Exception {
+		
+	String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	final StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -F || exit\n");
+	
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -F || exit\n");
+    	
+    	String[] cmd = {script.toString()};	    	
+		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
+		String msg = res.toString();
+		
+		TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
+			
+		
+		return code;
+	
+	}
+	
+	/*
+	public static int purgeIptablesByApp(Context context, TorifiedApp[] apps) throws Exception {
+
+		//restoreDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	final StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		for (int i = 0; i < apps.length; i++)
+		{
+			//flush nat for every app
+			script.append(ipTablesPath);
+			script.append(" -t nat -m owner --uid-owner ");
+			script.append(apps[i].getUid());
+			script.append(" -F || exit\n");
+		
+			script.append(ipTablesPath);
+			script.append(" -t filter -m owner --uid-owner ");
+			script.append(apps[i].getUid());
+			script.append(" -F || exit\n");
+				
+		}
+		
+    	
+    	String[] cmd = {script.toString()};	    	
+		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
+		String msg = res.toString();
+		logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
+			
+		
+		return code;
+		
+	}*/
+	
+	
+	/*
+	 // 9/19/2010 - NF This code is in process... /etc path on System partition
+	 // is read-only on Android for now.
+	public static int redirectDNSResolvConf () throws Exception
+	{
+    	StringBuilder script = new StringBuilder();
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		//mv resolv.conf to resolve.conf.bak
+		String cmd = "mv /etc/resolv.conf /etc/resolv.conf.bak";
+		script.append(cmd);
+		
+		//create new resolve.conf pointing to localhost/127.0.0.1
+		cmd = "echo \"nameserver 127.0.0.1\" > /etc/resolv.conf";
+		script.append(cmd);
+		
+		String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		
+		return code;
+	}
+	
+	public static int restoreDNSResolvConf () throws Exception
+	{
+		StringBuilder script = new StringBuilder();
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		//mv resolv.conf to resolve.conf.bak
+		String cmd = "mv /etc/resolv.conf.bak /etc/resolv.conf";
+		script.append(cmd);
+		script.append(" || exit\n");
+		
+		String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		return code;
+	}
+	*/
+	
+	public static int testOwnerModule(Context context) throws Exception
+	{
+
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+    	int torUid = context.getApplicationInfo().uid;
+
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	// Allow everything for Tor
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -m owner --uid-owner ");
+		script.append(torUid);
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+    }	
+	
+	
+	
+	public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps) throws Exception
+	{
+
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	purgeIptables(context);
+				
+		//build up array of shell cmds to execute under one root context
+		for (int i = 0; i < apps.length; i++)
+		{
+
+			if (apps[i].isTorified()) //if app is set to true
+			{
+				
+				if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
+				{
+					//should never trans proxy the Orbot app (and Tor or Privoxy) itself
+					continue;
+				}
+				
+				TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
+			 
+				//TCP
+				script.append(ipTablesPath);
+				script.append(" -t nat");
+				script.append(" -A OUTPUT -p tcp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m tcp --syn");
+				script.append(" -j REDIRECT --to-ports ");
+				script.append(TOR_TRANSPROXY_PORT);
+				script.append(" || exit\n");
+				
+				//DNS
+				script.append(ipTablesPath);
+				script.append(" -t nat");
+				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m udp --dport "); 
+				script.append(STANDARD_DNS_PORT);
+				script.append(" -j REDIRECT --to-ports ");
+				script.append(TOR_DNS_PORT);
+				script.append(" || exit\n");
+				
+				script.append(ipTablesPath);
+				script.append(" -t filter");
+				script.append(" -A OUTPUT -p tcp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m tcp --dport ");
+				script.append(TOR_TRANSPROXY_PORT);
+				script.append(" -j ACCEPT");
+				script.append(" || exit\n");
+				
+				script.append(ipTablesPath);
+				script.append(" -t filter");
+				script.append(" -A OUTPUT -p udp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m udp --dport ");
+				script.append(TOR_DNS_PORT);
+				script.append(" -j ACCEPT");
+				script.append(" || exit\n");
+									
+				script.append(ipTablesPath);
+				script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -j DROP"); //drop all other packets as Tor won't handle them
+				script.append(" || exit\n");
+				
+				
+			}		
+		}
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+    }	
+	
+	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
+	{
+
+		//android.os.Debug.waitForDebugger();
+		
+		//redirectDNSResolvConf(); //not working yet
+		
+		//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	purgeIptables(context);
+		
+		//TCP
+		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
+
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" --dport ");
+		script.append(port);
+		//script.append(" -m tcp --syn");
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp");
+		script.append(" --dport ");
+		script.append(port);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		//DNS
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp ");
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_DNS_PORT);
+		script.append(" || exit\n");
+		
+    	
+    	String[] cmdAdd = {script.toString()};    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		return code;
+    }
+
+	public static int enableWifiHotspotRules (Context context) throws Exception
+	{
+		
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    
+    	script.append(ipTablesPath);
+		script.append(" -I FORWARD");
+		script.append(" -m state --state ESTABLISHED,RELATED -j ACCEPT");
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -I FORWARD");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		/*
+		script.append(ipTablesPath);
+		script.append(" -P FORWARD DROP");
+		script.append(" || exit\n");
+		*/
+		
+		script.append(ipTablesPath);
+		script.append(" -t nat -I POSTROUTING -j MASQUERADE");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+	}
+	
+	public static int setTransparentProxyingAll(Context context) throws Exception 
+	{
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	purgeIptables(context);
+    	
+    	enableWifiHotspotRules(context);
+		
+    	int torUid = context.getApplicationInfo().uid;
+
+    	// Set up port redirection
+    	script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" -m owner ! --uid-owner ");
+		script.append(torUid);
+		script.append(" -m tcp --syn");
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		// Same for DNS
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
+		script.append(torUid);
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_DNS_PORT);
+		script.append(" || exit\n");
+		
+		// Allow packets to localhost (contains all the port-redirected ones)
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -d 127.0.0.1");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		// Allow loopback
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -o lo");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		// Allow everything for Tor
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -m owner --uid-owner ");
+		script.append(torUid);
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		if (TorService.ENABLE_DEBUG_LOG)
+		{
+			//XXX: Comment the following rules for non-debug builds
+			script.append(ipTablesPath);
+			script.append(" -t filter");
+			script.append(" -A OUTPUT");
+			script.append(" -p udp");
+			script.append(" --dport ");
+			script.append(STANDARD_DNS_PORT);
+			script.append(" -j LOG");
+			script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
+			script.append(" --log-uid");
+			script.append(" || exit\n");
+			script.append(ipTablesPath);
+			script.append(" -t filter");
+			script.append(" -A OUTPUT");
+			script.append(" -p tcp");
+			script.append(" -j LOG");
+			script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
+			script.append(" --log-uid");
+			script.append(" || exit\n");
+		}
+		
+		// Reject DNS that is not from Tor (order is important - first matched rule counts!)
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p udp");
+		script.append(" --dport ");
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REJECT");
+		script.append(" || exit\n");
+		
+		// Reject all other outbound TCP packets
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -j REJECT");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+    	
+    	
+    	return code;
+	}	
+	
+
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS
===================================================================
--- projects/android/trunk/Orbot/AUTHORS	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,33 +0,0 @@
-This file lists the authors for Orbot, a free software project to provide
-anonymity on the Internet on Android smartphones.
-
-For more information about Orbot, see https://guardianproject.info/apps/orbot
-
-If you got this file as a part of a larger bundle, there are probably
-other authors that you should be aware of.
-
-Main Authors:
--------------
-Nathan Freitas <nathan at freitas.net> developed the primary Android
-application and managed the porting of Tor to Android.
-
-Jake Appelbaum <jacob at appelbaum.net> regularly gave Nathan a swift kick
-in the rear to get this done. He has also provided extensive guidance
-and review. Most recently he has been promoted to Chief Application
-Resource Editor.
-
-Derek Halliday <derek at guardianproject.info> has designed and implemented
-new user interface components and layouts since the 1.0.4 release. 
-
-Contributors:
--------------
-Nick Mathewson <nickm at freehaven.net> wrote some of the patch code to
-support the compiling of Tor and Libevent on Android, and generally
-provided guidance in the entire effort.
-
-Adam Langley made the original valiant effort to port Tor to Android.
-
-Sathyanarayanan <gsathya.ceg at gmail.com> created a patch for the wizard
-which updated the icon and link for the secure chat app info to point
-to Gibberbot, and hopefully will continue to contribute useful patches.
- 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS (from rev 24719, projects/android/trunk/Orbot/AUTHORS)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AUTHORS	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,38 @@
+This file lists the authors for Orbot, a free software project to provide
+anonymity on the Internet on Android smartphones.
+
+For more information about Orbot, see https://guardianproject.info/apps/orbot
+
+If you got this file as a part of a larger bundle, there are probably
+other authors that you should be aware of.
+
+Main Authors:
+-------------
+Nathan Freitas <nathan at freitas.net> developed the primary Android
+application and managed the porting of Tor to Android.
+
+Jake Appelbaum <jacob at appelbaum.net> regularly gave Nathan a swift kick
+in the rear to get this done. He has also provided extensive guidance
+and review. Most recently he has been promoted to Chief Application
+Resource Editor.
+
+Derek Halliday <derek at guardianproject.info> has designed and implemented
+new user interface components and layouts since the 1.0.4 release. 
+
+Contributors:
+-------------
+Nick Mathewson <nickm at freehaven.net> wrote some of the patch code to
+support the compiling of Tor and Libevent on Android, and generally
+provided guidance in the entire effort.
+
+Adam Langley made the original valiant effort to port Tor to Android.
+
+Sathyanarayanan <gsathya.ceg at gmail.com> created a patch for the wizard
+which updated the icon and link for the secure chat app info to point
+to Gibberbot, and hopefully will continue to contribute useful patches.
+
+__sporkbomb <manuel at acanthephyra.net> implemented an updated set of logic
+in TorTransProxy for handling the "transproxy all" mode of operation. Before
+certain system processes were leaking traffic, and this was also detected
+by his excellent auditing.
+ 

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110503a-dev" android:versionCode="11">
-       
-       <uses-permission android:name="android.permission.INTERNET" />
- 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 
-    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
-      
-        <activity android:name=".Orbot"
-                  android:theme="@android:style/Theme.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-          </intent-filter>
-            <intent-filter>
-            <action android:name="android.intent.action.VIEW" />
-            <category android:name="android.intent.category.DEFAULT" />
-            <category android:name="android.intent.category.BROWSABLE" />
-        </intent-filter>
-        
-         <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
-            </intent-filter>
-             <intent-filter>
-                <category android:name="android.intent.category.DEFAULT" />
-            	<action android:name="org.torproject.android.START_TOR" />
-            </intent-filter>
-        </activity>
-      
-        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
-        <activity android:name=".AppManager"  android:label="@string/app_name"/>
-        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
-      
-    	<service android:enabled="true"
-    		android:name=".service.TorService" 
-    		android:exported="false"
-    		>
-	            <intent-filter>
-	                <action android:name="org.torproject.android.service.ITorService" />
-	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
-            </intent-filter>
-    	</service>
-    	
-    	
-    	<receiver android:name=".OnBootReceiver">
-			<intent-filter>
-			<action
-			android:name="android.intent.action.BOOT_COMPLETED" />
-			<category android:name="android.intent.category.HOME" />
-			</intent-filter>
-		</receiver>
-    	
-    </application>
-    
-    <uses-sdk android:minSdkVersion="4"/>
-
-
-
-</manifest> 

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml (from rev 24737, projects/android/trunk/Orbot/AndroidManifest.xml)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5" android:versionCode="11">
+       
+       <uses-permission android:name="android.permission.INTERNET" />
+ 		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ 
+    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
+      
+        <activity android:name=".Orbot"
+                  android:theme="@android:style/Theme.NoTitleBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+          </intent-filter>
+            <intent-filter>
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+        </intent-filter>
+        
+         <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.REQUEST_HS_PORT" />
+            </intent-filter>
+             <intent-filter>
+                <category android:name="android.intent.category.DEFAULT" />
+            	<action android:name="org.torproject.android.START_TOR" />
+            </intent-filter>
+        </activity>
+      
+        <activity android:name=".SettingsPreferences"  android:label="@string/app_name"/>
+        <activity android:name=".AppManager"  android:label="@string/app_name"/>
+        <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
+      
+    	<service android:enabled="true"
+    		android:name=".service.TorService" 
+    		android:exported="false"
+    		>
+	            <intent-filter>
+	                <action android:name="org.torproject.android.service.ITorService" />
+	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />
+            </intent-filter>
+    	</service>
+    	
+    	
+    	<receiver android:name=".OnBootReceiver">
+			<intent-filter>
+				<action	android:name="android.intent.action.BOOT_COMPLETED" />
+				<category android:name="android.intent.category.HOME" />
+			</intent-filter>
+		</receiver>
+    	
+    </application>
+    
+    <uses-sdk android:minSdkVersion="4"/>
+
+
+
+</manifest> 

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.debug
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.debug	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.debug	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.torproject.android" android:versionName="1.0.4" android:versionCode="10">
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5.20110503a-dev-debug" android:versionCode="10">
        
        <uses-permission android:name="android.permission.INTERNET" />
 

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.production
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml.production	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/AndroidManifest.xml.production	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110416a-dev" android:versionCode="11">
+      package="org.torproject.android" android:versionName="0.2.2.25-orbot-alpha-1.0.5.20110503a" android:versionCode="11">
        
        <uses-permission android:name="android.permission.INTERNET" />
  		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD
===================================================================
--- projects/android/trunk/Orbot/BUILD	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,163 +0,0 @@
-
-// 2011/04/15 this document is a bit out of date. We will be updating to use
-// the standalone cross-compiler that is offered by the Android NDK soon
-
-This document explains how to properly build an Android package of Orbot from
-source. It covers building on Debian Lenny (5.0.3).
-
-Please install the following prerequisites (instructions for each follows):
-	ant: http://ant.apache.org/
-	Android OS SDK: http://source.android.com/download
-	droid-wrapper: http://github.com/tmurakam/droid-wrapper
-	libevent source (1.4.12-stable from svn)
-	Tor source (most recent git master branch)
-	Privoxy source (http://sourceforge.net/projects/ijbswa/)
-
-Install and prepare the Android OS SDK ( http://source.android.com/download )
-on Debian Lenny:
-
-	sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
-		libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
-		curl libncurses5-dev zlib1g-dev valgrind libtool automake \
-		ruby subversion
-	update-java-alternatives -s java-1.5.0-sun
-
-	curl http://android.git.kernel.org/repo >~/bin/repo
-	chmod a+x ~/bin/repo
-
-	mkdir ~/mydroid
-	cd ~/mydroid
-
-	repo init -u git://android.git.kernel.org/platform/manifest.git
-	repo sync
-
-	# Paste in key from http://source.android.com/download next...
-	gpg --import
-
-	cd ~/mydroid
-
-	# This takes a long while...
-	make
-
-Install droid-wrapper:
-
-	cd /tmp
-	git clone git://github.com/tmurakam/droid-wrapper.git
-	cd droid-wrapper
-	sudo make install
-
-zlib and OpenSSL are included with the Android OS SDK. You'll need to build
-libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
-
-	mkdir -p ~/mydroid/external/{libevent,tor,privoxy}
-
-We need to set to environment variables for droid-gcc:
-	export DROID_ROOT=~/mydroid/
-	export DROID_TARGET=generic
-
-Fetch and build Privoxy:
-	cd ~/mydroid/external/privoxy
-	wget http://sourceforge.net/projects/ijbswa/files/Sources/3.0.12%20%28stable%29/privoxy-3.0.12-stable-src.tar.gz/download
-	tar xzvf privoxy-3.0.12-stable-src.tar.gz
-	cd privoxy-3.0.12-stable
-	autoheader
-	autoconf
-	#need to disable setpgrp check in configure
-	export ac_cv_func_setpgrp_void=yes
-	#replace FOO with your actual username
-	CC=droid-gcc LD=droid-ld CPPFLAGS="-I/home/FOO/mydroid/external/zlib/" ./configure --host=arm-none-linux-gnueabi
-	#don't mind the "unrecognized option '-pthread'" error message that you'll see when you run make
-	make
-	
-Fetch and build libevent:
-
-	cd ~/mydroid/external/libevent
-	svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
-	export LIBEVENTDIR=`pwd`
-	./autogen.sh
-	# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
-	patch < /tmp/libevent-patch
-	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
-	make
-
-Copy over the libevent library:
-	cp .libs/libevent.a ~/mydroid/out/target/product/generic/obj/lib
-
-Fetch and build Tor:
-
-	export OPENSSLDIR=`cd ~/mydroid/external/openssl/include/ && pwd`
-	export ZLIBDIR=`cd ~/mydroid/external/zlib && pwd`
-
-	cd ~/mydroid/external/tor
-	git clone git://git.torproject.org/git/tor.git
-	cd tor/
-	./autogen.sh
-	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
-	--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
-	--with-zlib-dir=$ZLIBDIR --disable-asciidoc
-	make
-
-At this point, you'll have a Tor binary that can be run on an Android handset.
-This isn't enough though and we'll now sew up the binary into a small package
-that will handle basic Tor controlling features.
-
-We need to build our Java SOCKS library:
-
-	# If you're in Orbot's directory already...
-	cd ../asocks/
-	ant compile
-	ant jar
-	cp bin/jar/asocks.jar ../Orbot/libs
-
-We need to get the TorControl library for Java:
-(see also https://svn.torproject.org/svn/torctl/trunk/doc/howto.txt)
-
-	git clone git://git.torproject.org/git/jtorctl
-	cd jtorctl
-	mkdir bin
-	javac net/freehaven/tor/control/TorControlConnection.java -d bin
-	cd bin
-	jar cvf jtorctrl.jar *
-	cp jtorctrl.jar {Orbot Home}/libs
-	
-Finally, we'll make a proper Android package with ant and the Android App SDK:
-
-	export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
-	cd ../Orbot/
-	cp ~/mydroid/external/privoxy/privoxy-3.0.12-stable/privoxy assets/privoxy
-	cp ~/mydroid/external/tor/tor/src/or/tor assets/tor
-	$APP_SDK/android update project --name Orbot --target 3 --path .
-	ant release
-
-This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
-
-To produce a usable package, you'll need to sign the .apk. The basics on
-signing can be found on the Android developer site:
-
-	http://developer.android.com/guide/publishing/app-signing.html
-
-The three steps are quite simple. First, you'll generate a key. Secondly,
-you'll sign the application. Thirdly, you'll verify the the apk.
-
-Generating a signing key:
-
-	keytool -genkey -v -keystore my-release-key.keystore \
-		-alias orbots_key -keyalg RSA -validity 10000
-
-Sign the apk:
-
-	jarsigner -verbose -keystore my-release-key.keystore \
-		bin/Orbot-unsigned.apk orbots_key
-
-Verify the signature for the apk:
-
-	jarsigner -verify bin/Orbot-unsigned.apk
-	mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
-
-You can also GPG sign the apk and generate an .asc:
-
-	gpg -ab Orbot-signed-alpha.apk
-
-Now you should have a fully signed and production ready alpha release of Orbot!
-Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD (from rev 24737, projects/android/trunk/Orbot/BUILD)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/BUILD	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,162 @@
+
+// 2011/04/15 this document is a bit out of date. We will be updating to use
+// the standalone cross-compiler that is offered by the Android NDK soon
+
+This document explains how to properly build an Android package of Orbot from
+source. It covers building on Debian Lenny (5.0.3).
+
+Please install the following prerequisites (instructions for each follows):
+	ant: http://ant.apache.org/
+	Android OS SDK: http://source.android.com/download
+	droid-wrapper: http://github.com/tmurakam/droid-wrapper
+	libevent source (1.4.12-stable from svn)
+	Tor source (most recent git master branch)
+	Privoxy source (http://sourceforge.net/projects/ijbswa/)
+
+Install and prepare the Android OS SDK ( http://source.android.com/download )
+on Debian Lenny:
+
+	sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf \
+		libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip \
+		curl libncurses5-dev zlib1g-dev valgrind libtool automake \
+		ruby subversion
+	update-java-alternatives -s java-1.5.0-sun
+
+	curl http://android.git.kernel.org/repo >~/bin/repo
+	chmod a+x ~/bin/repo
+
+	mkdir ~/mydroid
+	cd ~/mydroid
+
+	repo init -u git://android.git.kernel.org/platform/manifest.git
+	repo sync
+
+	# Paste in key from http://source.android.com/download next...
+	gpg --import
+
+	cd ~/mydroid
+
+	# This takes a long while...
+	make
+
+Install droid-wrapper:
+
+	cd /tmp
+	git clone git://github.com/tmurakam/droid-wrapper.git
+	cd droid-wrapper
+	sudo make install
+
+zlib and OpenSSL are included with the Android OS SDK. You'll need to build
+libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
+
+	mkdir -p ~/mydroid/external/{libevent,tor,privoxy}
+
+We need to set to environment variables for droid-gcc:
+	export DROID_ROOT=~/mydroid/
+	export DROID_TARGET=generic
+
+Fetch and build Privoxy:
+	cd ~/mydroid/external/privoxy
+	wget http://sourceforge.net/projects/ijbswa/files/Sources/3.0.12%20%28stable%29/privoxy-3.0.12-stable-src.tar.gz/download
+	tar xzvf privoxy-3.0.12-stable-src.tar.gz
+	cd privoxy-3.0.12-stable
+	autoheader
+	autoconf
+	#need to disable setpgrp check in configure
+	export ac_cv_func_setpgrp_void=yes
+	#replace FOO with your actual username
+	CC=droid-gcc LD=droid-ld CPPFLAGS="-I/home/FOO/mydroid/external/zlib/" ./configure --host=arm-none-linux-gnueabi
+	#don't mind the "unrecognized option '-pthread'" error message that you'll see when you run make
+	make
+	
+Fetch and build libevent:
+
+	cd ~/mydroid/external/libevent
+	svn co https://levent.svn.sourceforge.net/svnroot/levent/tags/release-1.4.12-stable/libevent/ .
+	export LIBEVENTDIR=`cd $DROID_ROOT/external/libevent && pwd`
+	./autogen.sh
+	# Put the contents of http://pastebin.ca/1577207 in /tmp/libevent-patch
+	patch < /tmp/libevent-patch
+	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi
+	make
+
+Copy over the libevent library:
+	cp .libs/libevent.a $DROID_ROOT/out/target/product/generic/obj/lib
+
+Fetch and build Tor:
+
+	export OPENSSLDIR=`cd $DROID_ROOT/external/openssl/include/ && pwd`
+	export ZLIBDIR=`cd $DROID_ROOT/external/zlib && pwd`
+
+	cd $DROID_ROOT/external/tor
+	git clone git://git.torproject.org/git/tor.git
+	cd tor/
+	./autogen.sh
+	CC=droid-gcc LD=droid-ld ./configure --host=arm-none-linux-gnueabi \
+	--with-libevent-dir=$LIBEVENTDIR --with-openssl-dir=$OPENSSLDIR \
+	--with-zlib-dir=$ZLIBDIR --disable-asciidoc
+	make
+
+At this point, you'll have a Tor binary that can be run on an Android handset.
+You can verify the ARM binary was properly built using the following command:
+
+file src/or/tor
+	
+You should see something like:
+src/or/tor: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
+
+This isn't enough though and we'll now sew up the binary into a small package
+that will handle basic Tor controlling features.
+
+We need to get the TorControl library for Java:
+(see also https://svn.torproject.org/svn/torctl/trunk/doc/howto.txt)
+
+	git clone git://git.torproject.org/git/jtorctl
+	cd jtorctl
+	mkdir bin
+	javac net/freehaven/tor/control/TorControlConnection.java -d bin
+	cd bin
+	jar cvf jtorctrl.jar *
+	cp jtorctrl.jar {Orbot Home}/libs
+	
+Finally, we'll make a proper Android package with ant and the Android App SDK:
+
+	export APP_SDK=~/Documents/projects/android/android-sdk-linux_x86-1.5_r3/tools
+	cd ../Orbot/
+	cp $DROID_ROOT/external/privoxy/privoxy-3.0.12-stable/privoxy assets/privoxy
+	cp $DROID_ROOT/external/tor/tor/src/or/tor assets/tor
+	$APP_SDK/android update project --name Orbot --target 3 --path .
+	ant release
+
+This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
+
+To produce a usable package, you'll need to sign the .apk. The basics on
+signing can be found on the Android developer site:
+
+	http://developer.android.com/guide/publishing/app-signing.html
+
+The three steps are quite simple. First, you'll generate a key. Secondly,
+you'll sign the application. Thirdly, you'll verify the the apk.
+
+Generating a signing key:
+
+	keytool -genkey -v -keystore my-release-key.keystore \
+		-alias orbots_key -keyalg RSA -validity 10000
+
+Sign the apk:
+
+	jarsigner -verbose -keystore my-release-key.keystore \
+		bin/Orbot-unsigned.apk orbots_key
+
+Verify the signature for the apk:
+
+	jarsigner -verify bin/Orbot-unsigned.apk
+	mv bin/Orbot-unsigned.apk bin/Orbot-signed-alpha.apk
+
+You can also GPG sign the apk and generate an .asc:
+
+	gpg -ab Orbot-signed-alpha.apk
+
+Now you should have a fully signed and production ready alpha release of Orbot!
+Give bin/Orbot-signed-alpha.apk an install and send us bug reports!
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG
===================================================================
--- projects/android/trunk/Orbot/CHANGELOG	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,105 +0,0 @@
-NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
-
-1.0.5
-- Added new toolbar notifications and alerts for displaying notifications and Tor messages
-- Removed unused Socks client code from android.net package
-- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
-- Bundled iptables 1.4.7 for ARM instead of relying on installed version
-- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
-- Changed how settings changed are processed through the control port (batched instead of one by one)
-- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
-- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
-
-1.0.4
-- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
-- Fixed incorrect try to clear iptables rules for non-root devices
-- Fixed bug that stopped wizard helper from showing first time
-- Added new green notification icon when Tor is connected
-- Fixed app selector layout in settings
-- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
-- Fixed log screen touch disable tor bug
-- Debugged issues around network status change causing FC/crash
-- Added "Start on Boot" option
-
-1.0.3
-- Fixed spanish language issues with settings screen
-- Cleaned up logging, and moved most of it to debug output only
-- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
-- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
-- Hidden services now support through option in settings
-- removed double apostrophes from value/strings.xml files
-
-1.0.2
-- Added "check" yes/no dialog prompt
-- Debugged iptables/transprox settings on Android 1.6 and 2.2
-- Added proxy settings help screen and fixed processSettings() NPE
-
-1.0.1
-- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
- 
-1.0.0 - 2010-08-10
-- Added "Proxy Settings" help screen
-- Handle potential null pointers on process settings where service not yet active 
-
-0.0.9x - 2010-08-03
-- Revised Orbot install wizard
-- Integrated Tor 0.2.2.14 and iptables 4.x binary
-- Fixed "got root" detection method 
-- Fixed Per App Torification handling so it updates on exit from Settings screen
-
-0.0.8x - 2010-07-15
-- Updated Settings & App configuration screens
-- Changed progress dialog display
-- Significant application re-arch
-- Fixed force stop crash on install
-- Integrated Tor 0.2.2.13-alpha-dev binary
-- Fixed su shell cmd error handling & root perms issue
-- #1570: Added new setup wizard on install to clarify root / non-root capabilities 
-- #1716: Per-app traffic routing prefs not persisted
-- #1509: Help window is too big for the screen on android 1.6
-- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
-- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
-- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
-- #1272: Orbot should store Tor files in the cache
-- #1273: Info should mention anonymity problems with ProxySurf
-
-0.0.5x
-- #1388: Error parsing PID from output of "ps"
-- #1277, #1278: Enabling bridges issues
-- #1279: Misleading message when initialization is finished
-- #1292: Tor version in About screen is wrong
-
-0.0.3x - 2010-03-15
-- Added Start/Stop menu item for non-touch activation
-- Improved parsing and validation of settings screen
-- UI now compatible with landscape mode (#1276)
-- Added relay support for static/publicly accessible IP devices
-
-0.0.3a - 2010-02-07
-- Integrated iptables support for transparent proxying of outbound port
-  80 and DNS
-- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
-- New UI layout and graphics
-- Android settings screen for generated torrc file
-- Improved performance and error handling
-
-0.0.2a - 2009-11-30
-- Update user interface layout and graphics
-- Modified service launch, shutdown and handling
-- Improved event handler on Tor Control port callbacks
-- Added Help page
-
-0.0.2 - 2009-11-27
-- Major improvement to the user interface including relative layout for
-  different screens
-- New graphics resources
-- Implemented Tor Control Port using official Java library
-- Added 'clear' button to the log screen
-- Added 'save' and editable textbox for the settings screen
-- Moved screen navigation to a pop-up menu
-
-0.0.1-alpha - 2009-10-21
-- First code release
-- Major Features: Tor binary application is fully operational, UI:
-  Start/Stop Tor, View Message Log, View Settings (torrc)
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG (from rev 24737, projects/android/trunk/Orbot/CHANGELOG)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/CHANGELOG	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,111 @@
+NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
+
+1.0.5
+- fixed tor binary installation issue related to max resource size and compression
+- updated "start on boot" code to test for proper launch event
+- updated to Tor 0.2.2.25-alpha binary
+- moved back to single notification bar id to avoid double entries
+- cleaned up progress dialog and alert handling to avoid leaky windows
+- Merged __sporkbomb's patch for how transproxy all works; now does "everything but Tor"
+- Added new toolbar notifications and alerts for displaying notifications and Tor messages
+- Removed unused Socks client code from android.net package
+- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
+- Bundled iptables 1.4.7 for ARM instead of relying on installed version
+- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
+- Changed how settings changed are processed through the control port (batched instead of one by one)
+- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
+- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
+
+1.0.4
+- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
+- Fixed incorrect try to clear iptables rules for non-root devices
+- Fixed bug that stopped wizard helper from showing first time
+- Added new green notification icon when Tor is connected
+- Fixed app selector layout in settings
+- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
+- Fixed log screen touch disable tor bug
+- Debugged issues around network status change causing FC/crash
+- Added "Start on Boot" option
+
+1.0.3
+- Fixed spanish language issues with settings screen
+- Cleaned up logging, and moved most of it to debug output only
+- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
+- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
+- Hidden services now support through option in settings
+- removed double apostrophes from value/strings.xml files
+
+1.0.2
+- Added "check" yes/no dialog prompt
+- Debugged iptables/transprox settings on Android 1.6 and 2.2
+- Added proxy settings help screen and fixed processSettings() NPE
+
+1.0.1
+- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
+ 
+1.0.0 - 2010-08-10
+- Added "Proxy Settings" help screen
+- Handle potential null pointers on process settings where service not yet active 
+
+0.0.9x - 2010-08-03
+- Revised Orbot install wizard
+- Integrated Tor 0.2.2.14 and iptables 4.x binary
+- Fixed "got root" detection method 
+- Fixed Per App Torification handling so it updates on exit from Settings screen
+
+0.0.8x - 2010-07-15
+- Updated Settings & App configuration screens
+- Changed progress dialog display
+- Significant application re-arch
+- Fixed force stop crash on install
+- Integrated Tor 0.2.2.13-alpha-dev binary
+- Fixed su shell cmd error handling & root perms issue
+- #1570: Added new setup wizard on install to clarify root / non-root capabilities 
+- #1716: Per-app traffic routing prefs not persisted
+- #1509: Help window is too big for the screen on android 1.6
+- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
+- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
+- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
+- #1272: Orbot should store Tor files in the cache
+- #1273: Info should mention anonymity problems with ProxySurf
+
+0.0.5x
+- #1388: Error parsing PID from output of "ps"
+- #1277, #1278: Enabling bridges issues
+- #1279: Misleading message when initialization is finished
+- #1292: Tor version in About screen is wrong
+
+0.0.3x - 2010-03-15
+- Added Start/Stop menu item for non-touch activation
+- Improved parsing and validation of settings screen
+- UI now compatible with landscape mode (#1276)
+- Added relay support for static/publicly accessible IP devices
+
+0.0.3a - 2010-02-07
+- Integrated iptables support for transparent proxying of outbound port
+  80 and DNS
+- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
+- New UI layout and graphics
+- Android settings screen for generated torrc file
+- Improved performance and error handling
+
+0.0.2a - 2009-11-30
+- Update user interface layout and graphics
+- Modified service launch, shutdown and handling
+- Improved event handler on Tor Control port callbacks
+- Added Help page
+
+0.0.2 - 2009-11-27
+- Major improvement to the user interface including relative layout for
+  different screens
+- New graphics resources
+- Implemented Tor Control Port using official Java library
+- Added 'clear' button to the log screen
+- Added 'save' and editable textbox for the settings screen
+- Moved screen navigation to a pop-up menu
+
+0.0.1-alpha - 2009-10-21
+- First code release
+- Major Features: Tor binary application is fully operational, UI:
+  Start/Stop Tor, View Message Log, View Settings (torrc)
+

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/drawable/torerror.png (from rev 24738, projects/android/trunk/Orbot/res/drawable/torerror.png)
===================================================================
(Binary files differ)

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/layout/layout_about.xml
===================================================================
--- projects/android/trunk/Orbot/res/layout/layout_about.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/layout/layout_about.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -80,7 +80,7 @@
 				android:paddingLeft="15px"
 				android:textStyle="bold"
 				android:textColor="#00ff00" />	
-			<TextView android:text="Tor v0.2.2.14: https://www.torproject.org"
+			<TextView android:text="Tor v0.2.2.25: https://www.torproject.org"
 				android:layout_width="fill_parent" 
 				android:layout_height="wrap_content"
 				android:autoLink="web"

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc
===================================================================
--- projects/android/trunk/Orbot/res/raw/torrc	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,12 +0,0 @@
-SocksPort 9050
-SocksListenAddress 127.0.0.1
-SafeSocks 1
-Log notice stdout
-ControlPort 9051
-CookieAuthentication 1
-RelayBandwidthRate 20 KBytes
-RelayBandwidthBurst 20 KBytes
-UseBridges 0
-AutomapHostsOnResolve 1
-TransPort 9040
-DNSPort 5400

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc (from rev 24736, projects/android/trunk/Orbot/res/raw/torrc)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/raw/torrc	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,11 @@
+SocksPort 9050
+SafeSocks 1
+Log notice stdout
+ControlPort 9051
+CookieAuthentication 1
+RelayBandwidthRate 20 KBytes
+RelayBandwidthBurst 20 KBytes
+UseBridges 0
+AutomapHostsOnResolve 1
+TransPort 9040
+DNSPort 5400

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
-    
+             <string name="app_version">1.0.5</string>
+     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>
     <string name="secure_default_web_url">https://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ar/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ar/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ar/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">اوربوت (Orbot)</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ca/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ca/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ca/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-de/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-de/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-de/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-es/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-es/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-es/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-fa/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-fa/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-fa/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">اوربات</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-mk/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-mk/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-mk/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Орбот</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nb/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-nb/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nb/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
   
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nl/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-nl/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-nl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pl/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-pl/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pl/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pt/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-pt/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-pt/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>
     <string name="secure_default_web_url">https://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ru/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-ru/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-ru/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-sv/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-sv/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-sv/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-             <string name="app_version">1.0.5-dev</string>
+             <string name="app_version">1.0.5</string>
      
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Modified: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-zh/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values-zh/strings.xml	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/res/values-zh/strings.xml	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">Orbot</string>
-        <string name="app_version">1.0.5-dev</string>
+        <string name="app_version">1.0.5</string>
     
     <string name="internal_web_url">http://orbot/</string>
     <string name="default_web_url">http://check.torproject.org</string>

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/OnBootReceiver.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,19 +0,0 @@
-package org.torproject.android;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-public class OnBootReceiver extends BroadcastReceiver {
-	
-	@Override
-	public void onReceive(Context context, Intent intent) {
-		Intent serviceIntent = new Intent();
-		serviceIntent.setAction("org.torproject.android.service.TorService");
-		context.startService(serviceIntent);
-
-	}
-
-	
-}
-

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/OnBootReceiver.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/OnBootReceiver.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,29 @@
+package org.torproject.android;
+
+import org.torproject.android.service.TorService;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+public class OnBootReceiver extends BroadcastReceiver {
+	
+	@Override
+	public void onReceive(Context context, Intent intent) {
+
+		if (intent.getAction() != null 
+				&& intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
+		{
+			//Phase 1: Launch a service
+			Intent service = new Intent();
+			service.setAction("onboot");
+			service.setClass(context, TorService.class);
+			context.startService(service);
+		}
+	
+		
+	}
+
+	
+}
+

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,830 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-package org.torproject.android;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.util.StringTokenizer;
-
-import org.torproject.android.service.ITorService;
-import org.torproject.android.service.ITorServiceCallback;
-import org.torproject.android.service.TorServiceConstants;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.NotificationManager;
-import android.app.ProgressDialog;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLongClickListener;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-public class Orbot extends Activity implements OnLongClickListener, TorConstants
-{
-	
-	/* Useful UI bits */
-	private TextView lblStatus = null; //the main text display widget
-	private ImageView imgStatus = null; //the main touchable image for activating Orbot
-	private ProgressDialog progressDialog;
-	private MenuItem mItemOnOff = null;
-	
-	/* Some tracking bits */
-	private int torStatus = STATUS_READY; //latest status reported from the tor service
-	
-	/* Tor Service interaction */
-		/* The primary interface we will be calling on the service. */
-    ITorService mService = null;
-	private boolean autoStartOnBind = false;
-
-	SharedPreferences prefs;
-	
-    /** Called when the activity is first created. */
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        
-      //if Tor binary is not running, then start the service up
-		startService(new Intent(INTENT_TOR_SERVICE));
-		bindService ();
-		
-
-    	setTheme(android.R.style.Theme_Black_NoTitleBar);
-    	
-    	prefs = PreferenceManager.getDefaultSharedPreferences(this);
-    	
-    	setContentView(R.layout.layout_main);
-		
-    	lblStatus = (TextView)findViewById(R.id.lblStatus);
-		lblStatus.setOnLongClickListener(this);
-    	imgStatus = (ImageView)findViewById(R.id.imgStatus);
-    	imgStatus.setOnLongClickListener(this);
-    }
-    
-   /*
-    * Create the UI Options Menu (non-Javadoc)
-    * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
-    */
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-        
-        MenuItem mItem = null;
-        
-        mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
-        mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
-        mItemOnOff.setAlphabeticShortcut('t');
-        
-        mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
-        mItem.setIcon(R.drawable.ic_menu_register);
-       
-        mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
-        mItem.setIcon(R.drawable.ic_menu_check);
-      
-        mItem =  menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
-        mItem.setIcon(R.drawable.ic_menu_about);
-        
-        mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
-        mItem.setIcon(R.drawable.ic_menu_goto);
-       
-        mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
-        mItem.setIcon(R.drawable.ic_menu_exit);
-       
-        
-        return true;
-    }
-    
-
-    private void showAbout ()
-	{
-		
-		LayoutInflater li = LayoutInflater.from(this);
-        View view = li.inflate(R.layout.layout_about, null); 
-        
-        TextView versionName = (TextView)view.findViewById(R.id.versionName);
-        versionName.setText(R.string.app_version);    
-        
-		new AlertDialog.Builder(this)
-        .setTitle(getString(R.string.button_about))
-        .setView(view)
-        .show();
-	}
-    
-    /* When a menu item is selected launch the appropriate view or activity
-     * (non-Javadoc)
-	 * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
-	 */
-	public boolean onMenuItemSelected(int featureId, MenuItem item) {
-		
-		super.onMenuItemSelected(featureId, item);
-		
-		if (item.getItemId() == 1)
-		{
-			
-			try
-			{
-				
-				if (mService == null)
-				{
-				
-				}
-				else if (mService.getStatus() == STATUS_READY)
-				{
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-					startTor();
-					
-				}
-				else
-				{
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-					stopTor();
-					
-				}
-				
-			}
-			catch (RemoteException re)
-			{
-				Log.w(TAG, "Unable to start/top Tor from menu UI", re);
-			}
-		}
-		else if (item.getItemId() == 4)
-		{
-			showSettings();
-		}
-		else if (item.getItemId() == 3)
-		{
-			showHelp();
-		}
-		else if (item.getItemId() == 7)
-		{
-			doTorCheck();
-		}
-		else if (item.getItemId() == 8)
-		{
-			//exit app
-			doExit();
-			
-			
-		}
-		else if (item.getItemId() == 6)
-		{
-			showAbout();
-			
-			
-		}
-		
-        return true;
-	}
-	
-	private void doExit ()
-	{
-		try {
-		
-			stopTor();
-			
-			stopService(new Intent(ITorService.class.getName()));
-			
-        	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-			mNotificationManager.cancelAll();
-		
-			
-		} catch (RemoteException e) {
-			Log.w(TAG, e);
-		}
-		
-		finish();
-		
-	}
-	
-	/* Return to the main view when the back key is pressed
-	 * (non-Javadoc)
-	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
-	 */
-	/*
-	public boolean onKeyDown(int keyCode, KeyEvent event){
-		
-		if(keyCode==KeyEvent.KEYCODE_BACK){
-
-			if(currentView != R.layout.layout_main){
-					
-					showMain ();
-					return true;
-			}
-			else{
-				return super.onKeyDown(keyCode, event);
-			}
-		}
-	
-		return super.onKeyDown(keyCode, event);
-		
-	}*/
- 
-    /* (non-Javadoc)
-	 * @see android.app.Activity#onPause()
-	 */
-	protected void onPause() {
-		super.onPause();
-		
-
-	}
-
-	public void onSaveInstanceState(Bundle savedInstanceState) {
-		  // Save UI state changes to the savedInstanceState.
-		  // This bundle will be passed to onCreate if the process is
-		  // killed and restarted.
-		  // etc.
-		  super.onSaveInstanceState(savedInstanceState);
-		}
-	
-	public void onRestoreInstanceState(Bundle savedInstanceState) {
-	  super.onRestoreInstanceState(savedInstanceState);
-	  // Restore UI state from the savedInstanceState.
-	  // This bundle has also been passed to onCreate.
-	 
-	}
-	
-	private void doTorCheck ()
-	{
-		
-		DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-			
-		    @Override
-		    public void onClick(DialogInterface dialog, int which) {
-		        switch (which){
-		        case DialogInterface.BUTTON_POSITIVE:
-		            
-		    		openBrowser(URL_TOR_CHECK);
-
-					
-		        	
-		            break;
-
-		        case DialogInterface.BUTTON_NEGATIVE:
-		        
-		        	//do nothing
-		            break;
-		        }
-		    }
-		};
-
-		AlertDialog.Builder builder = new AlertDialog.Builder(this);
-		builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
-		    .setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
-
-	}
-	
-	private void enableHiddenServicePort (int hsPort)
-	{
-		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		Editor pEdit = prefs.edit();
-		
-		String hsPortString = prefs.getString("pref_hs_ports", "");
-		
-		if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
-			hsPortString += ',' + hsPort;
-		else
-			hsPortString = hsPort + "";
-		
-		pEdit.putString("pref_hs_ports", hsPortString);
-		pEdit.putBoolean("pref_hs_enable", true);
-		
-		pEdit.commit();
-		
-		String onionHostname = prefs.getString("pref_hs_hostname","");
-
-		Intent nResult = new Intent();
-		nResult.putExtra("hs_host", onionHostname);
-		setResult(RESULT_OK, nResult);
-	
-	}
-	
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onResume()
-	 */
-	protected void onResume() {
-		super.onResume();
-		
-		 updateStatus("");
-		 
-		if (getIntent() == null)
-			return;
-		
-		String action = getIntent().getAction();
-		
-		if (action == null)
-			return;
-		
-		if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
-		{
-			
-			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-			    @Override
-			    public void onClick(DialogInterface dialog, int which) {
-			        switch (which){
-			        case DialogInterface.BUTTON_POSITIVE:
-			            
-			        	int hsPort = getIntent().getIntExtra("hs_port", -1);
-						
-			        	enableHiddenServicePort (hsPort);
-			        	
-						finish();
-						
-			        	
-			            break;
-
-			        case DialogInterface.BUTTON_NEGATIVE:
-			            //No button clicked
-			        	finish();
-			            break;
-			        }
-			    }
-			};
-
-        	int hsPort = getIntent().getIntExtra("hs_port", -1);
-
-			String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
-			AlertDialog.Builder builder = new AlertDialog.Builder(this);
-			builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
-			    .setNegativeButton("Deny", dialogClickListener).show();
-			
-		
-		}
-		else if (action.equals("org.torproject.android.START_TOR"))
-		{
-			autoStartOnBind = true;
-			
-			if (mService == null)
-				bindService();
-			
-		}
-		else
-		{
-			
-			//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
-	    
-			NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-			mNotificationManager.cancelAll();
-			
-			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-	
-			boolean showWizard = prefs.getBoolean("show_wizard",true);
-			
-			if (showWizard)
-			{
-			
-				Editor pEdit = prefs.edit();
-				
-				pEdit.putBoolean("show_wizard",false);
-				
-				pEdit.commit();
-				
-			    new WizardHelper(this).showWizard();
-
-			}
-			
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStart()
-	 */
-	protected void onStart() {
-		super.onStart();
-		
-		
-		updateStatus ("");
-		
-
-	}
-
-	/* (non-Javadoc)
-	 * @see android.app.Activity#onStop()
-	 */
-	protected void onStop() {
-		super.onStop();
-		
-		unbindService();
-	}
-
-
-
-	/*
-	 * Launch the system activity for Uri viewing with the provided url
-	 */
-	private void openBrowser(String url)
-	{
-		startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
-		
-	}
-	
-	
-	
-	/*
-	 * Show the help view - a popup dialog
-	 */
-	private void showHelp ()
-	{
-		
-       new WizardHelper(this).showWizard();
-	}
-	
-	
-    /*
-     * Load the basic settings application to display torrc
-     */
-	private void showSettings ()
-	{
-		
-		startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
-	}
-	
-	
-	@Override
-	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-		super.onActivityResult(requestCode, resultCode, data);
-		
-		if (requestCode == 1 && resultCode == 1010 && mService != null)
-		{
-			new ProcessSettingsAsyncTask().execute(mService);	
-		}
-	}
-	
-	private AlertDialog aDialog = null;
-	
-	private void showAlert(String title, String msg, boolean button)
-	{
-		if (aDialog != null)
-			aDialog.dismiss();
-		
-		 if (button)
-		 {
-			 aDialog = new AlertDialog.Builder(this)
-		 .setIcon(R.drawable.icon)
-         .setTitle(title)
-         .setMessage(msg)
-         .setPositiveButton(android.R.string.ok, null)
-         .show();
-		 }
-		 else
-		 {
-			 aDialog = new AlertDialog.Builder(this)
-			 .setIcon(R.drawable.icon)
-	         .setTitle(title)
-	         .setMessage(msg)
-	         .show();
-		 }
-	}
-    /*
-     * Set the state of the running/not running graphic and label
-     */
-    public void updateStatus (String torServiceMsg)
-    {
-    	try
-    	{
-    		
-    		if (mService != null)
-    			torStatus = mService.getStatus();
-    		
-	    	if (imgStatus != null)
-	    	{
-	    		
-		    	if (torStatus == STATUS_ON)
-		    	{
-		    		imgStatus.setImageResource(R.drawable.toron);
-		    	
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		
-		    		String lblMsg = getString(R.string.status_activated);
-		    		//+ "\n" + torServiceMsg;
-		    		
-		    		lblStatus.setText(lblMsg);
-		    		
-		    		if (torServiceMsg.length() > 0)
-		    			showAlert("Update", torServiceMsg, false);
-		    		
-		    		boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
-		    		
-		    		if (showFirstTime)
-		    		{
-		    		
-		    			Editor pEdit = prefs.edit();
-		    			
-		    			pEdit.putBoolean("connect_first_time",false);
-		    			
-		    			pEdit.commit();
-		    			
-		    			showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
-		    			
-		    		}
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-
-		    	}
-		    	else if (torStatus == STATUS_CONNECTING)
-		    	{
-		    		
-		    		imgStatus.setImageResource(R.drawable.torstarting);
-		    		if (progressDialog == null)
-		    		{
-		    			progressDialog =ProgressDialog.show(this, "", getString(R.string.status_starting_up));
-		    		}
-		    		else
-		    			progressDialog.setMessage(torServiceMsg);
-		    		
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_stop);
-		    			
-		    	}
-		    	else if (torStatus == STATUS_OFF)
-		    	{
-		    		imgStatus.setImageResource(R.drawable.toroff);
-		    		
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		lblStatus.setText(getString(R.string.status_shutting_down));
-		    			
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-		    	}
-		    	else
-		    	{
-
-		    		if (progressDialog != null)
-		    		{
-		    			progressDialog.dismiss();
-		    			progressDialog = null;
-		    		}
-		    		
-		    		
-		    		imgStatus.setImageResource(R.drawable.toroff);
-		    		lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
-		    		
-		    		if (mItemOnOff != null)
-		    			mItemOnOff.setTitle(R.string.menu_start);
-		    		
-		    	}
-	    	}
-		    	
-    	}
-    	catch (RemoteException e)
-    	{
-    		Log.e(TAG,"remote exception updating status",e);
-    	}
-    	
-        
-    }
-  
-    private void startTor () throws RemoteException
-    {
-    	
-    	mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
-		
-		imgStatus.setImageResource(R.drawable.torstarting);
-		lblStatus.setText(getString(R.string.status_starting_up));
-		
-		Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
-    	mHandler.sendMessage(msg);
-    	
-    	
-    	
-    }
-    
-    private void stopTor () throws RemoteException
-    {
-    	if (mService != null)
-    	{
-    		mService.setProfile(TorServiceConstants.PROFILE_OFF);
-    		Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
-    		mHandler.sendMessage(msg);
-    	}
-    	
-       // stopService(new Intent(ITorService.class.getName()));
-	
-    	
-    }
-    
-	/*
-     * (non-Javadoc)
-     * @see android.view.View.OnClickListener#onClick(android.view.View)
-     */
-	public boolean onLongClick(View view) {
-		
-		
-		try
-		{
-			
-			if (mService == null)
-			{
-			
-			}
-			else if (mService.getStatus() == STATUS_READY)
-			{
-				
-				startTor();
-				
-			}
-			else
-			{
-				
-				stopTor();
-				
-			}
-			
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG,"error onclick",e);
-		}
-			
-		return true;
-	}
-	
-
-    /**
-     * This implementation is used to receive callbacks from the remote
-     * service.
-     */
-    private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
-        /**
-         * This is called by the remote service regularly to tell us about
-         * new values.  Note that IPC calls are dispatched through a thread
-         * pool running in each process, so the code executing here will
-         * NOT be running in our main thread like most other things -- so,
-         * to update the UI, we need to use a Handler to hop over there.
-         */
-        public void statusChanged(String value) {
-           
-        	Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
-        	msg.getData().putString(HANDLER_TOR_MSG, value);
-        	mHandler.sendMessage(msg);
-        }
-
-		@Override
-		public void logMessage(String value) throws RemoteException {
-			
-			Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
-        	msg.getData().putString(HANDLER_TOR_MSG, value);
-        	mHandler.sendMessage(msg);
-			
-		}
-    };
-    
-
-    private Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case TorServiceConstants.STATUS_MSG:
-
-                	String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
-                	
-                	updateStatus(torServiceMsg);
-                	
-                    break;
-                case TorServiceConstants.LOG_MSG:
-                	
-                	
-                    break;
-                case TorServiceConstants.ENABLE_TOR_MSG:
-                	
-                	if (progressDialog == null)
-					{
-						progressDialog = ProgressDialog.show(Orbot.this, "", getString(R.string.status_starting_up));
-					}
-    	
-                	
-                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
-                	
-                	break;
-                case TorServiceConstants.DISABLE_TOR_MSG:
-                	
-                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
-                	
-                	break;
-                		
-                default:
-                    super.handleMessage(msg);
-            }
-        }
-        
-    };
-
-    
-    /**
-     * Class for interacting with the main interface of the service.
-     */
-    private ServiceConnection mConnection = new ServiceConnection() {
-        public void onServiceConnected(ComponentName className,
-                IBinder service) {
-            // This is called when the connection with the service has been
-            // established, giving us the service object we can use to
-            // interact with the service.  We are communicating with our
-            // service through an IDL interface, so get a client-side
-            // representation of that from the raw service object.
-            mService = ITorService.Stub.asInterface(service);
-       
-            // We want to monitor the service for as long as we are
-            // connected to it.
-            try {
-                mService.registerCallback(mCallback);
-           
-                updateStatus("");
-                
-                if (autoStartOnBind)
-                {
-                	autoStartOnBind = false;
-                	
-                	startTor();
-                	
-                }
-            
-            } catch (RemoteException e) {
-                // In this case the service has crashed before we could even
-                // do anything with it; we can count on soon being
-                // disconnected (and then reconnected if it can be restarted)
-                // so there is no need to do anything here.
-            	Log.d(TAG,"error registering callback to service",e);
-            }
-            
-
-
-           
-       
-          
-        }
-
-        public void onServiceDisconnected(ComponentName className) {
-            // This is called when the connection with the service has been
-            // unexpectedly disconnected -- that is, its process crashed.
-            mService = null;
-          
-        }
-    };
-    
-    boolean mIsBound = false;
-    
-    private void bindService ()
-    {
-    	 bindService(new Intent(ITorService.class.getName()),
-                 mConnection, Context.BIND_AUTO_CREATE);
-    	 
-    	 mIsBound = true;
-    
-    	
-    	
-    }
-    
-    private void unbindService ()
-    {
-    	if (mIsBound) {
-            // If we have received the service, and hence registered with
-            // it, then now is the time to unregister.
-            if (mService != null) {
-                try {
-                    mService.unregisterCallback(mCallback);
-                    
-                } catch (RemoteException e) {
-                    // There is nothing special we need to do if the service
-                    // has crashed.
-                }
-            }
-            
-            // Detach our existing connection.
-            unbindService(mConnection);
-            mIsBound = false;
-            
-        }
-    }
-	
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/Orbot.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,846 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+
+package org.torproject.android;
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.StringTokenizer;
+
+import org.torproject.android.service.ITorService;
+import org.torproject.android.service.ITorServiceCallback;
+import org.torproject.android.service.TorServiceConstants;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.NotificationManager;
+import android.app.ProgressDialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class Orbot extends Activity implements OnLongClickListener, TorConstants
+{
+	
+	/* Useful UI bits */
+	private TextView lblStatus = null; //the main text display widget
+	private ImageView imgStatus = null; //the main touchable image for activating Orbot
+	private ProgressDialog progressDialog;
+	private MenuItem mItemOnOff = null;
+	
+	/* Some tracking bits */
+	private int torStatus = STATUS_READY; //latest status reported from the tor service
+	
+	/* Tor Service interaction */
+		/* The primary interface we will be calling on the service. */
+    ITorService mService = null;
+	private boolean autoStartOnBind = false;
+
+	SharedPreferences prefs;
+	
+    /** Called when the activity is first created. */
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+      //if Tor binary is not running, then start the service up
+		startService(new Intent(INTENT_TOR_SERVICE));
+		
+
+    	setTheme(android.R.style.Theme_Black_NoTitleBar);
+    	
+    	prefs = PreferenceManager.getDefaultSharedPreferences(this);
+    	
+    	setContentView(R.layout.layout_main);
+		
+    	lblStatus = (TextView)findViewById(R.id.lblStatus);
+		lblStatus.setOnLongClickListener(this);
+    	imgStatus = (ImageView)findViewById(R.id.imgStatus);
+    	imgStatus.setOnLongClickListener(this);
+    	
+    	
+
+    }
+    
+   /*
+    * Create the UI Options Menu (non-Javadoc)
+    * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
+    */
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+        
+        MenuItem mItem = null;
+        
+        mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
+        mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
+        mItemOnOff.setAlphabeticShortcut('t');
+        
+        mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
+        mItem.setIcon(R.drawable.ic_menu_register);
+       
+        mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
+        mItem.setIcon(R.drawable.ic_menu_check);
+      
+        mItem =  menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
+        mItem.setIcon(R.drawable.ic_menu_about);
+        
+        mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
+        mItem.setIcon(R.drawable.ic_menu_goto);
+       
+        mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
+        mItem.setIcon(R.drawable.ic_menu_exit);
+       
+        
+        return true;
+    }
+    
+
+    private void showAbout ()
+	{
+		
+		LayoutInflater li = LayoutInflater.from(this);
+        View view = li.inflate(R.layout.layout_about, null); 
+        
+        TextView versionName = (TextView)view.findViewById(R.id.versionName);
+        versionName.setText(R.string.app_version);    
+        
+		new AlertDialog.Builder(this)
+        .setTitle(getString(R.string.button_about))
+        .setView(view)
+        .show();
+	}
+    
+    /* When a menu item is selected launch the appropriate view or activity
+     * (non-Javadoc)
+	 * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
+	 */
+	public boolean onMenuItemSelected(int featureId, MenuItem item) {
+		
+		super.onMenuItemSelected(featureId, item);
+		
+		if (item.getItemId() == 1)
+		{
+			
+			try
+			{
+				
+				if (mService == null)
+				{
+				
+				}
+				else if (mService.getStatus() == STATUS_READY)
+				{
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+					startTor();
+					
+				}
+				else
+				{
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+					stopTor();
+					
+				}
+				
+			}
+			catch (RemoteException re)
+			{
+				Log.w(TAG, "Unable to start/top Tor from menu UI", re);
+			}
+		}
+		else if (item.getItemId() == 4)
+		{
+			showSettings();
+		}
+		else if (item.getItemId() == 3)
+		{
+			showHelp();
+		}
+		else if (item.getItemId() == 7)
+		{
+			doTorCheck();
+		}
+		else if (item.getItemId() == 8)
+		{
+			//exit app
+			doExit();
+			
+			
+		}
+		else if (item.getItemId() == 6)
+		{
+			showAbout();
+			
+			
+		}
+		
+        return true;
+	}
+	
+	private void doExit ()
+	{
+		try {
+		
+			stopTor();
+			
+			stopService(new Intent(ITorService.class.getName()));
+			
+        	NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+			mNotificationManager.cancelAll();
+		
+			
+		} catch (RemoteException e) {
+			Log.w(TAG, e);
+		}
+		
+		finish();
+		
+	}
+	
+	/* Return to the main view when the back key is pressed
+	 * (non-Javadoc)
+	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
+	 */
+	/*
+	public boolean onKeyDown(int keyCode, KeyEvent event){
+		
+		if(keyCode==KeyEvent.KEYCODE_BACK){
+
+			if(currentView != R.layout.layout_main){
+					
+					showMain ();
+					return true;
+			}
+			else{
+				return super.onKeyDown(keyCode, event);
+			}
+		}
+	
+		return super.onKeyDown(keyCode, event);
+		
+	}*/
+ 
+    /* (non-Javadoc)
+	 * @see android.app.Activity#onPause()
+	 */
+	protected void onPause() {
+		super.onPause();
+		
+		hideProgressDialog();
+
+		if (aDialog != null)
+			aDialog.dismiss();
+	}
+
+	public void onSaveInstanceState(Bundle savedInstanceState) {
+		  // Save UI state changes to the savedInstanceState.
+		  // This bundle will be passed to onCreate if the process is
+		  // killed and restarted.
+		  // etc.
+		  super.onSaveInstanceState(savedInstanceState);
+		}
+	
+	public void onRestoreInstanceState(Bundle savedInstanceState) {
+	  super.onRestoreInstanceState(savedInstanceState);
+	  // Restore UI state from the savedInstanceState.
+	  // This bundle has also been passed to onCreate.
+	 
+	}
+	
+	private void doTorCheck ()
+	{
+		
+		DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+			
+		    @Override
+		    public void onClick(DialogInterface dialog, int which) {
+		        switch (which){
+		        case DialogInterface.BUTTON_POSITIVE:
+		            
+		    		openBrowser(URL_TOR_CHECK);
+
+					
+		        	
+		            break;
+
+		        case DialogInterface.BUTTON_NEGATIVE:
+		        
+		        	//do nothing
+		            break;
+		        }
+		    }
+		};
+
+		AlertDialog.Builder builder = new AlertDialog.Builder(this);
+		builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
+		    .setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
+
+	}
+	
+	private void enableHiddenServicePort (int hsPort)
+	{
+		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		Editor pEdit = prefs.edit();
+		
+		String hsPortString = prefs.getString("pref_hs_ports", "");
+		
+		if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
+			hsPortString += ',' + hsPort;
+		else
+			hsPortString = hsPort + "";
+		
+		pEdit.putString("pref_hs_ports", hsPortString);
+		pEdit.putBoolean("pref_hs_enable", true);
+		
+		pEdit.commit();
+		
+		String onionHostname = prefs.getString("pref_hs_hostname","");
+
+		Intent nResult = new Intent();
+		nResult.putExtra("hs_host", onionHostname);
+		setResult(RESULT_OK, nResult);
+	
+	}
+	
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onResume()
+	 */
+	protected void onResume() {
+		super.onResume();
+		
+		bindService();
+		
+		 updateStatus("");
+		 
+		if (getIntent() == null)
+			return;
+		
+		String action = getIntent().getAction();
+		
+		if (action == null)
+			return;
+		
+		if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
+		{
+			
+			DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
+			    @Override
+			    public void onClick(DialogInterface dialog, int which) {
+			        switch (which){
+			        case DialogInterface.BUTTON_POSITIVE:
+			            
+			        	int hsPort = getIntent().getIntExtra("hs_port", -1);
+						
+			        	enableHiddenServicePort (hsPort);
+			        	
+						finish();
+						
+			        	
+			            break;
+
+			        case DialogInterface.BUTTON_NEGATIVE:
+			            //No button clicked
+			        	finish();
+			            break;
+			        }
+			    }
+			};
+
+        	int hsPort = getIntent().getIntExtra("hs_port", -1);
+
+			String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
+			AlertDialog.Builder builder = new AlertDialog.Builder(this);
+			builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
+			    .setNegativeButton("Deny", dialogClickListener).show();
+			
+		
+		}
+		else if (action.equals("org.torproject.android.START_TOR"))
+		{
+			autoStartOnBind = true;
+			
+			if (mService == null)
+				bindService();
+			
+		}
+		else
+		{
+			
+			//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
+	    
+			NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+			mNotificationManager.cancelAll();
+			
+			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+	
+			boolean showWizard = prefs.getBoolean("show_wizard",true);
+			
+			if (showWizard)
+			{
+			
+				Editor pEdit = prefs.edit();
+				
+				pEdit.putBoolean("show_wizard",false);
+				
+				pEdit.commit();
+				
+			    new WizardHelper(this).showWizard();
+
+			}
+			
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStart()
+	 */
+	protected void onStart() {
+		super.onStart();
+		
+		
+		updateStatus ("");
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see android.app.Activity#onStop()
+	 */
+	protected void onStop() {
+		super.onStop();
+		
+		//unbindService();
+	}
+
+
+
+	/*
+	 * Launch the system activity for Uri viewing with the provided url
+	 */
+	private void openBrowser(String url)
+	{
+		startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+		
+	}
+	
+	
+	
+	/*
+	 * Show the help view - a popup dialog
+	 */
+	private void showHelp ()
+	{
+		
+       new WizardHelper(this).showWizard();
+	}
+	
+	
+    /*
+     * Load the basic settings application to display torrc
+     */
+	private void showSettings ()
+	{
+		
+		startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
+	}
+	
+	
+	@Override
+	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+		super.onActivityResult(requestCode, resultCode, data);
+		
+		if (requestCode == 1 && resultCode == 1010 && mService != null)
+		{
+			new ProcessSettingsAsyncTask().execute(mService);	
+		}
+	}
+	
+	AlertDialog aDialog = null;
+	
+	private void showAlert(String title, String msg, boolean button)
+	{
+		try
+		{
+			if (aDialog != null && aDialog.isShowing())
+				aDialog.dismiss();
+		}
+		catch (Exception e){} //swallow any errors
+		
+		 if (button)
+		 {
+				aDialog = new AlertDialog.Builder(this)
+			 .setIcon(R.drawable.icon)
+	         .setTitle(title)
+	         .setMessage(msg)
+	         .setPositiveButton(android.R.string.ok, null)
+	         .show();
+		 }
+		 else
+		 {
+			 aDialog = new AlertDialog.Builder(this)
+			 .setIcon(R.drawable.icon)
+	         .setTitle(title)
+	         .setMessage(msg)
+	         .show();
+		 }
+	
+		 aDialog.setCanceledOnTouchOutside(true);
+	}
+    /*
+     * Set the state of the running/not running graphic and label
+     */
+    public void updateStatus (String torServiceMsg)
+    {
+    	try
+    	{
+    		
+    		if (mService != null)
+    			torStatus = mService.getStatus();
+    		
+	    	if (imgStatus != null)
+	    	{
+	    		
+		    	if (torStatus == STATUS_ON)
+		    	{
+		    		imgStatus.setImageResource(R.drawable.toron);
+
+		    		hideProgressDialog();
+		    		
+		    		String lblMsg = getString(R.string.status_activated);
+		    		//+ "\n" + torServiceMsg;
+		    		
+		    		lblStatus.setText(lblMsg);
+		    		
+		    		if (torServiceMsg.length() > 0)
+		    			showAlert("Update", torServiceMsg, false);
+		    		
+		    		boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
+		    		
+		    		if (showFirstTime)
+		    		{
+		    		
+		    			Editor pEdit = prefs.edit();
+		    			
+		    			pEdit.putBoolean("connect_first_time",false);
+		    			
+		    			pEdit.commit();
+		    			
+		    			showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
+		    			
+		    		}
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+		    		
+
+		    	}
+		    	else if (torStatus == STATUS_CONNECTING)
+		    	{
+		    		
+		    		imgStatus.setImageResource(R.drawable.torstarting);
+		    		
+		    		if (progressDialog != null)
+		    			progressDialog.setMessage(torServiceMsg);
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_stop);
+		    			
+		    	}
+		    	else if (torStatus == STATUS_OFF)
+		    	{
+		    		imgStatus.setImageResource(R.drawable.toroff);
+		    		
+
+		    		hideProgressDialog();
+		    		
+		    		lblStatus.setText(getString(R.string.status_shutting_down));
+		    			
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+		    	}
+		    	else
+		    	{
+
+
+		    		hideProgressDialog();
+		    		
+		    		imgStatus.setImageResource(R.drawable.toroff);
+		    		lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
+		    		
+		    		if (mItemOnOff != null)
+		    			mItemOnOff.setTitle(R.string.menu_start);
+		    		
+		    	}
+	    	}
+		    	
+    	}
+    	catch (RemoteException e)
+    	{
+    		Log.e(TAG,"remote exception updating status",e);
+    	}
+    	
+        
+    }
+  
+    private void startTor () throws RemoteException
+    {
+    	
+    	bindService();
+    	
+    	mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
+		
+		imgStatus.setImageResource(R.drawable.torstarting);
+		lblStatus.setText(getString(R.string.status_starting_up));
+		
+		Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
+    	mHandler.sendMessage(msg);
+    	
+    	
+    	
+    }
+    
+    private void stopTor () throws RemoteException
+    {
+    	if (mService != null)
+    	{
+    		mService.setProfile(TorServiceConstants.PROFILE_OFF);
+    		Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
+    		mHandler.sendMessage(msg);
+    	}
+    	
+     
+    }
+    
+	/*
+     * (non-Javadoc)
+     * @see android.view.View.OnClickListener#onClick(android.view.View)
+     */
+	public boolean onLongClick(View view) {
+		
+		
+		try
+		{
+			
+			if (mService == null)
+			{
+			
+			}
+			else if (mService.getStatus() == STATUS_READY)
+			{
+				
+				createProgressDialog(getString(R.string.status_starting_up));
+
+				startTor();
+			}
+			else
+			{
+				
+				stopTor();
+				
+			}
+			
+		}
+		catch (Exception e)
+		{
+			Log.d(TAG,"error onclick",e);
+		}
+			
+		return true;
+	}
+	
+
+    /**
+     * This implementation is used to receive callbacks from the remote
+     * service.
+     */
+    private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
+        /**
+         * This is called by the remote service regularly to tell us about
+         * new values.  Note that IPC calls are dispatched through a thread
+         * pool running in each process, so the code executing here will
+         * NOT be running in our main thread like most other things -- so,
+         * to update the UI, we need to use a Handler to hop over there.
+         */
+        public void statusChanged(String value) {
+           
+        	Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
+        	msg.getData().putString(HANDLER_TOR_MSG, value);
+        	mHandler.sendMessage(msg);
+        }
+
+		@Override
+		public void logMessage(String value) throws RemoteException {
+			
+			Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
+        	msg.getData().putString(HANDLER_TOR_MSG, value);
+        	mHandler.sendMessage(msg);
+			
+		}
+    };
+    
+
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case TorServiceConstants.STATUS_MSG:
+
+                	String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
+                	
+                	updateStatus(torServiceMsg);
+                	
+                    break;
+                case TorServiceConstants.LOG_MSG:
+                	
+                	
+                    break;
+                case TorServiceConstants.ENABLE_TOR_MSG:
+                	
+                	
+                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
+                	
+                	break;
+                case TorServiceConstants.DISABLE_TOR_MSG:
+                	
+                	updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
+                	
+                	break;
+                		
+                default:
+                    super.handleMessage(msg);
+            }
+        }
+        
+        
+        
+    };
+
+    
+    /**
+     * Class for interacting with the main interface of the service.
+     */
+    private ServiceConnection mConnection = new ServiceConnection() {
+        public void onServiceConnected(ComponentName className,
+                IBinder service) {
+            // This is called when the connection with the service has been
+            // established, giving us the service object we can use to
+            // interact with the service.  We are communicating with our
+            // service through an IDL interface, so get a client-side
+            // representation of that from the raw service object.
+            mService = ITorService.Stub.asInterface(service);
+       
+            // We want to monitor the service for as long as we are
+            // connected to it.
+            try {
+                mService.registerCallback(mCallback);
+           
+                updateStatus("");
+                
+                if (autoStartOnBind)
+                {
+                	autoStartOnBind = false;
+                	
+                	startTor();
+                	
+                }
+            
+            } catch (RemoteException e) {
+                // In this case the service has crashed before we could even
+                // do anything with it; we can count on soon being
+                // disconnected (and then reconnected if it can be restarted)
+                // so there is no need to do anything here.
+            	Log.d(TAG,"error registering callback to service",e);
+            }
+            
+
+
+           
+       
+          
+        }
+
+        public void onServiceDisconnected(ComponentName className) {
+            // This is called when the connection with the service has been
+            // unexpectedly disconnected -- that is, its process crashed.
+            mService = null;
+          
+        }
+    };
+    
+    boolean mIsBound = false;
+    
+    private void bindService ()
+    {
+    	 bindService(new Intent(ITorService.class.getName()),
+                 mConnection, Context.BIND_AUTO_CREATE);
+    	 
+    	 mIsBound = true;
+    
+    }
+    
+    private void unbindService ()
+    {
+    	if (mIsBound) {
+            // If we have received the service, and hence registered with
+            // it, then now is the time to unregister.
+            if (mService != null) {
+                try {
+                    mService.unregisterCallback(mCallback);
+                    
+                } catch (RemoteException e) {
+                    // There is nothing special we need to do if the service
+                    // has crashed.
+                }
+            }
+            
+            // Detach our existing connection.
+            unbindService(mConnection);
+            mIsBound = false;
+            
+        }
+    }
+	
+    private void createProgressDialog (String msg)
+    {
+    	if (progressDialog != null && progressDialog.isShowing())
+    		return;
+    	
+    	progressDialog = ProgressDialog.show(Orbot.this, "", msg);	
+		progressDialog.setCancelable(true);
+
+    }
+    
+    private void hideProgressDialog ()
+    {
+
+		if (progressDialog != null && progressDialog.isShowing())
+		{
+			progressDialog.dismiss();
+
+		}
+		
+		
+    }
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,1433 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-package org.torproject.android.service;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import net.freehaven.tor.control.ConfigEntry;
-import net.freehaven.tor.control.EventHandler;
-import net.freehaven.tor.control.TorControlConnection;
-
-import org.torproject.android.AppManager;
-import org.torproject.android.Orbot;
-import org.torproject.android.ProcessSettingsAsyncTask;
-import org.torproject.android.R;
-import org.torproject.android.TorConstants;
-import org.torproject.android.Utils;
-
-import android.app.AlertDialog;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
-
-public class TorService extends Service implements TorServiceConstants, Runnable, EventHandler
-{
-	
-	public static boolean ENABLE_DEBUG_LOG = false;
-	
-	private static int currentStatus = STATUS_OFF;
-		
-	private TorControlConnection conn = null;
-	private Socket torConnSocket = null;
-	
-	private static TorService _torInstance;
-	
-	private static final int NOTIFY_ID = 1;
-	
-	private static final int MAX_START_TRIES = 3;
-
-    private ArrayList<String> configBuffer = null;
-    private ArrayList<String> resetBuffer = null;
-     
-   
-    private String appHome;
-    private String appBinHome;
-    private String appDataHome;
-    
-    private String torBinaryPath;
-    private String privoxyPath;
-    
-	
-    private boolean hasRoot = false;
-    
-    /** Called when the activity is first created. */
-    public void onCreate() {
-    	super.onCreate();
-       
-    	logMessage("serviced created");
-      
-    }
-    
-    public static void logMessage(String msg)
-    {
-    	if (ENABLE_DEBUG_LOG)
-    		Log.d(TAG,msg);
-    }
-    
-    public static void logException(String msg, Exception e)
-    {
-    	if (ENABLE_DEBUG_LOG)
-    		Log.e(TAG,msg,e);
-    }
-    
-    
-    private boolean findExistingProc ()
-    {
-    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
-
- 		if (procId != -1)
- 		{
- 			logNotice("Found existing Tor process");
- 			
-            sendCallbackLogMessage ("found existing Tor process...");
-
- 			try {
- 				currentStatus = STATUS_CONNECTING;
-				
- 				initControlConnection();
-				
-				currentStatus = STATUS_ON;
-				
-				return true;
- 						
-			} catch (RuntimeException e) {
-				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
-				currentStatus = STATUS_OFF;
-				
-			} catch (Exception e) {
-				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
-				currentStatus = STATUS_OFF;
-				
-				
-			}
- 		}
- 		
- 		return false;
-    	 
-    }
-    
-
-    /* (non-Javadoc)
-	 * @see android.app.Service#onLowMemory()
-	 */
-	public void onLowMemory() {
-		super.onLowMemory();
-		
-		logNotice( "Low Memory Warning!");
-		
-	}
-
-
-	/* (non-Javadoc)
-	 * @see android.app.Service#onUnbind(android.content.Intent)
-	 */
-	public boolean onUnbind(Intent intent) {
-		
-	//	logNotice( "onUnbind Called: " + intent.getAction());
-		
-		
-		
-		return super.onUnbind(intent);
-		
-		
-	}
-
-	public int getTorStatus ()
-    {
-    	
-    	return currentStatus;
-    	
-    }
-	
-   
-	private void showToolbarNotification (String notifyMsg, int notifyId, int icon)
-	{
-	
-		
-		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
-		
-		CharSequence tickerText = notifyMsg;
-		long when = System.currentTimeMillis();
-
-		Notification notification = new Notification(icon, tickerText, when);
-		
-		Context context = getApplicationContext();
-		CharSequence contentTitle = getString(R.string.app_name);
-		CharSequence contentText = notifyMsg;
-		
-		Intent notificationIntent = new Intent(this, Orbot.class);
-		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
-
-		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
-
-
-		mNotificationManager.notify(notifyId, notification);
-
-
-	}
-    
-    /* (non-Javadoc)
-	 * @see android.app.Service#onRebind(android.content.Intent)
-	 */
-	public void onRebind(Intent intent) {
-		super.onRebind(intent);
-		
-		
-	}
-
-
-	/* (non-Javadoc)
-	 * @see android.app.Service#onStart(android.content.Intent, int)
-	 */
-	public void onStart(Intent intent, int startId) {
-		super.onStart(intent, startId);
-
-		_torInstance = this;
-		
-    	Log.i(TAG, "service started: " + intent.getAction());
-
-		try {
-			checkTorBinaries ();
-		} catch (Exception e) {
-
-			logNotice("unable to find tor binaries: " + e.getMessage());
-	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
-
-			Log.e(TAG, "error checking tor binaries", e);
-		}
-
-		if (intent.getAction()!=null && intent.getAction().equals("onboot"))
-		{
-			
-		
-			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-			
-			boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
-			
-			if (startOnBoot)
-			{
-				setTorProfile(PROFILE_ON);
-			}
-		}
-	}
-	 
-	public void run ()
-	{
-		
-		boolean isRunning = _torInstance.findExistingProc ();
-		
-		if (!isRunning)
-		{
-	     try
-	     {
-		   initTor();
-		   isRunning = true;
-	     }
-	     catch (Exception e)
-	     {
-	    	 currentStatus = STATUS_OFF;
-	    	 this.showToolbarNotification(getString(R.string.status_disabled), NOTIFY_ID, R.drawable.tornotificationerr);
-	    	 Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
-	     }
-		}
-	}
-
-	
-    public void onDestroy ()
-    {
-    	super.onDestroy();
-    	
-    	Log.d(TAG,"onDestroy called");
-    	
-    	  // Unregister all callbacks.
-        mCallbacks.kill();
-      
-    }
-    
-    private void stopTor ()
-    {
-    	currentStatus = STATUS_OFF;
-    	
-    	try
-    	{	
-    		killTorProcess ();
-				
-    		currentStatus = STATUS_OFF;
-    
-    		showToolbarNotification (getString(R.string.status_disabled),NOTIFY_ID,R.drawable.tornotificationoff);
-    		sendCallbackStatusMessage(getString(R.string.status_disabled));
-
-    		setupTransProxy(false);
-    	}
-    	catch (Exception e)
-    	{
-    		Log.d(TAG, "An error occured stopping Tor",e);
-    		logNotice("An error occured stopping Tor: " + e.getMessage());
-    		sendCallbackStatusMessage("Something bad happened. Check the log");
-
-    	}
-    }
-    
- 
-   
-    /*
-    public void reloadConfig ()
-    {
-    	try
-		{
-	    	if (conn == null)
-			{
-				initControlConnection ();
-			}
-		
-			if (conn != null)
-			{
-				 conn.signal("RELOAD");
-			}
-		}
-    	catch (Exception e)
-    	{
-    		Log.d(TAG,"Unable to reload configuration",e);
-    	}
-    }*/
-    
-    
-    
-	private void getHiddenServiceHostname ()
-	{
-
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
-
-        if (enableHiddenServices)
-        {
-	    	File file = new File(appDataHome, "hostname");
-	    	
-	    	if (file.exists())
-	    	{
-		    	try {
-					String onionHostname = Utils.readString(new FileInputStream(file));
-					showToolbarNotification("hidden service on: " + onionHostname, NOTIFY_ID, R.drawable.tornotification);
-					Editor pEdit = prefs.edit();
-					pEdit.putString("pref_hs_hostname",onionHostname);
-					pEdit.commit();
-				
-					
-				} catch (FileNotFoundException e) {
-					logException("unable to read onion hostname file",e);
-					showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
-					return;
-				}
-	    	}
-	    	else
-	    	{
-				showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
-	
-	    		
-	    	}
-        }
-        
-        return;
-	}
-	
-    
-    private void killTorProcess () throws Exception
-    {
-		//android.os.Debug.waitForDebugger();
-    	
-    	StringBuilder log = new StringBuilder();
-    	int procId = -1;
-    	
-    	if (conn != null)
-		{
-    		logNotice("Using control port to shutdown Tor");
-    		
-    		
-			try {
-				logNotice("sending SHUTDOWN signal to Tor process");
-				conn.shutdownTor("SHUTDOWN");
-				
-				
-			} catch (Exception e) {
-				Log.d(TAG,"error shutting down Tor via connection",e);
-			}
-			
-			conn = null;
-		}
-    	
-		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
-		{
-			
-			logNotice("Found Tor PID=" + procId + " - killing now...");
-			
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-			try { Thread.sleep(500); }
-			catch (Exception e){}
-		}
-
-		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
-		{
-			
-			logNotice("Found Privoxy PID=" + procId + " - killing now...");
-			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-
-			TorServiceUtils.doShellCommand(cmd,log, false, false);
-			try { Thread.sleep(500); }
-			catch (Exception e){}
-		}
-		
-    }
-   
-    private void logNotice (String msg)
-    {
-    	if (msg != null && msg.trim().length() > 0)
-    	{
-    		if (ENABLE_DEBUG_LOG)        	
-        		Log.d(TAG, msg);
-    	
-    		sendCallbackLogMessage(msg);
-    	}
-    }
-    
-
-    
-    private boolean checkTorBinaries () throws Exception
-    {
-    	//android.os.Debug.waitForDebugger();
-    	
-    	//check and install iptables
-    	Api.assertBinaries(this, true);
-    	
-    	File fileInstall = getDir("",0);
-    	String subBinPath = "bin/";
-    	
-		appHome = fileInstall.getAbsolutePath();
-		appBinHome = appHome + subBinPath;
-		appDataHome = getCacheDir().getAbsolutePath() + '/';
-		logNotice( "appHome=" + appHome);
-		
-		torBinaryPath = appBinHome + TOR_BINARY_ASSET_KEY;
-    	privoxyPath = appBinHome + PRIVOXY_ASSET_KEY;
-    	
-		logNotice( "checking Tor binaries");
-	    
-		boolean torBinaryExists = new File(torBinaryPath).exists();
-		boolean privoxyBinaryExists = new File(privoxyPath).exists();
-		
-		if (!(torBinaryExists && privoxyBinaryExists))
-		{
-			killTorProcess ();
-			
-			TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome, appBinHome); 
-			installer.start(true);
-			
-			torBinaryExists = new File(torBinaryPath).exists();
-			privoxyBinaryExists = new File(privoxyPath).exists();
-			
-    		if (torBinaryExists && privoxyBinaryExists)
-    		{
-    			logNotice(getString(R.string.status_install_success));
-    	
-    			showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.tornotification);
-    		
-    		}
-    		else
-    		{
-    		
-    			logNotice(getString(R.string.status_install_fail));
-
-    			sendCallbackStatusMessage(getString(R.string.status_install_fail));
-    			
-    			return false;
-    		}
-    		
-		}
-		else
-		{
-			logNotice("Found Tor binary: " + torBinaryPath);
-			logNotice("Found Privoxy binary: " + privoxyPath);
-
-		}
-	
-		StringBuilder log = new StringBuilder ();
-		
-		logNotice("(re)Setting permission on Tor binary");
-		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
-		TorServiceUtils.doShellCommand(cmd1, log, false, true);
-		
-		logNotice("(re)Setting permission on Privoxy binary");
-		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
-		TorServiceUtils.doShellCommand(cmd2, log, false, true);
-		
-		
-		return true;
-    }
-    
-    public void initTor () throws Exception
-    {
-
-    	
-    		currentStatus = STATUS_CONNECTING;
-
-    		logNotice(getString(R.string.status_starting_up));
-    		
-    		sendCallbackStatusMessage(getString(R.string.status_starting_up));
-    		
-    		killTorProcess ();
-    		
-    		try {
-
-
-	    		setupTransProxy(true);
-	    		runTorShellCmd();
-	    		runPrivoxyShellCmd();
-
-			} catch (Exception e) {
-		    	logException("Unable to start Tor: " + e.getMessage(),e);	
-		    	sendCallbackStatusMessage("Unable to start Tor: " + e.getMessage());
-		    	
-		    } 
-    		
-    }
-    
-    /*
-     * activate means whether to apply the users preferences
-     * or clear them out
-     * 
-     * the idea is that if Tor is off then transproxy is off
-     */
-    private boolean setupTransProxy (boolean activate) throws Exception
- 	{
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- 		boolean hasRoot;
- 		
- 		if (prefs.contains("has_root"))
- 		{
- 			hasRoot = prefs.getBoolean("has_root",false);
- 		}
- 		else
- 		{
- 			hasRoot = TorServiceUtils.checkRootAccess();
- 			Editor pEdit = prefs.edit();
- 			pEdit.putBoolean("has_root",hasRoot);
- 			pEdit.commit();
- 		}
- 		
- 		if (!hasRoot)
- 			return false;
- 		
-    	if (activate)
-    	{
-	 		
-	 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
-	 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
-	 		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
-	 		
-	     	TorService.logMessage ("Transparent Proxying: " + enableTransparentProxy);
-	     	
-	     	String portProxyList = prefs.getString("pref_port_list", "");
-	
-	 		if (enableTransparentProxy)
-	 		{
-	 			//TODO: Find a nice place for the next (commented) line
-				//TorTransProxy.setDNSProxying(); 
-				
-				int code = 0; // Default state is "okay"
-					
-				if(transProxyPortFallback)
-				{
-					showAlert("Status", "Setting up port-based transparent proxying...");
-					StringTokenizer st = new StringTokenizer(portProxyList, ",");
-					int status = code;
-					while (st.hasMoreTokens())
-					{
-						status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
-						if(status != 0)
-							code = status;
-					}
-				}
-				else
-				{
-					if(transProxyAll)
-					{
-						showAlert("Status", "Setting up full transparent proxying...");
-						code = TorTransProxy.setTransparentProxyingAll(this);
-					}
-					else
-					{
-						showAlert("Status", "Setting up app-based transparent proxying...");
-						code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this));
-					}
-				}
-			
-				TorService.logMessage ("TorTransProxy resp code: " + code);
-				
-				if (code == 0)
-				{
-					showAlert("Status", "Transparent proxying ENABLED");
-				}
-				else
-				{
-					showAlert("Status", "WARNING: error starting transparent proxying!");
-				}
-			
-				return true;
-	 				
-	 		}
-	 		else
-	 		{
-	 			TorTransProxy.purgeIptables(this);
-				showAlert("Status", "Transparent proxying DISABLED");
-
-	 		}
-    	}
-    	else
-    	{	 	
-    		TorTransProxy.purgeIptables(this);
-			showAlert("Status", "Transparent proxying DISABLED");
-
-    	}
-    	
- 		return true;
- 	}
-    
-    private void runTorShellCmd() throws Exception
-    {
-    	
-    	StringBuilder log = new StringBuilder();
-		
-		String torrcPath = appBinHome + TORRC_ASSET_KEY;
-		
-		String[] torCmd = {torBinaryPath + " DataDirectory " + appDataHome + " -f " + torrcPath  + " || exit\n"};
-		
-		boolean runAsRootFalse = false;
-		boolean waitForProcess = false;
-		
-		int procId = -1;
-		int attempts = 0;
-
-		int torRetryWaitTimeMS = 5000;
-		
-		while (procId == -1 && attempts < MAX_START_TRIES)
-		{
-			log = new StringBuilder();
-			
-			logNotice(torCmd[0]);
-			sendCallbackStatusMessage(getString(R.string.status_starting_up));
-			
-			TorServiceUtils.doShellCommand(torCmd, log, runAsRootFalse, waitForProcess);
-		
-			Thread.sleep(torRetryWaitTimeMS);
-			
-			procId = TorServiceUtils.findProcessId(torBinaryPath);
-			
-			logNotice("got tor proc id: " + procId);
-			
-			if (procId == -1)
-			{
-				
-				sendCallbackStatusMessage("Couldn't start Tor process.\nretrying..." + log.toString());
-				Thread.sleep(torRetryWaitTimeMS);
-				attempts++;
-			}
-			
-			logNotice(log.toString());
-		}
-		
-		if (procId == -1)
-		{
-			throw new Exception ("Unable to start Tor");
-		}
-		else
-		{
-		
-			logNotice("Tor process id=" + procId);
-			
-			showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.tornotification);
-			
-			initControlConnection ();
-
-	        applyPreferences();
-	    }
-    }
-    
-    private void runPrivoxyShellCmd () throws Exception
-    {
-    	
-    	logNotice( "Starting privoxy process");
-    	
-			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
-
-			StringBuilder log = null;
-			
-			int attempts = 0;
-			
-    		if (privoxyProcId == -1)
-    		{
-    			log = new StringBuilder();
-    			
-    			String privoxyConfigPath = appBinHome + PRIVOXYCONFIG_ASSET_KEY;
-    			
-    			String[] cmds = 
-    			{ privoxyPath + " " + privoxyConfigPath + " &" };
-    			
-    			logNotice (cmds[0]); 
-    			
-    			boolean runAsRoot = false;
-    			boolean waitFor = false;
-    			
-    			TorServiceUtils.doShellCommand(cmds, log, runAsRoot, waitFor);
-    			
-    			//wait one second to make sure it has started up
-    			Thread.sleep(1000);
-    			
-    			while ((privoxyProcId = TorServiceUtils.findProcessId(privoxyPath)) == -1  && attempts < MAX_START_TRIES)
-    			{
-    				logNotice("Couldn't find Privoxy process... retrying...\n" + log);
-    				Thread.sleep(3000);
-    				attempts++;
-    			}
-    			
-    			
-    			logNotice(log.toString());
-    		}
-    		
-			sendCallbackLogMessage("Privoxy is running on port: " + PORT_HTTP);
-			
-    		logNotice("Privoxy process id=" + privoxyProcId);
-			
-    		
-    		
-    }
-    
-    /*
-	public String generateHashPassword ()
-	{
-		
-		PasswordDigest d = PasswordDigest.generateDigest();
-	      byte[] s = d.getSecret(); // pass this to authenticate
-	      String h = d.getHashedPassword(); // pass this to the Tor on startup.
-
-		return null;
-	}*/
-	
-	public void initControlConnection () throws Exception, RuntimeException
-	{
-			while (true)
-			{
-				try
-				{
-					logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
-					
-					String baseMessage = getString(R.string.tor_process_connecting);
-					sendCallbackStatusMessage(baseMessage);
-					
-					torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
-			        conn = TorControlConnection.getConnection(torConnSocket);
-			        
-			      //  conn.authenticate(new byte[0]); // See section 3.2
-			        
-					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2));
-
-					logNotice( "SUCCESS connected to control port");
-			        
-			        String torAuthCookie = appDataHome + TOR_CONTROL_COOKIE;
-			        
-			        File fileCookie = new File(torAuthCookie);
-			        
-			        if (fileCookie.exists())
-			        {
-				        byte[] cookie = new byte[(int)fileCookie.length()];
-				        new FileInputStream(new File(torAuthCookie)).read(cookie);
-				        conn.authenticate(cookie);
-				        		
-				        logNotice( "SUCCESS authenticated to control port");
-				        
-						sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2) + getString(R.string.tor_process_connecting_step3));
-	
-				        addEventHandler();
-				        
-			        }
-			        
-			        break; //don't need to retry
-				}
-				catch (Exception ce)
-				{
-					conn = null;
-					Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
-					
-					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step4));
-
-					Thread.sleep(1000);
-										
-				}	
-			}
-		
-		
-
-	}
-	
-	
-	/*
-	private void getTorStatus () throws IOException
-	{
-		try
-		{
-			 
-			if (conn != null)
-			{
-				 // get a single value.
-			      
-			       // get several values
-			       
-			       if (currentStatus == STATUS_CONNECTING)
-			       {
-				       //Map vals = conn.getInfo(Arrays.asList(new String[]{
-				         // "status/bootstrap-phase", "status","version"}));
-			
-				       String bsPhase = conn.getInfo("status/bootstrap-phase");
-				       Log.d(TAG, "bootstrap-phase: " + bsPhase);
-				       
-				       
-			       }
-			       else
-			       {
-			    	 //  String status = conn.getInfo("status/circuit-established");
-			    	 //  Log.d(TAG, "status/circuit-established=" + status);
-			       }
-			}
-		}
-		catch (Exception e)
-		{
-			Log.d(TAG, "Unable to get Tor status from control port");
-			currentStatus = STATUS_UNAVAILABLE;
-		}
-		
-	}*/
-	
-	
-	public void addEventHandler () throws IOException
-	{
-	       // We extend NullEventHandler so that we don't need to provide empty
-	       // implementations for all the events we don't care about.
-	       // ...
-		logNotice( "adding control port event handler");
-
-		conn.setEventHandler(this);
-	    
-		conn.setEvents(Arrays.asList(new String[]{
-	          "ORCONN", "CIRC", "NOTICE", "WARN", "ERR"}));
-	      // conn.setEvents(Arrays.asList(new String[]{
-	        //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
-
-		logNotice( "SUCCESS added control port event handler");
-	    
-	    
-
-	}
-	
-		/**
-		 * Returns the port number that the HTTP proxy is running on
-		 */
-		public int getHTTPPort() throws RemoteException {
-			return TorServiceConstants.PORT_HTTP;
-		}
-
-		/**
-		 * Returns the port number that the SOCKS proxy is running on
-		 */
-		public int getSOCKSPort() throws RemoteException {
-			return TorServiceConstants.PORT_SOCKS;
-		}
-
-
-		
-		
-		public int getProfile() throws RemoteException {
-			//return mProfile;
-			return PROFILE_ON;
-		}
-		
-		public void setTorProfile(int profile)  {
-			logNotice("Tor profile set to " + profile);
-			
-			if (profile == PROFILE_ON)
-			{
- 				currentStatus = STATUS_CONNECTING;
-	            sendCallbackStatusMessage ("starting...");
-
-	            Thread thread = new Thread(this);
-	            thread.start();
-	           
-			}
-			else if (profile == PROFILE_OFF)
-			{
-				currentStatus = STATUS_OFF;
-	            sendCallbackStatusMessage ("shutting down...");
-	            
-				_torInstance.stopTor();
-
-				
-			}
-		}
-
-
-
-	public void message(String severity, String msg) {
-		
-		
-		logNotice(  "[Tor Control Port] " + severity + ": " + msg);
-          
-          if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1)
-          {
-        	  currentStatus = STATUS_ON;
-        	
-
-   		   	getHiddenServiceHostname ();
-   		   
-          }
-          
-          
-    	  showToolbarNotification (getString(R.string.status_activated),NOTIFY_ID,R.drawable.tornotificationon);
-    		 
-          sendCallbackStatusMessage (msg);
-          
-	}
-
-	private void showAlert(String title, String msg)
-	{
-		 /*
-		 new AlertDialog.Builder(this)
-         .setTitle(title)
-         .setMessage(msg)
-         .setPositiveButton(android.R.string.ok, null)
-         .show();
-         */
-		showToolbarNotification(msg, NOTIFY_ID, R.drawable.tornotification);
-	}
-	
-	public void newDescriptors(List<String> orList) {
-		
-	}
-
-
-	public void orConnStatus(String status, String orName) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("orConnStatus (");
-			sb.append((orName) );
-			sb.append("): ");
-			sb.append(status);
-			
-			logNotice(sb.toString());
-		}
-	}
-
-
-	public void streamStatus(String status, String streamID, String target) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("StreamStatus (");
-			sb.append((streamID));
-			sb.append("): ");
-			sb.append(status);
-			
-			logNotice(sb.toString());
-		}
-	}
-
-
-	public void unrecognized(String type, String msg) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Message (");
-			sb.append(type);
-			sb.append("): ");
-			sb.append(msg);
-			
-			logNotice(sb.toString());
-		}
-		
-	}
-
-	public void bandwidthUsed(long read, long written) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Bandwidth used: ");
-			sb.append(read/1000);
-			sb.append("kb read / ");
-			sb.append(written/1000);
-			sb.append("kb written");
-			
-			logNotice(sb.toString());
-		}
-
-	}
-
-	public void circuitStatus(String status, String circID, String path) {
-		
-		if (ENABLE_DEBUG_LOG)
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.append("Circuit (");
-			sb.append((circID));
-			sb.append("): ");
-			sb.append(status);
-			sb.append("; ");
-			sb.append(path);
-			
-			logNotice(sb.toString());
-		}
-		
-	}
-	
-    public IBinder onBind(Intent intent) {
-        // Select the interface to return.  If your service only implements
-        // a single interface, you can just return it here without checking
-        // the Intent.
-        
-    	_torInstance = this;
-    	
-		try
-		{
-	
-			checkTorBinaries();
-    	
-		}
-		catch (Exception e)
-		{
-			logNotice("unable to find tor binaries: " + e.getMessage());
-	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
-
-			Log.d(TAG,"Unable to check for Tor binaries",e);
-			return null;
-		}
-    	
-		findExistingProc ();
-		
-    	if (ITorService.class.getName().equals(intent.getAction())) {
-            return mBinder;
-        }
-        
-
-        return null;
-    }
-	
-    /**
-     * This is a list of callbacks that have been registered with the
-     * service.  Note that this is package scoped (instead of private) so
-     * that it can be accessed more efficiently from inner classes.
-     */
-    final RemoteCallbackList<ITorServiceCallback> mCallbacks
-            = new RemoteCallbackList<ITorServiceCallback>();
-
-
-    /**
-     * The IRemoteInterface is defined through IDL
-     */
-    private final ITorService.Stub mBinder = new ITorService.Stub() {
-    	
-       
-		public void registerCallback(ITorServiceCallback cb) {
-            if (cb != null) mCallbacks.register(cb);
-        }
-        public void unregisterCallback(ITorServiceCallback cb) {
-            if (cb != null) mCallbacks.unregister(cb);
-        }
-        public int getStatus () {
-        	return getTorStatus();
-        }
-        
-        public void setProfile (int profile)
-        {
-        	setTorProfile(profile);
-        	
-        }
-        
-        public void processSettings ()
-        {
-        	
-        	
-        	try {
-				applyPreferences();
-			} catch (RemoteException e) {
-				logException ("error applying prefs",e);
-			}
-        	
-        }
-        
-        
-        
-        public String getConfiguration (String name)
-        {
-        	try
-        	{
-	        	if (conn != null)
-	        	{
-	        		StringBuffer result = new StringBuffer();
-	        		
-	        		List<ConfigEntry> listCe = conn.getConf(name);
-	        		
-	        		Iterator<ConfigEntry> itCe = listCe.iterator();
-	        		ConfigEntry ce = null;
-	        		
-	        		while (itCe.hasNext())
-	        		{
-	        			ce = itCe.next();
-	        			
-	        			result.append(ce.key);
-	        			result.append(' ');
-	        			result.append(ce.value);
-	        			result.append('\n');
-	        		}
-	        		
-	   	       		return result.toString();
-	        	}
-        	}
-        	catch (IOException ioe)
-        	{
-        		Log.e(TAG, "Unable to update Tor configuration", ioe);
-        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
-        	}
-        	
-        	return null;
-        }
-        
-        /**
-         * Set configuration
-         **/
-        public boolean updateConfiguration (String name, String value, boolean saveToDisk)
-        {
-        	if (configBuffer == null)
-        		configBuffer = new ArrayList<String>();
-	        
-        	if (resetBuffer == null)
-        		resetBuffer = new ArrayList<String>();
-	        
-        	if (value == null || value.length() == 0)
-        	{
-        		resetBuffer.add(name);
-        		/*
-        		if (conn != null)
-        		{
-        			try {
-						conn.resetConf(Arrays.asList(new String[]{name}));
-					} catch (IOException e) {
-						Log.w(TAG, "Unable to reset conf",e);
-					}
-        		}*/
-        	}
-        	else
-        		configBuffer.add(name + ' ' + value);
-	        
-        	return false;
-        }
-         
-	    public boolean saveConfiguration ()
-	    {
-	    	try
-        	{
-	        	if (conn != null)
-	        	{
-	        		
-	        		 if (resetBuffer != null && resetBuffer.size() > 0)
-				        {	
-				        	conn.resetConf(resetBuffer);
-				        	resetBuffer = null;
-				        }
-	   	       
-	        		 if (configBuffer != null && configBuffer.size() > 0)
-				        {
-	        			 	
-				        	conn.setConf(configBuffer);
-				        	configBuffer = null;
-				        }
-	   	       
-	   	       		// Flush the configuration to disk.
-	        		//this is doing bad things right now NF 22/07/10
-	   	       		//conn.saveConf();
-	
-	   	       		return true;
-	        	}
-        	}
-        	catch (Exception ioe)
-        	{
-        		Log.e(TAG, "Unable to update Tor configuration", ioe);
-        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
-        	}
-        	
-        	return false;
-        	
-	    }
-    };
-    
-    private ArrayList<String> callbackBuffer = new ArrayList<String>();
-    private boolean inCallbackStatus = false;
-    private boolean inCallback = false;
-    
-    private synchronized void sendCallbackStatusMessage (String newStatus)
-    {
-    	 
-    	if (mCallbacks == null)
-    		return;
-    	
-        // Broadcast to all clients the new value.
-        final int N = mCallbacks.beginBroadcast();
-        
-        inCallback = true;
-        
-        if (N > 0)
-        {
-        	 for (int i=0; i<N; i++) {
-		            try {
-		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
-		                
-		                
-		            } catch (RemoteException e) {
-		                // The RemoteCallbackList will take care of removing
-		                // the dead object for us.
-		            }
-		        }
-        }
-        
-        mCallbacks.finishBroadcast();
-        inCallback = false;
-    }
-    
-    private synchronized void sendCallbackLogMessage (String logMessage)
-    {
-    	 
-    	if (mCallbacks == null)
-    		return;
-    	
-    	callbackBuffer.add(logMessage);
-
-    	if (!inCallback)
-    	{
-
-	        inCallback = true;
-	        // Broadcast to all clients the new value.
-	        final int N = mCallbacks.beginBroadcast();
-	        
-	
-	        if (N > 0)
-	        {
-	        
-	        	Iterator<String> it = callbackBuffer.iterator();
-	        	String status = null;
-	        	
-	        	while (it.hasNext())
-	        	{
-	        		status = it.next();
-	        		
-			        for (int i=0; i<N; i++) {
-			            try {
-			                mCallbacks.getBroadcastItem(i).logMessage(status);
-			                
-			            } catch (RemoteException e) {
-			                // The RemoteCallbackList will take care of removing
-			                // the dead object for us.
-			            }
-			        }
-	        	}
-		        
-		        callbackBuffer.clear();
-	        }
-	        
-	        mCallbacks.finishBroadcast();
-	        inCallback = false;
-    	}
-    	
-    }
-    
-    private boolean applyPreferences () throws RemoteException
-    {
-    	
-    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-		
-    	ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
-    	Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
-    		
-		boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
-		
-		//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
-
-        boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
-
-        boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
-
-        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
-
-		//boolean enableTransparentProxy = prefs.getBoolean(TorConstants.PREF_TRANSPARENT, false);
-		
-        if (currentStatus == STATUS_ON)
-        {
-        	//reset iptables rules in active mode
-        
-			try
-			{
-				setupTransProxy(true); 		
-			}
-			catch (Exception e)
-			{
-				logException("unable to setup transproxy",e);
-			}
-        }
-		
-		if (useBridges)
-		{
-			String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,"");
-
-			if (bridgeList == null || bridgeList.length() == 0)
-			{
-			
-				showAlert("Bridge Error","In order to use the bridge feature, you must enter at least one bridge IP address." +
-						"Send an email to bridges at torproject.org with the line \"get bridges\" by itself in the body of the mail from a gmail account.");
-				
-			
-				return false;
-			}
-			
-			
-			mBinder.updateConfiguration("UseBridges", "1", false);
-				
-			String bridgeDelim = "\n";
-			
-			if (bridgeList.indexOf(",") != -1)
-			{
-				bridgeDelim = ",";
-			}
-			
-			StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
-			while (st.hasMoreTokens())
-			{
-
-				mBinder.updateConfiguration("bridge", st.nextToken(), false);
-
-			}
-			
-			mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
-			
-		}
-		else
-		{
-			mBinder.updateConfiguration("UseBridges", "0", false);
-
-		}
-
-        try
-        {
-            if (ReachableAddresses)
-            {
-                String ReachableAddressesPorts =
-                    prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
-                
-                mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false);
-
-            }
-            else
-            {
-                mBinder.updateConfiguration("ReachableAddresses", "", false);
-            }
-        }
-        catch (Exception e)
-        {
-           showAlert("Config Error","Your ReachableAddresses settings caused an exception!");
-           
-           return false;
-        }
-
-        try
-        {
-            if (becomeRelay && (!useBridges) && (!ReachableAddresses))
-            {
-                int ORPort =  Integer.parseInt(prefs.getString(TorConstants.PREF_OR_PORT, "9001"));
-                String nickname = prefs.getString(TorConstants.PREF_OR_NICKNAME, "Orbot");
-
-                mBinder.updateConfiguration("ORPort", ORPort + "", false);
-    			mBinder.updateConfiguration("Nickname", nickname, false);
-    			mBinder.updateConfiguration("ExitPolicy", "reject *:*", false);
-
-            }
-            else
-            {
-            	mBinder.updateConfiguration("ORPort", "", false);
-    			mBinder.updateConfiguration("Nickname", "", false);
-    			mBinder.updateConfiguration("ExitPolicy", "", false);
-            }
-        }
-        catch (Exception e)
-        {
-            showAlert("Uh-oh!","Your relay settings caused an exception!");
-          
-            return false;
-        }
-
-        if (enableHiddenServices)
-        {
-        	mBinder.updateConfiguration("HiddenServiceDir",appDataHome, false);
-        	
-        	String hsPorts = prefs.getString("pref_hs_ports","");
-        	
-        	StringTokenizer st = new StringTokenizer (hsPorts,",");
-        	String hsPortConfig = null;
-        	
-        	while (st.hasMoreTokens())
-        	{
-        		hsPortConfig = st.nextToken();
-        		
-        		if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
-        		{
-        			hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
-        		}
-        		
-        		mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
-        	}
-        	
-        	
-        }
-        else
-        {
-        	mBinder.updateConfiguration("HiddenServiceDir","", false);
-        	
-        }
-        
-        mBinder.saveConfiguration();
-	
-        return true;
-    }
-    
-   
-   
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java (from rev 24717, projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorService.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,1432 @@
+/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
+/* See LICENSE for licensing information */
+package org.torproject.android.service;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import net.freehaven.tor.control.ConfigEntry;
+import net.freehaven.tor.control.EventHandler;
+import net.freehaven.tor.control.TorControlConnection;
+
+import org.torproject.android.AppManager;
+import org.torproject.android.Orbot;
+import org.torproject.android.ProcessSettingsAsyncTask;
+import org.torproject.android.R;
+import org.torproject.android.TorConstants;
+import org.torproject.android.Utils;
+
+import android.app.AlertDialog;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+public class TorService extends Service implements TorServiceConstants, Runnable, EventHandler
+{
+	
+	public static boolean ENABLE_DEBUG_LOG = false;
+	
+	private static int currentStatus = STATUS_OFF;
+		
+	private TorControlConnection conn = null;
+	private Socket torConnSocket = null;
+	
+	private static TorService _torInstance;
+	
+	private static final int NOTIFY_ID = 1;
+	
+	private static final int MAX_START_TRIES = 3;
+
+    private ArrayList<String> configBuffer = null;
+    private ArrayList<String> resetBuffer = null;
+     
+   
+    private String appHome;
+    private String appBinHome;
+    private String appDataHome;
+    
+    private String torBinaryPath;
+    private String privoxyPath;
+    
+	
+    private boolean hasRoot = false;
+    
+    /** Called when the activity is first created. */
+    public void onCreate() {
+    	super.onCreate();
+       
+    	logMessage("serviced created");
+      
+    }
+    
+    public static void logMessage(String msg)
+    {
+    	if (ENABLE_DEBUG_LOG)
+    		Log.d(TAG,msg);
+    }
+    
+    public static void logException(String msg, Exception e)
+    {
+    	if (ENABLE_DEBUG_LOG)
+    		Log.e(TAG,msg,e);
+    }
+    
+    
+    private boolean findExistingProc ()
+    {
+    	 int procId = TorServiceUtils.findProcessId(torBinaryPath);
+
+ 		if (procId != -1)
+ 		{
+ 			logNotice("Found existing Tor process");
+ 			
+            sendCallbackLogMessage ("found existing Tor process...");
+
+ 			try {
+ 				currentStatus = STATUS_CONNECTING;
+				
+ 				initControlConnection();
+				
+				currentStatus = STATUS_ON;
+				
+				return true;
+ 						
+			} catch (RuntimeException e) {
+				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
+				currentStatus = STATUS_OFF;
+				
+			} catch (Exception e) {
+				Log.d(TAG,"Unable to connect to existing Tor instance,",e);
+				currentStatus = STATUS_OFF;
+				
+				
+			}
+ 		}
+ 		
+ 		return false;
+    	 
+    }
+    
+
+    /* (non-Javadoc)
+	 * @see android.app.Service#onLowMemory()
+	 */
+	public void onLowMemory() {
+		super.onLowMemory();
+		
+		logNotice( "Low Memory Warning!");
+		
+	}
+
+
+	/* (non-Javadoc)
+	 * @see android.app.Service#onUnbind(android.content.Intent)
+	 */
+	public boolean onUnbind(Intent intent) {
+		
+	//	logNotice( "onUnbind Called: " + intent.getAction());
+		
+		
+		
+		return super.onUnbind(intent);
+		
+		
+	}
+
+	public int getTorStatus ()
+    {
+    	
+    	return currentStatus;
+    	
+    }
+	
+   
+	private void showToolbarNotification (String notifyMsg, int notifyId, int icon)
+	{
+	
+		
+		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+		
+		CharSequence tickerText = notifyMsg;
+		long when = System.currentTimeMillis();
+
+		Notification notification = new Notification(icon, tickerText, when);
+		
+		Context context = getApplicationContext();
+		CharSequence contentTitle = getString(R.string.app_name);
+		CharSequence contentText = notifyMsg;
+		
+		Intent notificationIntent = new Intent(this, Orbot.class);
+		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
+
+		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
+
+
+		mNotificationManager.notify(notifyId, notification);
+
+
+	}
+    
+    /* (non-Javadoc)
+	 * @see android.app.Service#onRebind(android.content.Intent)
+	 */
+	public void onRebind(Intent intent) {
+		super.onRebind(intent);
+		
+		
+	}
+
+
+	/* (non-Javadoc)
+	 * @see android.app.Service#onStart(android.content.Intent, int)
+	 */
+	public void onStart(Intent intent, int startId) {
+		super.onStart(intent, startId);
+
+		_torInstance = this;
+		
+    	Log.i(TAG, "service started: " + intent.getAction());
+
+		try {
+			checkTorBinaries ();
+		} catch (Exception e) {
+
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
+
+			Log.e(TAG, "error checking tor binaries", e);
+		}
+
+		if (intent.getAction()!=null && intent.getAction().equals("onboot"))
+		{
+			
+		
+			SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+			
+			boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
+			
+			if (startOnBoot)
+			{
+				setTorProfile(PROFILE_ON);
+			}
+		}
+	}
+	 
+	public void run ()
+	{
+		
+		boolean isRunning = _torInstance.findExistingProc ();
+		
+		if (!isRunning)
+		{
+	     try
+	     {
+		   initTor();
+		   isRunning = true;
+	     }
+	     catch (Exception e)
+	     {
+	    	 currentStatus = STATUS_OFF;
+	    	 this.showToolbarNotification(getString(R.string.status_disabled), NOTIFY_ID, R.drawable.tornotificationerr);
+	    	 Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
+	     }
+		}
+	}
+
+	
+    public void onDestroy ()
+    {
+    	super.onDestroy();
+    	
+    	Log.d(TAG,"onDestroy called");
+    	
+    	  // Unregister all callbacks.
+        mCallbacks.kill();
+      
+    }
+    
+    private void stopTor ()
+    {
+    	currentStatus = STATUS_OFF;
+    	
+    	try
+    	{	
+    		killTorProcess ();
+				
+    		currentStatus = STATUS_OFF;
+    
+    		showToolbarNotification (getString(R.string.status_disabled),NOTIFY_ID,R.drawable.tornotificationoff);
+    		sendCallbackStatusMessage(getString(R.string.status_disabled));
+
+    		setupTransProxy(false);
+    	}
+    	catch (Exception e)
+    	{
+    		Log.d(TAG, "An error occured stopping Tor",e);
+    		logNotice("An error occured stopping Tor: " + e.getMessage());
+    		sendCallbackStatusMessage("Something bad happened. Check the log");
+
+    	}
+    }
+    
+ 
+   
+    /*
+    public void reloadConfig ()
+    {
+    	try
+		{
+	    	if (conn == null)
+			{
+				initControlConnection ();
+			}
+		
+			if (conn != null)
+			{
+				 conn.signal("RELOAD");
+			}
+		}
+    	catch (Exception e)
+    	{
+    		Log.d(TAG,"Unable to reload configuration",e);
+    	}
+    }*/
+    
+    
+    
+	private void getHiddenServiceHostname ()
+	{
+
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
+
+        if (enableHiddenServices)
+        {
+	    	File file = new File(appDataHome, "hostname");
+	    	
+	    	if (file.exists())
+	    	{
+		    	try {
+					String onionHostname = Utils.readString(new FileInputStream(file));
+					showToolbarNotification("hidden service on: " + onionHostname, NOTIFY_ID, R.drawable.tornotification);
+					Editor pEdit = prefs.edit();
+					pEdit.putString("pref_hs_hostname",onionHostname);
+					pEdit.commit();
+				
+					
+				} catch (FileNotFoundException e) {
+					logException("unable to read onion hostname file",e);
+					showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
+					return;
+				}
+	    	}
+	    	else
+	    	{
+				showToolbarNotification("unable to read hidden service name", NOTIFY_ID, R.drawable.tornotificationerr);
+	
+	    		
+	    	}
+        }
+        
+        return;
+	}
+	
+    
+    private void killTorProcess () throws Exception
+    {
+		//android.os.Debug.waitForDebugger();
+    	
+    	StringBuilder log = new StringBuilder();
+    	int procId = -1;
+    	
+    	if (conn != null)
+		{
+    		logNotice("Using control port to shutdown Tor");
+    		
+    		
+			try {
+				logNotice("sending SHUTDOWN signal to Tor process");
+				conn.shutdownTor("SHUTDOWN");
+				
+				
+			} catch (Exception e) {
+				Log.d(TAG,"error shutting down Tor via connection",e);
+			}
+			
+			conn = null;
+		}
+    	
+		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
+		{
+			
+			logNotice("Found Tor PID=" + procId + " - killing now...");
+			
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
+			try { Thread.sleep(500); }
+			catch (Exception e){}
+		}
+
+		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
+		{
+			
+			logNotice("Found Privoxy PID=" + procId + " - killing now...");
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
+			try { Thread.sleep(500); }
+			catch (Exception e){}
+		}
+		
+    }
+   
+    private void logNotice (String msg)
+    {
+    	if (msg != null && msg.trim().length() > 0)
+    	{
+    		if (ENABLE_DEBUG_LOG)        	
+        		Log.d(TAG, msg);
+    	
+    		sendCallbackLogMessage(msg);
+    	}
+    }
+    
+
+    
+    private boolean checkTorBinaries () throws Exception
+    {
+    	//android.os.Debug.waitForDebugger();
+    	
+    	//check and install iptables
+    	Api.assertBinaries(this, true);
+    	
+    	File fileInstall = getDir("",0);
+    	String subBinPath = "bin/";
+    	
+		appHome = fileInstall.getAbsolutePath();
+		appBinHome = appHome + subBinPath;
+		appDataHome = getCacheDir().getAbsolutePath() + '/';
+		logNotice( "appHome=" + appHome);
+		
+		torBinaryPath = appBinHome + TOR_BINARY_ASSET_KEY;
+    	privoxyPath = appBinHome + PRIVOXY_ASSET_KEY;
+    	
+		logNotice( "checking Tor binaries");
+	    
+		boolean torBinaryExists = new File(torBinaryPath).exists();
+		boolean privoxyBinaryExists = new File(privoxyPath).exists();
+		
+		if (!(torBinaryExists && privoxyBinaryExists))
+		{
+			killTorProcess ();
+			
+			TorBinaryInstaller installer = new TorBinaryInstaller(this, appBinHome, appBinHome); 
+			installer.start(true);
+			
+			torBinaryExists = new File(torBinaryPath).exists();
+			privoxyBinaryExists = new File(privoxyPath).exists();
+			
+    		if (torBinaryExists && privoxyBinaryExists)
+    		{
+    			logNotice(getString(R.string.status_install_success));
+    	
+    			showToolbarNotification(getString(R.string.status_install_success), NOTIFY_ID, R.drawable.tornotification);
+    		
+    		}
+    		else
+    		{
+    		
+    			logNotice(getString(R.string.status_install_fail));
+
+    			sendCallbackStatusMessage(getString(R.string.status_install_fail));
+    			
+    			return false;
+    		}
+    		
+		}
+		else
+		{
+			logNotice("Found Tor binary: " + torBinaryPath);
+			logNotice("Found Privoxy binary: " + privoxyPath);
+
+		}
+	
+		StringBuilder log = new StringBuilder ();
+		
+		logNotice("(re)Setting permission on Tor binary");
+		String[] cmd1 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + torBinaryPath};
+		TorServiceUtils.doShellCommand(cmd1, log, false, true);
+		
+		logNotice("(re)Setting permission on Privoxy binary");
+		String[] cmd2 = {SHELL_CMD_CHMOD + ' ' + CHMOD_EXE_VALUE + ' ' + privoxyPath};
+		TorServiceUtils.doShellCommand(cmd2, log, false, true);
+		
+		
+		return true;
+    }
+    
+    public void initTor () throws Exception
+    {
+
+    	
+    		currentStatus = STATUS_CONNECTING;
+
+    		logNotice(getString(R.string.status_starting_up));
+    		
+    		sendCallbackStatusMessage(getString(R.string.status_starting_up));
+    		
+    		killTorProcess ();
+    		
+    		try {
+
+
+	    		setupTransProxy(true);
+	    		runTorShellCmd();
+	    		runPrivoxyShellCmd();
+
+			} catch (Exception e) {
+		    	logException("Unable to start Tor: " + e.getMessage(),e);	
+		    	sendCallbackStatusMessage("Unable to start Tor: " + e.getMessage());
+		    	
+		    } 
+    		
+    }
+    
+    /*
+     * activate means whether to apply the users preferences
+     * or clear them out
+     * 
+     * the idea is that if Tor is off then transproxy is off
+     */
+    private boolean setupTransProxy (boolean activate) throws Exception
+ 	{
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ 		boolean hasRoot;
+ 		
+ 		if (prefs.contains("has_root"))
+ 		{
+ 			hasRoot = prefs.getBoolean("has_root",false);
+ 		}
+ 		else
+ 		{
+ 			hasRoot = TorServiceUtils.checkRootAccess();
+ 			Editor pEdit = prefs.edit();
+ 			pEdit.putBoolean("has_root",hasRoot);
+ 			pEdit.commit();
+ 		}
+ 		
+ 		if (!hasRoot)
+ 			return false;
+ 		
+    	if (activate)
+    	{
+	 		
+	 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
+	 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
+	 		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
+	 		
+	     	TorService.logMessage ("Transparent Proxying: " + enableTransparentProxy);
+	     	
+	     	String portProxyList = prefs.getString("pref_port_list", "");
+	
+	 		if (enableTransparentProxy)
+	 		{
+	 			//TODO: Find a nice place for the next (commented) line
+				//TorTransProxy.setDNSProxying(); 
+				
+				int code = 0; // Default state is "okay"
+					
+				if(transProxyPortFallback)
+				{
+					showAlert("Status", "Setting up port-based transparent proxying...");
+					StringTokenizer st = new StringTokenizer(portProxyList, ",");
+					int status = code;
+					while (st.hasMoreTokens())
+					{
+						status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
+						if(status != 0)
+							code = status;
+					}
+				}
+				else
+				{
+					if(transProxyAll)
+					{
+						showAlert("Status", "Setting up full transparent proxying...");
+						code = TorTransProxy.setTransparentProxyingAll(this);
+					}
+					else
+					{
+						showAlert("Status", "Setting up app-based transparent proxying...");
+						code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this));
+					}
+				}
+			
+				TorService.logMessage ("TorTransProxy resp code: " + code);
+				
+				if (code == 0)
+				{
+					showAlert("Status", "Transparent proxying ENABLED");
+				}
+				else
+				{
+					showAlert("Status", "WARNING: error starting transparent proxying!");
+				}
+			
+				return true;
+	 				
+	 		}
+	 		else
+	 		{
+	 			TorTransProxy.purgeIptables(this);
+				showAlert("Status", "Transparent proxying: DISABLED");
+	 		}
+    	}
+    	else
+    	{	 	
+    		TorTransProxy.purgeIptables(this);
+			showAlert("Status", "Transparent proxying: DISABLED");
+
+    	}
+    	
+ 		return true;
+ 	}
+    
+    private void runTorShellCmd() throws Exception
+    {
+    	
+    	StringBuilder log = new StringBuilder();
+		
+		String torrcPath = appBinHome + TORRC_ASSET_KEY;
+		
+		String[] torCmd = {torBinaryPath + " DataDirectory " + appDataHome + " -f " + torrcPath  + " || exit\n"};
+		
+		boolean runAsRootFalse = false;
+		boolean waitForProcess = false;
+		
+		int procId = -1;
+		int attempts = 0;
+
+		int torRetryWaitTimeMS = 5000;
+		
+		while (procId == -1 && attempts < MAX_START_TRIES)
+		{
+			log = new StringBuilder();
+			
+			logNotice(torCmd[0]);
+			sendCallbackStatusMessage(getString(R.string.status_starting_up));
+			
+			TorServiceUtils.doShellCommand(torCmd, log, runAsRootFalse, waitForProcess);
+		
+			Thread.sleep(torRetryWaitTimeMS);
+			
+			procId = TorServiceUtils.findProcessId(torBinaryPath);
+			
+			logNotice("got tor proc id: " + procId);
+			
+			if (procId == -1)
+			{
+				
+				sendCallbackStatusMessage("Couldn't start Tor process.\nretrying..." + log.toString());
+				Thread.sleep(torRetryWaitTimeMS);
+				attempts++;
+			}
+			
+			logNotice(log.toString());
+		}
+		
+		if (procId == -1)
+		{
+			throw new Exception ("Unable to start Tor");
+		}
+		else
+		{
+		
+			logNotice("Tor process id=" + procId);
+			
+			showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.tornotification);
+			
+			initControlConnection ();
+
+	        applyPreferences();
+	    }
+    }
+    
+    private void runPrivoxyShellCmd () throws Exception
+    {
+    	
+    	logNotice( "Starting privoxy process");
+    	
+			int privoxyProcId = TorServiceUtils.findProcessId(privoxyPath);
+
+			StringBuilder log = null;
+			
+			int attempts = 0;
+			
+    		if (privoxyProcId == -1)
+    		{
+    			log = new StringBuilder();
+    			
+    			String privoxyConfigPath = appBinHome + PRIVOXYCONFIG_ASSET_KEY;
+    			
+    			String[] cmds = 
+    			{ privoxyPath + " " + privoxyConfigPath + " &" };
+    			
+    			logNotice (cmds[0]); 
+    			
+    			boolean runAsRoot = false;
+    			boolean waitFor = false;
+    			
+    			TorServiceUtils.doShellCommand(cmds, log, runAsRoot, waitFor);
+    			
+    			//wait one second to make sure it has started up
+    			Thread.sleep(1000);
+    			
+    			while ((privoxyProcId = TorServiceUtils.findProcessId(privoxyPath)) == -1  && attempts < MAX_START_TRIES)
+    			{
+    				logNotice("Couldn't find Privoxy process... retrying...\n" + log);
+    				Thread.sleep(3000);
+    				attempts++;
+    			}
+    			
+    			
+    			logNotice(log.toString());
+    		}
+    		
+			sendCallbackLogMessage("Privoxy is running on port: " + PORT_HTTP);
+			
+    		logNotice("Privoxy process id=" + privoxyProcId);
+			
+    		
+    		
+    }
+    
+    /*
+	public String generateHashPassword ()
+	{
+		
+		PasswordDigest d = PasswordDigest.generateDigest();
+	      byte[] s = d.getSecret(); // pass this to authenticate
+	      String h = d.getHashedPassword(); // pass this to the Tor on startup.
+
+		return null;
+	}*/
+	
+	public void initControlConnection () throws Exception, RuntimeException
+	{
+			while (true)
+			{
+				try
+				{
+					logNotice( "Connecting to control port: " + TOR_CONTROL_PORT);
+					
+					String baseMessage = getString(R.string.tor_process_connecting);
+					sendCallbackStatusMessage(baseMessage);
+					
+					torConnSocket = new Socket(IP_LOCALHOST, TOR_CONTROL_PORT);
+			        conn = TorControlConnection.getConnection(torConnSocket);
+			        
+			      //  conn.authenticate(new byte[0]); // See section 3.2
+			        
+					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2));
+
+					logNotice( "SUCCESS connected to control port");
+			        
+			        String torAuthCookie = appDataHome + TOR_CONTROL_COOKIE;
+			        
+			        File fileCookie = new File(torAuthCookie);
+			        
+			        if (fileCookie.exists())
+			        {
+				        byte[] cookie = new byte[(int)fileCookie.length()];
+				        new FileInputStream(new File(torAuthCookie)).read(cookie);
+				        conn.authenticate(cookie);
+				        		
+				        logNotice( "SUCCESS authenticated to control port");
+				        
+						sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step2) + getString(R.string.tor_process_connecting_step3));
+	
+				        addEventHandler();
+				        
+			        }
+			        
+			        break; //don't need to retry
+				}
+				catch (Exception ce)
+				{
+					conn = null;
+					Log.d(TAG,"Attempt: Error connecting to control port: " + ce.getLocalizedMessage(),ce);
+					
+					sendCallbackStatusMessage(getString(R.string.tor_process_connecting_step4));
+
+					Thread.sleep(1000);
+										
+				}	
+			}
+		
+		
+
+	}
+	
+	
+	/*
+	private void getTorStatus () throws IOException
+	{
+		try
+		{
+			 
+			if (conn != null)
+			{
+				 // get a single value.
+			      
+			       // get several values
+			       
+			       if (currentStatus == STATUS_CONNECTING)
+			       {
+				       //Map vals = conn.getInfo(Arrays.asList(new String[]{
+				         // "status/bootstrap-phase", "status","version"}));
+			
+				       String bsPhase = conn.getInfo("status/bootstrap-phase");
+				       Log.d(TAG, "bootstrap-phase: " + bsPhase);
+				       
+				       
+			       }
+			       else
+			       {
+			    	 //  String status = conn.getInfo("status/circuit-established");
+			    	 //  Log.d(TAG, "status/circuit-established=" + status);
+			       }
+			}
+		}
+		catch (Exception e)
+		{
+			Log.d(TAG, "Unable to get Tor status from control port");
+			currentStatus = STATUS_UNAVAILABLE;
+		}
+		
+	}*/
+	
+	
+	public void addEventHandler () throws IOException
+	{
+	       // We extend NullEventHandler so that we don't need to provide empty
+	       // implementations for all the events we don't care about.
+	       // ...
+		logNotice( "adding control port event handler");
+
+		conn.setEventHandler(this);
+	    
+		conn.setEvents(Arrays.asList(new String[]{
+	          "ORCONN", "CIRC", "NOTICE", "WARN", "ERR"}));
+	      // conn.setEvents(Arrays.asList(new String[]{
+	        //  "DEBUG", "INFO", "NOTICE", "WARN", "ERR"}));
+
+		logNotice( "SUCCESS added control port event handler");
+	    
+	    
+
+	}
+	
+		/**
+		 * Returns the port number that the HTTP proxy is running on
+		 */
+		public int getHTTPPort() throws RemoteException {
+			return TorServiceConstants.PORT_HTTP;
+		}
+
+		/**
+		 * Returns the port number that the SOCKS proxy is running on
+		 */
+		public int getSOCKSPort() throws RemoteException {
+			return TorServiceConstants.PORT_SOCKS;
+		}
+
+
+		
+		
+		public int getProfile() throws RemoteException {
+			//return mProfile;
+			return PROFILE_ON;
+		}
+		
+		public void setTorProfile(int profile)  {
+			logNotice("Tor profile set to " + profile);
+			
+			if (profile == PROFILE_ON)
+			{
+ 				currentStatus = STATUS_CONNECTING;
+	            sendCallbackStatusMessage ("starting...");
+
+	            Thread thread = new Thread(this);
+	            thread.start();
+	           
+			}
+			else if (profile == PROFILE_OFF)
+			{
+				currentStatus = STATUS_OFF;
+	            sendCallbackStatusMessage ("shutting down...");
+	            
+				_torInstance.stopTor();
+
+				
+			}
+		}
+
+
+
+	public void message(String severity, String msg) {
+		
+		
+		logNotice(  "[Tor Control Port] " + severity + ": " + msg);
+          
+          if (msg.indexOf(TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)!=-1)
+          {
+        	  currentStatus = STATUS_ON;
+        	
+
+   		   	getHiddenServiceHostname ();
+   		   
+          }
+          
+          
+    	  showToolbarNotification (getString(R.string.status_activated),NOTIFY_ID,R.drawable.tornotificationon);
+    		 
+          sendCallbackStatusMessage (msg);
+          
+	}
+
+	private void showAlert(String title, String msg)
+	{
+		 /*
+		 new AlertDialog.Builder(this)
+         .setTitle(title)
+         .setMessage(msg)
+         .setPositiveButton(android.R.string.ok, null)
+         .show();
+         */
+		showToolbarNotification(msg, NOTIFY_ID, R.drawable.tornotification);
+	}
+	
+	public void newDescriptors(List<String> orList) {
+		
+	}
+
+
+	public void orConnStatus(String status, String orName) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("orConnStatus (");
+			sb.append((orName) );
+			sb.append("): ");
+			sb.append(status);
+			
+			logNotice(sb.toString());
+		}
+	}
+
+
+	public void streamStatus(String status, String streamID, String target) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("StreamStatus (");
+			sb.append((streamID));
+			sb.append("): ");
+			sb.append(status);
+			
+			logNotice(sb.toString());
+		}
+	}
+
+
+	public void unrecognized(String type, String msg) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Message (");
+			sb.append(type);
+			sb.append("): ");
+			sb.append(msg);
+			
+			logNotice(sb.toString());
+		}
+		
+	}
+
+	public void bandwidthUsed(long read, long written) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Bandwidth used: ");
+			sb.append(read/1000);
+			sb.append("kb read / ");
+			sb.append(written/1000);
+			sb.append("kb written");
+			
+			logNotice(sb.toString());
+		}
+
+	}
+
+	public void circuitStatus(String status, String circID, String path) {
+		
+		if (ENABLE_DEBUG_LOG)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append("Circuit (");
+			sb.append((circID));
+			sb.append("): ");
+			sb.append(status);
+			sb.append("; ");
+			sb.append(path);
+			
+			logNotice(sb.toString());
+		}
+		
+	}
+	
+    public IBinder onBind(Intent intent) {
+        // Select the interface to return.  If your service only implements
+        // a single interface, you can just return it here without checking
+        // the Intent.
+        
+    	_torInstance = this;
+    	
+		try
+		{
+	
+			checkTorBinaries();
+    	
+		}
+		catch (Exception e)
+		{
+			logNotice("unable to find tor binaries: " + e.getMessage());
+	    	showToolbarNotification(e.getMessage(), NOTIFY_ID, R.drawable.tornotificationerr);
+
+			Log.d(TAG,"Unable to check for Tor binaries",e);
+			return null;
+		}
+    	
+		findExistingProc ();
+		
+    	if (ITorService.class.getName().equals(intent.getAction())) {
+            return mBinder;
+        }
+        
+
+        return null;
+    }
+	
+    /**
+     * This is a list of callbacks that have been registered with the
+     * service.  Note that this is package scoped (instead of private) so
+     * that it can be accessed more efficiently from inner classes.
+     */
+    final RemoteCallbackList<ITorServiceCallback> mCallbacks
+            = new RemoteCallbackList<ITorServiceCallback>();
+
+
+    /**
+     * The IRemoteInterface is defined through IDL
+     */
+    private final ITorService.Stub mBinder = new ITorService.Stub() {
+    	
+       
+		public void registerCallback(ITorServiceCallback cb) {
+            if (cb != null) mCallbacks.register(cb);
+        }
+        public void unregisterCallback(ITorServiceCallback cb) {
+            if (cb != null) mCallbacks.unregister(cb);
+        }
+        public int getStatus () {
+        	return getTorStatus();
+        }
+        
+        public void setProfile (int profile)
+        {
+        	setTorProfile(profile);
+        	
+        }
+        
+        public void processSettings ()
+        {
+        	
+        	
+        	try {
+				applyPreferences();
+			} catch (RemoteException e) {
+				logException ("error applying prefs",e);
+			}
+        	
+        }
+        
+        
+        
+        public String getConfiguration (String name)
+        {
+        	try
+        	{
+	        	if (conn != null)
+	        	{
+	        		StringBuffer result = new StringBuffer();
+	        		
+	        		List<ConfigEntry> listCe = conn.getConf(name);
+	        		
+	        		Iterator<ConfigEntry> itCe = listCe.iterator();
+	        		ConfigEntry ce = null;
+	        		
+	        		while (itCe.hasNext())
+	        		{
+	        			ce = itCe.next();
+	        			
+	        			result.append(ce.key);
+	        			result.append(' ');
+	        			result.append(ce.value);
+	        			result.append('\n');
+	        		}
+	        		
+	   	       		return result.toString();
+	        	}
+        	}
+        	catch (IOException ioe)
+        	{
+        		Log.e(TAG, "Unable to update Tor configuration", ioe);
+        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
+        	}
+        	
+        	return null;
+        }
+        
+        /**
+         * Set configuration
+         **/
+        public boolean updateConfiguration (String name, String value, boolean saveToDisk)
+        {
+        	if (configBuffer == null)
+        		configBuffer = new ArrayList<String>();
+	        
+        	if (resetBuffer == null)
+        		resetBuffer = new ArrayList<String>();
+	        
+        	if (value == null || value.length() == 0)
+        	{
+        		resetBuffer.add(name);
+        		/*
+        		if (conn != null)
+        		{
+        			try {
+						conn.resetConf(Arrays.asList(new String[]{name}));
+					} catch (IOException e) {
+						Log.w(TAG, "Unable to reset conf",e);
+					}
+        		}*/
+        	}
+        	else
+        		configBuffer.add(name + ' ' + value);
+	        
+        	return false;
+        }
+         
+	    public boolean saveConfiguration ()
+	    {
+	    	try
+        	{
+	        	if (conn != null)
+	        	{
+	        		
+	        		 if (resetBuffer != null && resetBuffer.size() > 0)
+				        {	
+				        	conn.resetConf(resetBuffer);
+				        	resetBuffer = null;
+				        }
+	   	       
+	        		 if (configBuffer != null && configBuffer.size() > 0)
+				        {
+	        			 	
+				        	conn.setConf(configBuffer);
+				        	configBuffer = null;
+				        }
+	   	       
+	   	       		// Flush the configuration to disk.
+	        		//this is doing bad things right now NF 22/07/10
+	   	       		//conn.saveConf();
+	
+	   	       		return true;
+	        	}
+        	}
+        	catch (Exception ioe)
+        	{
+        		Log.e(TAG, "Unable to update Tor configuration", ioe);
+        		logNotice("Unable to update Tor configuration: " + ioe.getMessage());
+        	}
+        	
+        	return false;
+        	
+	    }
+    };
+    
+    private ArrayList<String> callbackBuffer = new ArrayList<String>();
+    private boolean inCallbackStatus = false;
+    private boolean inCallback = false;
+    
+    private synchronized void sendCallbackStatusMessage (String newStatus)
+    {
+    	 
+    	if (mCallbacks == null)
+    		return;
+    	
+        // Broadcast to all clients the new value.
+        final int N = mCallbacks.beginBroadcast();
+        
+        inCallback = true;
+        
+        if (N > 0)
+        {
+        	 for (int i=0; i<N; i++) {
+		            try {
+		                mCallbacks.getBroadcastItem(i).statusChanged(newStatus);
+		                
+		                
+		            } catch (RemoteException e) {
+		                // The RemoteCallbackList will take care of removing
+		                // the dead object for us.
+		            }
+		        }
+        }
+        
+        mCallbacks.finishBroadcast();
+        inCallback = false;
+    }
+    
+    private synchronized void sendCallbackLogMessage (String logMessage)
+    {
+    	 
+    	if (mCallbacks == null)
+    		return;
+    	
+    	callbackBuffer.add(logMessage);
+
+    	if (!inCallback)
+    	{
+
+	        inCallback = true;
+	        // Broadcast to all clients the new value.
+	        final int N = mCallbacks.beginBroadcast();
+	        
+	
+	        if (N > 0)
+	        {
+	        
+	        	Iterator<String> it = callbackBuffer.iterator();
+	        	String status = null;
+	        	
+	        	while (it.hasNext())
+	        	{
+	        		status = it.next();
+	        		
+			        for (int i=0; i<N; i++) {
+			            try {
+			                mCallbacks.getBroadcastItem(i).logMessage(status);
+			                
+			            } catch (RemoteException e) {
+			                // The RemoteCallbackList will take care of removing
+			                // the dead object for us.
+			            }
+			        }
+	        	}
+		        
+		        callbackBuffer.clear();
+	        }
+	        
+	        mCallbacks.finishBroadcast();
+	        inCallback = false;
+    	}
+    	
+    }
+    
+    private boolean applyPreferences () throws RemoteException
+    {
+    	
+    	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+		
+    	ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
+    	Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
+    		
+		boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
+		
+		//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
+
+        boolean becomeRelay = prefs.getBoolean(TorConstants.PREF_OR, false);
+
+        boolean ReachableAddresses = prefs.getBoolean(TorConstants.PREF_REACHABLE_ADDRESSES,false);
+
+        boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", false);
+
+		//boolean enableTransparentProxy = prefs.getBoolean(TorConstants.PREF_TRANSPARENT, false);
+		
+        if (currentStatus == STATUS_ON)
+        {
+        	//reset iptables rules in active mode
+        
+			try
+			{
+				setupTransProxy(true); 		
+			}
+			catch (Exception e)
+			{
+				logException("unable to setup transproxy",e);
+			}
+        }
+		
+		if (useBridges)
+		{
+			String bridgeList = prefs.getString(TorConstants.PREF_BRIDGES_LIST,"");
+
+			if (bridgeList == null || bridgeList.length() == 0)
+			{
+			
+				showAlert("Bridge Error","In order to use the bridge feature, you must enter at least one bridge IP address." +
+						"Send an email to bridges at torproject.org with the line \"get bridges\" by itself in the body of the mail from a gmail account.");
+				
+			
+				return false;
+			}
+			
+			
+			mBinder.updateConfiguration("UseBridges", "1", false);
+				
+			String bridgeDelim = "\n";
+			
+			if (bridgeList.indexOf(",") != -1)
+			{
+				bridgeDelim = ",";
+			}
+			
+			StringTokenizer st = new StringTokenizer(bridgeList,bridgeDelim);
+			while (st.hasMoreTokens())
+			{
+
+				mBinder.updateConfiguration("bridge", st.nextToken(), false);
+
+			}
+			
+			mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
+			
+		}
+		else
+		{
+			mBinder.updateConfiguration("UseBridges", "0", false);
+
+		}
+
+        try
+        {
+            if (ReachableAddresses)
+            {
+                String ReachableAddressesPorts =
+                    prefs.getString(TorConstants.PREF_REACHABLE_ADDRESSES_PORTS, "*:80,*:443");
+                
+                mBinder.updateConfiguration("ReachableAddresses", ReachableAddressesPorts, false);
+
+            }
+            else
+            {
+                mBinder.updateConfiguration("ReachableAddresses", "", false);
+            }
+        }
+        catch (Exception e)
+        {
+           showAlert("Config Error","Your ReachableAddresses settings caused an exception!");
+           
+           return false;
+        }
+
+        try
+        {
+            if (becomeRelay && (!useBridges) && (!ReachableAddresses))
+            {
+                int ORPort =  Integer.parseInt(prefs.getString(TorConstants.PREF_OR_PORT, "9001"));
+                String nickname = prefs.getString(TorConstants.PREF_OR_NICKNAME, "Orbot");
+
+                mBinder.updateConfiguration("ORPort", ORPort + "", false);
+    			mBinder.updateConfiguration("Nickname", nickname, false);
+    			mBinder.updateConfiguration("ExitPolicy", "reject *:*", false);
+
+            }
+            else
+            {
+            	mBinder.updateConfiguration("ORPort", "", false);
+    			mBinder.updateConfiguration("Nickname", "", false);
+    			mBinder.updateConfiguration("ExitPolicy", "", false);
+            }
+        }
+        catch (Exception e)
+        {
+            showAlert("Uh-oh!","Your relay settings caused an exception!");
+          
+            return false;
+        }
+
+        if (enableHiddenServices)
+        {
+        	mBinder.updateConfiguration("HiddenServiceDir",appDataHome, false);
+        	
+        	String hsPorts = prefs.getString("pref_hs_ports","");
+        	
+        	StringTokenizer st = new StringTokenizer (hsPorts,",");
+        	String hsPortConfig = null;
+        	
+        	while (st.hasMoreTokens())
+        	{
+        		hsPortConfig = st.nextToken();
+        		
+        		if (hsPortConfig.indexOf(":")==-1) //setup the port to localhost if not specifed
+        		{
+        			hsPortConfig = hsPortConfig + " 127.0.0.1:" + hsPortConfig;
+        		}
+        		
+        		mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
+        	}
+        	
+        	
+        }
+        else
+        {
+        	mBinder.updateConfiguration("HiddenServiceDir","", false);
+        	
+        }
+        
+        mBinder.saveConfiguration();
+	
+        return true;
+    }
+    
+   
+   
+}

Deleted: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-05-03 05:58:58 UTC (rev 24716)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -1,434 +0,0 @@
-package org.torproject.android.service;
-
-import java.io.File;
-
-import org.torproject.android.TorifiedApp;
-
-import android.content.Context;
-import android.util.Log;
-
-public class TorTransProxy implements TorServiceConstants {
-	
-	private final static String TAG = TorServiceConstants.TAG;
-		
-
-	
-	public static int purgeIptables(Context context) throws Exception {
-		
-	String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	final StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -F || exit\n");
-	
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -F || exit\n");
-    	
-    	String[] cmd = {script.toString()};	    	
-		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
-		String msg = res.toString();
-		
-		TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
-			
-		
-		return code;
-	
-	}
-	
-	/*
-	public static int purgeIptablesByApp(Context context, TorifiedApp[] apps) throws Exception {
-
-		//restoreDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	final StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		for (int i = 0; i < apps.length; i++)
-		{
-			//flush nat for every app
-			script.append(ipTablesPath);
-			script.append(" -t nat -m owner --uid-owner ");
-			script.append(apps[i].getUid());
-			script.append(" -F || exit\n");
-		
-			script.append(ipTablesPath);
-			script.append(" -t filter -m owner --uid-owner ");
-			script.append(apps[i].getUid());
-			script.append(" -F || exit\n");
-				
-		}
-		
-    	
-    	String[] cmd = {script.toString()};	    	
-		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
-		String msg = res.toString();
-		logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
-			
-		
-		return code;
-		
-	}*/
-	
-	
-	/*
-	 // 9/19/2010 - NF This code is in process... /etc path on System partition
-	 // is read-only on Android for now.
-	public static int redirectDNSResolvConf () throws Exception
-	{
-    	StringBuilder script = new StringBuilder();
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		//mv resolv.conf to resolve.conf.bak
-		String cmd = "mv /etc/resolv.conf /etc/resolv.conf.bak";
-		script.append(cmd);
-		
-		//create new resolve.conf pointing to localhost/127.0.0.1
-		cmd = "echo \"nameserver 127.0.0.1\" > /etc/resolv.conf";
-		script.append(cmd);
-		
-		String[] cmdFlush = {script.toString()};
-		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
-		//String msg = res.toString(); //get stdout from command
-		
-		
-		return code;
-	}
-	
-	public static int restoreDNSResolvConf () throws Exception
-	{
-		StringBuilder script = new StringBuilder();
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-		//mv resolv.conf to resolve.conf.bak
-		String cmd = "mv /etc/resolv.conf.bak /etc/resolv.conf";
-		script.append(cmd);
-		script.append(" || exit\n");
-		
-		String[] cmdFlush = {script.toString()};
-		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
-		//String msg = res.toString(); //get stdout from command
-		
-		return code;
-	}
-	*/
-	
-	public static int testOwnerModule(Context context) throws Exception
-	{
-
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-    	int torUid = context.getApplicationInfo().uid;
-
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	// Allow everything for Tor
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -m owner --uid-owner ");
-		script.append(torUid);
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		
-		return code;
-    }	
-	
-	
-	
-	public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps) throws Exception
-	{
-
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	purgeIptables(context);
-				
-		//build up array of shell cmds to execute under one root context
-		for (int i = 0; i < apps.length; i++)
-		{
-
-			if (apps[i].isTorified()) //if app is set to true
-			{
-				
-				if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
-				{
-					//should never trans proxy the Orbot app (and Tor or Privoxy) itself
-					continue;
-				}
-				
-				TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
-			 
-				//TCP
-				script.append(ipTablesPath);
-				script.append(" -t nat");
-				script.append(" -A OUTPUT -p tcp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m tcp --syn");
-				script.append(" -j REDIRECT --to-ports ");
-				script.append(TOR_TRANSPROXY_PORT);
-				script.append(" || exit\n");
-				
-				//DNS
-				script.append(ipTablesPath);
-				script.append(" -t nat");
-				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m udp --dport "); 
-				script.append(STANDARD_DNS_PORT);
-				script.append(" -j REDIRECT --to-ports ");
-				script.append(TOR_DNS_PORT);
-				script.append(" || exit\n");
-				
-				script.append(ipTablesPath);
-				script.append(" -t filter");
-				script.append(" -A OUTPUT -p tcp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m tcp --dport ");
-				script.append(TOR_TRANSPROXY_PORT);
-				script.append(" -j ACCEPT");
-				script.append(" || exit\n");
-				
-				script.append(ipTablesPath);
-				script.append(" -t filter");
-				script.append(" -A OUTPUT -p udp");
-				script.append(" -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -m udp --dport ");
-				script.append(TOR_DNS_PORT);
-				script.append(" -j ACCEPT");
-				script.append(" || exit\n");
-									
-				script.append(ipTablesPath);
-				script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
-				script.append(apps[i].getUid());
-				script.append(" -j DROP"); //drop all other packets as Tor won't handle them
-				script.append(" || exit\n");
-				
-				
-			}		
-		}
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		
-		return code;
-    }	
-	
-	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
-	{
-
-		//android.os.Debug.waitForDebugger();
-		
-		//redirectDNSResolvConf(); //not working yet
-		
-		//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	purgeIptables(context);
-		
-		//TCP
-		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
-
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p tcp");
-		script.append(" --dport ");
-		script.append(port);
-		//script.append(" -m tcp --syn");
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp");
-		script.append(" --dport ");
-		script.append(port);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		//DNS
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp ");
-		script.append(" -m udp --dport "); 
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_DNS_PORT);
-		script.append(" || exit\n");
-		
-    	
-    	String[] cmdAdd = {script.toString()};    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-		return code;
-    }
-
-	public static int setTransparentProxyingAll(Context context) throws Exception 
-	{
-		boolean runRoot = true;
-    	boolean waitFor = true;
-    	
-		//redirectDNSResolvConf(); //not working yet
-		
-		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
-		
-    	StringBuilder script = new StringBuilder();
-    	
-    	StringBuilder res = new StringBuilder();
-    	int code = -1;
-    	
-    	purgeIptables(context);
-    	
-    	int torUid = context.getApplicationInfo().uid;
-
-    	// Set up port redirection
-    	script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p tcp");
-		script.append(" -m owner ! --uid-owner ");
-		script.append(torUid);
-		script.append(" -m tcp --syn");
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_TRANSPROXY_PORT);
-		script.append(" || exit\n");
-		
-		// Same for DNS
-		script.append(ipTablesPath);
-		script.append(" -t nat");
-		script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
-		script.append(torUid);
-		script.append(" -m udp --dport "); 
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REDIRECT --to-ports ");
-		script.append(TOR_DNS_PORT);
-		script.append(" || exit\n");
-		
-		// Allow packets to localhost (contains all the port-redirected ones)
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -d 127.0.0.1");
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		// Allow loopback
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -o lo");
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		// Allow everything for Tor
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -m owner --uid-owner ");
-		script.append(torUid);
-		script.append(" -j ACCEPT");
-		script.append(" || exit\n");
-		
-		if (TorService.ENABLE_DEBUG_LOG)
-		{
-			//XXX: Comment the following rules for non-debug builds
-			script.append(ipTablesPath);
-			script.append(" -t filter");
-			script.append(" -A OUTPUT");
-			script.append(" -p udp");
-			script.append(" --dport ");
-			script.append(STANDARD_DNS_PORT);
-			script.append(" -j LOG");
-			script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
-			script.append(" --log-uid");
-			script.append(" || exit\n");
-			script.append(ipTablesPath);
-			script.append(" -t filter");
-			script.append(" -A OUTPUT");
-			script.append(" -p tcp");
-			script.append(" -j LOG");
-			script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
-			script.append(" --log-uid");
-			script.append(" || exit\n");
-		}
-		
-		// Reject DNS that is not from Tor (order is important - first matched rule counts!)
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p udp");
-		script.append(" --dport ");
-		script.append(STANDARD_DNS_PORT);
-		script.append(" -j REJECT");
-		script.append(" || exit\n");
-		
-		// Reject all other outbound TCP packets
-		script.append(ipTablesPath);
-		script.append(" -t filter");
-		script.append(" -A OUTPUT");
-		script.append(" -p tcp");
-		script.append(" -j REJECT");
-		script.append(" || exit\n");
-		
-		String[] cmdAdd = {script.toString()};    	
-    	
-		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
-		String msg = res.toString();
-		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
-		
-    	return code;
-	}	
-	
-
-}

Copied: projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java (from rev 24735, projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java)
===================================================================
--- projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java	                        (rev 0)
+++ projects/android/tags/0.2.2.25-alpha-orbot-1.0.5-RC1/src/org/torproject/android/service/TorTransProxy.java	2011-05-16 03:55:02 UTC (rev 24756)
@@ -0,0 +1,479 @@
+package org.torproject.android.service;
+
+import java.io.File;
+
+import org.torproject.android.TorifiedApp;
+
+import android.content.Context;
+import android.util.Log;
+
+public class TorTransProxy implements TorServiceConstants {
+	
+	private final static String TAG = TorServiceConstants.TAG;
+		
+
+	
+	public static int purgeIptables(Context context) throws Exception {
+		
+	String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	final StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -F || exit\n");
+	
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -F || exit\n");
+    	
+    	String[] cmd = {script.toString()};	    	
+		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
+		String msg = res.toString();
+		
+		TorService.logMessage(cmd[0] + ";errCode=" + code + ";resp=" + msg);
+			
+		
+		return code;
+	
+	}
+	
+	/*
+	public static int purgeIptablesByApp(Context context, TorifiedApp[] apps) throws Exception {
+
+		//restoreDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	final StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		for (int i = 0; i < apps.length; i++)
+		{
+			//flush nat for every app
+			script.append(ipTablesPath);
+			script.append(" -t nat -m owner --uid-owner ");
+			script.append(apps[i].getUid());
+			script.append(" -F || exit\n");
+		
+			script.append(ipTablesPath);
+			script.append(" -t filter -m owner --uid-owner ");
+			script.append(apps[i].getUid());
+			script.append(" -F || exit\n");
+				
+		}
+		
+    	
+    	String[] cmd = {script.toString()};	    	
+		code = TorServiceUtils.doShellCommand(cmd, res, true, true);		
+		String msg = res.toString();
+		logNotice(cmd[0] + ";errCode=" + code + ";resp=" + msg);
+			
+		
+		return code;
+		
+	}*/
+	
+	
+	/*
+	 // 9/19/2010 - NF This code is in process... /etc path on System partition
+	 // is read-only on Android for now.
+	public static int redirectDNSResolvConf () throws Exception
+	{
+    	StringBuilder script = new StringBuilder();
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		//mv resolv.conf to resolve.conf.bak
+		String cmd = "mv /etc/resolv.conf /etc/resolv.conf.bak";
+		script.append(cmd);
+		
+		//create new resolve.conf pointing to localhost/127.0.0.1
+		cmd = "echo \"nameserver 127.0.0.1\" > /etc/resolv.conf";
+		script.append(cmd);
+		
+		String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		
+		return code;
+	}
+	
+	public static int restoreDNSResolvConf () throws Exception
+	{
+		StringBuilder script = new StringBuilder();
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+		//mv resolv.conf to resolve.conf.bak
+		String cmd = "mv /etc/resolv.conf.bak /etc/resolv.conf";
+		script.append(cmd);
+		script.append(" || exit\n");
+		
+		String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		return code;
+	}
+	*/
+	
+	public static int testOwnerModule(Context context) throws Exception
+	{
+
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+    	int torUid = context.getApplicationInfo().uid;
+
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	// Allow everything for Tor
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -m owner --uid-owner ");
+		script.append(torUid);
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+    }	
+	
+	
+	
+	public static int setTransparentProxyingByApp(Context context, TorifiedApp[] apps) throws Exception
+	{
+
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	purgeIptables(context);
+				
+		//build up array of shell cmds to execute under one root context
+		for (int i = 0; i < apps.length; i++)
+		{
+
+			if (apps[i].isTorified()) //if app is set to true
+			{
+				
+				if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
+				{
+					//should never trans proxy the Orbot app (and Tor or Privoxy) itself
+					continue;
+				}
+				
+				TorService.logMessage("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
+			 
+				//TCP
+				script.append(ipTablesPath);
+				script.append(" -t nat");
+				script.append(" -A OUTPUT -p tcp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m tcp --syn");
+				script.append(" -j REDIRECT --to-ports ");
+				script.append(TOR_TRANSPROXY_PORT);
+				script.append(" || exit\n");
+				
+				//DNS
+				script.append(ipTablesPath);
+				script.append(" -t nat");
+				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m udp --dport "); 
+				script.append(STANDARD_DNS_PORT);
+				script.append(" -j REDIRECT --to-ports ");
+				script.append(TOR_DNS_PORT);
+				script.append(" || exit\n");
+				
+				script.append(ipTablesPath);
+				script.append(" -t filter");
+				script.append(" -A OUTPUT -p tcp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m tcp --dport ");
+				script.append(TOR_TRANSPROXY_PORT);
+				script.append(" -j ACCEPT");
+				script.append(" || exit\n");
+				
+				script.append(ipTablesPath);
+				script.append(" -t filter");
+				script.append(" -A OUTPUT -p udp");
+				script.append(" -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -m udp --dport ");
+				script.append(TOR_DNS_PORT);
+				script.append(" -j ACCEPT");
+				script.append(" || exit\n");
+									
+				script.append(ipTablesPath);
+				script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
+				script.append(apps[i].getUid());
+				script.append(" -j DROP"); //drop all other packets as Tor won't handle them
+				script.append(" || exit\n");
+				
+				
+			}		
+		}
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+    }	
+	
+	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
+	{
+
+		//android.os.Debug.waitForDebugger();
+		
+		//redirectDNSResolvConf(); //not working yet
+		
+		//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	purgeIptables(context);
+		
+		//TCP
+		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
+
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" --dport ");
+		script.append(port);
+		//script.append(" -m tcp --syn");
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp");
+		script.append(" --dport ");
+		script.append(port);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		//DNS
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp ");
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_DNS_PORT);
+		script.append(" || exit\n");
+		
+    	
+    	String[] cmdAdd = {script.toString()};    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		return code;
+    }
+
+	public static int enableWifiHotspotRules (Context context) throws Exception
+	{
+		
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    
+    	script.append(ipTablesPath);
+		script.append(" -I FORWARD");
+		script.append(" -m state --state ESTABLISHED,RELATED -j ACCEPT");
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -I FORWARD");
+		script.append(" -s 192.168.43.0/24 -j ACCEPT");
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -P FORWARD DROP");
+		script.append(" || exit\n");
+		
+		script.append(ipTablesPath);
+		script.append(" -t nat -I POSTROUTING -s 192.168.43.0/24 -j MASQUERADE");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		
+		return code;
+	}
+	
+	public static int setTransparentProxyingAll(Context context) throws Exception 
+	{
+		boolean runRoot = true;
+    	boolean waitFor = true;
+    	
+		//redirectDNSResolvConf(); //not working yet
+		
+		String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	purgeIptables(context);
+    	
+    	//enableWifiHotspotRules(context);
+    	
+    	int torUid = context.getApplicationInfo().uid;
+
+    	// Set up port redirection
+    	script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" -m owner ! --uid-owner ");
+		script.append(torUid);
+		script.append(" -m tcp --syn");
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_TRANSPROXY_PORT);
+		script.append(" || exit\n");
+		
+		// Same for DNS
+		script.append(ipTablesPath);
+		script.append(" -t nat");
+		script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
+		script.append(torUid);
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REDIRECT --to-ports ");
+		script.append(TOR_DNS_PORT);
+		script.append(" || exit\n");
+		
+		// Allow packets to localhost (contains all the port-redirected ones)
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -d 127.0.0.1");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		// Allow loopback
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -o lo");
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		// Allow everything for Tor
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -m owner --uid-owner ");
+		script.append(torUid);
+		script.append(" -j ACCEPT");
+		script.append(" || exit\n");
+		
+		if (TorService.ENABLE_DEBUG_LOG)
+		{
+			//XXX: Comment the following rules for non-debug builds
+			script.append(ipTablesPath);
+			script.append(" -t filter");
+			script.append(" -A OUTPUT");
+			script.append(" -p udp");
+			script.append(" --dport ");
+			script.append(STANDARD_DNS_PORT);
+			script.append(" -j LOG");
+			script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
+			script.append(" --log-uid");
+			script.append(" || exit\n");
+			script.append(ipTablesPath);
+			script.append(" -t filter");
+			script.append(" -A OUTPUT");
+			script.append(" -p tcp");
+			script.append(" -j LOG");
+			script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
+			script.append(" --log-uid");
+			script.append(" || exit\n");
+		}
+		
+		// Reject DNS that is not from Tor (order is important - first matched rule counts!)
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p udp");
+		script.append(" --dport ");
+		script.append(STANDARD_DNS_PORT);
+		script.append(" -j REJECT");
+		script.append(" || exit\n");
+		
+		// Reject all other outbound TCP packets
+		script.append(ipTablesPath);
+		script.append(" -t filter");
+		script.append(" -A OUTPUT");
+		script.append(" -p tcp");
+		script.append(" -j REJECT");
+		script.append(" || exit\n");
+		
+		String[] cmdAdd = {script.toString()};    	
+    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
+		String msg = res.toString();
+		TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+    	return code;
+	}	
+	
+
+}



More information about the tor-commits mailing list