Compare commits

..

No commits in common. "master" and "0.2.2.14-alpha-orbot-1.0.4" have entirely different histories.

209 changed files with 14661 additions and 212241 deletions

68
.gitignore vendored
View File

@ -1,68 +0,0 @@
# auto-generated files from Android builds
build.xml
ant.properties
default.properties
proguard.cfg
proguard-project.txt
#
releases
docs
doc
.directory
#built application files
*.apk
*.ap_
# files for the dex VM
*.dex
# Java class files
*.class
# subdirs for generated files
bin/
gen/
# Local configuration file (sdk path, etc)
local.properties
# Windows thumbnail db
Thumbs.db
# OSX files
.DS_Store
# Android Studio
*.iml
.idea/
.gradle/
build/
#tfx
.transifexrc
/external/appcompat/bin/
/external/appcompat/gen/
/external/bin/
/external/include/
/external/*-build-stamp
/external/lib/
/external/privoxy/
/external/test.c
/external/test.h.gch
/external/translation/
bin
gen
native
libs/jtorctl.jar
local.properties
builds
external/patches/*
obj
app/src/main/jniLibs/
app/src/main/libs/
orbotservice/src/main/libs/
orbotservice/src/main/jniLibs/

20
.gitmodules vendored
View File

@ -1,20 +0,0 @@
[submodule "external/tor"]
path = external/tor
url = https://git.torproject.org/git/tor.git
ignore = dirty
[submodule "external/libevent"]
path = external/libevent
url = https://github.com/libevent/libevent.git
ignore = dirty
[submodule "external/openssl"]
path = external/openssl
url = https://github.com/openssl/openssl.git
ignore = dirty
[submodule "external/zstd"]
path = external/zstd
url = https://github.com/facebook/zstd.git
ignore = dirty
[submodule "external/xz"]
path = external/xz
url = https://git.tukaani.org/xz.git
ignore = dirty

View File

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Orbot</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/org.eclipse.cdt.managedbuilder.core.genmakebuilder.launch</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
<filteredResources>
<filter>
<id>1451443416388</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-external</arguments>
</matcher>
</filter>
<filter>
<id>1451443416398</id>
<name></name>
<type>26</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-jni</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>

44
AUTHORS
View File

@ -1,44 +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@freitas.net> developed the primary Android
application and managed the porting of Tor to Android.
Jake Appelbaum <jacob@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@guardianproject.info> has designed and implemented
new user interface components and layouts since the 1.0.4 release.
Contributors:
-------------
Nick Mathewson <nickm@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@torproject.org> 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@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.
Amogh Pradeep <amoghbl1@gmail.com> submitted a patch to address an issue
with the ongoing data transfer notification dying now and then, and is
working on improving the notification display in general
We found a nice new power button vector set here under the CC license:
http://vector4free.com/vector/free-vector-power-buttons/

45
BUILD
View File

@ -1,45 +0,0 @@
This document explains how to properly build an Android package of Orbot from
source.
Orbot includes, in the external directory, git repo submodules of:
- Tor
- OpenSSL (statically built and patched for Android)
- LibEvent
- JTorControl: The Tor Control Library for Java
Please install the following prerequisites (instructions for each follows):
ant: http://ant.apache.org/
Android Native Dev Kit or NDK (for C/C++ code):
http://developer.android.com/sdk/ndk/index.html
Android Software Dev Kit or SDK (for Java code):
http://developer.android.com/sdk/index.html
AutoMake and AutoConf tool
sudo apt-get install autotools-dev
sudo apt-get install automake
sudo apt-get install autogen autoconf libtool gettext-base autopoint
You will need to run the 'android' command in the SDK to install the necessary
Android platform supports (ICS 4.x or android-15)
Be sure that you have all of the git submodules up-to-date:
./tor-droid-make.sh fetch
To begin building, from the Orbot root directory, it builds all submodules and
the project.
./tor-droid-make.sh build
Now build the Android app
(gradle / android studio instructions here)
This will produce an unsigned Tor package 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

9
Orbot/.classpath Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="lib" path="libs/asocks.jar"/>
<classpathentry kind="lib" path="libs/jtorctrl.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

39
Orbot/.project Normal file
View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Orbot</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
<attributes>
<attribute name="hide" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
<classpathentry kind="output" path=""/>
</classpath>

View File

@ -0,0 +1 @@
org.eclipse.wst.jsdt.launching.baseBrowserLibrary

View File

@ -0,0 +1 @@
Window

27
Orbot/AUTHORS Normal file
View File

@ -0,0 +1,27 @@
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 http://guardianproject.info/
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@freitas.net> developed the primary Android
application and managed the porting of Tor to Android.
Jake Appelbaum <jacob@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.
Contributors:
-------------
Nick Mathewson <nickm@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.

59
Orbot/AndroidManifest.xml Normal file
View File

@ -0,0 +1,59 @@
<?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">
<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: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=".boot.OnbootBroadcastReceiver">
<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>

View File

@ -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="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>

View File

@ -0,0 +1,51 @@
<?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.14-orbot-alpha-1.0.3" android:versionCode="9">
<uses-permission android:name="android.permission.INTERNET" />
<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:name=".service.TorService" android:process=":remote">
<intent-filter>
<action android:name="org.torproject.android.service.ITorService" />
<action android:name="org.torproject.android.service.TOR_SERVICE" />
</intent-filter>
</service>
</application>
<uses-sdk android:minSdkVersion="4"/>
</manifest>

159
Orbot/BUILD Normal file
View File

@ -0,0 +1,159 @@
nThis 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!

96
Orbot/CHANGELOG Normal file
View File

@ -0,0 +1,96 @@
NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
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)

39
Orbot/INSTALL Normal file
View File

@ -0,0 +1,39 @@
Orbot: Android Onion Routing Robot
***********************************************
Android is a freely licensed open-source application developed for the
Android platform. It acts as a front-end to the Tor binary application,
and also provides an HTTP Proxy for connecting web browsers and other
HTTP client applications into the Tor SOCKS interface.
*** PreReqs ***
You need the Android Developer SDK to compile and build the APK file:
http://developer.android.com/
The project files including in this distribution are meant to be used
with Eclipse: http://eclipse.org/
*** How to use ***
Currently, Orbot will work with any application that supports using
an HTTP or SOCKS Proxy. Once you start Tor using Orbot, you can then
point your application to HTTP port 8118 or SOCKS port 9050 on localhost
IP 127.0.0.1.
You can also set the Android system-wide HTTP proxy using the Mobile
Network APN:
Settings->Mobile networks->Access Point Names->(select your Carrier APN):
Proxy: 127.0.0.1
Port:8118
** A Few Notes **
To ensure you are connected to the Tor network, you should browse to
https://check.torproject.org/
The first time you activate Orbot, it may take a while to connect to
Tor. Check the message log to ensure you are "100% Bootstrapped".
***********************************************
/* Copyright (c) 2009-2010, Nathan Freitas, The Guardian Project
* http://guardianproject.info/ */

View File

@ -1,10 +1,9 @@
This file contains the license for Orbot, a free software project to
provide anonymity on the Internet from a Google Android smartphone.
It also lists the licenses for other components used by Orbot, including
Tor, Privoxy, and iptables.
It also lists the licenses for other components used by Orbot.
For more information about Orbot, see https://guardianproject.info/apps/orbot
For more information about Orbot, see http://guardianproject.info/
If you got this file as a part of a larger bundle, there may be other
license terms that you should be aware of.
@ -42,55 +41,14 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****
===============================================================================
Orbot includes the Obfs4 pluggable transport:
https://gitweb.torproject.org/pluggable-transports/obfs4.git
Copyright (c) 2014, Yawning Angel <yawning at torproject dot org>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
===============================================================================
Orbot contains a binary distribution of the JSocks library:
http://code.google.com/p/jsocks-mirror/
which is licensed under the GNU Lesser General Public License:
http://www.gnu.org/licenses/lgpl.html
*****
*****
Orbot contains a binary distribution of Privoxy (http://www.privoxy.org/)
Copyright © 2001-2010 by Privoxy Developers <ijbswa-developers@lists.sourceforge.net>
http://www.privoxy.org/user-manual/copyright.html
Some source code is based on code Copyright © 1997 by Anonymous Coders and Junkbusters, Inc.
and licensed under the GNU General Public License.
Privoxy is free software; you can redistribute it and/or modify it under the terms of the
GNU General Public License, version 2, as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for details.
http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
Orbot contains the source code for HttpProxy developed and freely licensed
by: Julian Robichaux -- http://www.nsftools.com
******
Orbot contains a binary distribution of Tor:
@ -105,6 +63,7 @@ Orbot contains a binary distribution of Tor:
If you got this file as a part of a larger bundle,
there may be other license terms that you should be aware of.
===============================================================================
Tor is distributed under this license:
@ -182,43 +141,3 @@ http://ip-to-country.webhosting.info."
See the src/config/geoip file in particular.
===============================================================================
===============================================================================
Orbot also uses iptables from the Netfilter.org project
netfilter/iptables is - like all of the Linux Kernel - Free Software (sometimes
referred to as Open Source Software), distributed under the terms of the GNU GPLv2
only. Please, note that some source code files might differ, and in that case it
is explicitely stated in the header of every file.
The GPL also contains some obligations. If you distribute netfilter/iptables code
in binary form, you have to offer the source code, too.
===============================================================================
===============================================================================
Orbot also includes BadVPN tun2socks: https://github.com/ambrop72/badvpn
Copyright (c) 2009, Ambroz Bizjak <ambrop7@gmail.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
===============================================================================

27
Orbot/README Normal file
View File

@ -0,0 +1,27 @@
Orbot: Android Onion Routing Robot
***********************************************
Orbot is a freely licensed open-source application developed for the
Android platform. It acts as a front-end to the Tor binary application,
and also provides an HTTP Proxy for connecting web browsers and other
HTTP client applications into the Tor SOCKS interface.
***********************************************
Orbot is a component of the Guardian Project, an effort to develop
a secure, anonymous smartphone for use by human rights activists, journalists
and others around the world. Learn more: http://guardianproject.info/
***********************************************
Tor protects your privacy on the internet by hiding the connection
between your Internet address and the services you use. We believe Tor
is reasonably secure, but please ensure you read the instructions and
configure it properly. Learn more at https://torproject.org/
Tor Frequently Asked Questions:
https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ
https://www.torproject.org/faq.html.en
***********************************************
/* Copyright (c) 2009-2010, Nathan Freitas, The Guardian Project
* http://guardianproject.info/ */

14
Orbot/TODO Normal file
View File

@ -0,0 +1,14 @@
See http://bugs.noreply.org/flyspray/index.php?tasks=all&project=8
for the latest active bug and enhancment tickets.
In addition, here are some other big areas that need work:
- Android Java UI work: Improved home screen to show better statistics about data transferred (up/down), number of circuits connected, quality of connection and so on. The "Tether Wifi" Android application is a good model to follow in how it shows a realtime count of bytes transferred as well as notifications when wifi client connect. In addition, better display/handling of Tor system/error messages would also be very helpful. Finally, the addition of a wizard or tutorial walkthrough for novice users to explain to them exactly what or what is not anonymized or protected would greatly improve the likelihood they will use Orbot correctly.
- Android Java OS/Core app work: Better system-wide indicator either via the notification bar, "Toast" pop-up dialogs or some other indicator that an application's traffic is indeed moving through Orbot/Tor. For instance, right now you need to first go to a torcheck web service to ensure your browser is routing via Tor. Orbot should be able to notify you that circuits are being opened, used, etc. The aforementioned data transfer tracker might provide this type of awareness as well.
- Android Java Library/Community Outreach work: We need to package a simple library for use with third-party application to easily enable them to support "Torification" on non-root devices (aka w/o transparent proxying). This library should include a wrapper for the Apache HTTPClient library, a utility class for detecting the state of Orbot connectivity, and other relevant/useful things an Android app might need to anonymize itself. This work would include the creation of the library, documentation, and sample code. Outreach or effort to implement the library within other open-source apps would follow.
- Android OS/C/Linux work: The port of Tor to Android is basically a straight cross-compile to Linux ARM. There has been no work done in looking the optimization of Tor within a mobile hardware environment, on the ARM processor or other Android hardware, or on mobile networks. It should be noted, that even without optimization, Tor is handling the mobile network environment very well, automatically detecting change in IP addresses, reconnecting circuits, etc across switching from 2G to 3G to Wifi, and so forth.

View File

@ -0,0 +1,27 @@
# Generally, this file goes in /etc/privoxy/config
#
# Tor listens as a SOCKS4a proxy here:
forward-socks4a / 127.0.0.1:9050 .
confdir /data/data/org.torproject.android
logdir /data/data/org.torproject.android
# actionsfile standard # Internal purpose, recommended
#actionsfile default.action # Main actions file
#actionsfile user.action # User customizations
#filterfile default.filter
# Don't log interesting things, only startup messages, warnings and errors
#logfile logfile
#jarfile jarfile
#debug 1
#debug 0 # show each GET/POST/CONNECT request
#debug 4096 # Startup banner and warnings
#debug 8192 # Errors - *we highly recommended enabling this*
#user-manual /usr/share/doc/privoxy/user-manual
listen-address 127.0.0.1:8118
toggle 1
accept-intercepted-requests 1
enable-remote-toggle 0
enable-edit-actions 0
enable-remote-http-toggle 0
buffer-limit 4096

13
Orbot/assets/torrc Normal file
View File

@ -0,0 +1,13 @@
SocksPort 9050
SocksListenAddress 127.0.0.1
SafeSocks 1
Log notice stdout
DataDirectory /data/data/org.torproject.android/data
ControlPort 9051
CookieAuthentication 1
RelayBandwidthRate 20 KBytes
RelayBandwidthBurst 20 KBytes
UseBridges 0
AutomapHostsOnResolve 1
TransPort 9040
DNSPort 5400

3
Orbot/bcdroid.manifest Normal file
View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Sealed: true

67
Orbot/build.xml Normal file
View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="Orbot">
<!-- 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. -->
<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.
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'.
out.dir
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.
This file is an integral part of the build system for your application and
should be checked in in 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. -->
<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" />
<!-- 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
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.
-->
<setup />
</project>

View File

@ -4,10 +4,11 @@
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "ant.properties", and override values to adapt the script to your
# "build.properties", and override values to adapt the script to your
# project structure.
#proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
# Indicates whether an apk should be generated for each density.
split.density=false
# Project target.
target=android-16
aar.deployPath=/media/n8fr8/nate128/dev/repos/gpmaven/
target=android-4
apk-configurations=

72
Orbot/po2xml.sh Executable file
View File

@ -0,0 +1,72 @@
#!/bin/bash
#
# Author: Runa A. Sandvik, <runa.sandvik@gmail.com>
# For The Tor Project, Inc.
#
# This is Free Software (GPLv3)
# http://www.gnu.org/licenses/gpl-3.0.txt
#
# This script will convert translated po files back to xml. Before
# running the script, checkout the translation directory from
# https://svn.torproject.org.
#
### Start config ###
# Location of the translated files, i.e. the path to the orbot
# directory in the translation module. Do not add the trailing slash.
translated=""
# Location of the orbot directory, i.e. the original English xml file.
# In svn, this should be svn/projects/android/trunk/Orbot/res. Do not add the
# trailing slash.
xml=""
### End config ###
# Find po files to convert.
po=`find $translated -type f -name \*.po`
# For every po found, create and/or update the translated manpage.
for file in $po ; do
# Get the basename of the file we are dealing with.
pofile=`basename $file`
# Strip the file for its original extension and add .xml.
xmlfile="${pofile%.*}.xml"
# Figure out which language we are dealing with.
lang=`dirname $file | sed "s#$translated/##"`
# The translated document is written if 80% or more of the po
# file has been translated. Also, po4a-translate will only write
# the translated document if 80% or more has been translated.
# However, it will delete the translated txt if less than 80%
# has been translated. To avoid having our current, translated
# xml files deleted, convert the po to a temp xml first. If this
# file was actually written, rename it to xml.
# Convert translated po to xml.
function convert {
po4a-translate -f xml -m "$xml/values/$xmlfile" -p "$file" -l "$xml/values-$lang/tmp-$xmlfile" --master-charset utf-8 -L utf-8
# Check to see if the file was written. If yes, rename it.
if [ -e "$xml/values-$lang/tmp-$xmlfile" ]
then
mv "$xml/values-$lang/tmp-$xmlfile" "$xml/values-$lang/$xmlfile"
# We need to escape apostrophe's
sed -i "s/\([^\\]\)'/\1\\\\'/g" "$xml/values-$lang/$xmlfile"
fi
}
# If the current directory is zh_CN use zh, else convert everything.
if [ $lang = "zh_CN" ]
then
lang="zh"
convert
else
convert
fi
done

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
Orbot/res/drawable/bak/toroff.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
Orbot/res/drawable/bak/toron.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
Orbot/res/drawable/bgtitanium.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
Orbot/res/drawable/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
Orbot/res/drawable/icon_orweb.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
Orbot/res/drawable/tor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,76 @@
<?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">
<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="3px"
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="powered by The Tor Project "
android:layout_marginTop="8px"
android:layout_marginRight="0px"
android:gravity="right"
android:layout_toLeftOf="@+id/radioModeImage"
android:textColor="#cccccc" />
</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="225px"
android:src="@drawable/toroff"/>
</TableRow>
<TableRow>
<TextView android:id="@+id/lblStatus"
android:text="- Press to enable - "
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:textStyle="bold"
android:width="320px"
android:height="100px"
android:textColor="#ffffff"
/>
</TableRow>
</TableLayout>
</TableRow>
</TableLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,100 @@
<?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" />
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:duplicateParentState="false">
<TextView android:text="Select apps to use with Tor:"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:padding="3px" />
<ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/applistview"></ListView>
</LinearLayout>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow>
<ImageView android:id="@+id/itemicon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="3dip"></ImageView>
<TextView android:layout_height="wrap_content" android:id="@+id/itemtext" android:text="uid:packages" android:textSize="18sp" android:padding="3dip"></TextView>
<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/itemcheck" ></CheckBox>
</TableRow>
</TableLayout>

View File

@ -0,0 +1,20 @@
<?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="wrap_content">
<ScrollView android:id="@+id/helpscrollview"
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=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#ffffff" />
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,53 @@
<?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">
<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:orientation="vertical"
android:layout_height="wrap_content"
android:layout_width="fill_parent" android:id="@+id/logScrollView"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/messageLog"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_x="2px"
android:layout_y="2px"
android:textSize="14px"
android:background="#A0222222"
/>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,76 @@
<?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">
<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="300px"
android:height="75px"
android:textColor="#ffffff"
/>
</TableRow>
</TableLayout>
</TableRow>
</TableLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,29 @@
<?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:layout_height="380px"
android:layout_width="fill_parent">
<EditText android:id="@+id/textSettings"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="1.0"
android:singleLine="false"
android:textSize="11px"
/>
</ScrollView>
<Button android:id="@+id/btnSettingsSave"
android:layout_width="fill_parent"
android:layout_height="40px"
android:text="Save Settings"
android:layout_margin="0sp"
/>
</LinearLayout>

View File

@ -0,0 +1,22 @@
<?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="wrap_content">
<ScrollView android:id="@+id/helpscrollview"
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=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#ffffff" />
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,24 @@
<?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="wrap_content">
<ScrollView android:id="@+id/helpscrollview"
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"
android:padding="3px">
<TextView android:text="@string/wizard_proxy_help_msg" android:textColor="#ffffff" android:id="@+id/WizardRootTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,29 @@
<?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="wrap_content">
<ScrollView android:id="@+id/helpscrollview"
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"
android:padding="3px">
<TextView android:text="@string/wizard_configure_msg" android:textColor="#ffffff" android:id="@+id/WizardRootTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<CheckBox android:layout_marginTop="20px" android:text="@string/wizard_configure_all" android:id="@+id/WizardRootCheckBox01" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>
<TextView android:text=" or " android:textColor="#ffffff" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<Button android:text="@string/wizard_configure_select_apps" android:id="@+id/WizardRootButton01" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,31 @@
<?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="wrap_content">
<ScrollView android:id="@+id/helpscrollview"
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"
android:padding="3px">
<TextView android:text="@string/wizard_permissions_msg_stock" android:textColor="#ffffff" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<Button android:text="@string/wizard_permission_enable_root" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonEnable" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<TextView android:text="@string/wizard_permissions_no_root" android:layout_marginTop="10px" android:textColor="#ffffff" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<CheckBox android:text="@string/wizard_permissions_consent" android:id="@+id/CheckBoxConsent" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,29 @@
<?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="wrap_content">
<ScrollView android:id="@+id/helpscrollview"
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"
android:padding="3px">
<TextView android:text="@string/wizard_tips_msg" android:layout_gravity="left" android:textColor="#ffffff" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<Button android:text="@string/wizard_tips_otrchat" android:layout_gravity="left" android:drawableLeft="@drawable/icon_otrchat" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonInstallOtrchat" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<Button android:text="@string/wizard_tips_orweb" android:drawableLeft="@drawable/icon_orweb" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonInstallOrweb" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<Button android:text="@string/wizard_tips_proxy" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonProxyHelp" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,24 @@
<?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="wrap_content">
<ScrollView android:id="@+id/helpscrollview"
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"
android:padding="3px">
<TextView android:text="@string/wizard_welcome_msg" android:textColor="#ffffff" android:id="@+id/WizardRootTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_hs_group">خدمات خفية</string>
<string name="app_name">اوربوت (Orbot)</string>
<string name="app_version">1.0.4</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="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">بدعم من مشروع تور</string>
<string name="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="status_install_success">تم تثبيت ثنائيات تور بنجاح!</string>
<string name="status_install_fail">غير قادر على تثبيت ملفات ثنائيات تور. يرجى التحقق من السجل وإعلامنا على البريد الإلكتروني tor-assistants@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">OTRCHAT - عميل التراسل الفوري الآمن للأندرويد</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">https://guardianproject/getgibber</string>
<string name="orweb_apk_url">https://guardianproject/getorweb</string>
<!-- END Welcome Wizard strings (DJH) -->
<string name="connect_first_time"> لقد قمت بإتصال ناجح الى شبكة تور - لكن هذا لا يعني بأن جهازك في مأمن. يمكنك استخدام خيار \'تحقق\' من القائمة لإختبار المتصفح الخاص بك.
قم بزيارتنا على https://guardianproject.info/apps/orbot او ارسل رسالة الكترونية الى help@guardianproject.info لمعرفة المزيد.</string>
<string name="tor_check">سيؤدي هذا إلى فتح المتصفح الافتراضي الخاص بك على العنوان https://check.torproject.org من اجل التحقق من تكوين أوربوت بشكل صحيح وبأنك متصل بتور.</string>
</resources>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_hs_group">Versteckte Dienste</string>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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="button_help">Hilfe</string>
<string name="button_close">Schließen</string>
<string name="button_about">Über</string>
<string name="button_clear_log">Clear Log</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">- zum Starten drücken -</string>
<string name="pref_trans_proxy_group">Transparenter Proxy (nur gerootete Geräte)</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="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üfe das Logfile und wende Dich an tor-assistants@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 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">Erlaubnis erteilt</string>
<string name="wizard_permissions_stock">Orbot Permissions</string>
<string name="wizard_premissions_msg_root">Exzellent! Wir haben festgestellt, dass sie Orbot Root-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 ihn Root-Rechte einräumen. Drücken sie auf den Kopf unten um Orbot diese Superkräfte einzuräumen.</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">Orbot Root-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">OTRCHAT - Ein sicheres Instant-Messaging-Programm für 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 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">Wenn das Android-Programm, das du benutzt, die Verwendung von HTTP- oder SOCKS-Proxys unterstützt kannst du 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 im FAQ unter http://tinyurl.com/proxyandroid
</string>
<string name="wizard_final">Orbot is ready!</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">https://guardianproject/getgibber</string>
<string name="orweb_apk_url">https://guardianproject/getorweb</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 dein Gerät sicher ist. Du kannst die \'Überprüfen\'-Option aus dem Menü benutzen, um deinen Browser zu testen.
Besuchen sie https://guardianproject.info/apps/orbot oder senden sie eine E-Mail an help@guardianproject.info um mehr zu erfahren.</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>
</resources>

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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á empezando ...</string>
<string name="status_activated">Conectado a la red</string>
<string name="status_disabled">"Orbot está Desactivado</string>
<string name="status_shutting_down">Orbot está cerrando</string>
<string name="tor_process_connecting">Partir Tor...</string>
<string name="tor_process_connecting_step2">Autenticación de conexión de control...</string>
<string name="tor_process_connecting_step3">Completo.</string>
<string name="tor_process_connecting_step4">Espera.</string>
<string name="not_anonymous_yet">ADVERTENCIA: el tráfico no es anónima todavía! Por favor, configure sus aplicaciones para utilizar HTTP proxy 127.0.0.1:8118 o SOCKS4A o SOCKS5 127.0.0.1:9050</string>
<string name="menu_home">Principal</string>
<string name="menu_browse">Examinar</string>
<string name="menu_settings">Información</string>
<string name="menu_log">Entrar</string>
<string name="menu_info">Ayuda</string>
<string name="menu_apps">Aplicaciones</string>
<string name="menu_start">Iniciar</string>
<string name="menu_stop">Stop</string>
<string name="button_help">Ayuda</string>
<string name="button_close">Cerrar</string>
<string name="button_about">Acerca de</string>
<string name="menu_verify">Check</string>
<string name="menu_exit">Exit</string>
</resources>

View File

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_hs_group">سرويس هاي مخفي</string>
<string name="app_name">اوربات</string>
<string name="app_version">1.0.4</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="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">برای شروع، کلیک کنید.</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="status_install_success">دوتایی های Tor با موفقیت نصب شدند!</string>
<string name="status_install_fail">نصب فایل های دوتایی Tor ممکن نبود. لطفن قطعه را وارسی کنید و به tor-assistance@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">OTRCHAT - کاربر ایمن انتقال پیام فوری برای آندروید</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">https://guardianproject/getgibber</string>
<string name="orweb_apk_url">https://guardianproject/getorweb</string>
<!-- END Welcome Wizard strings (DJH) -->
<string name="connect_first_time">اکنون با موفقیت به شبکه Tor وصل شده اید اما به آن معنا نیست که سیستم شما ایمن است. می توانید از منیو گزینه /"Check/" را برای آزمایش مرورگر انتخاب کنید. به ما در صفحه https://guardianproject.info/apps/orbot مراجعه کنید و به آدرس help@guardianproject.info ایمیلی بفرستید تا اطلاعات بیشتری دریافت کنید. </string>
<string name="tor_check">با این قدم پیشفرض مرورگر وب شما به صفحه https://check.torproject.org باز می شود تا شما مشاهده کنید آیا اوربات تنظیم شده است و آیا شما به Tor وصل شده اید یا نه.</string>
</resources>

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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="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>

View File

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_hs_group">Verborgen diensten</string>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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="button_help">Hulp</string>
<string name="button_close">Afsluiten</string>
<string name="button_about">Over</string>
<string name="button_clear_log">Clear Log</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">- druk om te starten -</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="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@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">OTRCHAT - Veilige instant message programma voor 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">https://guardianproject/getgibber</string>
<string name="orweb_apk_url">https://guardianproject/getorweb</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@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>
</resources>

View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_hs_group">Usługi ukryte</string>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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="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">- wciśnij, by zacząć -</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="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@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">OTRCHAT - Bezpieczny klieny rozmów dla Androida</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">https://guardianproject/getgibber</string>
<string name="orweb_apk_url">https://guardianproject/getorweb</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@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>
</resources>

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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="button_help">Ajuda</string>
<string name="button_close">Encerrar</string>
<string name="button_about">Sobre</string>
<string name="menu_verify">Check</string>
<string name="menu_exit">Exit</string>
</resources>

View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_hs_group">Скрытые сервисы</string>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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="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">- нажмите на пуск -</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="status_install_success">Программа Tor успешно установлена!</string>
<string name="status_install_fail">Не удалось установить программу Tor. Пожалуйста, проверьте системный журнал и сообщите нам: tor-assistants@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">OTRCHAT - Обезопасте обмен мгновенными сообщениями для клиентов в 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">https://guardianproject/getgibber</string>
<string name="orweb_apk_url">https://guardianproject/getorweb</string>
<!-- END Welcome Wizard strings (DJH) -->
<string name="connect_first_time"> Вы успешно подключились к сети Tor, но это НЕ значит, что ваше устройство безопасно. Вы можете воспользоваться функцией \'Проверки\' из меню, чтобы потестировать ваш браузер. \n\nПосетите наш сайт: https://guardianproject.info/apps/orbot или отправьте нам письмо на адрес: help@guardianproject.info, чтобы узнать больше.</string>
<string name="tor_check">Это приведет к запуску веб-браузера, выбранного на вашем компьютере по-умолчанию, и подключению к сайту https://check.torproject.org, с целью проверки правильности работы Orbot и определения, подключены ли вы к сети Tor.</string>
</resources>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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="button_help">Hjälp</string>
<string name="button_close">Stäng</string>
<string name="button_about">Om</string>
</resources>

View File

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_hs_group">Hidden Services</string>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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">Setting up control...</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="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">由 Tor 项目提供动力</string>
<string name="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="status_install_success">Tor 程序安装成功!</string>
<string name="status_install_fail">Tor 程序安装失败,请检查日志并报告给 tor-assistants@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 是一个自由软件,也是一个开放的网络。它可以帮助你防御可能威胁到人身自由和隐私,秘密的商业活动和商业关系,国家安全网络监控 - 流量分析。
警告:* 仅仅是安装上 Orbot 并不能神奇地使你的移动网络流量变得无迹可寻!下面的向导将会引领你的匿名之路。</string>
<string name="wizard_details">关于 Orbot 的详情</string>
<string name="wizard_details_msg">Orbot 是一个开放源代码的应用程序,它包含了 Tor, LibEvent 和 Privoxy. 它在本地提供一个连接到 Tor 网络的 HTTP 代理8118和一个 SOCKS 代理9050。在有 Root 权限的设备上Orbot 能够让所有的互联网访问通过 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 就会变成更加强大的工具。点击下面的按钮获得 Root 权限!</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 允许你选择代理所有的应用程序或者只代理某几个选中 的应用程序</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">OTRCHAT - 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。
主机地址是 127.0.0.1 或者 localhost, HTTP 代理端口是 8118, SOCKS 代理端口是 9050. 你可以使用 SOCKS4A 或者 SOCKS5.
获取更多关于 Android 上使用代理设置的信息请访问: http://tinyurl.com/proxyandroid
</string>
<string name="wizard_final">Orbot 配置完成</string>
<string name="wizard_final_msg">全世界有100多万的人由于各种原因正在使用 Tor新闻记者博客人权工作者法律援助者士兵公司强权政制下的公民和普通的公民...现在你也一样在使用 Tor 了!</string>
<string name="otrchat_apk_url">https://guardianproject/getgibber</string>
<string name="orweb_apk_url">https://guardianproject/getorweb</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@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>
</resources>

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Orbot</string>
<string name="app_version">1.0.4</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="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">- 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="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@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">OTRCHAT - 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">https://guardianproject.info/getgibber</string>
<string name="orweb_apk_url">https://guardianproject.info/getorweb</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@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>

View File

@ -0,0 +1,107 @@
<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"/>
</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>
</PreferenceScreen>

View File

@ -0,0 +1,264 @@
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
/* See LICENSE for licensing information */
package org.torproject.android;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class AppManager extends Activity implements OnCheckedChangeListener, OnClickListener, TorConstants {
private static TorifiedApp[] apps = null;
private ListView listApps;
private AppManager mAppManager;
private boolean appsLoaded = false;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.layout_apps);
mAppManager = this;
}
@Override
protected void onResume() {
super.onResume();
listApps = (ListView)findViewById(R.id.applistview);
if (!appsLoaded)
loadApps();
}
private void loadApps ()
{
final TorifiedApp[] apps = getApps(this);
Arrays.sort(apps, new Comparator<TorifiedApp>() {
public int compare(TorifiedApp o1, TorifiedApp o2) {
if (o1.isTorified() == o2.isTorified()) return o1.getName().compareTo(o2.getName());
if (o1.isTorified()) return -1;
return 1;
}
});
final LayoutInflater inflater = getLayoutInflater();
final ListAdapter adapter = new ArrayAdapter<TorifiedApp>(this,R.layout.layout_apps_item,R.id.itemtext,apps) {
public View getView(int position, View convertView, ViewGroup parent) {
ListEntry entry;
if (convertView == null) {
// Inflate a new view
convertView = inflater.inflate(R.layout.layout_apps_item, parent, false);
entry = new ListEntry();
entry.icon = (ImageView) convertView.findViewById(R.id.itemicon);
entry.box = (CheckBox) convertView.findViewById(R.id.itemcheck);
entry.text = (TextView) convertView.findViewById(R.id.itemtext);
entry.text.setOnClickListener(mAppManager);
entry.text.setOnClickListener(mAppManager);
convertView.setTag(entry);
entry.box.setOnCheckedChangeListener(mAppManager);
} else {
// Convert an existing view
entry = (ListEntry) convertView.getTag();
}
final TorifiedApp app = apps[position];
entry.icon.setImageDrawable(app.getIcon());
entry.text.setText(app.getName());
final CheckBox box = entry.box;
box.setTag(app);
box.setChecked(app.isTorified());
entry.text.setTag(box);
entry.icon.setTag(box);
return convertView;
}
};
listApps.setAdapter(adapter);
appsLoaded = true;
}
private static class ListEntry {
private CheckBox box;
private TextView text;
private ImageView icon;
}
/* (non-Javadoc)
* @see android.app.Activity#onStop()
*/
@Override
protected void onStop() {
super.onStop();
//Log.d(getClass().getName(),"Exiting Preferences");
}
public static TorifiedApp[] getApps (Context context)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String tordAppString = prefs.getString(PREFS_KEY_TORIFIED, "");
String[] tordApps;
StringTokenizer st = new StringTokenizer(tordAppString,"|");
tordApps = new String[st.countTokens()];
int tordIdx = 0;
while (st.hasMoreTokens())
{
tordApps[tordIdx++] = st.nextToken();
}
Arrays.sort(tordApps);
//else load the apps up
PackageManager pMgr = context.getPackageManager();
List<ApplicationInfo> lAppInfo = pMgr.getInstalledApplications(0);
Iterator<ApplicationInfo> itAppInfo = lAppInfo.iterator();
apps = new TorifiedApp[lAppInfo.size()];
ApplicationInfo aInfo = null;
int appIdx = 0;
while (itAppInfo.hasNext())
{
aInfo = itAppInfo.next();
apps[appIdx] = new TorifiedApp();
apps[appIdx].setEnabled(aInfo.enabled);
apps[appIdx].setUid(aInfo.uid);
apps[appIdx].setUsername(pMgr.getNameForUid(apps[appIdx].getUid()));
apps[appIdx].setProcname(aInfo.processName);
apps[appIdx].setName(pMgr.getApplicationLabel(aInfo).toString());
apps[appIdx].setIcon(pMgr.getApplicationIcon(aInfo));
// check if this application is allowed
if (Arrays.binarySearch(tordApps, apps[appIdx].getUsername()) >= 0) {
apps[appIdx].setTorified(true);
}
else
{
apps[appIdx].setTorified(false);
}
appIdx++;
}
return apps;
}
public void saveAppSettings (Context context)
{
if (apps == null)
return;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// final SharedPreferences prefs = context.getSharedPreferences(PREFS_KEY, 0);
StringBuilder tordApps = new StringBuilder();
for (int i = 0; i < apps.length; i++)
{
if (apps[i].isTorified())
{
tordApps.append(apps[i].getUsername());
tordApps.append("|");
}
}
Editor edit = prefs.edit();
edit.putString(PREFS_KEY_TORIFIED, tordApps.toString());
edit.commit();
}
/**
* Called an application is check/unchecked
*/
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
final TorifiedApp app = (TorifiedApp) buttonView.getTag();
if (app != null) {
app.setTorified(isChecked);
}
saveAppSettings(this);
}
@Override
public void onClick(View v) {
CheckBox cbox = (CheckBox)v.getTag();
final TorifiedApp app = (TorifiedApp)cbox.getTag();
if (app != null) {
app.setTorified(!app.isTorified());
cbox.setChecked(app.isTorified());
}
saveAppSettings(this);
}
}

View File

@ -0,0 +1,25 @@
package org.torproject.android;
//list view with add/remove hidden services - user is prompted for port
public class HiddenServiceManager {
}
/*
*
* ## Once you have configured a hidden service, you can look at the
## contents of the file ".../hidden_service/hostname" for the address
## to tell people.
##
## HiddenServicePort x y:z says to redirect requests on port x to the
## address y:z.
#HiddenServiceDir @LOCALSTATEDIR@/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80
#HiddenServiceDir @LOCALSTATEDIR@/lib/tor/other_hidden_service/
#HiddenServicePort 80 127.0.0.1:80
#HiddenServicePort 22 127.0.0.1:22
*/

View File

@ -0,0 +1,18 @@
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);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,130 @@
/* 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);//TorServiceUtils.checkRootAccess();
}
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) {
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;
}
}

View File

@ -0,0 +1,53 @@
/* Copyright (c) 2009, Nathan Freitas, Orbot/The Guardian Project - http://openideals.com/guardian */
/* See LICENSE for licensing information */
package org.torproject.android;
public interface TorConstants {
public final static String TAG = "Orbot";
public final static String PREFS_KEY = "OrbotPrefs";
public final static String PREFS_KEY_TORIFIED = "PrefTord";
public final static int FILE_WRITE_BUFFER_SIZE = 2048;
//path to check Tor against
public final static String URL_TOR_CHECK = "https://check.torproject.org";
public final static int STATUS_OFF = -1;
public final static int STATUS_READY = 0;
public final static int STATUS_ON = 1;
public final static int STATUS_CONNECTING = 2;
public final static int PROFILE_OFF = -1;
public final static int PROFILE_ONDEMAND = 0;
public final static int PROFILE_ON = 1;
public final static String NEWLINE = "\n";
/*
public final static String TORRC_DEFAULT =
"SocksPort 9050\nSocksListenAddress 127.0.0.1\nSafeSocks 1\nDNSPort 5400\nLog debug syslog\nDataDirectory /data/data/org.torproject.android/cache\n"
+ "ControlPort 9051\nCookieAuthentication 1\nRelayBandwidthRate 20 KBytes\nRelayBandwidthBurst 20 KBytes\nAutomapHostsOnResolve 1\nTransPort 9040\n";
*/
public final static String INTENT_TOR_SERVICE = "org.torproject.android.service.TOR_SERVICE";
public final static String HANDLER_TOR_MSG = "torServiceMsg";
public final static String PREF_BRIDGES_ENABLED = "pref_bridges_enabled";
public final static String PREF_BRIDGES_UPDATED = "pref_bridges_enabled";
public final static String PREF_BRIDGES_LIST = "pref_bridges_list";
public final static String PREF_OR = "pref_or";
public final static String PREF_OR_PORT = "pref_or_port";
public final static String PREF_OR_NICKNAME = "pref_or_nickname";
public final static String PREF_REACHABLE_ADDRESSES = "pref_reachable_addresses";
public final static String PREF_REACHABLE_ADDRESSES_PORTS = "pref_reachable_addresses_ports";
public final static String PREF_TRANSPARENT = "pref_transparent";
public final static String PREF_TRANSPARENT_ALL = "pref_transparent_all";
}

View File

@ -0,0 +1,111 @@
package org.torproject.android;
import android.graphics.drawable.Drawable;
public class TorifiedApp {
private boolean enabled;
private int uid;
private String username;
private String procname;
private String name;
private Drawable icon;
private boolean torified = false;
/**
* @return the torified
*/
public boolean isTorified() {
return torified;
}
/**
* @param torified the torified to set
*/
public void setTorified(boolean torified) {
this.torified = torified;
}
private int[] enabledPorts;
/**
* @return the enabledPorts
*/
public int[] getEnabledPorts() {
return enabledPorts;
}
/**
* @param enabledPorts the enabledPorts to set
*/
public void setEnabledPorts(int[] enabledPorts) {
this.enabledPorts = enabledPorts;
}
/**
* @return the enabled
*/
public boolean isEnabled() {
return enabled;
}
/**
* @param enabled the enabled to set
*/
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
/**
* @return the uid
*/
public int getUid() {
return uid;
}
/**
* @param uid the uid to set
*/
public void setUid(int uid) {
this.uid = uid;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the procname
*/
public String getProcname() {
return procname;
}
/**
* @param procname the procname to set
*/
public void setProcname(String procname) {
this.procname = procname;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
public Drawable getIcon() {
return icon;
}
public void setIcon(Drawable icon) {
this.icon = icon;
}
}

View File

@ -2,7 +2,7 @@
/* See LICENSE for licensing information */
package org.torproject.android.binary;
package org.torproject.android;
import java.io.BufferedReader;
import java.io.File;
@ -56,8 +56,6 @@ public class Utils {
out.append('\n');
}
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();

View File

@ -0,0 +1,71 @@
package org.torproject.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
public class WizardActivity extends Activity implements OnClickListener
{
protected void onCreate(Bundle savedInstanceState)
{
this.setContentView(R.layout.layout_help);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onResume() {
super.onResume();
showStep1();
}
public void showStep1()
{
showDialog("Test","this is nathan's test","foo","bar",this);
}
private void showDialog (String title, String msg, String button1, String button2, OnClickListener ocListener)
{
new AlertDialog.Builder(this)
.setInverseBackgroundForced(true)
.setTitle(title)
.setMessage(msg)
.setNeutralButton(button1, ocListener)
.setNegativeButton(button2, ocListener)
.show();
}
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
}

View File

@ -0,0 +1,416 @@
package org.torproject.android;
import org.torproject.android.service.TorServiceUtils;
import org.torproject.android.service.TorTransProxy;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;
public class WizardHelper implements TorConstants {
private Context context;
private AlertDialog currentDialog;
public WizardHelper (Context context)
{
this.context = context;
}
public void showWizard ()
{
showWizardStep1();
}
public void showWizardStep1()
{
String title = context.getString(R.string.wizard_title);
LayoutInflater li = LayoutInflater.from(context);
View view = li.inflate(R.layout.layout_wizard_welcome, null);
showCustomDialog(title, view,context.getString(R.string.btn_next),context.getString(R.string.wizard_btn_tell_me_more),new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (which == DialogInterface.BUTTON_NEUTRAL)
{
showWizardStep2();
}
else if (which == DialogInterface.BUTTON_POSITIVE)
{
showAbout();
}
}
});
}
public void showWizardStep2()
{
String title = context.getString(R.string.wizard_permissions_stock);
LayoutInflater li = LayoutInflater.from(context);
View view = li.inflate(R.layout.layout_wizard_stock, null);
Button btn1 = (Button)view.findViewById(R.id.WizardRootButtonEnable);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
boolean hasRoot = TorServiceUtils.checkRootAccess();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor pEdit = prefs.edit();
pEdit.putBoolean("has_root",hasRoot);
pEdit.commit();
if (hasRoot)
{
currentDialog.dismiss();
showWizardStep2Root();
}
else
{
Toast.makeText(context, "Unable to get root access", Toast.LENGTH_LONG).show();
view.setEnabled(false);
}
}
});
CheckBox cb1 = (CheckBox)view.findViewById(R.id.CheckBoxConsent);
cb1.setOnCheckedChangeListener(new OnCheckedChangeListener (){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
currentDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setEnabled(isChecked);
}
});
showCustomDialog(title, view,context.getString(R.string.btn_next),context.getString(R.string.btn_back),new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (which == DialogInterface.BUTTON_NEUTRAL)
{
showWizardTipsAndTricks();
}
else if (which == DialogInterface.BUTTON_POSITIVE)
{
showWizardStep1();
}
}
});
currentDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setEnabled(false);
}
public void showWizardStep2Root()
{
String title = null;
String msg = null;
title = context.getString(R.string.wizard_permissions_root);
msg = context.getString(R.string.wizard_premissions_msg_root);
showDialog(title, msg,context.getString(R.string.btn_next),context.getString(R.string.btn_back),new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (which == DialogInterface.BUTTON_NEUTRAL)
{
showWizardRootConfigureTorification();
}
else if (which == DialogInterface.BUTTON_POSITIVE)
{
showWizardStep1();
}
}
});
}
public void showWizardTipsAndTricks()
{
String title = context.getString(R.string.wizard_tips_tricks);
LayoutInflater li = LayoutInflater.from(context);
View view = li.inflate(R.layout.layout_wizard_tips, null);
Button btn1 = (Button)view.findViewById(R.id.WizardRootButtonInstallOtrchat);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
String url = context.getString(R.string.otrchat_apk_url);
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}
});
Button btn2 = (Button)view.findViewById(R.id.WizardRootButtonInstallOrweb);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
String url = context.getString(R.string.orweb_apk_url);
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}
});
Button btn3 = (Button)view.findViewById(R.id.WizardRootButtonProxyHelp);
btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
showProxyHelp();
}
});
showCustomDialog(title, view,context.getString(R.string.btn_next),context.getString(R.string.btn_back),new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (which == DialogInterface.BUTTON_NEUTRAL)
{
showWizardFinal();
}
else if (which == DialogInterface.BUTTON_POSITIVE)
{
showWizardStep2();
}
}
});
}
public void showWizardRootConfigureTorification()
{
LayoutInflater li = LayoutInflater.from(context);
View view = li.inflate(R.layout.layout_wizard_root, null);
CheckBox cb1 = (CheckBox)view.findViewById(R.id.WizardRootCheckBox01);
Button btn1 = (Button)view.findViewById(R.id.WizardRootButton01);
cb1.setOnCheckedChangeListener(new OnCheckedChangeListener (){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor pEdit = prefs.edit();
pEdit.putBoolean(PREF_TRANSPARENT, isChecked);
pEdit.putBoolean(PREF_TRANSPARENT_ALL, isChecked);
pEdit.commit();
//Button btn1 = (Button)buttonView.getParent().findViewById(R.id.WizardRootButton01);
//btn1.setEnabled(!isChecked);
}
});
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor pEdit = prefs.edit();
pEdit.putBoolean(PREF_TRANSPARENT, true);
pEdit.putBoolean(PREF_TRANSPARENT_ALL, false);
pEdit.commit();
context.startActivity(new Intent(context, AppManager.class));
}
});
showCustomDialog(context.getString(R.string.wizard_configure),view,context.getString(R.string.btn_next),context.getString(R.string.btn_back),new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (which == DialogInterface.BUTTON_NEUTRAL)
{
showWizardTipsAndTricks();
}
else if (which == DialogInterface.BUTTON_POSITIVE)
{
showWizardStep2();
}
}
});
}
private void showWizardFinal ()
{
String title = null;
String msg = null;
title = context.getString(R.string.wizard_final);
msg = context.getString(R.string.wizard_final_msg);
new AlertDialog.Builder(context)
.setIcon(R.drawable.icon)
.setTitle(title)
.setPositiveButton(R.string.button_close, null)
.setMessage(msg)
.show();
}
public void showDialog (String title, String msg, String button1, String button2, DialogInterface.OnClickListener ocListener)
{
// dialog.setContentView(R.layout.custom_dialog);
AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setIcon(R.drawable.icon)
.setTitle(title)
.setMessage(msg)
.setNeutralButton(button1, ocListener)
.setPositiveButton(button2, ocListener);
currentDialog = builder.show();
}
private void showCustomDialog (String title, View view, String button1, String button2, DialogInterface.OnClickListener ocListener)
{
currentDialog = new AlertDialog.Builder(context)
.setIcon(R.drawable.icon)
.setTitle(title)
.setView(view)
.setNeutralButton(button1, ocListener)
.setPositiveButton(button2, ocListener)
.show();
}
private void showAbout ()
{
LayoutInflater li = LayoutInflater.from(context);
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(context)
.setTitle(context.getString(R.string.button_about))
.setView(view)
.setNeutralButton(context.getString(R.string.btn_back), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
showWizard();
}
})
.show();
}
private void showProxyHelp ()
{
LayoutInflater li = LayoutInflater.from(context);
View view = li.inflate(R.layout.layout_wizard_proxy_help, null);
new AlertDialog.Builder(context)
.setTitle(context.getString(R.string.wizard_proxy_help_info))
.setView(view)
.show();
}
}

View File

@ -0,0 +1,37 @@
package org.torproject.android.boot;
import org.torproject.android.service.ITorService;
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceConstants;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
public class OnbootBroadcastReceiver extends BroadcastReceiver implements TorServiceConstants {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "received on boot notification");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
Log.d(TAG, "startOnBoot:" + startOnBoot);
if (startOnBoot)
{
Intent serviceIntent = new Intent(context,TorService.class);
serviceIntent.setAction("onboot");
context.startService(serviceIntent);
}
//bindService(new Intent(ITorService.class.getName()),
// mConnection, Context.BIND_AUTO_CREATE);
}
}

View File

@ -0,0 +1,442 @@
/*
* $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/ssl/SSLSocketFactory.java $
* $Revision: 659194 $
* $Date: 2008-05-22 11:33:47 -0700 (Thu, 22 May 2008) $
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.torproject.android.net;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.UnrecoverableKeyException;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import org.apache.http.conn.scheme.HostNameResolver;
import org.apache.http.conn.scheme.LayeredSocketFactory;
import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.StrictHostnameVerifier;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
/**
* Layered socket factory for TLS/SSL connections, based on JSSE.
*.
* <p>
* SSLSocketFactory can be used to validate the identity of the HTTPS
* server against a list of trusted certificates and to authenticate to
* the HTTPS server using a private key.
* </p>
*
* <p>
* SSLSocketFactory will enable server authentication when supplied with
* a {@link KeyStore truststore} file containg one or several trusted
* certificates. The client secure socket will reject the connection during
* the SSL session handshake if the target HTTPS server attempts to
* authenticate itself with a non-trusted certificate.
* </p>
*
* <p>
* Use JDK keytool utility to import a trusted certificate and generate a truststore file:
* <pre>
* keytool -import -alias "my server cert" -file server.crt -keystore my.truststore
* </pre>
* </p>
*
* <p>
* SSLSocketFactory will enable client authentication when supplied with
* a {@link KeyStore keystore} file containg a private key/public certificate
* pair. The client secure socket will use the private key to authenticate
* itself to the target HTTPS server during the SSL session handshake if
* requested to do so by the server.
* The target HTTPS server will in its turn verify the certificate presented
* by the client in order to establish client's authenticity
* </p>
*
* <p>
* Use the following sequence of actions to generate a keystore file
* </p>
* <ul>
* <li>
* <p>
* Use JDK keytool utility to generate a new key
* <pre>keytool -genkey -v -alias "my client key" -validity 365 -keystore my.keystore</pre>
* For simplicity use the same password for the key as that of the keystore
* </p>
* </li>
* <li>
* <p>
* Issue a certificate signing request (CSR)
* <pre>keytool -certreq -alias "my client key" -file mycertreq.csr -keystore my.keystore</pre>
* </p>
* </li>
* <li>
* <p>
* Send the certificate request to the trusted Certificate Authority for signature.
* One may choose to act as her own CA and sign the certificate request using a PKI
* tool, such as OpenSSL.
* </p>
* </li>
* <li>
* <p>
* Import the trusted CA root certificate
* <pre>keytool -import -alias "my trusted ca" -file caroot.crt -keystore my.keystore</pre>
* </p>
* </li>
* <li>
* <p>
* Import the PKCS#7 file containg the complete certificate chain
* <pre>keytool -import -alias "my client key" -file mycert.p7 -keystore my.keystore</pre>
* </p>
* </li>
* <li>
* <p>
* Verify the content the resultant keystore file
* <pre>keytool -list -v -keystore my.keystore</pre>
* </p>
* </li>
* </ul>
* @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
* @author Julius Davies
*/
public class ModSSLSocketFactory implements LayeredSocketFactory {
public static final String TLS = "TLS";
public static final String SSL = "SSL";
public static final String SSLV2 = "SSLv2";
public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER
= new AllowAllHostnameVerifier();
public static final X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER
= new BrowserCompatHostnameVerifier();
public static final X509HostnameVerifier STRICT_HOSTNAME_VERIFIER
= new StrictHostnameVerifier();
/**
* The factory using the default JVM settings for secure connections.
*/
private static ModSSLSocketFactory DEFAULT_FACTORY = null;
/**
* Gets an singleton instance of the SSLProtocolSocketFactory.
* @return a SSLProtocolSocketFactory
*/
public static ModSSLSocketFactory getSocketFactory() {
if (DEFAULT_FACTORY == null) {
DEFAULT_FACTORY = new ModSSLSocketFactory();
}
return DEFAULT_FACTORY;
}
private final SSLContext sslcontext;
private final SSLSocketFactory socketfactory;
//private final HostNameResolver nameResolver;
private X509HostnameVerifier hostnameVerifier = BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
private SocksSocketFactory mSocksSocketFactory = null;
public ModSSLSocketFactory(
String algorithm,
final KeyStore keystore,
final String keystorePassword,
final KeyStore truststore,
final SecureRandom random,
final HostNameResolver nameResolver)
throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
{
super();
if (algorithm == null) {
algorithm = SSL;
}
KeyManager[] keymanagers = null;
if (keystore != null) {
keymanagers = createKeyManagers(keystore, keystorePassword);
}
TrustManager[] trustmanagers = null;
if (truststore != null) {
trustmanagers = createTrustManagers(truststore);
}
this.sslcontext = SSLContext.getInstance(algorithm);
this.sslcontext.init(keymanagers, trustmanagers, random);
this.socketfactory = SSLSocketFactory.getSocketFactory();
//this.nameResolver = nameResolver;
}
public ModSSLSocketFactory(
final KeyStore keystore,
final String keystorePassword,
final KeyStore truststore)
throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
{
this(SSL, keystore, keystorePassword, truststore, null, null);
}
public ModSSLSocketFactory(final KeyStore keystore, final String keystorePassword)
throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
{
this(SSL, keystore, keystorePassword, null, null, null);
}
public ModSSLSocketFactory(final KeyStore truststore)
throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
{
this(SSL, null, null, truststore, null, null);
}
/**
* Constructs an HttpClient SSLSocketFactory backed by the given JSSE
* SSLSocketFactory.
*
* @hide
*/
public ModSSLSocketFactory(SSLSocketFactory socketfactory) {
super();
this.sslcontext = null;
this.socketfactory = socketfactory;
//this.nameResolver = null;
}
/**
* Creates the default SSL socket factory.
* This constructor is used exclusively to instantiate the factory for
* {@link #getSocketFactory getSocketFactory}.
*/
private ModSSLSocketFactory() {
super();
this.sslcontext = null;
this.socketfactory = SSLSocketFactory.getSocketFactory();
//this.nameResolver = null;
this.mSocksSocketFactory = new SocksSocketFactory("127.0.0.1",9050);
}
private static KeyManager[] createKeyManagers(final KeyStore keystore, final String password)
throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException {
if (keystore == null) {
throw new IllegalArgumentException("Keystore may not be null");
}
KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmfactory.init(keystore, password != null ? password.toCharArray(): null);
return kmfactory.getKeyManagers();
}
private static TrustManager[] createTrustManagers(final KeyStore keystore)
throws KeyStoreException, NoSuchAlgorithmException {
if (keystore == null) {
throw new IllegalArgumentException("Keystore may not be null");
}
TrustManagerFactory tmfactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
tmfactory.init(keystore);
return tmfactory.getTrustManagers();
}
// non-javadoc, see interface org.apache.http.conn.SocketFactory
public Socket createSocket()
throws IOException {
// SSL Sockets don't work at the moment.
//throw new SSLException("SSL socket functionality broken");
// the cast makes sure that the factory is working as expected
return (SSLSocket) this.socketfactory.createSocket();
//return new Socket();
//return null;
}
// non-javadoc, see interface org.apache.http.conn.SocketFactory
public Socket connectSocket(
final Socket sock,
final String host,
final int port,
final InetAddress localAddress,
int localPort,
final HttpParams params
) throws IOException {
if (host == null) {
throw new IllegalArgumentException("Target host may not be null.");
}
if (params == null) {
throw new IllegalArgumentException("Parameters may not be null.");
}
//Socket underlying = (Socket)
// ((sock != null) ? sock : createSocket());
Socket underlying = null;
/*sock;
if (underlying == null)// underlying = new Socket();
{
underlying = mSocksSocketFactory.createSocket();
}*/
Socket sSocket = mSocksSocketFactory.connectSocket(underlying, host, port, localAddress, localPort, params);
// SSLSocket sslsock = (SSLSocket) socketfactory.connectSocket(sSocket, host, port, localAddress, localPort, params);
SSLSocket sslsock = (SSLSocket)socketfactory.createSocket(sSocket, host, port, true);
if ((localAddress != null) || (localPort > 0)) {
// we need to bind explicitly
if (localPort < 0)
localPort = 0; // indicates "any"
InetSocketAddress isa =
new InetSocketAddress(localAddress, localPort);
sslsock.bind(isa);
}
int connTimeout = HttpConnectionParams.getConnectionTimeout(params);
int soTimeout = HttpConnectionParams.getSoTimeout(params);
InetSocketAddress remoteAddress;
// if (this.nameResolver != null) {
// remoteAddress = new InetSocketAddress(this.nameResolver.resolve(host), port);
// } else {
remoteAddress = new InetSocketAddress(host, port);
// }
//
sslsock.connect(remoteAddress, connTimeout);
// sslsock.setSoTimeout(0);
try {
hostnameVerifier.verify(host, sslsock);
// verifyHostName() didn't blowup - good!
} catch (IOException iox) {
// close the socket before re-throwing the exception
try { sslsock.close(); } catch (Exception x) { }
throw iox;
}
return sslsock;
}
/**
* Checks whether a socket connection is secure.
* This factory creates TLS/SSL socket connections
* which, by default, are considered secure.
* <br/>
* Derived classes may override this method to perform
* runtime checks, for example based on the cypher suite.
*
* @param sock the connected socket
*
* @return <code>true</code>
*
* @throws IllegalArgumentException if the argument is invalid
*/
public boolean isSecure(Socket sock)
throws IllegalArgumentException {
if (sock == null) {
throw new IllegalArgumentException("Socket may not be null.");
}
// This instanceof check is in line with createSocket() above.
if (!(sock instanceof SSLSocket)) {
throw new IllegalArgumentException
("Socket not created by this factory.");
}
// This check is performed last since it calls the argument object.
if (sock.isClosed()) {
throw new IllegalArgumentException("Socket is closed.");
}
return true;
} // isSecure
// non-javadoc, see interface LayeredSocketFactory
public Socket createSocket(
final Socket socket,
final String host,
final int port,
final boolean autoClose
) throws IOException, UnknownHostException {
SSLSocket sslSocket = (SSLSocket) this.socketfactory.createSocket(
socket,
host,
port,
autoClose
);
hostnameVerifier.verify(host, sslSocket);
// verifyHostName() didn't blowup - good!
return sslSocket;
}
public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier) {
if ( hostnameVerifier == null ) {
throw new IllegalArgumentException("Hostname verifier may not be null");
}
this.hostnameVerifier = hostnameVerifier;
}
public X509HostnameVerifier getHostnameVerifier() {
return hostnameVerifier;
}
public class SSLException extends IOException {
private static final long serialVersionUID = 1L;
public SSLException(String msg) {
super(msg);
}
};
}

View File

@ -0,0 +1,70 @@
package org.torproject.android.net;
import java.io.IOException;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.Socket;
import org.apache.http.HttpHost;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.conn.OperatedClientConnection;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.scheme.SocketFactory;
import org.apache.http.impl.conn.DefaultClientConnectionOperator;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HttpContext;
public class MyDefaultClientConnectionOperator extends
DefaultClientConnectionOperator {
public MyDefaultClientConnectionOperator(SchemeRegistry schemes) {
super(schemes);
}
@Override
public void openConnection(OperatedClientConnection conn, HttpHost target,
InetAddress local, HttpContext context, HttpParams params)
throws IOException {
if (conn == null) {
throw new IllegalArgumentException
("Connection must not be null.");
}
if (target == null) {
throw new IllegalArgumentException
("Target host must not be null.");
}
// local address may be null
//@@@ is context allowed to be null?
if (params == null) {
throw new IllegalArgumentException
("Parameters must not be null.");
}
if (conn.isOpen()) {
throw new IllegalArgumentException
("Connection must not be open.");
}
final Scheme schm = schemeRegistry.getScheme(target.getSchemeName());
final SocketFactory sf = schm.getSocketFactory();
Socket sock = sf.createSocket();
conn.opening(sock, target);
try {
Socket connsock = sf.connectSocket(sock, target.getHostName(),
schm.resolvePort(target.getPort()),
local, 0, params);
if (sock != connsock) {
sock = connsock;
conn.opening(sock, target);
}
} catch (ConnectException ex) {
throw new HttpHostConnectException(target, ex);
}
prepareSocket(sock, context, params);
conn.openCompleted(sf.isSecure(sock), params);
}
}

View File

@ -0,0 +1,21 @@
package org.torproject.android.net;
import org.apache.http.conn.ClientConnectionOperator;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.HttpParams;
public class MyThreadSafeClientConnManager extends ThreadSafeClientConnManager {
public MyThreadSafeClientConnManager(HttpParams params, SchemeRegistry schreg) {
super(params, schreg);
}
@Override
protected ClientConnectionOperator createConnectionOperator(
SchemeRegistry schreg) {
return new MyDefaultClientConnectionOperator(schreg);
}
}

View File

@ -0,0 +1,71 @@
package org.torproject.android.net;
import org.apache.http.HttpVersion;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
public class SOCKSHttpClient extends DefaultHttpClient {
private final static String DEFAULT_HOST = "127.0.0.1";
private final static int DEFAULT_PORT = 9050;
private static ClientConnectionManager ccm = null;
private static HttpParams params = null;
public SOCKSHttpClient ()
{
super(initConnectionManager(), initParams());
}
private void setSystemProperties ()
{
// System.getProperties().put("socks.proxySet","true");
// System.getProperties().put("socks.proxyHost",DEFAULT_HOST);
// System.getProperties().put("socks.proxyPort", DEFAULT_PORT+"");
}
private static ClientConnectionManager initConnectionManager ()
{
if (ccm == null)
{
SchemeRegistry supportedSchemes = new SchemeRegistry();
supportedSchemes.register(new Scheme("http",
SocksSocketFactory.getSocketFactory(), 80));
supportedSchemes.register(new Scheme("https",
ModSSLSocketFactory.getSocketFactory(), 443));
ccm = new MyThreadSafeClientConnManager(initParams(), supportedSchemes);
}
return ccm;
}
private static HttpParams initParams ()
{
if (params == null)
{
// prepare parameters
params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF-8");
HttpProtocolParams.setUseExpectContinue(params, true);
}
return params;
}
}

View File

@ -0,0 +1,146 @@
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
/* See LICENSE for licensing information */
/** SOCKS aware echo client*/
package org.torproject.android.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import net.sourceforge.jsocks.socks.InetRange;
import net.sourceforge.jsocks.socks.Proxy;
import net.sourceforge.jsocks.socks.SocksException;
import net.sourceforge.jsocks.socks.SocksSocket;
import org.torproject.android.TorConstants;
import android.util.Log;
public class SocksClient implements Runnable {
@SuppressWarnings("unused")
private int port;
@SuppressWarnings("unused")
private InetAddress hostIP;
private Socket ss;
private InputStream in;
private OutputStream out;
@SuppressWarnings("unused")
private static final int BUF_SIZE = 1024;
private static final String IP_LOCALHOST = "127.0.0.1";
public SocksClient(String host,int port)
throws IOException,UnknownHostException,SocksException{
this.port = port;
ss = new SocksSocket(host, port);
out = ss.getOutputStream();
in = ss.getInputStream();
Log.d(getClass().getName(),"Connected...");
Log.d(getClass().getName(),"TO: "+host+":"+port);
Log.d(getClass().getName(),"ViaProxy: "+ss.getLocalAddress().getHostAddress()
+":"+ss.getLocalPort());
}
public void close()throws IOException{
ss.close();
}
public void send(String s) throws IOException{
out.write(s.getBytes());
}
public void run(){
byte[] buf = new byte[1024];
int bytes_read;
try{
while((bytes_read = in.read(buf)) > 0){
System.out.write(buf,0,bytes_read);
}
}catch(IOException io_ex){
io_ex.printStackTrace();
}
}
public static void usage(){
System.err.print(
"Usage: java SocksTest host port [socksHost socksPort]\n");
}
public static void main(String args[]){
int port;
String host;
int proxyPort;
String proxyHost;
if(args.length > 1 && args.length < 5){
try{
host = args[0];
port = Integer.parseInt(args[1]);
proxyPort =(args.length > 3)? Integer.parseInt(args[3])
: 9050;
host = args[0];
proxyHost =(args.length > 2)? args[2]
: IP_LOCALHOST;
Proxy.setDefaultProxy(proxyHost,proxyPort,"KOUKY001");
//Proxy.setDefaultProxy(proxyHost,proxyPort);
InetRange inetRange = new InetRange();
inetRange.add(InetAddress.getByName("localhost"));
Proxy.getDefaultProxy().setDirect(inetRange);
SocksClient st = new SocksClient(host,port);
Thread thread = new Thread(st);
thread.start();
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
String s;
s = in.readLine();
while(s != null){
st.send(s+"\r\n");
//try{
//Thread.currentThread().sleep(10);
//}catch(InterruptedException i_ex){
//}
s = in.readLine();
}
st.close();
System.exit(1);
}catch(SocksException s_ex){
System.err.println("SocksException:"+s_ex);
s_ex.printStackTrace();
System.exit(1);
}catch(IOException io_ex){
io_ex.printStackTrace();
System.exit(1);
}catch(NumberFormatException num_ex){
usage();
num_ex.printStackTrace();
System.exit(1);
}
}else{
usage();
}
}
}//End of class

View File

@ -0,0 +1,141 @@
/**
* Shadow - Anonymous web browser for Android devices
* Copyright (C) 2009 Connell Gauld
*
* Thanks to University of Cambridge,
* Alastair Beresford and Andrew Rice
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
package org.torproject.android.net;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import net.sourceforge.jsocks.socks.Socks5Proxy;
import net.sourceforge.jsocks.socks.SocksException;
import net.sourceforge.jsocks.socks.SocksSocket;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.conn.scheme.SocketFactory;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import android.util.Log;
/**
* Provides sockets for an HttpClient connection.
* @author cmg47
*
*/
public class SocksSocketFactory implements SocketFactory {
SocksSocket server = null;
private static Socks5Proxy sProxy = null;
private final static String DEFAULT_HOST = "127.0.0.1";
private final static int DEFAULT_PORT = 9050;
/**
* Construct a SocksSocketFactory that uses the provided SOCKS proxy.
* @param proxyaddress the IP address of the SOCKS proxy
* @param proxyport the port of the SOCKS proxy
*/
public SocksSocketFactory(String proxyaddress, int proxyport) {
try {
sProxy = new Socks5Proxy(proxyaddress, proxyport);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
Log.d("TOR_SERVICE","SocksSF couldn't connect",e);
}
sProxy.resolveAddrLocally(false);
}
public Socket connectSocket(Socket sock, String host, int port,
InetAddress localAddress, int localPort, HttpParams params) throws IOException,
UnknownHostException, ConnectTimeoutException {
Log.d("TOR_SERVICE","SocksSocketFactory: connectSocket: " + host + ":" + port);
if (host == null) {
throw new IllegalArgumentException("Target host may not be null.");
}
if (params == null) {
throw new IllegalArgumentException("Parameters may not be null.");
}
// int timeout = HttpConnectionParams.getConnectionTimeout(params);
// Pipe this socket over the proxy
// sock = mSocksProxy.connectSocksProxy(sock, host, port, timeout);
try {
sock = new SocksSocket(sProxy,host, port);
sock.setSoTimeout(0); //indef
if ((localAddress != null) || (localPort > 0)) {
// we need to bind explicitly
if (localPort < 0)
localPort = 0; // indicates "any"
InetSocketAddress isa =
new InetSocketAddress(localAddress, localPort);
sock.bind(isa);
}
} catch (SocksException e) {
Log.e("TOR_SERVICE","error connecting socks to" + host + ":" + port,e);
} catch (UnknownHostException e) {
Log.e("TOR_SERVICE","error connecting socks to" + host + ":" + port,e);
}
return sock;
}
public Socket createSocket() throws IOException {
return new Socket();
}
public boolean isSecure(Socket sock) throws IllegalArgumentException {
return false;
}
public static SocketFactory getSocketFactory ()
{
return new SocksSocketFactory (DEFAULT_HOST, DEFAULT_PORT);
}
}

Some files were not shown because too many files have changed in this diff Show More