Compare commits
143 Commits
master
...
0.2.2.25-a
Author | SHA1 | Date |
---|---|---|
|
551247b64b | |
|
a6c5377564 | |
|
4733f1a356 | |
|
55338abba4 | |
|
517c2ab209 | |
|
59e0609ab1 | |
|
22757c3a34 | |
|
f952a0e60e | |
|
24108e1206 | |
|
28379e1d57 | |
|
40fa9fda0a | |
|
d3d37ab91e | |
|
3a801fc5c4 | |
|
bcfcd97b8d | |
|
7d1793ea13 | |
|
f2aa800ce6 | |
|
d2f2caf7e2 | |
|
ebc742784c | |
|
21d01598cd | |
|
644ce2700d | |
|
09c24253b4 | |
|
d405f4cb00 | |
|
a89c0bf4cb | |
|
0532931351 | |
|
4fa07d21ea | |
|
a49bb0484f | |
|
ecd0a8a195 | |
|
67c98e8bdd | |
|
f6571fb896 | |
|
35d31325f2 | |
|
dd7191bc49 | |
|
9f84c87d0b | |
|
89f0944f0f | |
|
1a92400844 | |
|
2424b889df | |
|
9d35ac685a | |
|
dedbf5018c | |
|
2dffe4f45e | |
|
7284486b12 | |
|
5b36e59856 | |
|
8fdae3b7d5 | |
|
1f1221d204 | |
|
034479dcb5 | |
|
d7086468af | |
|
704006ea92 | |
|
b62a522287 | |
|
48711d3efc | |
|
26396a2325 | |
|
9308135f70 | |
|
ae3d6f6884 | |
|
774577b54c | |
|
7324195fd3 | |
|
6129bbec26 | |
|
1016a1ab08 | |
|
38ace36766 | |
|
1e1f401464 | |
|
024f00dfb2 | |
|
bc3cba8354 | |
|
a4c602d50a | |
|
54276645ea | |
|
2b814e1eaa | |
|
0bc5f8f640 | |
|
e9f6a2b7fe | |
|
4979de01fe | |
|
763a325aaa | |
|
5bf0e69cac | |
|
11f3fe7fc3 | |
|
60cfa10480 | |
|
c94c2a8ad5 | |
|
5810b33fc5 | |
|
183a58f39f | |
|
7d7a33b983 | |
|
bea25c22d7 | |
|
26bb7a6f5e | |
|
497b206ab3 | |
|
d664a52fdb | |
|
2cdba0c467 | |
|
f9175fc67b | |
|
4a5f54cddf | |
|
88b9f360c8 | |
|
25d1dd0e0a | |
|
d44f2c4532 | |
|
9c813c255b | |
|
0cab5fbef3 | |
|
739123b315 | |
|
b720dff1d3 | |
|
c266823653 | |
|
5820c17b14 | |
|
bcead4363f | |
|
5bcadba49c | |
|
baafbea7d7 | |
|
e8dba21690 | |
|
834314d98d | |
|
6aa6bf19dc | |
|
0fc6ddc4e4 | |
|
28758122f9 | |
|
b15e7a6a10 | |
|
e45b9a8cc1 | |
|
867cde2597 | |
|
72bf41686e | |
|
6ab5ca2baa | |
|
2a352e16bc | |
|
8c6fdea6b2 | |
|
6f582d85a2 | |
|
fa38ffcef5 | |
|
634e32d639 | |
|
a0295c2803 | |
|
e2f5ac0929 | |
|
8e8153bc38 | |
|
6c19f0c7e7 | |
|
3b6a5c4862 | |
|
996eb6dbe6 | |
|
be5454841b | |
|
d20521f590 | |
|
47de5f9c10 | |
|
2ad1ed610a | |
|
3800147e22 | |
|
dea398d0cc | |
|
cd8ede4988 | |
|
63ed2e0087 | |
|
3d93750c61 | |
|
9d91abd396 | |
|
91b2e13c44 | |
|
831ccc4060 | |
|
4316b5c96d | |
|
ce65c91546 | |
|
a8080d4011 | |
|
245cef1e32 | |
|
eafeb64b9c | |
|
d9664a03ae | |
|
26fb64a21c | |
|
18ca530e5d | |
|
789b30f9f3 | |
|
7b5677227d | |
|
01bf3d0fd1 | |
|
03fa06bb55 | |
|
7b0717d1e4 | |
|
64b7089f93 | |
|
1b587ab9d1 | |
|
c4eeb6040f | |
|
20f0dfee49 | |
|
81625a112a | |
|
5c45410dc7 |
|
@ -3,6 +3,6 @@
|
|||
<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="jsocks.jar"/>
|
||||
<classpathentry kind="lib" path="libs/jtorctrl.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
38
AUTHORS
|
@ -1,27 +1,33 @@
|
|||
This file lists the authors for Orbot,
|
||||
a free software project to provide anonymity on the Internet on Android smartphones.
|
||||
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://openideals.com/guardian
|
||||
|
||||
If you got this file as a part of a larger bundle,
|
||||
there are probably other authors that you should be aware of.
|
||||
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.
|
||||
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:
|
||||
-------------
|
||||
Jake Appelbaum <jake@appelbaum.net > regular gave Nathan a
|
||||
swift kick in the rear to get this done. He has also provided
|
||||
extensive guidance and review.
|
||||
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.
|
||||
|
||||
Nick Mathewson <nickm@freehaven.net> wrote some of the patch
|
||||
code to support the compiling of Tor and LibEvent on Android,
|
||||
and generaly provided guidance in the entire effort.
|
||||
Adam Langley made the original valiant effort to port Tor to Android.
|
||||
|
||||
Sathyanarayanan <gsathya.ceg@gmail.com> created a patch for the wizard
|
||||
which updated the icon and link for the secure chat app info to point
|
||||
to Gibberbot, and hopefully will continue to contribute useful patches.
|
||||
|
||||
Adam Langley <> made the original valiant effort to port
|
||||
Tor to Android.
|
|
@ -1,23 +1,61 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.torproject.android"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
||||
package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110503a-dev" android:versionCode="11">
|
||||
|
||||
<application android:icon="@drawable/icon" android:label="@string/app_name"
|
||||
android:debuggable="true">
|
||||
<activity android:name=".TorControlPanel"
|
||||
android:label="@string/app_name">
|
||||
<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>
|
||||
<service android:name=".TorService" android:enabled="true" android:exported="true"/>
|
||||
|
||||
<activity android:name=".SettingsPreferences" android:label="@string/app_name"/>
|
||||
<activity android:name=".AppManager" android:label="@string/app_name"/>
|
||||
<activity android:name=".WizardActivity" android:label="@string/app_name"/>
|
||||
|
||||
<service android:enabled="true"
|
||||
android:name=".service.TorService"
|
||||
android:exported="false"
|
||||
>
|
||||
<intent-filter>
|
||||
<action android:name="org.torproject.android.service.ITorService" />
|
||||
<action android:name="org.torproject.android.service.TOR_SERVICE" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
|
||||
<receiver android:name=".OnBootReceiver">
|
||||
<intent-filter>
|
||||
<action
|
||||
android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
<category android:name="android.intent.category.HOME" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
</application>
|
||||
|
||||
<uses-sdk android:minSdkVersion="4"/>
|
||||
|
||||
|
||||
|
||||
</manifest>
|
|
@ -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>
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.torproject.android" android:versionName="0.2.2.22-orbot-alpha-1.0.5.20110416a-dev" android:versionCode="11">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
|
||||
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
|
||||
|
||||
<activity android:name=".Orbot"
|
||||
android:theme="@android:style/Theme.NoTitleBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<action android:name="org.torproject.android.REQUEST_HS_PORT" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<action android:name="org.torproject.android.START_TOR" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name=".SettingsPreferences" android:label="@string/app_name"/>
|
||||
<activity android:name=".AppManager" android:label="@string/app_name"/>
|
||||
<activity android:name=".WizardActivity" android:label="@string/app_name"/>
|
||||
|
||||
<service android:enabled="true"
|
||||
android:name=".service.TorService"
|
||||
android:exported="false"
|
||||
>
|
||||
<intent-filter>
|
||||
<action android:name="org.torproject.android.service.ITorService" />
|
||||
<action android:name="org.torproject.android.service.TOR_SERVICE" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
|
||||
<receiver android:name=".OnBootReceiver">
|
||||
<intent-filter>
|
||||
<action
|
||||
android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
<category android:name="android.intent.category.HOME" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
</application>
|
||||
|
||||
<uses-sdk android:minSdkVersion="4"/>
|
||||
|
||||
|
||||
|
||||
</manifest>
|
47
BUILD
|
@ -1,3 +1,7 @@
|
|||
|
||||
// 2011/04/15 this document is a bit out of date. We will be updating to use
|
||||
// the standalone cross-compiler that is offered by the Android NDK soon
|
||||
|
||||
This document explains how to properly build an Android package of Orbot from
|
||||
source. It covers building on Debian Lenny (5.0.3).
|
||||
|
||||
|
@ -7,6 +11,7 @@ Please install the following prerequisites (instructions for each follows):
|
|||
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:
|
||||
|
@ -42,14 +47,28 @@ Install droid-wrapper:
|
|||
sudo make install
|
||||
|
||||
zlib and OpenSSL are included with the Android OS SDK. You'll need to build
|
||||
libevent and finally Tor. We'll create an externals directory for this code:
|
||||
libevent, Privoxy and finally Tor. We'll create an externals directory for this code:
|
||||
|
||||
mkdir -p ~/mydroid/external/{libevent,tor}
|
||||
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
|
||||
|
@ -62,7 +81,6 @@ Fetch and build libevent:
|
|||
make
|
||||
|
||||
Copy over the libevent library:
|
||||
|
||||
cp .libs/libevent.a ~/mydroid/out/target/product/generic/obj/lib
|
||||
|
||||
Fetch and build Tor:
|
||||
|
@ -71,12 +89,12 @@ Fetch and build Tor:
|
|||
export ZLIBDIR=`cd ~/mydroid/external/zlib && pwd`
|
||||
|
||||
cd ~/mydroid/external/tor
|
||||
git clone https://git.torproject.org/git/tor.git
|
||||
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
|
||||
--with-zlib-dir=$ZLIBDIR --disable-asciidoc
|
||||
make
|
||||
|
||||
At this point, you'll have a Tor binary that can be run on an Android handset.
|
||||
|
@ -91,12 +109,24 @@ We need to build our Java SOCKS library:
|
|||
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 1 --path .
|
||||
$APP_SDK/android update project --name Orbot --target 3 --path .
|
||||
ant release
|
||||
|
||||
This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!
|
||||
|
@ -124,5 +154,10 @@ 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!
|
||||
|
||||
|
|
105
CHANGELOG
|
@ -1,6 +1,105 @@
|
|||
NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
|
||||
|
||||
Changes in version 0.0.1-alpha - 2009-10-21
|
||||
1.0.5
|
||||
- Added new toolbar notifications and alerts for displaying notifications and Tor messages
|
||||
- Removed unused Socks client code from android.net package
|
||||
- Updated wizard to show link to Gibberbot (formerly OTRchat) chat app
|
||||
- Bundled iptables 1.4.7 for ARM instead of relying on installed version
|
||||
- Fixed various issues related to iptables, transproxying for CyanogenMod7/Android 2.3.*
|
||||
- Changed how settings changed are processed through the control port (batched instead of one by one)
|
||||
- Stopped app by app flushing of iptables rules, in favor of complete flush of 'nat' and 'filter' type
|
||||
- removed useless log screen (logs can be viewed/retrieved using 'alogcat' 3rd party app)
|
||||
|
||||
1.0.4
|
||||
- Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)
|
||||
- Fixed incorrect try to clear iptables rules for non-root devices
|
||||
- Fixed bug that stopped wizard helper from showing first time
|
||||
- Added new green notification icon when Tor is connected
|
||||
- Fixed app selector layout in settings
|
||||
- Moved minSDK to 4 (Android 1.6); discontinued 1.5 support
|
||||
- Fixed log screen touch disable tor bug
|
||||
- Debugged issues around network status change causing FC/crash
|
||||
- Added "Start on Boot" option
|
||||
|
||||
1.0.3
|
||||
- Fixed spanish language issues with settings screen
|
||||
- Cleaned up logging, and moved most of it to debug output only
|
||||
- Small changes to iptables, transproxy settings to handle iptables 1.3 and 1.4 variations
|
||||
- Added compile time variable/flag for turning on/off detailed control port output to Android stdout
|
||||
- Hidden services now support through option in settings
|
||||
- removed double apostrophes from value/strings.xml files
|
||||
|
||||
1.0.2
|
||||
- Added "check" yes/no dialog prompt
|
||||
- Debugged iptables/transprox settings on Android 1.6 and 2.2
|
||||
- Added proxy settings help screen and fixed processSettings() NPE
|
||||
|
||||
1.0.1
|
||||
- Found and fixed major bug in per-app trans proxying; list of apps was being cached and iptables rules were not properly updated as the user changed the selection in the list
|
||||
|
||||
1.0.0 - 2010-08-10
|
||||
- Added "Proxy Settings" help screen
|
||||
- Handle potential null pointers on process settings where service not yet active
|
||||
|
||||
0.0.9x - 2010-08-03
|
||||
- Revised Orbot install wizard
|
||||
- Integrated Tor 0.2.2.14 and iptables 4.x binary
|
||||
- Fixed "got root" detection method
|
||||
- Fixed Per App Torification handling so it updates on exit from Settings screen
|
||||
|
||||
0.0.8x - 2010-07-15
|
||||
- Updated Settings & App configuration screens
|
||||
- Changed progress dialog display
|
||||
- Significant application re-arch
|
||||
- Fixed force stop crash on install
|
||||
- Integrated Tor 0.2.2.13-alpha-dev binary
|
||||
- Fixed su shell cmd error handling & root perms issue
|
||||
- #1570: Added new setup wizard on install to clarify root / non-root capabilities
|
||||
- #1716: Per-app traffic routing prefs not persisted
|
||||
- #1509: Help window is too big for the screen on android 1.6
|
||||
- #1513: Orbot can't be told to exit <-- added 'Exit' menu option
|
||||
- #1530: Capture sh cmd stout for debugging errors <-- updated debug log screen
|
||||
- #1531: Don't loop ad infinitum in Orbot fails <-- only retries 3 times now
|
||||
- #1272: Orbot should store Tor files in the cache
|
||||
- #1273: Info should mention anonymity problems with ProxySurf
|
||||
|
||||
0.0.5x
|
||||
- #1388: Error parsing PID from output of "ps"
|
||||
- #1277, #1278: Enabling bridges issues
|
||||
- #1279: Misleading message when initialization is finished
|
||||
- #1292: Tor version in About screen is wrong
|
||||
|
||||
0.0.3x - 2010-03-15
|
||||
- Added Start/Stop menu item for non-touch activation
|
||||
- Improved parsing and validation of settings screen
|
||||
- UI now compatible with landscape mode (#1276)
|
||||
- Added relay support for static/publicly accessible IP devices
|
||||
|
||||
0.0.3a - 2010-02-07
|
||||
- Integrated iptables support for transparent proxying of outbound port
|
||||
80 and DNS
|
||||
- Privoxy is now used as HTTP Proxy server (cross-compiled to ARM)
|
||||
- New UI layout and graphics
|
||||
- Android settings screen for generated torrc file
|
||||
- Improved performance and error handling
|
||||
|
||||
0.0.2a - 2009-11-30
|
||||
- Update user interface layout and graphics
|
||||
- Modified service launch, shutdown and handling
|
||||
- Improved event handler on Tor Control port callbacks
|
||||
- Added Help page
|
||||
|
||||
0.0.2 - 2009-11-27
|
||||
- Major improvement to the user interface including relative layout for
|
||||
different screens
|
||||
- New graphics resources
|
||||
- Implemented Tor Control Port using official Java library
|
||||
- Added 'clear' button to the log screen
|
||||
- Added 'save' and editable textbox for the settings screen
|
||||
- Moved screen navigation to a pop-up menu
|
||||
|
||||
0.0.1-alpha - 2009-10-21
|
||||
- First code release
|
||||
- Major Features: Tor binary application is fully operational, UI: Start/Stop Tor, View Message Log, View Settings (torrc)
|
||||
|
||||
- Major Features: Tor binary application is fully operational, UI:
|
||||
Start/Stop Tor, View Message Log, View Settings (torrc)
|
||||
|
||||
|
|
40
INSTALL
|
@ -1,34 +1,40 @@
|
|||
|
||||
Orbot: Android Onion Routing Robot
|
||||
***********************************************
|
||||
This is a freely licensed open-source application developed for the
|
||||
Android platform, that acts as a front-end to the Tor binary application.
|
||||
Orbot also provides an HTTP Proxy for connecting web browsers and other
|
||||
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/
|
||||
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.
|
||||
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):
|
||||
If you have root access, and a version of Android with iptables that
|
||||
supports the netfilter owner module, then Orbot can setup transparent
|
||||
proxying for any application.
|
||||
|
||||
Proxy: 127.0.0.1
|
||||
Port:8118
|
||||
Finally, Firefox on Android is available, and we have released an
|
||||
add-on named ProxyMob for configuring SOCKS proxy settings for use
|
||||
with the local Tor socks proxy.
|
||||
|
||||
** 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".
|
||||
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, Nathan Freitas, The Guardian Project - http://openideals.com/guardian */
|
||||
/* Copyright (c) 2009,2010,2011, Nathan Freitas, The Guardian Project
|
||||
* http://guardianproject.info/ */
|
||||
|
|
220
LICENSE
|
@ -1,14 +1,17 @@
|
|||
This file contains the license for Orbot, a free software project to provide anonymity on the Internet from a Google Android smartphone.
|
||||
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.
|
||||
It also lists the licenses for other components used by Orbot, including
|
||||
Tor, Privoxy, and iptables.
|
||||
|
||||
For more information about Orbot, see http://openideals.com/guardian
|
||||
For more information about Orbot, see https://guardianproject.info/apps/orbot
|
||||
|
||||
If you got this file as a part of a larger bundle, there may be other license terms that you should be aware of.
|
||||
If you got this file as a part of a larger bundle, there may be other
|
||||
license terms that you should be aware of.
|
||||
===============================================================================
|
||||
Orbot is distributed under this license (aka The Tor License)
|
||||
Orbot is distributed under this license (aka the 3-clause BSD license)
|
||||
|
||||
Copyright (c) 2009, Nathan Freitas, The Guardian Project
|
||||
Copyright (c) 2009-2010, Nathan Freitas, The Guardian Project
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
|
@ -39,11 +42,20 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|||
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
|
||||
|
||||
*****
|
||||
Orbot contains the source code for HttpProxy developed and freely licensed by: Julian Robichaux -- http://www.nsftools.com
|
||||
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 a binary distribution of Tor:
|
||||
|
@ -58,7 +70,6 @@ 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:
|
||||
|
||||
|
@ -94,110 +105,8 @@ 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.
|
||||
===============================================================================
|
||||
|
||||
src/common/strlcat.c and src/common/strlcpy.c by Todd C. Miller are licensed
|
||||
under the following license:
|
||||
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.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:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``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;
|
||||
:src/common/strlcat.c and src/common/strlcpy.c by Todd C. Miller are licensed
|
||||
under the following license:
|
||||
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.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:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``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
|
||||
:src/common/strlcat.c and src/common/strlcpy.c by Todd C. Miller are licensed
|
||||
under the following license:
|
||||
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.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:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCD 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.
|
||||
|
||||
:src/common/strlcat.c and src/common/strlcpy.c by Todd C. Miller are licensed
|
||||
under the following license:
|
||||
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.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:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``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.
|
||||
|
||||
:src/common/strlcat.c and src/common/strlcpy.c by Todd C. Miller are licensed
|
||||
under the following license:
|
||||
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||
|
@ -230,79 +139,7 @@ If you got Tor as a static binary with OpenSSL included, then you should know:
|
|||
"This product includes software developed by the OpenSSL Project
|
||||
for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
===============================================================================
|
||||
"This program uses the IP-to-Country Database provided by
|
||||
WebHosting.Info (http://www.webhosting.info), available from
|
||||
http://ip-to-country.webhosting.info."
|
||||
See the src/config/geoip file in particular.
|
||||
:src/common/strlcat.c and src/common/strlcpy.c by Todd C. Miller are licensed
|
||||
under the following license:
|
||||
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.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:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``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.
|
||||
|
||||
===============================================================================
|
||||
If you got Tor as a static binary with OpenSSL included, then you should know:
|
||||
"This product includes software developed by the OpenSSL Project
|
||||
for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
===============================================================================
|
||||
"This program uses the IP-to-Country Database provided by
|
||||
WebHosting.Info (http://www.webhosting.info), available from
|
||||
http://ip-to-country.webhosting.info."
|
||||
See the src/config/geoip file in particular.
|
||||
:src/common/strlcat.c and src/common/strlcpy.c by Todd C. Miller are licensed
|
||||
under the following license:
|
||||
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.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:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``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.
|
||||
|
||||
===============================================================================
|
||||
If you got Tor as a static binary with OpenSSL included, then you should know:
|
||||
"This product includes software developed by the OpenSSL Project
|
||||
for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
===============================================================================
|
||||
"This program uses the IP-to-Country Database provided by
|
||||
WebHosting.Info (http://www.webhosting.info), available from
|
||||
|
@ -310,7 +147,14 @@ 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.
|
||||
===============================================================================
|
||||
|
|
16
README
|
@ -1,25 +1,27 @@
|
|||
|
||||
Orbot: Android Onion Routing Robot
|
||||
***********************************************
|
||||
This is a freely licensed open-source application developed for the
|
||||
Android platform, that acts as a front-end to the Tor binary application.
|
||||
Orbot also provides an HTTP Proxy for connecting web browsers and other
|
||||
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 develope
|
||||
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://openideals.com/guardian
|
||||
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 http://torproject.org
|
||||
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, Nathan Freitas, The Guardian Project - http://openideals.com/guardian */
|
||||
/* Copyright (c) 2009-2010, Nathan Freitas, The Guardian Project
|
||||
* http://guardianproject.info/ */
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
Current tracked tickets for Orbot can be found here:
|
||||
https://trac.torproject.org/projects/tor/query?status=accepted&status=assigned&status=new&status=reopened&group=component&component=Orbot&order=priority
|
||||
|
||||
If you would like to join the project, we have some ideas for volunteering here:
|
||||
http://www.torproject.org/getinvolved/volunteer.html.en#project-orbot
|
||||
|
||||
You can find us in IRC on FREENODE or OFTC in the #guardianproject and #tor-dev channels
|
169
assets/torrc
|
@ -1,169 +0,0 @@
|
|||
## Configuration file for a typical Tor user
|
||||
## Last updated 16 July 2009 for Tor 0.2.2.1-alpha.
|
||||
## (May or may not work for much older or much newer versions of Tor.)
|
||||
##
|
||||
## Lines that begin with "## " try to explain what's going on. Lines
|
||||
## that begin with just "#" are disabled commands: you can enable them
|
||||
## by removing the "#" symbol.
|
||||
##
|
||||
## See 'man tor', or https://www.torproject.org/tor-manual.html,
|
||||
## for more options you can use in this file.
|
||||
##
|
||||
## Tor will look for this file in various places based on your platform:
|
||||
## https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ#torrc
|
||||
|
||||
|
||||
## Replace this with "SocksPort 0" if you plan to run Tor only as a
|
||||
## relay, and not make any local application connections yourself.
|
||||
SocksPort 9050 # what port to open for local application connections
|
||||
SocksListenAddress 127.0.0.1 # accept connections only from localhost
|
||||
#SocksListenAddress 192.168.0.1:9100 # listen on this IP:port also
|
||||
|
||||
## Entry policies to allow/deny SOCKS requests based on IP address.
|
||||
## First entry that matches wins. If no SocksPolicy is set, we accept
|
||||
## all (and only) requests from SocksListenAddress.
|
||||
#SocksPolicy accept 192.168.0.0/16
|
||||
#SocksPolicy reject *
|
||||
|
||||
## Logs go to stdout at level "notice" unless redirected by something
|
||||
## else, like one of the below lines. You can have as many Log lines as
|
||||
## you want.
|
||||
##
|
||||
## We advise using "notice" in most cases, since anything more verbose
|
||||
## may provide sensitive information to an attacker who obtains the logs.
|
||||
##
|
||||
## Send all messages of level 'notice' or higher to @LOCALSTATEDIR@/log/tor/notices.log
|
||||
Log notice file /data/data/org.torproject.android/notices.log
|
||||
## Send every possible message to @LOCALSTATEDIR@/log/tor/debug.log
|
||||
#Log debug file /data/data/org.torproject.android/debug.log
|
||||
## Use the system log instead of Tor's logfiles
|
||||
#Log notice syslog
|
||||
## To send all messages to stderr:
|
||||
#Log debug stderr
|
||||
|
||||
## Uncomment this to start the process in the background... or use
|
||||
## --runasdaemon 1 on the command line. This is ignored on Windows;
|
||||
## see the FAQ entry if you want Tor to run as an NT service.
|
||||
#RunAsDaemon 1
|
||||
|
||||
## The directory for keeping all the keys/etc. By default, we store
|
||||
## things in $HOME/.tor on Unix, and in Application Data\tor on Windows.
|
||||
DataDirectory /data/data/org.torproject.android/data
|
||||
|
||||
## The port on which Tor will listen for local connections from Tor
|
||||
## controller applications, as documented in control-spec.txt.
|
||||
#ControlPort 9051
|
||||
## If you enable the controlport, be sure to enable one of these
|
||||
## authentication methods, to prevent attackers from accessing it.
|
||||
#HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
|
||||
#CookieAuthentication 1
|
||||
|
||||
############### This section is just for location-hidden services ###
|
||||
|
||||
## 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
|
||||
|
||||
################ This section is just for relays #####################
|
||||
#
|
||||
## See https://www.torproject.org/docs/tor-doc-relay for details.
|
||||
|
||||
## Required: what port to advertise for incoming Tor connections.
|
||||
#ORPort 9001
|
||||
## If you want to listen on a port other than the one advertised
|
||||
## in ORPort (e.g. to advertise 443 but bind to 9090), uncomment the
|
||||
## line below too. You'll need to do ipchains or other port forwarding
|
||||
## yourself to make this work.
|
||||
#ORListenAddress 0.0.0.0:9090
|
||||
|
||||
## A handle for your relay, so people don't have to refer to it by key.
|
||||
#Nickname ididnteditheconfig
|
||||
|
||||
## The IP address or full DNS name for your relay. Leave commented out
|
||||
## and Tor will guess.
|
||||
#Address noname.example.com
|
||||
|
||||
## Define these to limit how much relayed traffic you will allow. Your
|
||||
## own traffic is still unthrottled. Note that RelayBandwidthRate must
|
||||
## be at least 20 KBytes.
|
||||
#RelayBandwidthRate 100 KBytes # Throttle traffic to 100KB/s (800Kbps)
|
||||
#RelayBandwidthBurst 200 KBytes # But allow bursts up to 200KB/s (1600Kbps)
|
||||
|
||||
## Use these to restrict the maximum traffic per day, week, or month.
|
||||
## Note that this threshold applies to sent _and_ to received bytes,
|
||||
## not to their sum: Setting "4 GBytes" may allow up to 8 GBytes
|
||||
## total before hibernating.
|
||||
##
|
||||
## Set a maximum of 4 gigabytes each way per period.
|
||||
#AccountingMax 4 GBytes
|
||||
## Each period starts daily at midnight (AccountingMax is per day)
|
||||
#AccountingStart day 00:00
|
||||
## Each period starts on the 3rd of the month at 15:00 (AccountingMax
|
||||
## is per month)
|
||||
#AccountingStart month 3 15:00
|
||||
|
||||
## Contact info to be published in the directory, so we can contact you
|
||||
## if your relay is misconfigured or something else goes wrong. Google
|
||||
## indexes this, so spammers might also collect it.
|
||||
#ContactInfo Random Person <nobody AT example dot com>
|
||||
## You might also include your PGP or GPG fingerprint if you have one:
|
||||
#ContactInfo 1234D/FFFFFFFF Random Person <nobody AT example dot com>
|
||||
|
||||
## Uncomment this to mirror directory information for others. Please do
|
||||
## if you have enough bandwidth.
|
||||
#DirPort 9030 # what port to advertise for directory connections
|
||||
## If you want to listen on a port other than the one advertised
|
||||
## in DirPort (e.g. to advertise 80 but bind to 9091), uncomment the line
|
||||
## below too. You'll need to do ipchains or other port forwarding yourself
|
||||
## to make this work.
|
||||
#DirListenAddress 0.0.0.0:9091
|
||||
## Uncomment to return an arbitrary blob of html on your DirPort. Now you
|
||||
## can explain what Tor is if anybody wonders why your IP address is
|
||||
## contacting them. See contrib/tor-exit-notice.html for a sample.
|
||||
#DirPortFrontPage /etc/tor/exit-notice.html
|
||||
|
||||
## Uncomment this if you run more than one Tor relay, and add the identity
|
||||
## key fingerprint of each Tor relay you control, even if they're on
|
||||
## different networks. You declare it here so Tor clients can avoid
|
||||
## using more than one of your relays in a single circuit. See
|
||||
## https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ#MultipleServers
|
||||
#MyFamily $keyid,$keyid,...
|
||||
|
||||
## A comma-separated list of exit policies. They're considered first
|
||||
## to last, and the first match wins. If you want to _replace_
|
||||
## the default exit policy, end this with either a reject *:* or an
|
||||
## accept *:*. Otherwise, you're _augmenting_ (prepending to) the
|
||||
## default exit policy. Leave commented to just use the default, which is
|
||||
## described in the man page or at
|
||||
## https://www.torproject.org/documentation.html
|
||||
##
|
||||
## Look at https://www.torproject.org/faq-abuse.html#TypicalAbuses
|
||||
## for issues you might encounter if you use the default exit policy.
|
||||
##
|
||||
## If certain IPs and ports are blocked externally, e.g. by your firewall,
|
||||
## you should update your exit policy to reflect this -- otherwise Tor
|
||||
## users will be told that those destinations are down.
|
||||
##
|
||||
#ExitPolicy accept *:6660-6667,reject *:* # allow irc ports but no more
|
||||
#ExitPolicy accept *:119 # accept nntp as well as default exit policy
|
||||
#ExitPolicy reject *:* # no exits allowed
|
||||
#
|
||||
## Bridge relays (or "bridges") are Tor relays that aren't listed in the
|
||||
## main directory. Since there is no complete public list of them, even if an
|
||||
## ISP is filtering connections to all the known Tor relays, they probably
|
||||
## won't be able to block all the bridges. Also, websites won't treat you
|
||||
## differently because they won't know you're running Tor. If you can
|
||||
## be a real relay, please do; but if not, be a bridge!
|
||||
#BridgeRelay 1
|
||||
#ExitPolicy reject *:*
|
||||
|
40
build.xml
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="Orbot" default="help">
|
||||
<project name="Orbot">
|
||||
|
||||
<!-- The local.properties file is created and updated by the 'android' tool.
|
||||
It contain the path to the SDK. It should *NOT* be checked in in Version
|
||||
It contains the path to the SDK. It should *NOT* be checked in in Version
|
||||
Control Systems. -->
|
||||
<property file="local.properties" />
|
||||
|
||||
|
@ -11,13 +11,13 @@
|
|||
used by the Ant rules.
|
||||
Here are some properties you may want to change/update:
|
||||
|
||||
application-package
|
||||
application.package
|
||||
the name of your application package as defined in the manifest. Used by the
|
||||
'uninstall' rule.
|
||||
source-folder
|
||||
the name of the source folder. Default is 'src'.
|
||||
out-folder
|
||||
the name of the output folder. Default is 'bin'.
|
||||
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.
|
||||
|
@ -37,11 +37,11 @@
|
|||
<!-- 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-location}/tools/lib/anttasks.jar" />
|
||||
<pathelement path="${sdk-location}/tools/lib/sdklib.jar" />
|
||||
<pathelement path="${sdk-location}/tools/lib/androidprefs.jar" />
|
||||
<pathelement path="${sdk-location}/tools/lib/apkbuilder.jar" />
|
||||
<pathelement path="${sdk-location}/tools/lib/jarutils.jar" />
|
||||
<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"
|
||||
|
@ -49,13 +49,19 @@
|
|||
classpathref="android.antlibs" />
|
||||
|
||||
<!-- Execute the Android Setup task that will setup some properties specific to the target,
|
||||
and import the rules files.
|
||||
To customize the rules, copy/paste them below the task, and disable import by setting
|
||||
the import attribute to false:
|
||||
<setup import="false" />
|
||||
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
|
||||
targets are used.
|
||||
build steps are used.
|
||||
-->
|
||||
<setup />
|
||||
|
||||
</project>
|
||||
|
|
|
@ -7,16 +7,8 @@
|
|||
# "build.properties", and override values to adapt the script to your
|
||||
# project structure.
|
||||
|
||||
# apk configurations. This property allows creation of APK files with limited
|
||||
# resources. For example, if your application contains many locales and
|
||||
# you wish to release multiple smaller apks instead of a large one, you can
|
||||
# define configuration to create apks with limited language sets.
|
||||
# Format is a comma separated list of configuration names. For each
|
||||
# configuration, a property will declare the resource configurations to
|
||||
# include. Example:
|
||||
# apk-configurations=european,northamerica
|
||||
# apk-config-european=en,fr,it,de,es
|
||||
# apk-config-northamerica=en,es
|
||||
apk-configurations=
|
||||
# Indicates whether an apk should be generated for each density.
|
||||
split.density=false
|
||||
# Project target.
|
||||
target=android-2
|
||||
target=android-4
|
||||
apk-configurations=
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
_______________________________________________
|
||||
Guardian-dev mailing list
|
||||
|
||||
Post: Guardian-dev@lists.mayfirst.org
|
||||
List info: https://lists.mayfirst.org/mailman/listinfo/guardian-dev
|
||||
|
||||
To Unsubscribe
|
||||
Send email to: Guardian-dev-unsubscribe@lists.mayfirst.org
|
||||
Or visit: https://lists.mayfirst.org/mailman/options/guardian-dev/nathan%40guardianproject.info
|
||||
|
||||
You are subscribed as: nathan@guardianproject.info
|
|
@ -0,0 +1,390 @@
|
|||
Index: src/org/torproject/android/service/TorService.java
|
||||
===================================================================
|
||||
--- src/org/torproject/android/service/TorService.java (revision 24697)
|
||||
+++ src/org/torproject/android/service/TorService.java (working copy)
|
||||
@@ -710,10 +710,36 @@
|
||||
|
||||
if (enableTransparentProxy)
|
||||
{
|
||||
- showAlert("Status", "Setting up transparent proxying...");
|
||||
-
|
||||
- //TorTransProxy.setDNSProxying();
|
||||
- int code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this),transProxyAll);
|
||||
+ //TODO: Find a nice place for the next (commented) line
|
||||
+ //TorTransProxy.setDNSProxying();
|
||||
+
|
||||
+ int code = 0; // Default state is "okay"
|
||||
+
|
||||
+ if(transProxyPortFallback)
|
||||
+ {
|
||||
+ showAlert("Status", "Setting up port-based transparent proxying...");
|
||||
+ StringTokenizer st = new StringTokenizer(portProxyList, ",");
|
||||
+ int status = code;
|
||||
+ while (st.hasMoreTokens())
|
||||
+ {
|
||||
+ status = TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
|
||||
+ if(status != 0)
|
||||
+ code = status;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if(transProxyAll)
|
||||
+ {
|
||||
+ showAlert("Status", "Setting up full transparent proxying...");
|
||||
+ code = TorTransProxy.setTransparentProxyingAll(this);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ showAlert("Status", "Setting up app-based transparent proxying...");
|
||||
+ code = TorTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this),transProxyAll);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
TorService.logMessage ("TorTransProxy resp code: " + code);
|
||||
|
||||
@@ -725,17 +751,7 @@
|
||||
{
|
||||
showAlert("Status", "WARNING: error starting transparent proxying!");
|
||||
}
|
||||
-
|
||||
- //this is for Androids w/o owner module support as a circumvention only fallback
|
||||
- if (transProxyPortFallback)
|
||||
- {
|
||||
- StringTokenizer st = new StringTokenizer(portProxyList, ",");
|
||||
-
|
||||
- while (st.hasMoreTokens())
|
||||
- TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
|
||||
-
|
||||
- }
|
||||
-
|
||||
+
|
||||
return true;
|
||||
|
||||
}
|
||||
Index: src/org/torproject/android/service/TorTransProxy.java
|
||||
===================================================================
|
||||
--- src/org/torproject/android/service/TorTransProxy.java (revision 24697)
|
||||
+++ src/org/torproject/android/service/TorTransProxy.java (working copy)
|
||||
@@ -136,8 +136,6 @@
|
||||
//redirectDNSResolvConf(); //not working yet
|
||||
|
||||
String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
|
||||
-
|
||||
- boolean ipTablesOld = false;
|
||||
|
||||
StringBuilder script = new StringBuilder();
|
||||
|
||||
@@ -145,14 +143,12 @@
|
||||
int code = -1;
|
||||
|
||||
purgeIptables(context);
|
||||
-
|
||||
- script = new StringBuilder();
|
||||
-
|
||||
+
|
||||
//build up array of shell cmds to execute under one root context
|
||||
for (int i = 0; i < apps.length; i++)
|
||||
{
|
||||
|
||||
- if (forceAll || apps[i].isTorified()) //if "Tor Everything" on or app is set to true
|
||||
+ if (apps[i].isTorified()) //if app is set to true
|
||||
{
|
||||
|
||||
if (apps[i].getUsername().equals(TorServiceConstants.TOR_APP_USERNAME))
|
||||
@@ -170,14 +166,8 @@
|
||||
script.append(" -m owner --uid-owner ");
|
||||
script.append(apps[i].getUid());
|
||||
script.append(" -m tcp --syn");
|
||||
-
|
||||
- if (ipTablesOld)
|
||||
- script.append(" -j DNAT --to 127.0.0.1:");
|
||||
- else
|
||||
- script.append(" -j REDIRECT --to-ports ");
|
||||
-
|
||||
+ script.append(" -j REDIRECT --to-ports ");
|
||||
script.append(TOR_TRANSPROXY_PORT);
|
||||
-
|
||||
script.append(" || exit\n");
|
||||
|
||||
//DNS
|
||||
@@ -187,57 +177,37 @@
|
||||
script.append(apps[i].getUid());
|
||||
script.append(" -m udp --dport ");
|
||||
script.append(STANDARD_DNS_PORT);
|
||||
+ script.append(" -j REDIRECT --to-ports ");
|
||||
+ script.append(TOR_DNS_PORT);
|
||||
+ script.append(" || exit\n");
|
||||
|
||||
- if (ipTablesOld)
|
||||
- script.append(" -j DNAT --to 127.0.0.1:");
|
||||
- else
|
||||
- script.append(" -j REDIRECT --to-ports ");
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT -p tcp");
|
||||
+ script.append(" -m owner --uid-owner ");
|
||||
+ script.append(apps[i].getUid());
|
||||
+ script.append(" -m tcp --dport ");
|
||||
+ script.append(TOR_TRANSPROXY_PORT);
|
||||
+ script.append(" -j ACCEPT");
|
||||
+ script.append(" || exit\n");
|
||||
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT -p udp");
|
||||
+ script.append(" -m owner --uid-owner ");
|
||||
+ script.append(apps[i].getUid());
|
||||
+ script.append(" -m udp --dport ");
|
||||
script.append(TOR_DNS_PORT);
|
||||
-
|
||||
+ script.append(" -j ACCEPT");
|
||||
script.append(" || exit\n");
|
||||
+
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
|
||||
+ script.append(apps[i].getUid());
|
||||
+ script.append(" -j DROP"); //drop all other packets as Tor won't handle them
|
||||
+ script.append(" || exit\n");
|
||||
|
||||
|
||||
- if (ipTablesOld) //for some reason this doesn't work on iptables 1.3.7
|
||||
- {
|
||||
- script.append(ipTablesPath);
|
||||
- script.append(" -t nat");
|
||||
- script.append(" -A OUTPUT -m owner --uid-owner ");
|
||||
- script.append(apps[i].getUid());
|
||||
- script.append(" -j DROP");
|
||||
- script.append(" || exit\n");
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- script.append(ipTablesPath);
|
||||
- script.append(" -t filter");
|
||||
- script.append(" -A OUTPUT -p tcp");
|
||||
- script.append(" -m owner --uid-owner ");
|
||||
- script.append(apps[i].getUid());
|
||||
- script.append(" -m tcp --dport ");
|
||||
- script.append(TOR_TRANSPROXY_PORT);
|
||||
- script.append(" -j ACCEPT");
|
||||
- script.append(" || exit\n");
|
||||
-
|
||||
- script.append(ipTablesPath);
|
||||
- script.append(" -t filter");
|
||||
- script.append(" -A OUTPUT -p udp");
|
||||
- script.append(" -m owner --uid-owner ");
|
||||
- script.append(apps[i].getUid());
|
||||
- script.append(" -m udp --dport ");
|
||||
- script.append(TOR_DNS_PORT);
|
||||
- script.append(" -j ACCEPT");
|
||||
- script.append(" || exit\n");
|
||||
-
|
||||
- script.append(ipTablesPath);
|
||||
- script.append(" -t filter -A OUTPUT -m owner --uid-owner ");
|
||||
- script.append(apps[i].getUid());
|
||||
- script.append(" -j DROP"); //drop all other packets as Tor won't handle them
|
||||
- script.append(" || exit\n");
|
||||
-
|
||||
- }
|
||||
-
|
||||
-
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,20 +230,13 @@
|
||||
|
||||
//String baseDir = context.getDir("bin",0).getAbsolutePath() + '/';
|
||||
String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
|
||||
-
|
||||
- boolean ipTablesOld = false;
|
||||
|
||||
StringBuilder script = new StringBuilder();
|
||||
|
||||
StringBuilder res = new StringBuilder();
|
||||
int code = -1;
|
||||
-
|
||||
- String[] cmdFlush = {script.toString()};
|
||||
- code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
|
||||
- //String msg = res.toString(); //get stdout from command
|
||||
+ purgeIptables(context);
|
||||
|
||||
- script = new StringBuilder();
|
||||
-
|
||||
//TCP
|
||||
//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
|
||||
|
||||
@@ -283,14 +246,8 @@
|
||||
script.append(" --dport ");
|
||||
script.append(port);
|
||||
//script.append(" -m tcp --syn");
|
||||
-
|
||||
- if (ipTablesOld)
|
||||
- script.append(" -j DNAT --to 127.0.0.1:");
|
||||
- else
|
||||
- script.append(" -j REDIRECT --to-ports ");
|
||||
-
|
||||
+ script.append(" -j REDIRECT --to-ports ");
|
||||
script.append(TOR_TRANSPROXY_PORT);
|
||||
-
|
||||
script.append(" || exit\n");
|
||||
|
||||
script.append(ipTablesPath);
|
||||
@@ -298,14 +255,8 @@
|
||||
script.append(" -A OUTPUT -p udp");
|
||||
script.append(" --dport ");
|
||||
script.append(port);
|
||||
-
|
||||
- if (ipTablesOld)
|
||||
- script.append(" -j DNAT --to 127.0.0.1:");
|
||||
- else
|
||||
- script.append(" -j REDIRECT --to-ports ");
|
||||
-
|
||||
+ script.append(" -j REDIRECT --to-ports ");
|
||||
script.append(TOR_TRANSPROXY_PORT);
|
||||
-
|
||||
script.append(" || exit\n");
|
||||
|
||||
//DNS
|
||||
@@ -314,24 +265,134 @@
|
||||
script.append(" -A OUTPUT -p udp ");
|
||||
script.append(" -m udp --dport ");
|
||||
script.append(STANDARD_DNS_PORT);
|
||||
+ script.append(" -j REDIRECT --to-ports ");
|
||||
+ script.append(TOR_DNS_PORT);
|
||||
+ script.append(" || exit\n");
|
||||
|
||||
- if (ipTablesOld)
|
||||
- script.append(" -j DNAT --to 127.0.0.1:");
|
||||
- else
|
||||
- script.append(" -j REDIRECT --to-ports ");
|
||||
+
|
||||
+ String[] cmdAdd = {script.toString()};
|
||||
+ code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
|
||||
+ String msg = res.toString();
|
||||
+ TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
|
||||
|
||||
+ return code;
|
||||
+ }
|
||||
+
|
||||
+ public static int setTransparentProxyingAll(Context context) throws Exception {
|
||||
+ boolean runRoot = true;
|
||||
+ boolean waitFor = true;
|
||||
+
|
||||
+ //android.os.Debug.waitForDebugger();
|
||||
+
|
||||
+ //redirectDNSResolvConf(); //not working yet
|
||||
+
|
||||
+ String ipTablesPath = new File(context.getDir("bin", 0),"iptables").getAbsolutePath();
|
||||
+
|
||||
+ StringBuilder script = new StringBuilder();
|
||||
+
|
||||
+ StringBuilder res = new StringBuilder();
|
||||
+ int code = -1;
|
||||
+
|
||||
+ purgeIptables(context);
|
||||
+
|
||||
+ int torUid = context.getApplicationInfo().uid;
|
||||
+
|
||||
+ // Set up port redirection
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t nat");
|
||||
+ script.append(" -A OUTPUT -p tcp");
|
||||
+ script.append(" -m owner ! --uid-owner ");
|
||||
+ script.append(torUid);
|
||||
+ script.append(" -m tcp --syn");
|
||||
+ script.append(" -j REDIRECT --to-ports ");
|
||||
+ script.append(TOR_TRANSPROXY_PORT);
|
||||
+ script.append(" || exit\n");
|
||||
+
|
||||
+ // Same for DNS
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t nat");
|
||||
+ script.append(" -A OUTPUT -p udp -m owner ! --uid-owner ");
|
||||
+ script.append(torUid);
|
||||
+ script.append(" -m udp --dport ");
|
||||
+ script.append(STANDARD_DNS_PORT);
|
||||
+ script.append(" -j REDIRECT --to-ports ");
|
||||
script.append(TOR_DNS_PORT);
|
||||
+ script.append(" || exit\n");
|
||||
|
||||
+ // Allow packets to localhost (contains all the port-redirected ones)
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT");
|
||||
+ script.append(" -p tcp");
|
||||
+ script.append(" -d 127.0.0.1");
|
||||
+ script.append(" -j ACCEPT");
|
||||
script.append(" || exit\n");
|
||||
|
||||
+ // Allow loopback
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT");
|
||||
+ script.append(" -p tcp");
|
||||
+ script.append(" -o lo");
|
||||
+ script.append(" -j ACCEPT");
|
||||
+ script.append(" || exit\n");
|
||||
+
|
||||
+ // Allow everything for Tor
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT");
|
||||
+ script.append(" -m owner --uid-owner ");
|
||||
+ script.append(torUid);
|
||||
+ script.append(" -j ACCEPT");
|
||||
+ script.append(" || exit\n");
|
||||
+
|
||||
+ //XXX: Comment the following rules for non-debug builds
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT");
|
||||
+ script.append(" -p udp");
|
||||
+ script.append(" --dport ");
|
||||
+ script.append(STANDARD_DNS_PORT);
|
||||
+ script.append(" -j LOG");
|
||||
+ script.append(" --log-prefix='ORBOT_DNSLEAK_PROTECTION'");
|
||||
+ script.append(" --log-uid");
|
||||
+ script.append(" || exit\n");
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT");
|
||||
+ script.append(" -p tcp");
|
||||
+ script.append(" -j LOG");
|
||||
+ script.append(" --log-prefix='ORBOT_TCPLEAK_PROTECTION'");
|
||||
+ script.append(" --log-uid");
|
||||
+ script.append(" || exit\n");
|
||||
+
|
||||
+
|
||||
+ // Reject DNS that is not from Tor (order is important - first matched rule counts!)
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT");
|
||||
+ script.append(" -p udp");
|
||||
+ script.append(" --dport ");
|
||||
+ script.append(STANDARD_DNS_PORT);
|
||||
+ script.append(" -j REJECT");
|
||||
+ script.append(" || exit\n");
|
||||
+
|
||||
+ // Reject all other outbound TCP packets
|
||||
+ script.append(ipTablesPath);
|
||||
+ script.append(" -t filter");
|
||||
+ script.append(" -A OUTPUT");
|
||||
+ script.append(" -p tcp");
|
||||
+ script.append(" -j REJECT");
|
||||
+ script.append(" || exit\n");
|
||||
+
|
||||
+ String[] cmdAdd = {script.toString()};
|
||||
|
||||
- String[] cmdAdd = {script.toString()};
|
||||
- code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
|
||||
+ code = TorServiceUtils.doShellCommand(cmdAdd, res, runRoot, waitFor);
|
||||
String msg = res.toString();
|
||||
TorService.logMessage(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
|
||||
|
||||
- return code;
|
||||
- }
|
||||
+ return code;
|
||||
+ }
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
<4>[ 115.319671] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=9997 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK URGP=0 UID=10035 GID=10035
|
||||
<4>[ 115.482788] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=64 TOS=0x00 PREC=0x00 TTL=64 ID=9998 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK URGP=0 UID=10035 GID=10035
|
||||
<4>[ 116.037658] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=64 TOS=0x00 PREC=0x00 TTL=64 ID=9999 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK URGP=0 UID=10035 GID=10035
|
||||
<4>[ 116.699127] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10000 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10035 GID=10035
|
||||
<4>[ 116.724517] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10001 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0 UID=10035 GID=10035
|
||||
<4>[ 116.922515] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10002 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 117.330810] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10003 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 118.150726] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10004 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 118.903320] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10005 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 119.310729] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10006 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 120.130737] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10007 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 121.770690] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10008 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 122.695465] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10009 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 123.100708] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10010 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 123.920684] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10011 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 125.565673] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10012 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 128.840789] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10013 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 130.366333] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10014 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 130.785339] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10015 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 131.600799] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10016 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 132.835144] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50247 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 133.240753] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10017 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 133.410705] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50248 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 133.443481] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=261 TOS=0x00 PREC=0x00 TTL=64 ID=50249 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 134.031341] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50250 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 134.782196] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=261 TOS=0x00 PREC=0x00 TTL=64 ID=50251 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 135.360778] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50252 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 136.520782] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10018 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 136.526306] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50253 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 137.334716] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=261 TOS=0x00 PREC=0x00 TTL=64 ID=50254 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 137.915832] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50255 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 139.075378] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50256 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 140.435913] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10019 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 140.850799] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10020 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 141.395019] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50257 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 141.675140] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10021 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 142.455352] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=261 TOS=0x00 PREC=0x00 TTL=64 ID=50258 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 143.030792] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50259 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 143.310852] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10022 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 144.190734] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50260 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 146.510803] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50261 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 146.590789] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10023 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 151.150726] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50262 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 151.166290] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10024 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 151.570739] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10025 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 152.390686] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10026 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 152.694427] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=261 TOS=0x00 PREC=0x00 TTL=64 ID=50263 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 153.270721] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50264 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 154.030731] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10027 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 154.430694] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50265 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 156.750701] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50266 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 157.310699] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10028 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 160.383117] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10029 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 160.790832] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10030 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 161.390716] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50267 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 161.610717] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10031 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 163.250701] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10032 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 166.531494] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10033 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 170.670715] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50268 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 170.842285] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10034 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 171.250732] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10035 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 172.070800] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10036 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 173.309783] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=261 TOS=0x00 PREC=0x00 TTL=64 ID=50269 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 173.710784] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10037 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 173.880828] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50270 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 175.040710] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50271 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 176.990692] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10038 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 177.360687] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50272 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 181.682952] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10039 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 182.000701] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50273 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 182.090698] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10040 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 182.910797] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10041 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 184.550689] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10042 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 187.830749] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10043 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 191.280700] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50274 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 193.917053] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10044 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 194.330749] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10045 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 195.150695] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10046 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 196.790679] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10047 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 200.070709] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10048 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 201.567718] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10049 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 201.970703] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10050 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 202.790771] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10051 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 204.430816] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10052 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 207.710693] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10053 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 209.840789] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50275 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 212.362884] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10054 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 212.770812] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10055 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 213.590698] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10056 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 215.235809] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10057 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 217.285766] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=261 TOS=0x00 PREC=0x00 TTL=64 ID=50276 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 217.860687] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50277 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 218.510803] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10058 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 219.020721] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50278 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 220.840667] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.101 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=40218 DPT=80 WINDOW=0 RES=0x00 RST URGP=0
|
||||
<4>[ 220.842559] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.101 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=40218 DPT=80 WINDOW=0 RES=0x00 RST URGP=0
|
||||
<4>[ 220.844512] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.101 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=40218 DPT=80 WINDOW=0 RES=0x00 RST URGP=0
|
||||
<4>[ 221.340820] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50279 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 221.478881] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=91 TOS=0x00 PREC=0x00 TTL=64 ID=10059 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 221.890777] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10060 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 221.898010] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.101 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=40218 DPT=80 WINDOW=0 RES=0x00 RST URGP=0
|
||||
<4>[ 222.710754] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10061 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 224.350677] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10062 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 225.617523] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.101 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=40218 DPT=80 WINDOW=0 RES=0x00 RST URGP=0
|
||||
<4>[ 225.980743] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=87.238.52.70 LEN=249 TOS=0x00 PREC=0x00 TTL=64 ID=50280 DF PROTO=TCP SPT=53939 DPT=993 WINDOW=32044 RES=0x00 ACK PSH URGP=0 UID=10053 GID=10053
|
||||
<4>[ 227.630798] ORBOT_TCPLEAK_PROTECTIONIN= OUT=eth0 SRC=192.168.0.14 DST=74.125.39.139 LEN=79 TOS=0x00 PREC=0x00 TTL=64 ID=10063 DF PROTO=TCP SPT=53388 DPT=443 WINDOW=32044 RES=0x00 ACK PSH FIN URGP=0
|
||||
<4>[ 241.522155] ORBOT_TCPLEAK_PROTECTIONIN= OUT=rmnet0 SRC=46.206.239.134 DST=84.22.122.5 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=20341 DF PROTO=TCP SPT=49138 DPT=9001 WINDOW=32044 RES=0x00 ACK URGP=0
|
||||
<4>[ 241.792358] ORBOT_TCPLEAK_PROTECTIONIN= OUT=rmnet0 SRC=46.206.239.134 DST=84.22.122.5 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=49138 DPT=9001 WINDOW=32044 RES=0x00 ACK URGP=0
|
||||
<4>[ 242.362335] ORBOT_TCPLEAK_PROTECTIONIN= OUT=rmnet0 SRC=46.206.239.134 DST=84.22.122.5 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=49138 DPT=9001 WINDOW=32044 RES=0x00 ACK URGP=0
|
||||
<4>[ 243.452331] ORBOT_TCPLEAK_PROTECTIONIN= OUT=rmnet0 SRC=46.206.239.134 DST=84.22.122.5 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=49138 DPT=9001 WINDOW=32044 RES=0x00 ACK URGP=0
|
After Width: | Height: | Size: 7.4 KiB |
|
@ -0,0 +1,285 @@
|
|||
Index: res/values-ca/strings.xml
|
||||
===================================================================
|
||||
--- res/values-ca/strings.xml (revision 24406)
|
||||
+++ res/values-ca/strings.xml (working copy)
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<string name="wizard_tips_tricks">Aplicacions per a usar-se amb Orbot</string>
|
||||
<string name="wizard_tips_msg">T\'animem a descarregar-te & utilitza aplicacions que sàpiguen com connectar-se directament a Orbot. Fes clic als botons de sota per instal·lar.</string>
|
||||
- <string name="wizard_tips_otrchat">OTRCHAT - Client de missatgeria instantània segura per a Android</string>
|
||||
+ <string name="wizard_tips_otrchat">GibberBot - Client de missatgeria instantània segura per a Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Només Android 1.x) - Navegador dissenyat per la privacitat & per a Orbot</string>
|
||||
<string name="wizard_tips_proxy">Coniguració de Proxy - Aprèn a configurar aplicacions per a què funcionin amb Orbot</string>
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
<string name="wizard_final">Orbot és a punt!</string>
|
||||
<string name="wizard_final_msg">Centenars de milers de persones arreu del món utilitzen Tor per un gran ventall de raons: periodistes i blocaires, treballadors pels drets humans, agents de l\'autoritat, soldats, corporacions, ciutadans de règims opressors, i ciutadans qualssevol... I ara tu també ho pots fer!</string>
|
||||
|
||||
- <string name="otrchat_apk_url">https://guardianproject.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/drawable/icon_otrchat.png
|
||||
===================================================================
|
||||
Cannot display: file marked as a binary type.
|
||||
svn:mime-type = application/octet-stream
|
||||
Index: res/drawable/ic_launcher_gibberbot.png
|
||||
===================================================================
|
||||
Cannot display: file marked as a binary type.
|
||||
svn:mime-type = application/octet-stream
|
||||
|
||||
Property changes on: res/drawable/ic_launcher_gibberbot.png
|
||||
___________________________________________________________________
|
||||
Added: svn:mime-type
|
||||
+ application/octet-stream
|
||||
|
||||
Index: res/values-fa/strings.xml
|
||||
===================================================================
|
||||
--- res/values-fa/strings.xml (revision 24406)
|
||||
+++ res/values-fa/strings.xml (working copy)
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
<string name="wizard_tips_tricks">اپلیکیشن هایی که برای اوربات تنظیم شده اند</string>
|
||||
<string name="wizard_tips_msg">توصیه می کنیم داون لود و فعال کنید؛ اپلیکیشن هایی را استفاده کنید که مستقیم به اوربات وصل می شوند. دکمه های زیر را فشار دهید تا نصب شود. </string>
|
||||
- <string name="wizard_tips_otrchat">OTRCHAT - کاربر ایمن انتقال پیام فوری برای آندروید</string>
|
||||
+ <string name="wizard_tips_otrchat">GibberBot - کاربر ایمن انتقال پیام فوری برای آندروید</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (فقط آندروید 1.x) - مرورگر طراحی شده برای حفظ حریم خصوصی و افزونساز اوربات</string>
|
||||
<string name="wizard_tips_proxy">تنظیمات پروکسی - یادگیری تنظیم اپلیکیشن ها برای کار با اوربات</string>
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
<string name="wizard_final">اوربات آماده استفاده میباشد!</string>
|
||||
<string name="wizard_final_msg">صدها هزار نفر در سراسر جهان به دلایل گوناگون از Tor استفاده می کنند: روزنامه نویسها و بلاگرها، کارکنان حقوق بشر، ماموران انتظامی، سربازان، شرکتها، شهروندان دولتهای سرکوبگر، و شهروندان عادی، و حالا شما نیز آماده استفاده از آن هستید!</string>
|
||||
|
||||
- <string name="otrchat_apk_url">https://guardianproject.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/values-ru/strings.xml
|
||||
===================================================================
|
||||
--- res/values-ru/strings.xml (revision 24406)
|
||||
+++ res/values-ru/strings.xml (working copy)
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
<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_otrchat">GibberBot - Обезопасте обмен мгновенными сообщениями для клиентов в Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Только для версии Android 1.x) - Браузер, разработанный для обеспечения безопасности и для Orbot</string>
|
||||
<string name="wizard_tips_proxy">Настройки прокси - узнайте как настроить приложения для работы с Orbot</string>
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
<string name="wizard_final">Программа Orbot готова к использованию!</string>
|
||||
<string name="wizard_final_msg">Сотни тысяч людей по всему миру используют Tor по различным причинам: журналисты и блоггеры, активисты организаций, выступающих в защиту прав человека, судебные исполнители, солдаты, корпорации, граждане стран с репрессивным режимом, и простые люди... а теперь готовы и вы!</string>
|
||||
|
||||
- <string name="otrchat_apk_url">https://guardianproject.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/values-de/strings.xml
|
||||
===================================================================
|
||||
--- res/values-de/strings.xml (revision 24406)
|
||||
+++ res/values-de/strings.xml (working copy)
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<string name="wizard_tips_tricks">Programme, für die Orbot aktiviert ist</string>
|
||||
<string name="wizard_tips_msg">Wir raten Ihnen Programme herunterzuladen & 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_otrchat">GibberBot - Ein sicheres Instant-Messaging-Programm für Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Nur Android 1.x) - Ein für Privatsphäre & Orbot entworfener Browser</string>
|
||||
<string name="wizard_tips_proxy">Proxy-Einstellungen - Lernen Sie Anwendungen so zu konfigurieren, dass sie mit Orbot zusammenarbeiten.</string>
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
<string name="wizard_final">Orbot ist bereit!</string>
|
||||
<string name="wizard_final_msg">Hunderttausende Menschen auf der ganzen Welt nutzen Tor aus einer Vielzahl von Gründen: Journalisten und Blogger, Menschenrechtsaktivisten, Strafverfolgungsbehörden, Soldaten, Unternehmen, Bürger repressiver Regime und ganz normale Menschen... und sind Sie ebenfalls bereit!</string>
|
||||
|
||||
- <string name="otrchat_apk_url">https://guardianproject.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/values/strings.xml
|
||||
===================================================================
|
||||
--- res/values/strings.xml (revision 24406)
|
||||
+++ res/values/strings.xml (working copy)
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
<string name="wizard_tips_tricks">Orbot-enabled Apps</string>
|
||||
<string name="wizard_tips_msg">We encourage you to download & 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_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Android 1.x Only) - Browser designed for privacy & for Orbot</string>
|
||||
<string name="wizard_tips_proxy">Proxy Settings - Learn how to configure apps to work with Orbot</string>
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
<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="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/values-ar/strings.xml
|
||||
===================================================================
|
||||
--- res/values-ar/strings.xml (revision 24406)
|
||||
+++ res/values-ar/strings.xml (working copy)
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<string name="wizard_tips_tricks">تطبيقات مهيئة لأوربوت</string>
|
||||
<string name="wizard_tips_msg">نشجعكم على تحميل واستخدام التطبيقات التي تعرف كيفية الاتصال مباشرة بأوربوت. اضغط على الأزرار في الأسفل للتثبيت.</string>
|
||||
- <string name="wizard_tips_otrchat">OTRCHAT - عميل التراسل الفوري الآمن للأندرويد</string>
|
||||
+ <string name="wizard_tips_otrchat">GibberBot - عميل التراسل الفوري الآمن للأندرويد</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (أندرويد 1.x فقط) - متصفح مصمّم للخصوصية لأوربوت </string>
|
||||
<string name="wizard_tips_proxy">إعدادات الوكيل - تعلم كيفية تكوين التطبيقات لتعمل مع أوربوت</string>
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
<string name="wizard_final">أوربوت جاهز!</string>
|
||||
<string name="wizard_final_msg">مئات الآلاف من الناس في جميع أنحاء العالم يستخدمون تور لأسباب عديدة: الصحفيين والمدونين، والعاملين في مجال حقوق الإنسان، والجنود والشركات والمواطنين من الأنظمة القمعية، والمواطنين العاديين ... والآن أنت مستعد لأن تستخدمه كذلك!</string>
|
||||
|
||||
- <string name="otrchat_apk_url">https://guardianproject.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/values-es/strings.xml
|
||||
===================================================================
|
||||
--- res/values-es/strings.xml (revision 24406)
|
||||
+++ res/values-es/strings.xml (working copy)
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<string name="wizard_tips_tricks">Aplicaciones activas en Orbot</string>
|
||||
<string name="wizard_tips_msg">Le invitamos a descargar y utilizar aplicaciones que saben cómo conectarse directamente a Orbot. Haga clic en los botones a continuación para Instalar.</string>
|
||||
- <string name="wizard_tips_otrchat">OTRCHAT - Cliente de mensajería instantánea seguro para Android</string>
|
||||
+ <string name="wizard_tips_otrchat">GibberBot - Cliente de mensajería instantánea seguro para Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Sólo Android 1.x) - Navegador diseñado para la privacidad y para Orbot</string>
|
||||
<string name="wizard_tips_proxy">Configuraciones Proxy - Aprenda cómo configurar aplicaciones para que trabajen con Orbot</string>
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
<string name="wizard_final">¡Orbot está listo!</string>
|
||||
<string name="wizard_final_msg">Cientos de miles de personas alrededor del mundo usan Tor por una amplia variedad de razones: periodistas y bloggers, trabajadores de los derechos humanos, oficiales de policía, soldados, corporaciones, ciudadanos de regímenes represivos y ciudadanos ordinarios... ¡y ahora también lo estás!</string>
|
||||
|
||||
- <string name="otrchat_apk_url">https://guardianproject.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/values-mk/strings.xml
|
||||
===================================================================
|
||||
--- res/values-mk/strings.xml (revision 24406)
|
||||
+++ res/values-mk/strings.xml (working copy)
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
<string name="wizard_tips_tricks">Орбот-вклучени апликации</string>
|
||||
<string name="wizard_tips_msg">Ви препорачуваме да презимате и користите апликации кои што знаат како директно да се поврзат со Орбот. Притиснете на копчињата подолу за инсталирање.</string>
|
||||
- <string name="wizard_tips_otrchat">OTRCHAT - Безбеден клиент за инстант-пораки за Андроид</string>
|
||||
+ <string name="wizard_tips_otrchat">GibberBot - Безбеден клиент за инстант-пораки за Андроид</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (само Андроид 1.x) - Браусер дизајниран за приватност и за Орбот</string>
|
||||
<string name="wizard_tips_proxy">Подесувања на прокси - Научете како да ги конфигурирате апликациите да работат со Орбот</string>
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
<string name="wizard_final">Орбот е спремен!</string>
|
||||
<string name="wizard_final_msg">Стотици илјади луѓе низ целиот Свет го користат Тор од многу различни причини: новинари и блогери, борци за човекови права, полицајци, војници, корпорации, граѓани на репресивни режими, и обични граѓани... а сега и Вие сте спремин да го користите!</string>
|
||||
|
||||
- <string name="otrchat_apk_url">https://guardianproject.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/values-nl/strings.xml
|
||||
===================================================================
|
||||
--- res/values-nl/strings.xml (revision 24406)
|
||||
+++ res/values-nl/strings.xml (working copy)
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<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_otrchat">GibberBot - Veilige instant message programma voor Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Alleen Android 1.x) - Browser gemaakt voor privacy & voor Orbot</string>
|
||||
<string name="wizard_tips_proxy">Proxy Instellingen - Leer hoe u uw apps kunt configureren voor Orbot</string>
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
<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.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/values-pl/strings.xml
|
||||
===================================================================
|
||||
--- res/values-pl/strings.xml (revision 24406)
|
||||
+++ res/values-pl/strings.xml (working copy)
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
<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_otrchat">GibberBot - 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>
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
<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.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: res/layout/layout_wizard_tips.xml
|
||||
===================================================================
|
||||
--- res/layout/layout_wizard_tips.xml (revision 24406)
|
||||
+++ res/layout/layout_wizard_tips.xml (working copy)
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
<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_otrchat" android:layout_gravity="left" android:drawableLeft="@drawable/ic_launcher_gibberbot" 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"/>
|
||||
|
||||
Index: res/values-zh/strings.xml
|
||||
===================================================================
|
||||
--- res/values-zh/strings.xml (revision 24406)
|
||||
+++ res/values-zh/strings.xml (working copy)
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
<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_otrchat">GibberBot - Android 上的安全即时消息客户端</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (仅 Android 1.x) - 着重隐私设计的浏览器</string>
|
||||
<string name="wizard_tips_proxy">代理设置 - 学习如何配置应用程序使用 Orbot</string>
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
<string name="wizard_final">Orbot 已就绪!</string>
|
||||
<string name="wizard_final_msg">数以万计的各国人们因为各种原因使用 Tor:记者、人权工作者、法律工作者、士兵、公司、迫于实际情况使用的市民,当然也有普通的市民。现在你也即将成为其中的一员!</string>
|
||||
|
||||
- <string name="otrchat_apk_url">https://guardianproject.info/getgibber</string>
|
||||
+ <string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">https://guardianproject.info/getorweb</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
Index: .classpath
|
||||
===================================================================
|
||||
--- .classpath (revision 24406)
|
||||
+++ .classpath (working copy)
|
||||
@@ -1,9 +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="src" path="src"/>
|
||||
+ <classpathentry kind="src" path="gen"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
|
@ -0,0 +1,78 @@
|
|||
#!/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="/home/runa/tor/translation/projects/orbot"
|
||||
|
||||
# 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="/home/runa/tor/orbot/res"
|
||||
|
||||
### 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
|
||||
|
||||
# Validate input and write results to a log file
|
||||
validate_script="/home/runa/tor/translation/tools/validate.py"
|
||||
validate_log="/home/runa/tor/validate/orbot-validate.log"
|
||||
python "$validate_script" -i "$file" -l "$validate_log"
|
||||
|
||||
# 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.
|
||||
dir=`dirname $file | sed "s#$translated/##"`
|
||||
lang=`basename $dir`
|
||||
|
||||
# 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
|
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 120 KiB |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 459 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 828 B |
After Width: | Height: | Size: 794 B |
After Width: | Height: | Size: 828 B |
After Width: | Height: | Size: 875 B |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 16 KiB |
|
@ -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>
|
||||
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
<ScrollView android:id="@+id/aboutscrollview"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
<TextView android:text="@string/wizard_details"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="15px"
|
||||
android:paddingLeft="15px"
|
||||
android:textStyle="bold"
|
||||
android:textColor="#00ff00" />
|
||||
<TextView android:text="@string/wizard_details_msg"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:textColorLink="#ffffff"
|
||||
android:paddingLeft="15px"
|
||||
android:textColor="#ffffff" />
|
||||
|
||||
<TextView android:text="Version: "
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="15px"
|
||||
android:paddingLeft="15px"
|
||||
android:textStyle="bold"
|
||||
android:textColor="#00ff00" />
|
||||
<TextView android:text="- Unknown -"
|
||||
android:id="@+id/versionName"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="15px"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textColor="#ffffff" />
|
||||
<TextView android:text="Project Home(s): "
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="15px"
|
||||
android:paddingLeft="15px"
|
||||
android:textStyle="bold"
|
||||
android:textColor="#00ff00" />
|
||||
<TextView android:text="https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/orbot/"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:textColorLink="#ffffff"
|
||||
android:paddingLeft="15px"
|
||||
android:textColor="#ffffff" />
|
||||
<TextView android:text="License: "
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="15px"
|
||||
android:paddingLeft="15px"
|
||||
android:textStyle="bold"
|
||||
android:textColor="#00ff00" />
|
||||
<TextView android:text="The Tor License"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="15px"
|
||||
android:textColor="#ffffff" />
|
||||
<TextView android:text="https://torproject.org"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:textColorLink="#ffffff"
|
||||
android:paddingLeft="15px"
|
||||
android:textColor="#ffffff" />
|
||||
<TextView android:text="3rd-Party-Software: "
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="15px"
|
||||
android:paddingLeft="15px"
|
||||
android:textStyle="bold"
|
||||
android:textColor="#00ff00" />
|
||||
<TextView android:text="Tor v0.2.2.14: https://www.torproject.org"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:textColorLink="#ffffff"
|
||||
android:paddingLeft="15px"
|
||||
android:textColor="#ffffff" />
|
||||
<TextView android:text="LibEvent v1.4.13: http://www.monkey.org/~provos/libevent/"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:textColorLink="#ffffff"
|
||||
android:paddingLeft="15px"
|
||||
android:textColor="#ffffff" />
|
||||
<TextView android:text="Privoxy v3.0.12: http://www.privoxy.org"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:textColorLink="#ffffff"
|
||||
android:paddingLeft="15px"
|
||||
android:textColor="#ffffff" />
|
||||
<TextView android:text="Iptables v1.4.7: http://www.netfilter.org"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:textColorLink="#ffffff"
|
||||
android:paddingLeft="15px"
|
||||
android:textColor="#ffffff" />
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
</LinearLayout>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
@ -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>
|
|
@ -1,28 +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: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:layout_height="380px"
|
||||
android:layout_width="fill_parent" android:id="@+id/logScrollView">
|
||||
<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="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_weight="1.0"
|
||||
android:layout_x="2px"
|
||||
android:layout_y="2px"
|
||||
android:textSize="14px"
|
||||
android:background="#A0222222"
|
||||
/>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<Button android:id="@+id/btnLogClose"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="40px"
|
||||
android:text="Close Log"
|
||||
android:layout_margin="0sp"
|
||||
|
||||
|
||||
|
||||
/>
|
||||
</LinearLayout>
|
||||
|
|
@ -1,63 +1,78 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<AbsoluteLayout
|
||||
android:id="@+id/widget29"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:background="#cccccc"
|
||||
android:background="@drawable/bgtitanium"
|
||||
android:id="@+id/viewMain"
|
||||
>
|
||||
<AbsoluteLayout
|
||||
android:id="@+id/topbox"
|
||||
android:layout_width="275px"
|
||||
android:layout_height="120px"
|
||||
android:layout_x="19px"
|
||||
android:layout_y="23px"
|
||||
>
|
||||
<ImageView
|
||||
android:id="@+id/imgStatus"
|
||||
android:layout_x="40px"
|
||||
android:layout_y="11px"
|
||||
android:layout_width="64px"
|
||||
android:layout_height="64px"
|
||||
>
|
||||
</ImageView>
|
||||
<TextView
|
||||
android:id="@+id/lblStatus"
|
||||
|
||||
<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:text="TextView"
|
||||
android:layout_x="111px"
|
||||
android:layout_y="39px"
|
||||
android:textColor="#333333"
|
||||
>
|
||||
</TextView>
|
||||
</AbsoluteLayout>
|
||||
<Button
|
||||
android:id="@+id/btnStart"
|
||||
android:layout_width="205px"
|
||||
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="Start Tor"
|
||||
android:layout_x="54px"
|
||||
android:layout_y="133px"
|
||||
>
|
||||
</Button>
|
||||
<Button
|
||||
android:id="@+id/btnLog"
|
||||
android:layout_width="206px"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="View Message Log"
|
||||
android:layout_x="54px"
|
||||
android:layout_y="221px"
|
||||
>
|
||||
</Button>
|
||||
<Button
|
||||
android:id="@+id/btnSettings"
|
||||
android:layout_width="206px"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="View Settings"
|
||||
android:layout_x="53px"
|
||||
android:layout_y="305px"
|
||||
>
|
||||
</Button>
|
||||
</AbsoluteLayout>
|
||||
android:text="@string/powered_by"
|
||||
android:layout_marginTop="9px"
|
||||
android:layout_marginRight="0px"
|
||||
android:gravity="right"
|
||||
android:layout_toLeftOf="@+id/radioModeImage"
|
||||
android:textColor="#333333" />
|
||||
</RelativeLayout>
|
||||
|
||||
<ScrollView android:id="@+id/mainview"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
<TableLayout android:id="@+id/mainLayout"
|
||||
android:layout_gravity="center"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content">
|
||||
<TableRow android:id="@+id/startRow">
|
||||
<TableLayout
|
||||
android:layout_gravity="center"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content">
|
||||
<TableRow>
|
||||
<ImageView
|
||||
android:id="@+id/imgStatus"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/toroff"/>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TextView android:id="@+id/lblStatus"
|
||||
android:text="@string/press_to_start"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center_horizontal"
|
||||
android:textStyle="bold"
|
||||
android:width="330px"
|
||||
android:height="75px"
|
||||
android:textColor="#ffffff"
|
||||
/>
|
||||
</TableRow>
|
||||
</TableLayout>
|
||||
</TableRow>
|
||||
|
||||
</TableLayout>
|
||||
</ScrollView>
|
||||
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
|
|
@ -8,21 +8,22 @@
|
|||
<ScrollView android:layout_height="380px"
|
||||
android:layout_width="fill_parent">
|
||||
|
||||
<TextView android:id="@+id/textSettings"
|
||||
<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/btnSettingsClose"
|
||||
<Button android:id="@+id/btnSettingsSave"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="40px"
|
||||
android:text="Close Log"
|
||||
android:text="Save Settings"
|
||||
android:layout_margin="0sp"
|
||||
|
||||
|
||||
|
||||
/>
|
||||
</LinearLayout>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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/ic_launcher_gibberbot" 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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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
|
|
@ -0,0 +1,12 @@
|
|||
SocksPort 9050
|
||||
SocksListenAddress 127.0.0.1
|
||||
SafeSocks 1
|
||||
Log notice stdout
|
||||
ControlPort 9051
|
||||
CookieAuthentication 1
|
||||
RelayBandwidthRate 20 KBytes
|
||||
RelayBandwidthBurst 20 KBytes
|
||||
UseBridges 0
|
||||
AutomapHostsOnResolve 1
|
||||
TransPort 9040
|
||||
DNSPort 5400
|
|
@ -0,0 +1,143 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">اوربوت (Orbot)</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">بدء وإيقاف تور</string>
|
||||
<string name="tor_proxy_service_process">خدمة وكيل تور</string>
|
||||
|
||||
<string name="status_starting_up">اوربوت يبدأ...</string>
|
||||
<string name="status_activated">أنا متصل بشبكة تور</string>
|
||||
<string name="status_disabled">"تم إيقاف اوربوت</string>
|
||||
<string name="status_shutting_down">جاري إغلاق اوربوت</string>
|
||||
|
||||
<string name="tor_process_connecting">بدء تور...</string>
|
||||
<string name="tor_process_connecting_step2">ضبط التحكم...</string>
|
||||
<string name="tor_process_connecting_step3">مكتمل.</string>
|
||||
<string name="tor_process_connecting_step4">انتظار.</string>
|
||||
|
||||
<string name="not_anonymous_yet">تحذير: حركة مرورك ليست خفية الى الآن! من فضلك قم بتكوين التطبيقات الخاصة بك لإستخدام HTTP proxy 127.0.0.1:8118 أو SOCK4A أو SOKS5 127.0.0.1:9050</string>
|
||||
<string name="menu_home">الصفحة الرئيسية</string>
|
||||
<string name="menu_browse">تصفّح</string>
|
||||
<string name="menu_settings">إعدادات</string>
|
||||
<string name="menu_log">السجل</string>
|
||||
<string name="menu_info">مساعدة</string>
|
||||
<string name="menu_apps">تطبيقات</string>
|
||||
<string name="menu_start">بدء</string>
|
||||
<string name="menu_stop">إيقاف</string>
|
||||
|
||||
<string name="menu_about">حول</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">مساعدة</string>
|
||||
<string name="button_close">إغلاق</string>
|
||||
<string name="button_about">حول</string>
|
||||
|
||||
<string name="button_clear_log">مسح السجل</string>
|
||||
|
||||
|
||||
<string name="menu_verify">فحص</string>
|
||||
<string name="menu_exit">خروج</string>
|
||||
<string name="powered_by">بدعم من مشروع تور</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">عملية توكيل غير مرئية أو ضمنية (يتطلب حقوق المسؤول- Root-)</string>
|
||||
<string name="pref_trans_proxy_title">عملية توكيل غير مرئية أو ضمنية</string>
|
||||
<string name="pref_trans_proxy_summary">عملية توريفاي أوتوماتيكية للتطبيقات</string>
|
||||
|
||||
<string name="pref_transparent_all_title">تور كل شيء</string>
|
||||
<string name="pref_transparent_all_summary">حركة مرور الوكيل لجميع التطبيقات عبر تور</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">تم تثبيت ثنائيات تور بنجاح!</string>
|
||||
<string name="status_install_fail">غير قادر على تثبيت ملفات ثنائيات تور. يرجى التحقق من السجل وإعلامنا على البريد الإلكتروني tor-assistants@torproject.org</string>
|
||||
|
||||
<string name="title_error">خطأ في التطبيق</string>
|
||||
|
||||
<string name="wizard_title">مرحبا بك في أوربوت</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">عن أوربوت</string>
|
||||
<string name="btn_next">التالي</string>
|
||||
<string name="btn_back">رجوع</string>
|
||||
<string name="btn_finish">إنهاء</string>
|
||||
|
||||
<string name="btn_okay">موافق</string>
|
||||
<string name="btn_cancel">إلغاء</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">بفضل أوربوت، صار ممكنا استعمال تور في أندرويد. تور هو برنامج مجاني وشبكة مفتوحة تساعد على حمايتك من مراقبة الشبكات التي تهدد الخصوصية والحرية الشخصية والعلاقات والأنشطة التجارية السرية ورقابة الدول المعروفة بإسم تحليل حركة المرور.
|
||||
|
||||
*تحذير: *تثبيت أوربوت على جهازك_لن_يقوم بإخفاء تحركات حركة مرورك بشكل سحري! سوف يساعدك هذا المعالج على البدء.</string>
|
||||
<string name="wizard_details">بعض التفاصيل عن أوربوت</string>
|
||||
<string name="wizard_details_msg">أوربوت هو تطبيق مفتوح المصدر والذي يضم تور, LibEvent وPrixovy. يعمل على توفير وكيل HTTP محلي (8118) ووكيل SOCKS (9050) إلى شبكة تور. يتوفر لدى أوربوت القدرة على إرسال جميع حركات مرور الانترنت من خلال تور على الجهاز ذات حقوق المسؤول (root). </string>
|
||||
<string name="wizard_permissions_root">تم منح الإذن</string>
|
||||
<string name="wizard_permissions_stock">أذونات أوربوت</string>
|
||||
<string name="wizard_premissions_msg_root">ممتاز! لقد وجدنا بأنه لديك أذونات حقوق المسؤول (root) لتمكين أوربوت. سوف نستخدم هذه السلطة بحكمة.</string>
|
||||
<string name="wizard_permissions_msg_stock">رغم أنه ليس ضروريا، يمكن ان يصبح أوربوت أداة قوية إذا كان لدى جهازك صلاحية حقوق المسؤول (root). استخدم الزر بالأسفل لمنح أوربوت قوة أكبر!</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">إذا لم يكن لديك صلاحية حقوق المسؤول (root) أو ليست لديك أدنى فكرة عما نتحدث عنه، تأكد فقط من استخدام تطبيقات تعمل مع أوربوت.</string>
|
||||
<string name="wizard_permissions_consent">أفهم ذلك وأود أن أستمر بدون حقوق المسؤول (root)</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">منح أوربوت حقوق المسؤول (root)</string>
|
||||
<string name="wizard_configure">تكوين توريفاي</string>
|
||||
<string name="wizard_configure_msg">أوربوت يعطيك الخيار لتوجيه جميع حركات مرور التطبيقات عبر تور OR لإختيار تطبيقاتك بشكل فردي.</string>
|
||||
<string name="wizard_configure_all">توكيل جميع التطبيقات عبر تور</string>
|
||||
<string name="wizard_configure_select_apps">اختر التطبيقات الفردية لتور</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">تطبيقات مهيئة لأوربوت</string>
|
||||
<string name="wizard_tips_msg">نشجعكم على تحميل واستخدام التطبيقات التي تعرف كيفية الاتصال مباشرة بأوربوت. اضغط على الأزرار في الأسفل للتثبيت.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (أندرويد 1.x فقط) - متصفح مصمّم للخصوصية لأوربوت </string>
|
||||
<string name="wizard_tips_proxy">إعدادات الوكيل - تعلم كيفية تكوين التطبيقات لتعمل مع أوربوت</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">إعدادات الوكيل</string>
|
||||
<string name="wizard_proxy_help_msg">اذا كان تطبيق أندرويد الذي تستخدمه يمكن ان يدعم استخدام وكيل HTTP او SOCKS , عندها يمكنك تكوينه للإتصال بأوربوت واستخدام تور.
|
||||
|
||||
|
||||
اعدادات المستضيف هي 127.0.0.1 او "المستضيف المحلي". بالنسبة الى HTTP, فإن ضبط المنفذ هو 8118. بالنسبة الى SOCKS, فإن الوكيل هو 9050. يجب عليك استخدام SOCKS4A او SOCKS5 اذا امكن.
|
||||
|
||||
|
||||
|
||||
يمكنك معرفة المزيد عن عملية توكيل غير مرئية للأندرويد عن طريق الأسئلة المتداولة (FAQ) في: http://tinyurl.com/proxyandroid
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">أوربوت جاهز!</string>
|
||||
<string name="wizard_final_msg">مئات الآلاف من الناس في جميع أنحاء العالم يستخدمون تور لأسباب عديدة: الصحفيين والمدونين، والعاملين في مجال حقوق الإنسان، والجنود والشركات والمواطنين من الأنظمة القمعية، والمواطنين العاديين ... والآن أنت مستعد لأن تستخدمه كذلك!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time"> لقد قمت بإتصال ناجح الى شبكة تور - لكن هذا لا يعني بأن جهازك في مأمن. يمكنك استخدام خيار \'تحقق\' من القائمة لإختبار المتصفح الخاص بك.
|
||||
|
||||
قم بزيارتنا على https://guardianproject.info/apps/orbot او ارسل رسالة الكترونية الى help@guardianproject.info لمعرفة المزيد.</string>
|
||||
|
||||
<string name="tor_check">سيؤدي هذا إلى فتح المتصفح الافتراضي الخاص بك على العنوان https://check.torproject.org من اجل التحقق من تكوين أوربوت بشكل صحيح وبأنك متصل بتور.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">خدمات خفية</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,143 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">Engega o atura Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">Orbot s\'està iniciant...</string>
|
||||
<string name="status_activated">Connectat a la xarxa Tor</string>
|
||||
<string name="status_disabled">Orbot està desactivat</string>
|
||||
<string name="status_shutting_down">Orbot s\'està aturant</string>
|
||||
|
||||
<string name="tor_process_connecting">Iniciant Tor...</string>
|
||||
<string name="tor_process_connecting_step2">Preparant el control...</string>
|
||||
<string name="tor_process_connecting_step3">acomplert.</string>
|
||||
<string name="tor_process_connecting_step4">esperant.</string>
|
||||
|
||||
<string name="not_anonymous_yet">ATENCIÓ : El trànsit de la teva connexió ja no es anònim! Siusplau, configura les teves aplicacions per a usar HTTP proxy 127.0.0.1:8118, per SOCKS4A o SOCKS5 proxy 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Lloc d\'inici</string>
|
||||
<string name="menu_browse">Navega</string>
|
||||
<string name="menu_settings">Preferències</string>
|
||||
<string name="menu_log">Registre</string>
|
||||
<string name="menu_info">Ajut</string>
|
||||
<string name="menu_apps">Aplicacions</string>
|
||||
<string name="menu_start">Inici</string>
|
||||
<string name="menu_stop">Atura</string>
|
||||
|
||||
<string name="menu_about">Quant a...</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">Ajut</string>
|
||||
<string name="button_close">Tanca</string>
|
||||
<string name="button_about">Quant a...</string>
|
||||
|
||||
<string name="button_clear_log">Esborra el registre</string>
|
||||
|
||||
|
||||
<string name="menu_verify">Prova</string>
|
||||
<string name="menu_exit">Surt</string>
|
||||
<string name="powered_by">Funciona gràcies al Projecte Tor</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">Utilitza un proxy transparent (requereix accés)</string>
|
||||
<string name="pref_trans_proxy_title">Utilitza un proxy transparent</string>
|
||||
<string name="pref_trans_proxy_summary">Automatitza Tor per a les aplicacions</string>
|
||||
|
||||
<string name="pref_transparent_all_title">Automatitza Tor per a tot</string>
|
||||
<string name="pref_transparent_all_summary">Canalitza tot el trànsit de proxy de les aplicacions per Tor</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">Binaris de Tor instal·lats correctament!</string>
|
||||
<string name="status_install_fail">Els fitxers binaris de Tor no s\'han pogut instalar. Per favor, comprova el registre i notifica-ho a tor-assistants@torproject.org</string>
|
||||
|
||||
<string name="title_error">Error de l\'aplicació</string>
|
||||
|
||||
<string name="wizard_title">Benvingut/da a Orbot</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">Quant a Orbot...</string>
|
||||
<string name="btn_next">Següent</string>
|
||||
<string name="btn_back">Enrere</string>
|
||||
<string name="btn_finish">Fi</string>
|
||||
|
||||
<string name="btn_okay">D\'acord</string>
|
||||
<string name="btn_cancel">Cancel·la</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">Orbot et porta Tor a l\'Android. Tor és programari lliure i una xarxa oberta que t\'ajuda a defensar-te d\'una vigilància a través de la xarxa, amenaçant la teva privacitat i llibertat personal, informació confidencial, activitats i relacions, i seguretat estatal coneguda com anàlisi de trànsit.
|
||||
|
||||
*ALERTA:* Instal·lar Orbot _no_ convertirà la teva connexió en anònima instantàniament! Aquest assistent t\'ajudarà a començar.</string>
|
||||
<string name="wizard_details">Alguns detalls d\'Orbot...</string>
|
||||
<string name="wizard_details_msg">Orbot és una aplicació de codi lliure que conté Tor, LibEvent i Privoxy. Proporciona un Proxy HTTP local (8118) i un proxy SOCKS (9050) a la xarxa Tor. Orbot també té capacitat d\'enviar tot el trànsit de dades d\'internet a través de Tor.</string>
|
||||
<string name="wizard_permissions_root">Permís concedit</string>
|
||||
<string name="wizard_permissions_stock">Permisos d\'Orbot</string>
|
||||
<string name="wizard_premissions_msg_root">Perfecte! Hem detectat que tens els permisos matriu activats per a Orbot. Utilitzarem aquest poder sàviament.</string>
|
||||
<string name="wizard_permissions_msg_stock">Encara que no és imprescindible, Orbot pot esdevenir una eina molt més potent si el teu terminal té accés complet. Utilitza el botó d\'aquí sota per conferir superpoders a Orbot!</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">Si no tens accés complet, o no tens ni idea del què t\'estem parlant, simplement assegura\'t d\'utilitzar aplicacions fetes per a funcionar amb Orbot.</string>
|
||||
<string name="wizard_permissions_consent">Ho entenc i vull continuar sense accés complet.</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">Concedeix accés complet a Orbot</string>
|
||||
<string name="wizard_configure">Configura la connexió a Tor</string>
|
||||
<string name="wizard_configure_msg">Orbot t\'ofereix l\'opció de conduir el trànsit de totes les aplicacions per Tor o bé escollir quines aplicacions vols utilitzar amb Tor.</string>
|
||||
<string name="wizard_configure_all">Connecta totes les aplicacions per Proxy per Tor.</string>
|
||||
<string name="wizard_configure_select_apps">Selecciona aplicacions individuals per a funcionar amb Tor</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">Aplicacions per a usar-se amb Orbot</string>
|
||||
<string name="wizard_tips_msg">T\'animem a descarregar-te & utilitza aplicacions que sàpiguen com connectar-se directament a Orbot. Fes clic als botons de sota per instal·lar.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Només Android 1.x) - Navegador dissenyat per la privacitat & per a Orbot</string>
|
||||
<string name="wizard_tips_proxy">Coniguració de Proxy - Aprèn a configurar aplicacions per a què funcionin amb Orbot</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">Configuració de Proxy</string>
|
||||
<string name="wizard_proxy_help_msg">Si l\'aplicació d\'Android que estàs utilitzant admet l\'ús d\'un proxy HTTP o SOCKS, pots configurar-la per a connectar-se a Orbot i utilitzar Tor.
|
||||
|
||||
|
||||
La configuració de l\'amfitrió és 127.0.0.1 o "localhost". Per a HTTP, el port actiu és 8118. Per a SOCKS, el proxy és 9050. Hauries d\'utlitzar SOCKS4A o SOCKS5 si és possible.
|
||||
|
||||
|
||||
|
||||
Pots aprendre més coses sobre l\'ús dels proxys a Android al FAQ de: http://tinyurl.com/proxyandroid
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">Orbot és a punt!</string>
|
||||
<string name="wizard_final_msg">Centenars de milers de persones arreu del món utilitzen Tor per un gran ventall de raons: periodistes i blocaires, treballadors pels drets humans, agents de l\'autoritat, soldats, corporacions, ciutadans de règims opressors, i ciutadans qualssevol... I ara tu també ho pots fer!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time">T\'has connectat correctament a la xarxa Tor, però això NO vol dir que el teu dispositiu sigui segur. Pots utilitzar la opció \'Comprova\' del menú per provar el teu navegador.
|
||||
|
||||
Visita\'ns a https://guardianproject.info/apps/orbot o envia\'ns un correu electrònic a help@guardianproject.info per a saber-ne més.</string>
|
||||
|
||||
<string name="tor_check">Això obrirà el teu navegador web per defecte i es connectarà a https://check.torproject.org per tal de comprovar si Orbot està configurat correctament i estàs connectat/da a Tor.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">Serveis ocults</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,143 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">starte und beende Tor</string>
|
||||
<string name="tor_proxy_service_process">Tor Proxydienst</string>
|
||||
|
||||
<string name="status_starting_up">Orbot startet...</string>
|
||||
<string name="status_activated">Verbunden mit dem Tor-Netzwerk</string>
|
||||
<string name="status_disabled">"Orbot ist deaktiviert</string>
|
||||
<string name="status_shutting_down">Orbot wird beendet</string>
|
||||
|
||||
<string name="tor_process_connecting">Starte Tor...</string>
|
||||
<string name="tor_process_connecting_step2">Baue Kontrollverbindung auf...</string>
|
||||
<string name="tor_process_connecting_step3">erfolgreich abgeschlossen.</string>
|
||||
<string name="tor_process_connecting_step4">warte.</string>
|
||||
|
||||
<string name="not_anonymous_yet">WARNUNG: Die Verbindung ist noch nicht anonymisiert! Bitte stellen Sie Ihre Programme so ein, dass sie entwederden HTTP proxy 127.0.0.1:8118, SOCKS4A oder SOCKS proxy 127.0.0.1:9050 nutzen.</string>
|
||||
<string name="menu_home">Home</string>
|
||||
<string name="menu_browse">Durchstöbern</string>
|
||||
<string name="menu_settings">Einstellungen</string>
|
||||
<string name="menu_log">Log</string>
|
||||
<string name="menu_info">Hilfe</string>
|
||||
<string name="menu_apps">Apps</string>
|
||||
<string name="menu_start">Start</string>
|
||||
<string name="menu_stop">Stop</string>
|
||||
|
||||
<string name="menu_about">Über</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">Hilfe</string>
|
||||
<string name="button_close">Schließen</string>
|
||||
<string name="button_about">Über</string>
|
||||
|
||||
<string name="button_clear_log">Log löschen</string>
|
||||
|
||||
|
||||
<string name="menu_verify">Überprüfen</string>
|
||||
<string name="menu_exit">Beenden</string>
|
||||
<string name="powered_by">ermöglicht durch das Tor Projekt</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">Transparenter Proxy (benötigt Administratorrechte)</string>
|
||||
<string name="pref_trans_proxy_title">Transparenter Proxy</string>
|
||||
<string name="pref_trans_proxy_summary">Anwendungen automatisch durch Tor leiten</string>
|
||||
|
||||
<string name="pref_transparent_all_title">Alles durch Tor leiten</string>
|
||||
<string name="pref_transparent_all_summary">Verbindungen aller Anwendungen durch Tor leiten</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">Die Tor-Pakete wurden erfolgreich installiert!</string>
|
||||
<string name="status_install_fail">Die Tor-Pakete konnten nicht erfolgreich installiert werden. Bitte prüfen Sie das Logfile und wenden Sie sich an tor-assistants@torproject.org.</string>
|
||||
|
||||
<string name="title_error">Anwendungsfehler</string>
|
||||
|
||||
<string name="wizard_title">Willkommen bei Orbot</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">Über Orbot</string>
|
||||
<string name="btn_next">Weiter</string>
|
||||
<string name="btn_back">Zurück</string>
|
||||
<string name="btn_finish">Fertigstellen</string>
|
||||
|
||||
<string name="btn_okay">OK</string>
|
||||
<string name="btn_cancel">Abbrechen</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">Orbot bringt Tor auf Android Geräte. Tor ist ein freies Programm und ein offenes Netzwerk, dass Ihnen hilft sich gegen Datenverkehrsüberwachung zu wehren, eine Form der Onlineüberwachung, die Ihre persönliche Freiheit, Privatsphäre, vertrauliche Geschäfte und Geschäftseziehungen bedroht.
|
||||
|
||||
*WARNUNG:* Durch die Installation von Orbot wird _nicht_ sofort Ihr kompletter Datenverkehr anonymisiert! Hilfestellung erhalten Sie von diesem Assitenten.</string>
|
||||
<string name="wizard_details">Nähere Informationen zu Orbot</string>
|
||||
<string name="wizard_details_msg">Orbot ist eine quelloffene Anwendung die Tor, LibEvent und Privoxy enthält. Es stellt einen lokalen HTTP Proxy (8118) und einen SOCKS Proxy (9050) zum Tor-Netzwerk zur Verfügung. Orbot hat auf einem System mit Administrationsrechten auch die Fähigkeit, jeglichen Internetverkehr über das Tor-Netzwerk abzuwickeln.</string>
|
||||
<string name="wizard_permissions_root">Erlaubnis erteilt</string>
|
||||
<string name="wizard_permissions_stock">Orbot Rechte</string>
|
||||
<string name="wizard_premissions_msg_root">Exzellent! Wir haben festgestellt, dass Sie Orbot Administrator-Rechte eingeräumt haben. Wir werden diese Macht weise nutzen.</string>
|
||||
<string name="wizard_permissions_msg_stock">Obwohl es nicht nötig ist, kann Orbot ein mächtigeres Tool werden, wenn Sie ihm Administrator-Rechte einräumen. Drücken Sie auf den Kopf unten um Orbot diese Superkräfte einzuräumen.</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">Falls Sie keinen Administrator-Zugang haben oder nicht wissen was das ist, stellen Sie sicher, dass Sie Anwendungen benutzen die mit Orbot kompatibel können.</string>
|
||||
<string name="wizard_permissions_consent">Ich habe verstanden und möchte ohne Administrator-Rechte weitermachen.</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">Orbot Administrator-Rechte einräumen</string>
|
||||
<string name="wizard_configure">Configure Torification</string>
|
||||
<string name="wizard_configure_msg">Orbot gibt Ihnen die Wahl den Datenverkehr aller Programme durch Tor zu leiten ODER die Wahl für alle Programme einzeln zu treffen.</string>
|
||||
<string name="wizard_configure_all">Den Verkehr aller Programme durch Tor leiten</string>
|
||||
<string name="wizard_configure_select_apps">Programme einzeln wählen</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">Programme, für die Orbot aktiviert ist</string>
|
||||
<string name="wizard_tips_msg">Wir raten Ihnen Programme herunterzuladen & zu nutzen, die wissen, wie sie sich direkt mit Orbot verbinden. Klicken Sie zum Installieren auf den Knopf unten.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Nur Android 1.x) - Ein für Privatsphäre & Orbot entworfener Browser</string>
|
||||
<string name="wizard_tips_proxy">Proxy-Einstellungen - Lernen Sie Anwendungen so zu konfigurieren, dass sie mit Orbot zusammenarbeiten.</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">Proxy-Einstellungen</string>
|
||||
<string name="wizard_proxy_help_msg">Wenn das Android-Programm, das Sie benutzten die Verwendung von HTTP- oder SOCKS-Proxys unterstützt, können Sie es konfigurieren sich mit Orbot zu verbinden und Tor zu nutzen.
|
||||
|
||||
|
||||
Die Host-Einstellungen sind 127.0.0.1 oder "localhost". Die Port-Einstellungen sind 8118 für HTTP und 9050 für SOCKS. Sie sollten versuchen SOCKS4A oder SOCKS5 zu benutzen.
|
||||
|
||||
|
||||
|
||||
Erfahren Sie mehr über die Verwendung von Proxys unter Android in den FAQ unter http://tinyurl.com/proxyandroid
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">Orbot ist bereit!</string>
|
||||
<string name="wizard_final_msg">Hunderttausende Menschen auf der ganzen Welt nutzen Tor aus einer Vielzahl von Gründen: Journalisten und Blogger, Menschenrechtsaktivisten, Strafverfolgungsbehörden, Soldaten, Unternehmen, Bürger repressiver Regime und ganz normale Menschen... und sind Sie ebenfalls bereit!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time">Sie haben sich erfolgreich mit dem Tor-Netzwerk verbunden - das bedeutet aber NICHT, dass Ihr Gerät sicher ist. Sie können die \'Überprüfen\'-Option aus dem Menü benutzen, um Ihren Browser zu testen.
|
||||
|
||||
Besuchen Sie https://guardianproject.info/apps/orbot oder senden Sie eine E-Mail an help@guardianproject.info um mehr zu erfahren.</string>
|
||||
|
||||
<string name="tor_check">Das wird die Seite https://check.torproject.org in Ihrem Webbrowser öffnen, so dass Sie überprüfen können, ob Orbot richtig configuriert ist und Sie mit Tor verbunden sind.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">Versteckte Dienste</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,143 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">iniciar y detener Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">Orbot está iniciando...</string>
|
||||
<string name="status_activated">Conectado a la Red de Tor</string>
|
||||
<string name="status_disabled">"Orbot está desactivado</string>
|
||||
<string name="status_shutting_down">Orbot se está cerrando</string>
|
||||
|
||||
<string name="tor_process_connecting">Iniciando Tor...</string>
|
||||
<string name="tor_process_connecting_step2">Configurción de control...</string>
|
||||
<string name="tor_process_connecting_step3">completo.</string>
|
||||
<string name="tor_process_connecting_step4">esperando.</string>
|
||||
|
||||
<string name="not_anonymous_yet">ADVERTENCIA: ¡Su tráfico no es anónimo aún! Por favor, configure sus aplicaciones para usar el Proxy HTTP 127.0.0.1:8118, el SOCKS4A o el Proxy SOCKS5 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Principal</string>
|
||||
<string name="menu_browse">Examinar</string>
|
||||
<string name="menu_settings">Configuración</string>
|
||||
<string name="menu_log">Historial</string>
|
||||
<string name="menu_info">Ayuda</string>
|
||||
<string name="menu_apps">Aplicaciones</string>
|
||||
<string name="menu_start">Iniciar</string>
|
||||
<string name="menu_stop">Detener</string>
|
||||
|
||||
<string name="menu_about">Acerca de</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">Ayuda</string>
|
||||
<string name="button_close">Cerrar</string>
|
||||
<string name="button_about">Acerca de</string>
|
||||
|
||||
<string name="button_clear_log">Limpiar Historial</string>
|
||||
|
||||
|
||||
<string name="menu_verify">Comprobar</string>
|
||||
<string name="menu_exit">Salir</string>
|
||||
<string name="powered_by">potenciado por Tor Project</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">Proxy transparente (Requiere ser Administrador)</string>
|
||||
<string name="pref_trans_proxy_title">Proxy transparente</string>
|
||||
<string name="pref_trans_proxy_summary">Torificado automático de las Aplicaciones</string>
|
||||
|
||||
<string name="pref_transparent_all_title">Pasar todo el tráfico por Tor</string>
|
||||
<string name="pref_transparent_all_summary">Tráfico Proxy para todas las aplicaciones mediante Tor</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">¡Binarios de Tor instalados con éxito!</string>
|
||||
<string name="status_install_fail">Los archivos binarios de Tor no se han podido instalar. Por favor, verifique el Historial y notifique a: tor-assistants@torproject.org</string>
|
||||
|
||||
<string name="title_error">Error de aplicación</string>
|
||||
|
||||
<string name="wizard_title">Bienvenido a Orbot</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">Acerca de Orbot</string>
|
||||
<string name="btn_next">Siguiente</string>
|
||||
<string name="btn_back">Atrás</string>
|
||||
<string name="btn_finish">Finalizar</string>
|
||||
|
||||
<string name="btn_okay">OK</string>
|
||||
<string name="btn_cancel">Cancelar</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">Orbot proporciona Tor a Android. Tor es un software libre y una red abierta que le ayuda a defenderse contra una forma de vigilancia que amenaza su libertad y privacidad personal, la confidencialidad en los negocios y en las relaciones, y la seguridad del Estado conocida como análisis de tráfico.
|
||||
|
||||
*ADVERTENCIA:* ¡Instalando Orbot _NO_ anonimizará mágicamente su tráfico del móvil! Este assitente le ayudará a empezar.</string>
|
||||
<string name="wizard_details">Algunos detalles de Orbot</string>
|
||||
<string name="wizard_details_msg">Orbot es una aplicación de código abierto que contiene Tor, LibEvent y Privoxy. Provee un Proxy HTTP local (8118) y un Proxy SOCKS (9050) en la red Tor. Orbot también tiene la habilidad, en un dispositivo enrutador, de enviar todo el tráfico de Internet a través de Tor.</string>
|
||||
<string name="wizard_permissions_root">Permiso Concedido</string>
|
||||
<string name="wizard_permissions_stock">Permisos de Orbot</string>
|
||||
<string name="wizard_premissions_msg_root">¡Excelente! Hemos detectado que usted tiene permisos administravitos activados para Orbot. Utilizaremos estos poderes sabiamente.</string>
|
||||
<string name="wizard_permissions_msg_stock">Mientras no sea requerido, Orbot puede convertirse en una herramienta aún más poderosa si su dispositivo tiene acceso de administrador. Utilice el botón a continuación para conceder superpoderes a Orbot</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">Si no tiene acceso de admnistrador o no tiene idea de qué estamos hablando, sólo asegúrese de utilizar aplicaciones hechas para trabajar con Orbot.</string>
|
||||
<string name="wizard_permissions_consent">Comprendo y quiero continuar sin poderes administrativos</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">Conceder poderes administrativos a Orbot</string>
|
||||
<string name="wizard_configure">Configurar Torificación</string>
|
||||
<string name="wizard_configure_msg">Orbot le da la opción de dirigir todo el tráfico de las aplicaciones a través de Tor O de seleccionar sus aplicaciones individualmente.</string>
|
||||
<string name="wizard_configure_all">Configurar Proxy para todas las aplicaciones a través de Tor</string>
|
||||
<string name="wizard_configure_select_apps">Seleccionar aplicaciones individualmente para Tor</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">Aplicaciones activas en Orbot</string>
|
||||
<string name="wizard_tips_msg">Le invitamos a descargar y utilizar aplicaciones que saben cómo conectarse directamente a Orbot. Haga clic en los botones a continuación para Instalar.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Sólo Android 1.x) - Navegador diseñado para la privacidad y para Orbot</string>
|
||||
<string name="wizard_tips_proxy">Configuraciones Proxy - Aprenda cómo configurar aplicaciones para que trabajen con Orbot</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">Configuraciones Proxy</string>
|
||||
<string name="wizard_proxy_help_msg">Si la aplicación Android que está utilizando puede soportar el uso de un Proxy HTTP o SOCKS, entonces puede configurarla para conectar a Orbot y utilizar Tor.
|
||||
|
||||
|
||||
La configuración del dominio es 127.0.0.1 o "localhost". Para HTTP, la configuración del puerto es 8118. Para SOCKS, el proxy es 9050. Puede utilizar SOCKS4A o SOCKS5 si es posible.
|
||||
|
||||
|
||||
|
||||
Puede aprender más acerca de los proxys en Android a través de las Preguntas Frecuentes ubicadas en: http://tinyurl.com/proxyandroid
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">¡Orbot está listo!</string>
|
||||
<string name="wizard_final_msg">Cientos de miles de personas alrededor del mundo usan Tor por una amplia variedad de razones: periodistas y bloggers, trabajadores de los derechos humanos, oficiales de policía, soldados, corporaciones, ciudadanos de regímenes represivos y ciudadanos ordinarios... ¡y ahora también lo estás!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time">Se ha conectado con éxito a la red Tor, pero eso NO significa que su dispositivo es seguro. Puede utilizar la opción \'Comprobar\' desde el menú para probar su navegador.
|
||||
|
||||
Visítenos en https://guardianproject.info/apps/orbot o envíenos un correo electrónico a help@guardianproject.info para aprender más.</string>
|
||||
|
||||
<string name="tor_check">Esto abrirá https://check.torproject.org en su navegador predeterminado con el fin de comprobar si Orbot está configurado y si está conectado a Tor.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">Servicios Ocultados</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">اوربات</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">شروع و پایان Tor</string>
|
||||
<string name="tor_proxy_service_process">سرويس پروكسي تُر</string>
|
||||
|
||||
<string name="status_starting_up">Orbat آغاز می شود..</string>
|
||||
<string name="status_activated">پیوسته به شبکه ی Tor</string>
|
||||
<string name="status_disabled">اوربات غیرفعال شده است.</string>
|
||||
<string name="status_shutting_down">اوربات در حال بسته شدن است.</string>
|
||||
|
||||
<string name="tor_process_connecting">شروع تُر ...</string>
|
||||
<string name="tor_process_connecting_step2">راه اندازی نظارت...</string>
|
||||
<string name="tor_process_connecting_step3">كامل شد.</string>
|
||||
<string name="tor_process_connecting_step4">در انتظار.</string>
|
||||
|
||||
<string name="not_anonymous_yet">هشدار: فعالیت شما هنوز "گمنام" نیست! لطفن اپلیکیشن خود را تنظیم کنید تا از HTTP پروکسی 127.0.0.1:8118 و یا SOCKS4A و یا SOCKS5 پروکسی 127.0.01:9050 استفاده کند.</string>
|
||||
<string name="menu_home">خانه</string>
|
||||
<string name="menu_browse">جستجو</string>
|
||||
<string name="menu_settings">تنظیمات</string>
|
||||
<string name="menu_log">ورود</string>
|
||||
<string name="menu_info">کمک</string>
|
||||
<string name="menu_apps">واژ ه نامه</string>
|
||||
<string name="menu_start">آغاز</string>
|
||||
<string name="menu_stop">ایست</string>
|
||||
|
||||
<string name="menu_about">درباره</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">کمک</string>
|
||||
<string name="button_close">بسته</string>
|
||||
<string name="button_about">درباره</string>
|
||||
|
||||
<string name="button_clear_log">Clear Log</string>
|
||||
|
||||
|
||||
<string name="menu_verify">بررسی</string>
|
||||
<string name="menu_exit">خروج</string>
|
||||
<string name="powered_by">فعال شده توسط Tor Project</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">پروکسیدن شفاف (نیاز به Root دارد)</string>
|
||||
<string name="pref_trans_proxy_title">پروکسیدن شفاف</string>
|
||||
<string name="pref_trans_proxy_summary">Tori-نمایی اتوماتیک اپلیکیشن ها</string>
|
||||
|
||||
<string name="pref_transparent_all_title">شامل همه</string>
|
||||
<string name="pref_transparent_all_summary">فعالیت همه اپلیکیشن ها را از طریق Tor پروکسی کنید.</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">دوتایی های Tor با موفقیت نصب شدند!</string>
|
||||
<string name="status_install_fail">نصب فایل های دوتایی Tor ممکن نبود. لطفن قطعه را وارسی کنید و به tor-assistance@torproject.org اطلاع دهید.</string>
|
||||
|
||||
<string name="title_error">خطای اپلیکیشین</string>
|
||||
|
||||
<string name="wizard_title">به اوربات خوش آمدید</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">درباره اوربات</string>
|
||||
<string name="btn_next">بعدی</string>
|
||||
<string name="btn_back">بازگشت</string>
|
||||
<string name="btn_finish">پایان</string>
|
||||
|
||||
<string name="btn_okay">لغو</string>
|
||||
<string name="btn_cancel">لغو</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">اوربات Tor را به آندرونید وارد می کند. Tor نرم افزاری رایگان و شبکه ای باز است که در مقابل تهدید شبکه های نظارتی علیه آزادی و حریم فردی، فعالیت ها و روابط محرمانه شرکت ها، و امنیت ملی، که "کاوش فعالیت" معروف است، به شما کمک می کند. *هشدار:* نصب اوربات به تنهایی قادر نیست معجزه ای صورت دهد و فعالیت آنلاین شما را مخفی کند! این ابزار تنها کمک می کند که قدم اول را بردارید.</string>
|
||||
<string name="wizard_details">برخی جزئیات در مورد اوربات</string>
|
||||
<string name="wizard_details_msg">اوربات اپلیکیشنی با متن-باز است که شامل Tor, LibEvent و Privoxy. این اپلیکیشن، HTTP پروکسی (8118) محلی و SOCKS پروکسی (9050) را در شبکه Tor در دسترس قرار می دهد. اوربات همچنین قادر است بر روی ابزار root شده، تمام ترافیک اینترنت را از Tor ارسال کند.</string>
|
||||
<string name="wizard_permissions_root">مجوز صادر گردید</string>
|
||||
<string name="wizard_permissions_stock">مجوزهای اوربات</string>
|
||||
<string name="wizard_premissions_msg_root">بسیار عالی! اینطور که معلوم است شما دارای مجوز root برای فعال کردن اوربات هستید. این امکان را بخوبی مورد استفاده قرار خواهیم داد. </string>
|
||||
<string name="wizard_permissions_msg_stock">هرچند ضرورت ندارد اما اگر سیستم شما دارای دسترسی root باشد اوربات با ظرفیت بسیار بیشتری عمل خواهد کرد. دکمه زیر را فشار دهید تا اوربات دارای ظرفیت حداکثری بشود.</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">اگر سیستم شما دارای دسترسی root نیست و یا اصلن چیزی از این عبارت متوجه نمی شوید، حتمن سعی کنید از اپلکیشن هایی استفاده کنید که ویژه اوربات تهیه شده اند. </string>
|
||||
<string name="wizard_permissions_consent">متوجه هستم و ترجیح می دهم بدون root ادامه بدهم.</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">واگذاری root برای اوربات</string>
|
||||
<string name="wizard_configure">تنظیمات تبدیل به Tor</string>
|
||||
<string name="wizard_configure_msg">اوربات به شما امکان می دهد که تمام اپلیکشین ها را از طریق Tor منتقل کنید و یا اپلیکیشن مورد نظر خود را شخصن انتخاب کنید.</string>
|
||||
<string name="wizard_configure_all">تمام اپلیکیشن ها را از طریق Tor منتقل کنید.</string>
|
||||
<string name="wizard_configure_select_apps">اپلیکیشن های منفرد برای Tor انتخاب کنید.</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">اپلیکیشن هایی که برای اوربات تنظیم شده اند</string>
|
||||
<string name="wizard_tips_msg">توصیه می کنیم داون لود و فعال کنید؛ اپلیکیشن هایی را استفاده کنید که مستقیم به اوربات وصل می شوند. دکمه های زیر را فشار دهید تا نصب شود. </string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (فقط آندروید 1.x) - مرورگر طراحی شده برای حفظ حریم خصوصی و افزونساز اوربات</string>
|
||||
<string name="wizard_tips_proxy">تنظیمات پروکسی - یادگیری تنظیم اپلیکیشن ها برای کار با اوربات</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">تنظیمات پروکسی</string>
|
||||
<string name="wizard_proxy_help_msg">اگر اپلیکشین آندرونوید مورد استفاده شما قابلیت کار با HTTP و یا SOCKS پروکسی دارد می توانید تنظیمش کنید تا به اوربات وصل شود و از Tor استفاده کند. تنظیمات سرویس دهنده 127.0.0.1 و یا "سرویس-ده محلی" است. برای HTTP تنظیمات درگاه (port) 8118 است. برای SOCKS، پروکسی مناسب، 9050 است. شما می بایست SOCKS4A و یا در صورت امکان از socks5 استفاده کنید. در صورت نیاز به اطلاعات بیشتر در مورد انتقالده آندروید، می توانید به FAQ (سوالهای معمول) در http://tinyurl.com/proxyandroid مراجعه کنید.</string>
|
||||
|
||||
<string name="wizard_final">اوربات آماده استفاده میباشد!</string>
|
||||
<string name="wizard_final_msg">صدها هزار نفر در سراسر جهان به دلایل گوناگون از Tor استفاده می کنند: روزنامه نویسها و بلاگرها، کارکنان حقوق بشر، ماموران انتظامی، سربازان، شرکتها، شهروندان دولتهای سرکوبگر، و شهروندان عادی، و حالا شما نیز آماده استفاده از آن هستید!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time">اکنون با موفقیت به شبکه Tor وصل شده اید اما به آن معنا نیست که سیستم شما ایمن است. می توانید از منیو گزینه /"Check/" را برای آزمایش مرورگر انتخاب کنید. به ما در صفحه https://guardianproject.info/apps/orbot مراجعه کنید و به آدرس help@guardianproject.info ایمیلی بفرستید تا اطلاعات بیشتری دریافت کنید. </string>
|
||||
|
||||
<string name="tor_check">با این قدم پیشفرض مرورگر وب شما به صفحه https://check.torproject.org باز می شود تا شما مشاهده کنید آیا اوربات تنظیم شده است و آیا شما به Tor وصل شده اید یا نه.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">سرويس هاي مخفي</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,135 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Орбот</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">вклучи и исклучи го Тор</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">Орбот се вклучува...</string>
|
||||
<string name="status_activated">Поврзан на мрежата Тор</string>
|
||||
<string name="status_disabled">"Орбот е дезактивиран</string>
|
||||
<string name="status_shutting_down">Орбот се исклучува</string>
|
||||
|
||||
<string name="tor_process_connecting">Вклучување на Тор...</string>
|
||||
<string name="tor_process_connecting_step2">Воспоставување контрола...</string>
|
||||
<string name="tor_process_connecting_step3">готово.</string>
|
||||
<string name="tor_process_connecting_step4">чекање.</string>
|
||||
|
||||
<string name="not_anonymous_yet">ВНИМАНИЕ: Вашиот сообраќај сеуште не е анонимен! Треба да ги конфигурирате Вашите апликации да го користат проксито за HTTP, 127.0.0.1:8118, или проксито за SOCKS4A или SOCKS5, 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Дома</string>
|
||||
<string name="menu_browse">Прелистување</string>
|
||||
<string name="menu_settings">Подесувања</string>
|
||||
<string name="menu_log">Лог</string>
|
||||
<string name="menu_info">Помош</string>
|
||||
<string name="menu_apps">Апликации</string>
|
||||
<string name="menu_start">Вклучи</string>
|
||||
<string name="menu_stop">Исклучи</string>
|
||||
|
||||
<string name="menu_about">За</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">Помош</string>
|
||||
<string name="button_close">Затвори</string>
|
||||
<string name="button_about">За</string>
|
||||
|
||||
<string name="button_clear_log">Избриши лог</string>
|
||||
|
||||
|
||||
<string name="menu_verify">Провери</string>
|
||||
<string name="menu_exit">Излез</string>
|
||||
<string name="powered_by">напојувано од проектот Тор</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">Транспарентно прокси (бара root пристап)</string>
|
||||
<string name="pref_trans_proxy_title">Транспарентно прокси</string>
|
||||
<string name="pref_trans_proxy_summary">Автоматско торифицирање на апликациите</string>
|
||||
|
||||
<string name="pref_transparent_all_title">Целосно торифицирање</string>
|
||||
<string name="pref_transparent_all_summary">Проксирај го сообраќајот на сите апликации низ Тор</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">Извршните програми за Тор се успешно инсталирани!</string>
|
||||
<string name="status_install_fail">Извршните фајлови на Тор не можеа да се инсталираат. Видете го логот и известете нè за ова на tor-assistants@torproject.org</string>
|
||||
|
||||
<string name="title_error">Апликациска грешка</string>
|
||||
|
||||
<string name="wizard_title">Добредојдовте во Орбот</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">За Орбот</string>
|
||||
<string name="btn_next">Напред</string>
|
||||
<string name="btn_back">Назад</string>
|
||||
<string name="btn_finish">Крај</string>
|
||||
|
||||
<string name="btn_okay">Во ред</string>
|
||||
<string name="btn_cancel">Откажи се</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">Орбот овозможува работа со Тор на Андроид. Тор е слободен софтвер и отворена мрежа којашто Ви помага да се заштитите од одреден вид мрежно прислушкување, познат како анализа на сообраќај (traffic analysis), кој претставуваат закана за личната слобода и приватност, за стопанските дејности и односи од доверлив карактер, како и за државната безбедност.\n\n*ВНИМАНИЕ:*Самиот факт што сте го инсталирале Орбот _нема_ автоматски да го направи Вашиот мобилен сообраќај анонимен! Но, овој прозор ќе Ви помогне да се иницирате.</string>
|
||||
<string name="wizard_details">Некои детали за Орбот</string>
|
||||
<string name="wizard_details_msg">Орбот е апликација со отворен код којашто го содржи Тор, LibEvent и Privoxy. Таа Ви нуди локални проксиња за HTTP (порт 8118) и SOCKS (порт 9050) за поврзување со мрежата Тор. Орбот исто така нуди можност, на уреди со root пристап, целиот сообраќај да се пренасочи преку Тор.</string>
|
||||
<string name="wizard_permissions_root">Дозволата е издадена</string>
|
||||
<string name="wizard_permissions_stock">Дозволи на орбот</string>
|
||||
<string name="wizard_premissions_msg_root">Одлично! Детектиравме дека сте овозможиле root пристап за Орбот. Внимателно ќе се користиме со таа можност.</string>
|
||||
<string name="wizard_permissions_msg_stock"> Иако тоа не е задолжително, Орбот може да стане помоќна алатка доколку вашиот уред има root пристап. Со копчето подолу можете на Орбот да му дадете таква супер-моќ.</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">Ако немате root пристап или ако не разбирате за што зборуваме, единствено осигурајте се дека користите апликации кои што работат со Орбот.</string>
|
||||
<string name="wizard_permissions_consent">Разбирам и сакам да продолжам без root пристап</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">Дозволи root за Орбот</string>
|
||||
<string name="wizard_configure">Подесување на торифицињето</string>
|
||||
<string name="wizard_configure_msg">Орбот ви овозможува, или да го рутирате сиот сообраќај на сите апликации низ Тор, или поединечно да ги избирате апликациите.</string>
|
||||
<string name="wizard_configure_all">Проксирај ги сите апликации низ Тор</string>
|
||||
<string name="wizard_configure_select_apps">Избери поединечно апликации за Тор</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">Орбот-вклучени апликации</string>
|
||||
<string name="wizard_tips_msg">Ви препорачуваме да презимате и користите апликации кои што знаат како директно да се поврзат со Орбот. Притиснете на копчињата подолу за инсталирање.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (само Андроид 1.x) - Браусер дизајниран за приватност и за Орбот</string>
|
||||
<string name="wizard_tips_proxy">Подесувања на прокси - Научете како да ги конфигурирате апликациите да работат со Орбот</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">Подесувања на прокси</string>
|
||||
<string name="wizard_proxy_help_msg">Ако апликацијата за Андроид што ја користите поддржува употреба на прокси за HTTP или SOCKS, тогаш може да ја конфигурирате да се поврзе со Орбот и да користи Тор. \n\n
|
||||
Подесувањето за хост е 127.0.0.1 или „localhost“. За HTTP, подесувањето на порт е 8118. За SOCKS, портот е 9050. Доколку можете, користете SOCKS4A или SOCKS5.
|
||||
\n\n
|
||||
Можете да научите повеќе за проксирањето на Андроид преку ЧПП на: http://tinyurl.com/proxyandroid
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">Орбот е спремен!</string>
|
||||
<string name="wizard_final_msg">Стотици илјади луѓе низ целиот Свет го користат Тор од многу различни причини: новинари и блогери, борци за човекови права, полицајци, војници, корпорации, граѓани на репресивни режими, и обични граѓани... а сега и Вие сте спремин да го користите!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time"> Успешно се поврзавте на мрежата Тор - но ова НЕ значи дека важиот уред е сигурен. За да го проверите Вашиот браусер, изберете ја опцијата „Провери“ во менито. \n\nПосетете нѐ на https://guardianproject.info/apps/orbot или испратете порака на help@guardianproject.info за повеќе информации.</string>
|
||||
|
||||
<string name="tor_check">Ова ќе ја отвори страницата https://check.torproject.org во Вашиот веб браусер за да видите дали Орбот е правилно конфигуриран и дали сте поврзани на Тор.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">Скриени сервиси </string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">start og stopp Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">Orbot starter...</string>
|
||||
<string name="status_activated">Tilkoblet Tor-nettverket</string>
|
||||
<string name="status_disabled">"Orbot er deaktivert</string>
|
||||
<string name="status_shutting_down">Orbot skrur seg av</string>
|
||||
|
||||
<string name="tor_process_connecting">Starter Tor...</string>
|
||||
<string name="tor_process_connecting_step2">autentiserer kontrolltilkobling...</string>
|
||||
<string name="tor_process_connecting_step3">ferdig.</string>
|
||||
<string name="tor_process_connecting_step4">venter.</string>
|
||||
|
||||
<string name="not_anonymous_yet">ADVARSEL: Trafikken din er ikke anonym helt enda! Vær vennlig og konfigurer applikasjonene dine til å bruke HTTP proxy 127.0.0.1:8118 eller SOCKS4A eller SOCKS5 proxy 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Hjem</string>
|
||||
<string name="menu_browse">Gå til</string>
|
||||
<string name="menu_settings">Innstillinger</string>
|
||||
<string name="menu_log">Logg</string>
|
||||
<string name="menu_info">Hjelp</string>
|
||||
<string name="menu_apps">Applikasjoner</string>
|
||||
<string name="menu_start">Start</string>
|
||||
<string name="menu_stop">Stopp</string>
|
||||
|
||||
<string name="menu_about">About</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
|
||||
|
||||
|
||||
<string name="button_help">Hjelp</string>
|
||||
<string name="button_close">Avslutt</string>
|
||||
<string name="button_about">Om</string>
|
||||
|
||||
<string name="menu_verify">Check</string>
|
||||
<string name="menu_exit">Exit</string>
|
||||
</resources>
|
|
@ -0,0 +1,142 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">start en stop Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxydienst</string>
|
||||
|
||||
<string name="status_starting_up">Orbot is aan het starten...</string>
|
||||
<string name="status_activated">Aangesloten op het Tor netwerk</string>
|
||||
<string name="status_disabled">Orbot is uitgeschakeld</string>
|
||||
<string name="status_shutting_down">Orbot is aan het afsluiten</string>
|
||||
|
||||
<string name="tor_process_connecting">Bezig met opstarten van Tor...</string>
|
||||
<string name="tor_process_connecting_step2">Bezig met instellen aansturing</string>
|
||||
<string name="tor_process_connecting_step3">klaar.</string>
|
||||
<string name="tor_process_connecting_step4">aan het wachten.</string>
|
||||
|
||||
<string name="not_anonymous_yet">WAARSCHUWING: Uw verkeer is nog niet anononiem! Stel uw programma\'s alstublieft in dat ze gebruik maken van HTTP proxy 127.0.0.1:8118 of SOCKS4A of SOCKS5 proxy 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Thuis</string>
|
||||
<string name="menu_browse">Bladeren</string>
|
||||
<string name="menu_settings">Instellingen</string>
|
||||
<string name="menu_log">Logboek</string>
|
||||
<string name="menu_info">Hulp</string>
|
||||
<string name="menu_apps">Applicaties</string>
|
||||
<string name="menu_start">Start</string>
|
||||
<string name="menu_stop">Stop</string>
|
||||
|
||||
<string name="menu_about">Over</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">Hulp</string>
|
||||
<string name="button_close">Afsluiten</string>
|
||||
<string name="button_about">Over</string>
|
||||
|
||||
<string name="button_clear_log">Wis logboek</string>
|
||||
|
||||
|
||||
<string name="menu_verify">Controleer</string>
|
||||
<string name="menu_exit">Verlaten</string>
|
||||
<string name="powered_by">aangedreven door het Tor Project</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">Transparant Proxyen (Vereist Root)</string>
|
||||
<string name="pref_trans_proxy_title">Transparant Proxyen</string>
|
||||
<string name="pref_trans_proxy_summary">Automatisch Tor forceren van aplicaties</string>
|
||||
|
||||
<string name="pref_transparent_all_title">Tor Alles</string>
|
||||
<string name="pref_transparent_all_summary">Proxy verkeer voor alle toepasingen door Tor</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">Tor\'s binaire bestanden succesvol geïnstalleerd</string>
|
||||
<string name="status_install_fail">The binaire bestanden konden niet worden geïnstalleerd. Gelieve het log te raadplegen en tor-assistants@torproject.org op de hoogte te stellen</string>
|
||||
|
||||
<string name="title_error">Toepassingsfout</string>
|
||||
|
||||
<string name="wizard_title">Welkom bij Orbot</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">Over Orbot</string>
|
||||
<string name="btn_next">Volgende</string>
|
||||
<string name="btn_back">Terug</string>
|
||||
<string name="btn_finish">Einde</string>
|
||||
|
||||
<string name="btn_okay">OK</string>
|
||||
<string name="btn_cancel">Annuleren</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">Orbot brengt Tor naar de Android. Tor is vrije software en een open netwerk dat u helpt te verdedigen tegen netwerk toezicht welke aanvallen zijn op uw vrijheid en privacy, geheime zakelijke documenten en zaken relaties.
|
||||
|
||||
*WAARSCHUWING:* Door het installeren van Orbot word uw verkeer _niet_ automatisch geproxyt! Deze wizard helpt u hier mee.</string>
|
||||
<string name="wizard_details">Enkele Orbot Details</string>
|
||||
<string name="wizard_details_msg">Orbot is een open-source applicatie waarin Tor, LibEvent en Privoxy zich bevinden. Het creeërt een lokale HTTP proxy (8118) en een SOCKS proxy (9050) naar het Tor netwerk. Orbot heeft ook de mogelijkheid om al het internet verkeer over het Tor netwerk te sturen.</string>
|
||||
<string name="wizard_permissions_root">Toelating toegestaan</string>
|
||||
<string name="wizard_permissions_stock">Orbot Rechten</string>
|
||||
<string name="wizard_premissions_msg_root">Uitstekend! We hebben gedetecteerd dat je root rechten hebt aangezet voor Orbot. We gebruiken deze kracht met verstand.</string>
|
||||
<string name="wizard_permissions_msg_stock">Alhoewel het niet verplicht is kan Orbot ook nog krachtiger worden. Als u root rechten heeft kunt u op de knop onderaan Orbot super krachten toewijzen.</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">Als u niet over root toegang beschikt en geen idee hebt waar u mee bezig bent zult u zeker moeten zijn dat de applicaties die u gebruikt geschikt voor Orbot zijn.</string>
|
||||
<string name="wizard_permissions_consent">Ik begrijp dit en wil verdergaan zonder root</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">Root toestaan voor Orbot</string>
|
||||
<string name="wizard_configure">Torificatie Configureren</string>
|
||||
<string name="wizard_configure_msg">Orbot geeft u de mogelijkheid om induvidueel te bepalen welk van uw applicaties over het Tor netwerk gaan.</string>
|
||||
<string name="wizard_configure_all">Proxy alle toepasingen door Tor</string>
|
||||
<string name="wizard_configure_select_apps">Selecteer individuele toepasingen voor Tor</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">Orbot-beschikbare Apps</string>
|
||||
<string name="wizard_tips_msg">We raden u aan om te apps te downloaden welke zich zich automatisch verbinden met Orbot. Klik op de buttons hier beneden om te installeren.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Alleen Android 1.x) - Browser gemaakt voor privacy & voor Orbot</string>
|
||||
<string name="wizard_tips_proxy">Proxy Instellingen - Leer hoe u uw apps kunt configureren voor Orbot</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">Proxy Instellingen</string>
|
||||
<string name="wizard_proxy_help_msg">Als de Android app welke u gebruikt beschikt over een HTTP of SOCKS proxy instelling, dan kunt u het configureren zodat het via Orbot over het Tor netwerk gaat.
|
||||
|
||||
|
||||
De host instelling is 127.0.0.1 of "localhost". De poort voor SOCS is 9050 en voor HTTP 8118. Gebruik SOCKS4A or SOCKS5 indien nodig.
|
||||
|
||||
|
||||
U kunt meer leren over het proxyen op Android door naar de FAQ op http://tinyurl.com/proxyandroid te gaan
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">Orbot is klaar!</string>
|
||||
<string name="wizard_final_msg">Honderdduizenden verschillende mensen over de wereld gebruiken Tor, zoals: journalisten, bloggers, mensen rechten medewerkers, soldaten, bedrijven, burgers met onderdrukte religies, en natuurlijk normale mensen... En nu bent u ook klaar om te gaan!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time">U bent succesvol verbonden met het Tor netwerk, maar dit betekent NIET dat u apparaat volledig veilig is. Gebruik te \'Check\' optie vanuit het menu om u browser te testen.
|
||||
|
||||
Bezoek onze website op https://guardianproject.info/apps/orbot of stuuf een email naar help@guardianproject.info voor vragen.</string>
|
||||
|
||||
<string name="tor_check">Dit opent uw standaard browser naar https://check.torproject.org om te controleren of Orbot succesvol is geconfigureerd om te verbinden met het Tor netwerk.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">Verborgen diensten</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,135 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">włącz i wyłącz Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">Orbot startuje...</string>
|
||||
<string name="status_activated">Podłączony do sieci Tor</string>
|
||||
<string name="status_disabled">Orbot wyłączony</string>
|
||||
<string name="status_shutting_down">Orbot wyłącza się</string>
|
||||
|
||||
<string name="tor_process_connecting">Tor startuje...</string>
|
||||
<string name="tor_process_connecting_step2">Ustawianie sterowania...</string>
|
||||
<string name="tor_process_connecting_step3">zakończono.</string>
|
||||
<string name="tor_process_connecting_step4">oczekiwanie.</string>
|
||||
|
||||
<string name="not_anonymous_yet">UWAGA: Twoja komunikacja nie jest jeszcze anonimowa! Proszę skonfiguruj aplikacje aby używały serwera proxy HTTP 127.0.0.1:8118 lub SOCKS4A lub SOCKS5 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Start</string>
|
||||
<string name="menu_browse">Przeglądaj</string>
|
||||
<string name="menu_settings">Ustawienia</string>
|
||||
<string name="menu_log">Logi</string>
|
||||
<string name="menu_info">Pomoc</string>
|
||||
<string name="menu_apps">Aplikacje</string>
|
||||
<string name="menu_start">Start</string>
|
||||
<string name="menu_stop">Stop</string>
|
||||
|
||||
<string name="menu_about">O programie</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">Pomoc</string>
|
||||
<string name="button_close">Zamknij</string>
|
||||
<string name="button_about">O programie</string>
|
||||
|
||||
<string name="button_clear_log">Czyść dziennik</string>
|
||||
|
||||
|
||||
<string name="menu_verify">Sprawdź</string>
|
||||
<string name="menu_exit">Wyjście</string>
|
||||
<string name="powered_by">napędzane oprogramowaniem Projektu Tor</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">Przekierowanie przezroczyste (Wymaga uprawnień administratora)</string>
|
||||
<string name="pref_trans_proxy_title">Przekierowanie przezroczyste</string>
|
||||
<string name="pref_trans_proxy_summary">Automatyczne toryfikowanie aplikacji</string>
|
||||
|
||||
<string name="pref_transparent_all_title">Przepuść wszystko przez Tora</string>
|
||||
<string name="pref_transparent_all_summary">Przekierowanie ruchu wszystkich aplikacji przez Tora</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">Binarki Tora pomyslnie zainstalowane!</string>
|
||||
<string name="status_install_fail">Nie można zainstalować plików binarnych Tora. Zajrzyj do dziennika i powiadom tor-assistants@torproject.org</string>
|
||||
|
||||
<string name="title_error">Błąd Aplikacji</string>
|
||||
|
||||
<string name="wizard_title">Witamy w Orbocie</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">O Orbocie</string>
|
||||
<string name="btn_next">Dalej</string>
|
||||
<string name="btn_back">wstecz</string>
|
||||
<string name="btn_finish">Koniec</string>
|
||||
|
||||
<string name="btn_okay">OK</string>
|
||||
<string name="btn_cancel">Anuluj</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">Orbot daje Tora Androidowi. Tor jest otwartym oprogramowaniem i otwartą siecią, która pomaga bronić się przed podsłuchem sieci znanym jako analiza ruchu, który zagraża wolności osobistej i prywatności, poufnym działaniom biznesowym i relacjami oraz bezpieczeństwu państwa.\n\n*UWAGA:* Sama instalacja Orbota _nie_ zanonimizuje magicznie Twojego ruchu! Ten kreator pozwoli Ci w pierwszych krokach.</string>
|
||||
<string name="wizard_details">Niektóre szczegóły o Orbocie</string>
|
||||
<string name="wizard_details_msg">Orbot jest otwartą aplikacją zawierającą Tora, LibEvent i Privoxy. Dostarcza lokalnego pośrednika HTTP (8118) i SOCKS (9050) do sieci Tora. Orbot ma możliwość, na urządzeniu uruchomionym z prawami administratora, wysyłać cały ruch internetowy przez Tora.</string>
|
||||
<string name="wizard_permissions_root">Dostęp zezwolony</string>
|
||||
<string name="wizard_permissions_stock">Prawa dostepu Orbota</string>
|
||||
<string name="wizard_premissions_msg_root">Doskonale! Odkryliśmy, że masz uprawnienia administratora włączone dla Orbota. Będziemy mądrze korzystać z tej władzy.</string>
|
||||
<string name="wizard_permissions_msg_stock"> Podczas gdy nie jest to wymagane, Orbot może stać się znacznie potężniejszym narzędziem, gdy masz prawa administratora na swoim urządzeniu. Użyj przycisku poniżej, by dać Orbotowi duży uprawnienia.</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">Jeśli nie masz uprawnień administratora lub nie masz pojęcia, o czym mówimy, używaj aplikacji skonfigurowanych do pracy z Orbotem.</string>
|
||||
<string name="wizard_permissions_consent">Rozumiem i chcę kontynuować bez uprawnień administratora</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">Daj uprawnienia administratora Orbotowi</string>
|
||||
<string name="wizard_configure">Skonfiguruj Toryfikację</string>
|
||||
<string name="wizard_configure_msg">Orbot daje Ci możliwość przekierowania całego ruchu aplikacji przez Tora ALBO wybrania aplikacji pojedynczo.</string>
|
||||
<string name="wizard_configure_all">Przekierowuj wszystkie aplikacje przez Tora</string>
|
||||
<string name="wizard_configure_select_apps">Wybierz poszczególne aplikacje dla Tora</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">Aplikacje skonfigurowane dla Orbota</string>
|
||||
<string name="wizard_tips_msg">Zachęcamy do pobierania i używania aplikacji, które wiedzą, jak łączyć się bezpośrednio z Orbotem. Kliknij na poniższe przyciski, by zainstalować.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (tylko Android 1.x) - Przeglądarka zaprojektowana do prywatności i dla Orbota</string>
|
||||
<string name="wizard_tips_proxy">Ustawienia Proxy - NDowiedz się, jak konfiguroać aplikacje do współpracy z Orbotem</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">Ustawienia Proxy</string>
|
||||
<string name="wizard_proxy_help_msg">Jeśli aplikacja na Androida, której używasz ma obsługę proxy HTTP lub SOCKS, możesz skonfigurować ją do łączenia się z Orbotem i używania Tora.\n\n
|
||||
Ustawienie hosta to 127.0.0.1 lub "localhost". Dla HTTP, numer portu to 8118. Dla SOCKS pośrednik to 9050. Powinno się używać SOCKS4A lub SOCKS5, jeśli to możliwe.
|
||||
\n\n
|
||||
Możesz dowiedzieć się więcej o przekierowaniu ruchu na Androidzie z FAQ pod adresem: http://tinyurl.com/proxyandroid
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">Orbot jest gotowy!</string>
|
||||
<string name="wizard_final_msg">Setki tysięcy ludzi na całym świecie używają Tora z różnych powodów: dziennikarze i blogerzy, działacze na rzecz praw człowieka, stróże prawa, żołnierze, korporacje, obywatele represyjnych reżimów i zwykli obywatele... teraz Ty też możesz!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time">Pomyślnie połaczono z siecią Tora - ale to NIE oznacza, że Twoje urządzenie jest bezpieczne. Możesz użyć opcji \'Sprawdź\' w menu, aby przetestować swoją przeglądarkę. \n\nOdwiedź nas na https://guardianproject.info/apps/orbot lub wyślij email na help@guardianproject.info, by dowiedzieć się więcej.</string>
|
||||
|
||||
<string name="tor_check">To otworzy Twoją domyślną przeglądarkę na adresie https://check.torproject.org w celu sprawdzenia, czy Orbot jest skonfigurowany i jest poąłczenie z Torem.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">Usługi ukryte</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">iniciar e parar Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">O Orbot está a iniciar...</string>
|
||||
<string name="status_activated">Ligação estabelecida à rede Tor</string>
|
||||
<string name="status_disabled">"Orbot está Desactivado</string>
|
||||
<string name="status_shutting_down">Orbot a encerrar</string>
|
||||
|
||||
<string name="tor_process_connecting">A iniciar Tor...</string>
|
||||
<string name="tor_process_connecting_step2">a autenticar a ligação de controlo...</string>
|
||||
<string name="tor_process_connecting_step3">completo.</string>
|
||||
<string name="tor_process_connecting_step4">a aguardar.</string>
|
||||
|
||||
<string name="not_anonymous_yet">ATENÇÃO: A sua ligação ainda não é anónima! Por favor configure as suas aplicações para utilizarem o proxy HTTP 127.0.0.1:8118 ou o proxy SOCKS4A ou SOCKS5 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Início</string>
|
||||
<string name="menu_browse">Explorar</string>
|
||||
<string name="menu_settings">Definições</string>
|
||||
<string name="menu_log">Relatório</string>
|
||||
<string name="menu_info">Ajuda</string>
|
||||
<string name="menu_apps">Aplicações</string>
|
||||
<string name="menu_start">Iniciar</string>
|
||||
<string name="menu_stop">Parar</string>
|
||||
|
||||
<string name="menu_about">About</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">Ajuda</string>
|
||||
<string name="button_close">Encerrar</string>
|
||||
<string name="button_about">Sobre</string>
|
||||
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
|
||||
|
||||
<string name="menu_verify">Check</string>
|
||||
<string name="menu_exit">Exit</string>
|
||||
</resources>
|
|
@ -0,0 +1,135 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">запуск и остановка Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">Запуск Orbot...</string>
|
||||
<string name="status_activated">Подключен к сети Tor</string>
|
||||
<string name="status_disabled">"Orbot Отключен</string>
|
||||
<string name="status_shutting_down">Orbot выключается</string>
|
||||
|
||||
<string name="tor_process_connecting">Запуск Tor...</string>
|
||||
<string name="tor_process_connecting_step2">Настройка управления...</string>
|
||||
<string name="tor_process_connecting_step3">готово.</string>
|
||||
<string name="tor_process_connecting_step4">ожидание.</string>
|
||||
|
||||
<string name="not_anonymous_yet">ВНИМАНИЕ! Ваш поток данных еще не анонимен! Пожалуйста, настройте свои приложения на использование HTTP прокси 127.0.0.1:8118 или SOCKS4A или SOCKS5 прокси 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Домашняя страница</string>
|
||||
<string name="menu_browse">Просмотр</string>
|
||||
<string name="menu_settings">Параметры</string>
|
||||
<string name="menu_log">Журнал</string>
|
||||
<string name="menu_info">Справка</string>
|
||||
<string name="menu_apps">Приложения</string>
|
||||
<string name="menu_start">Запустить</string>
|
||||
<string name="menu_stop">Остановить</string>
|
||||
|
||||
<string name="menu_about">О программе</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">Справка</string>
|
||||
<string name="button_close">Закрыть</string>
|
||||
<string name="button_about">О программе</string>
|
||||
|
||||
<string name="button_clear_log">Очистить журнал</string>
|
||||
|
||||
|
||||
<string name="menu_verify">Проверка</string>
|
||||
<string name="menu_exit">Выход</string>
|
||||
<string name="powered_by">powered by the Tor Project</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">Прозрачный прокси (Требуются привилегии root)</string>
|
||||
<string name="pref_trans_proxy_title">Прозрачный прокси</string>
|
||||
<string name="pref_trans_proxy_summary">Автоматическая торификация приложений</string>
|
||||
|
||||
<string name="pref_transparent_all_title">Направлять все через Tor</string>
|
||||
<string name="pref_transparent_all_summary">Трафик всех приложений будет проходить через Tor</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">Программа Tor успешно установлена!</string>
|
||||
<string name="status_install_fail">Не удалось установить программу Tor. Пожалуйста, проверьте системный журнал и сообщите нам: tor-assistants@torproject.org</string>
|
||||
|
||||
<string name="title_error">Ошибка приложения</string>
|
||||
|
||||
<string name="wizard_title">Добро пожаловать в Orbot</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">Об Orbot</string>
|
||||
<string name="btn_next">Вперед</string>
|
||||
<string name="btn_back">Назад</string>
|
||||
<string name="btn_finish">Завершить</string>
|
||||
|
||||
<string name="btn_okay">Ok</string>
|
||||
<string name="btn_cancel">Отмена</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">Orbot, и Tor на Android. Tor - это бесплатное программное обеспечение и открытая сеть, которая позволяет вам сберечься от прослушивания в сети, которое угрожает вашей свободе и конфиденциальности в бизнесе, отношениях, Tor позволяет защититься от анализа трафика.\n\n*ВНИМАНИЕ:* Установка Orbot не может магическим образом анонимизировать весь ваш мобильный трафик! Этот мастер поможет вам начать.</string>
|
||||
<string name="wizard_details">Некоторые сведенья о программе Orbot</string>
|
||||
<string name="wizard_details_msg">Orbot - это приложение с открытым кодом, которое содержит Tor, LibEvent и Privoxy. Она обеспечивает работу локального HTTP прокси (8118) и SOCKS прокси (9050) в сети Tor. Orbot также позволяет, из корня устройсва, пересылать весь интернет трафик через Tor.</string>
|
||||
<string name="wizard_permissions_root">Разрешение получено</string>
|
||||
<string name="wizard_permissions_stock">Разрешения Orbot</string>
|
||||
<string name="wizard_premissions_msg_root">Отлично! Мы определили, что доступ к корневому каталогу в Orbot разрешен. Мы будем использовать это с умом.</string>
|
||||
<string name="wizard_permissions_msg_stock">Хотя это не требуется, Orbot может быть более мощным инструментом, если доступ к корневому каталогу устройства разрешен. Нажимите на кнопку ниже и дайте Orbot суперсилу!</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">Если у вас нет доступа к корневому каталогу или вы понятия не имеете о чем мы говорим, просто убедитесь, что используете приложения, разработанные для Orbot.</string>
|
||||
<string name="wizard_permissions_consent">Я все понял, продолжу без доступа к корню</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">Дать доступ к корю программе Orbot</string>
|
||||
<string name="wizard_configure">Настроить Торификацию</string>
|
||||
<string name="wizard_configure_msg">Программа Orbot дает вам возможность маршрутизировать трафик всех приложений через Tor ИЛИ выбрать приложения для маршрутизации самостоятельно.</string>
|
||||
<string name="wizard_configure_all">Маршрутизировать все приложения через Tor</string>
|
||||
<string name="wizard_configure_select_apps">Выберите приложения для маршрутизации через Tor</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">Orbot-задействованные приложения</string>
|
||||
<string name="wizard_tips_msg">Мы советуем вам скачать и использовать приложения, которые умеют работать напрямую через Orbot. Нажмите на кнопки ниже, чтобы запустить процесс установки.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Только для версии Android 1.x) - Браузер, разработанный для обеспечения безопасности и для Orbot</string>
|
||||
<string name="wizard_tips_proxy">Настройки прокси - узнайте как настроить приложения для работы с Orbot</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">Настройки Прокси</string>
|
||||
<string name="wizard_proxy_help_msg">Если используемое вами приложение для Android поддерживает HTTP или SOCKS, то вы можете настоить его на подключение к Orbot и использование Tor.\n\n
|
||||
Настройки хоста (или localhost) - 127.0.0.1. Для HTTP, номер порта - 8118. Для SOCKS прокси - 9050. По возможности используйте SOCKS4A или SOCKS5.
|
||||
\n\n
|
||||
Вы можете узнать больше о работе через прокси на Android, прочитав этот FAQ: http://tinyurl.com/proxyandroid
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">Программа Orbot готова к использованию!</string>
|
||||
<string name="wizard_final_msg">Сотни тысяч людей по всему миру используют Tor по различным причинам: журналисты и блоггеры, активисты организаций, выступающих в защиту прав человека, судебные исполнители, солдаты, корпорации, граждане стран с репрессивным режимом, и простые люди... а теперь готовы и вы!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time"> Вы успешно подключились к сети Tor, но это НЕ значит, что ваше устройство безопасно. Вы можете воспользоваться функцией \'Проверки\' из меню, чтобы потестировать ваш браузер. \n\nПосетите наш сайт: https://guardianproject.info/apps/orbot или отправьте нам письмо на адрес: help@guardianproject.info, чтобы узнать больше.</string>
|
||||
|
||||
<string name="tor_check">Это приведет к запуску веб-браузера, выбранного на вашем компьютере по-умолчанию, и подключению к сайту https://check.torproject.org, с целью проверки правильности работы Orbot и определения, подключены ли вы к сети Tor.</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">Скрытые сервисы</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">start and stop Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">Orbot startar...</string>
|
||||
<string name="status_activated">Uppkopplad till Tor nätverket</string>
|
||||
<string name="status_disabled">"Orbot är inaktiverad</string>
|
||||
<string name="status_shutting_down">Orbot avslutas</string>
|
||||
|
||||
<string name="tor_process_connecting">Startar Tor...</string>
|
||||
<string name="tor_process_connecting_step2">verifierar kontroll uppkopplingen...</string>
|
||||
<string name="tor_process_connecting_step3">klar.</string>
|
||||
<string name="tor_process_connecting_step4">väntar.</string>
|
||||
|
||||
<string name="not_anonymous_yet">VARNING: Din trafik är inte anonym än! Vänligen konfigurera dina apps att använda HTTP proxy 127.0.0.1:8118 eller SOCKS4A/5 proxy 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Hem</string>
|
||||
<string name="menu_browse">Browse</string>
|
||||
<string name="menu_settings">Inställningar</string>
|
||||
<string name="menu_log">Logg</string>
|
||||
<string name="menu_info">Hjälp</string>
|
||||
<string name="menu_apps">Apps</string>
|
||||
<string name="menu_start">Start</string>
|
||||
<string name="menu_stop">Stopp</string>
|
||||
|
||||
<string name="menu_about">About</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">>Request root access for transparent proxying</string>
|
||||
|
||||
|
||||
<string name="button_help">Hjälp</string>
|
||||
<string name="button_close">Stäng</string>
|
||||
<string name="button_about">Om</string>
|
||||
|
||||
</resources>
|
|
@ -0,0 +1,134 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">启动和停止 Tor</string>
|
||||
<string name="tor_proxy_service_process">Tor 代理服务</string>
|
||||
|
||||
<string name="status_starting_up">Orbot 正在启动...</string>
|
||||
<string name="status_activated">已连接到 Tor 网络</string>
|
||||
<string name="status_disabled">Orbot 已停用</string>
|
||||
<string name="status_shutting_down">Orbot 正在关闭</string>
|
||||
|
||||
<string name="tor_process_connecting">正在启动Tor....</string>
|
||||
<string name="tor_process_connecting_step2">设置控制...</string>
|
||||
<string name="tor_process_connecting_step3">完毕。</string>
|
||||
<string name="tor_process_connecting_step4">等待中。</string>
|
||||
|
||||
<string name="not_anonymous_yet">警告: 您的通讯还不是匿名的! 请设置您的应用程序使用代理服务器 127.0.0.1:8118 或者 SOCKS4A 或者 SOCKS5 代理服务器 127.0.0.1:9050</string>
|
||||
<string name="menu_home">首页</string>
|
||||
<string name="menu_browse">浏览</string>
|
||||
<string name="menu_settings">设置</string>
|
||||
<string name="menu_log">日志</string>
|
||||
<string name="menu_info">帮助</string>
|
||||
<string name="menu_apps">应用</string>
|
||||
<string name="menu_start">启动</string>
|
||||
<string name="menu_stop">停止</string>
|
||||
|
||||
<string name="menu_about">关于</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
<string name="button_help">帮助</string>
|
||||
<string name="button_close">关闭</string>
|
||||
<string name="button_about">关于</string>
|
||||
|
||||
<string name="button_clear_log">Clear Log</string>
|
||||
|
||||
|
||||
<string name="menu_verify">检查</string>
|
||||
<string name="menu_exit">退出</string>
|
||||
<string name="powered_by">由 Tor 项目强力驱动</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">透明代理(需要 root)</string>
|
||||
<string name="pref_trans_proxy_title">透明代理</string>
|
||||
<string name="pref_trans_proxy_summary">自动对应用程序使用 Tor</string>
|
||||
|
||||
<string name="pref_transparent_all_title">对所有应用使用 Tor</string>
|
||||
<string name="pref_transparent_all_summary">使用 Tor 代理所有程序的流量</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">Tor 二进制程序安装成功!</string>
|
||||
<string name="status_install_fail">Tor 二进制程序无法安装。请查看日志 tor-assistants@torproject.org</string>
|
||||
|
||||
<string name="title_error">应用程序错误</string>
|
||||
|
||||
<string name="wizard_title">欢迎使用 Orbot</string>
|
||||
|
||||
<string name="wizard_btn_tell_me_more">关于 Orbot</string>
|
||||
<string name="btn_next">下一步</string>
|
||||
<string name="btn_back">上一步</string>
|
||||
<string name="btn_finish">完成</string>
|
||||
|
||||
<string name="btn_okay">确定</string>
|
||||
<string name="btn_cancel">取消</string>
|
||||
|
||||
|
||||
<!-- Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="wizard_welcome_msg">Orbot 将 Tor 带到 Android 之上。Tor 是自由软件,致力于构建开放网络,帮助保护网络访问的自由和隐私,可以抵御秘密的商业活动、关系以及已知的流量分析技术。\n\n*警告:*仅仅安装 Orbot 不会自动使您的移动流量匿名化!这个向导将带您入门。</string>
|
||||
<string name="wizard_details">一些 Orbot 详情</string>
|
||||
<string name="wizard_details_msg">Orbot 是包含 Tor、LibEvent 和 Privoxy 的开源软件。它包含了一个本地 HTTP 代理(8118)和 SOCKS 代理(9050),使您接入 Tor 网络。Orbot 在可以获得 root 权限的设备上接管所有流量经由 Tor 网络。</string>
|
||||
<string name="wizard_permissions_root">已赋予权限</string>
|
||||
<string name="wizard_permissions_stock">Orbot 权限</string>
|
||||
<string name="wizard_premissions_msg_root">非常好!我们检测到您已经为 Orbot 配置了 root 权限。我们会聪明地使用这个特权。</string>
|
||||
<string name="wizard_permissions_msg_stock">虽然并非必须,如果你的设备有 root 权限,Orbot 可以表现得更为强大。使用以下按钮来赋予 Orbot 超级能力!</string>
|
||||
|
||||
<string name="wizard_permissions_no_root">如果你没有 root 权限,或不明白上面说的是什么,那么只需使用可与 Orbot 工作的应用程序。</string>
|
||||
<string name="wizard_permissions_consent">我明白并会以非 root 继续</string>
|
||||
|
||||
<string name="wizard_permission_enable_root">为 Orbot 赋予 root 权限</string>
|
||||
<string name="wizard_configure">配置 Tor 使用</string>
|
||||
<string name="wizard_configure_msg">Orbot 给予您路由所有应用程序流量通过 Tor 或者为单个程序设置选择的选项。</string>
|
||||
<string name="wizard_configure_all">通过 Tor 代理全部应用程序</string>
|
||||
<string name="wizard_configure_select_apps">选择使用 Tor 的单个应用程序</string>
|
||||
|
||||
|
||||
<string name="wizard_tips_tricks">可用 Orbot 的应用程序</string>
|
||||
<string name="wizard_tips_msg">我们建议您下载和使用能直接连接到 Orbot 的应用程序。点击以下按钮安装。</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (仅 Android 1.x) - 着重隐私设计的浏览器</string>
|
||||
<string name="wizard_tips_proxy">代理设置 - 学习如何配置应用程序使用 Orbot</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">代理设置</string>
|
||||
<string name="wizard_proxy_help_msg">如果您正在使用的 Android 应用程序支持使用 HTTP 或 SOCKS 代理,您可以配置它连接到 Orbot 并使用 Tor。\n\n
|
||||
主机设置为 127.0.0.1 或 localhost。对于 HTTP,端口为 8118,对于 SOCKS 端口为 9050。如果可能,应当使用 SOCKS4A 或 SOCKS5。
|
||||
\n\n
|
||||
您可以通过 http://tinyurl.com/proxyandroid 了解更多 Android 上使用代理的知识。</string>
|
||||
|
||||
<string name="wizard_final">Orbot 已就绪!</string>
|
||||
<string name="wizard_final_msg">数以万计的各国人们因为各种原因使用 Tor:记者、人权工作者、法律工作者、士兵、公司、迫于实际情况使用的市民,当然也有普通的市民。现在你也即将成为其中的一员!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
|
||||
<string name="connect_first_time">您已成功连接至 Tor 网络 - 但这并不意味着您的设备安全。您可以使用“检查”选项测试您的浏览器。\n\n访问 https://guardianproject.info/apps/orbot 或发送邮件到 help@guardianproject.info 以了解更多信息。</string>
|
||||
|
||||
<string name="tor_check">这将启动默认浏览器并访问 https://check.torproject.org 以测试是否正确配置了 Orbot 并确认您是否已经连接到 Tor。</string>
|
||||
|
||||
|
||||
<string name="pref_hs_group">隐藏服务</string>
|
||||
|
||||
<string name="pref_general_group">General</string>
|
||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||
|
||||
</resources>
|
|
@ -1,6 +1,134 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_version">0.0.1</string>
|
||||
<string name="app_version">1.0.5-dev</string>
|
||||
|
||||
<string name="internal_web_url">http://orbot/</string>
|
||||
<string name="default_web_url">http://check.torproject.org</string>
|
||||
<string name="secure_default_web_url">https://check.torproject.org</string>
|
||||
<string name="tor_check_api_url">https://check.torproject.org/?TorButton=true</string>
|
||||
<string name="control_permission_label">start and stop Tor</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
|
||||
<string name="status_starting_up">Orbot is starting...</string>
|
||||
<string name="status_activated">Connected to the Tor network</string>
|
||||
<string name="status_disabled">"Orbot is Deactivated</string>
|
||||
<string name="status_shutting_down">Orbot is shutting down</string>
|
||||
|
||||
<string name="tor_process_connecting">Starting Tor...</string>
|
||||
<string name="tor_process_connecting_step2">Setting up control...</string>
|
||||
<string name="tor_process_connecting_step3">complete.</string>
|
||||
<string name="tor_process_connecting_step4">waiting.</string>
|
||||
|
||||
<string name="not_anonymous_yet">WARNING: Your traffic is not anonymous yet! Please configure your applications to use HTTP proxy 127.0.0.1:8118 or SOCKS4A or SOCKS5 proxy 127.0.0.1:9050</string>
|
||||
<string name="menu_home">Home</string>
|
||||
<string name="menu_browse">Browse</string>
|
||||
<string name="menu_settings">Settings</string>
|
||||
<string name="menu_log">Log</string>
|
||||
<string name="menu_info">Help</string>
|
||||
<string name="menu_apps">Apps</string>
|
||||
<string name="menu_start">Start</string>
|
||||
<string name="menu_stop">Stop</string>
|
||||
|
||||
<string name="menu_about">About</string>
|
||||
<string name="menu_wizard">Wizard</string>
|
||||
|
||||
|
||||
|
||||
<string name="button_help">Help</string>
|
||||
<string name="button_close">Close</string>
|
||||
<string name="button_about">About</string>
|
||||
|
||||
<string name="button_clear_log">Clear Log</string>
|
||||
|
||||
|
||||
<string name="menu_verify">Check</string>
|
||||
<string name="menu_exit">Exit</string>
|
||||
<string name="powered_by">powered by the Tor Project</string>
|
||||
<string name="press_to_start">- long press to start -</string>
|
||||
|
||||
<string name="pref_trans_proxy_group">Transparent Proxying (Requires Root)</string>
|
||||
<string name="pref_trans_proxy_title">Transparent Proxying</string>
|
||||
<string name="pref_trans_proxy_summary">Automatic Torifying of Apps</string>
|
||||
|
||||
<string name="pref_transparent_all_title">Tor Everything</string>
|
||||
<string name="pref_transparent_all_summary">Proxy traffic for all apps through Tor</string>
|
||||
|
||||
<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
|
||||
<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
|
||||
|
||||
<string name="pref_transparent_port_title">Port List</string>
|
||||
<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
|
||||
<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
|
||||
|
||||
<string name="pref_has_root">Request Root Access</string>
|
||||
<string name="pref_has_root_summary">Request root access for transparent proxying</string>
|
||||
|
||||
<string name="status_install_success">Tor binaries successfully installed!</string>
|
||||
<string name="status_install_fail">The Tor binary files were unable to be installed. Please check the log and notify tor-assistants@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 & use apps that know how to connect directly to Orbot. Click on the buttons below to install.</string>
|
||||
<string name="wizard_tips_otrchat">Gibberbot - Secure instant messaging client for Android</string>
|
||||
<string name="wizard_tips_orweb">ORWEB (Android 1.x Only) - Browser designed for privacy & for Orbot</string>
|
||||
<string name="wizard_tips_proxy">Proxy Settings - Learn how to configure apps to work with Orbot</string>
|
||||
|
||||
<string name="wizard_proxy_help_info">Proxy Settings</string>
|
||||
<string name="wizard_proxy_help_msg">If the Android app you are using can support the use of an HTTP or SOCKS proxy, then you can configure it to connect to Orbot and use Tor.\n\n
|
||||
The host settings is 127.0.0.1 or "localhost". For HTTP, the port setting is 8118. For SOCKS, the proxy is 9050. You should use SOCKS4A or SOCKS5 if possible.
|
||||
\n\n
|
||||
You can learn more about proxying on Android via the FAQ at: http://tinyurl.com/proxyandroid
|
||||
</string>
|
||||
|
||||
<string name="wizard_final">Orbot is ready!</string>
|
||||
<string name="wizard_final_msg">Hundreds of thousands of people around the world use Tor for a wide variety of reasons: journalists and bloggers, human rights workers, law enforcement officers, soldiers, corporations, citizens of repressive regimes, and just ordinary citizens... and now you are ready to, as well!</string>
|
||||
|
||||
<string name="otrchat_apk_url">market://search?q=pname:info.guardianproject.otr.app.im</string>
|
||||
<string name="orweb_apk_url">market://search?q=pname:nfo.guardianproject.browser</string>
|
||||
|
||||
<!-- END Welcome Wizard strings (DJH) -->
|
||||
|
||||
<string name="connect_first_time"> You\'ve successfully connected to the Tor network - but this does NOT mean your device is secure. You can use the \'Check\' option from the menu to test your browser. \n\nVisit us at https://guardianproject.info/apps/orbot or send an email to help@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>
|
||||
|
|
|
@ -0,0 +1,138 @@
|
|||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<PreferenceCategory android:title="@string/pref_general_group">
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="pref_start_boot"
|
||||
android:title="@string/pref_start_boot_title"
|
||||
android:summary="@string/pref_start_boot_summary"
|
||||
android:enabled="true"/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="has_root"
|
||||
android:title="@string/pref_has_root"
|
||||
android:summary="@string/pref_has_root_summary"
|
||||
android:enabled="true"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="@string/pref_trans_proxy_group">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pref_transparent"
|
||||
android:title="@string/pref_trans_proxy_title"
|
||||
android:summary="@string/pref_trans_proxy_summary"
|
||||
android:enabled="true"/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pref_transparent_all"
|
||||
android:summary="@string/pref_transparent_all_summary"
|
||||
android:enabled="true"
|
||||
android:title="@string/pref_transparent_all_title"/>
|
||||
|
||||
<Preference
|
||||
android:defaultValue=""
|
||||
android:key="pref_transparent_app_list"
|
||||
android:title="Select Apps"
|
||||
android:summary="Choose Apps to Route Through Tor"
|
||||
android:enabled="true"/>
|
||||
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
<PreferenceCategory android:title="Bridges">
|
||||
|
||||
<CheckBoxPreference android:defaultValue="false"
|
||||
android:title="Use Bridges" android:key="pref_bridges_enabled"
|
||||
android:summary="Enable alternate entrance nodes into the Tor Network"></CheckBoxPreference>
|
||||
|
||||
<!-- 5/8/2010 NF: Arma says this doesn't actually work, so commenting out for now
|
||||
<CheckBoxPreference android:defaultValue="false"
|
||||
android:title="Update from Authority" android:key="pref_bridges_update"
|
||||
android:summary="Modify bridge list automatically"></CheckBoxPreference>
|
||||
-->
|
||||
|
||||
<EditTextPreference android:key="pref_bridges_list"
|
||||
android:title="Bridges"
|
||||
android:summary="IP address and port of bridges"
|
||||
android:dialogTitle="Enter Bridge Addresses"
|
||||
/>
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
|
||||
<PreferenceCategory android:title="Relays">
|
||||
<CheckBoxPreference android:key="pref_or"
|
||||
android:defaultValue="false"
|
||||
android:title="Relaying"
|
||||
android:summary="Enable your device to be a non-exit relay"
|
||||
android:enabled="true"
|
||||
/>
|
||||
|
||||
<EditTextPreference android:key="pref_or_port"
|
||||
android:defaultValue="9001"
|
||||
android:title="Relay Port"
|
||||
android:summary="Listening port for your Tor relay"
|
||||
android:dialogTitle="Enter OR port"
|
||||
/>
|
||||
|
||||
<EditTextPreference android:key="pref_or_nickname"
|
||||
android:defaultValue="Orbot"
|
||||
android:title="Relay nickname"
|
||||
android:summary="The nickname for your Tor relay"
|
||||
android:dialogTitle="Enter a custom relay nickname"
|
||||
/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="ReachableAddresses">
|
||||
<CheckBoxPreference
|
||||
android:key="pref_reachable_addresses"
|
||||
android:defaultValue="false"
|
||||
android:title="ReachableAddresses"
|
||||
android:summary="Run as a client behind a firewall with restrictive policies"
|
||||
android:enabled="true"></CheckBoxPreference>
|
||||
|
||||
<EditTextPreference
|
||||
android:key="pref_reachable_addresses_ports"
|
||||
android:defaultValue="*:80,*:443"
|
||||
android:title="Reachable ports"
|
||||
android:summary="Ports reachable behind a restrictive firewall"
|
||||
android:dialogTitle="Enter ports"
|
||||
/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="@string/pref_hs_group">
|
||||
<CheckBoxPreference android:title="Enable Hidden Services" android:summary="run servers accessible via the Tor network" android:key="pref_hs_enable"></CheckBoxPreference>
|
||||
<EditTextPreference android:summary="enter localhost ports for hidden services" android:title="Hidden Service Ports" android:enabled="false" android:key="pref_hs_ports"></EditTextPreference>
|
||||
|
||||
<EditTextPreference android:key="pref_hs_hostname" android:summary="the addressable name for your hidden service (generated automatically)" android:title=".Onion Hostname"></EditTextPreference>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="Debug">
|
||||
<CheckBoxPreference
|
||||
android:key="pref_enable_logging"
|
||||
android:defaultValue="false"
|
||||
android:title="Debug Log"
|
||||
android:summary="enable debug log to output (must use adb or aLogCat to view)"
|
||||
android:enabled="true"></CheckBoxPreference>
|
||||
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pref_transparent_port_fallback"
|
||||
android:summary="@string/pref_transparent_port_fallback_summary"
|
||||
android:enabled="true"
|
||||
android:title="@string/pref_transparent_port_fallback_title"/>
|
||||
|
||||
<EditTextPreference android:key="pref_port_list"
|
||||
android:defaultValue="80,443,8080,8888,8443"
|
||||
android:title="@string/pref_transparent_port_title"
|
||||
android:summary="@string/pref_transparent_port_summary"
|
||||
android:dialogTitle="@string/pref_transparent_port_dialog"
|
||||
/>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
|
@ -0,0 +1,272 @@
|
|||
/* 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 ()
|
||||
{
|
||||
resetApps(this);
|
||||
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();
|
||||
|
||||
}
|
||||
|
||||
public static TorifiedApp[] getApps (Context context)
|
||||
{
|
||||
if (apps == null)
|
||||
resetApps(context);
|
||||
|
||||
return apps;
|
||||
}
|
||||
|
||||
public static TorifiedApp[] resetApps (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);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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
|
||||
*/
|
||||
|
|
@ -1,631 +0,0 @@
|
|||
package org.torproject.android;
|
||||
/* <!-- in case someone opens this in a browser... --> <pre> */
|
||||
/*
|
||||
* This is a simple multi-threaded Java proxy server
|
||||
* for HTTP requests (HTTPS doesn't seem to work, because
|
||||
* the CONNECT requests aren't always handled properly).
|
||||
* I implemented the class as a thread so you can call it
|
||||
* from other programs and kill it, if necessary (by using
|
||||
* the closeSocket() method).
|
||||
*
|
||||
* We'll call this the 1.1 version of this class. All I
|
||||
* changed was to separate the HTTP header elements with
|
||||
* \r\n instead of just \n, to comply with the official
|
||||
* HTTP specification.
|
||||
*
|
||||
* This can be used either as a direct proxy to other
|
||||
* servers, or as a forwarding proxy to another proxy
|
||||
* server. This makes it useful if you want to monitor
|
||||
* traffic going to and from a proxy server (for example,
|
||||
* you can run this on your local machine and set the
|
||||
* fwdServer and fwdPort to a real proxy server, and then
|
||||
* tell your browser to use "localhost" as the proxy, and
|
||||
* you can watch the browser traffic going in and out).
|
||||
*
|
||||
* One limitation of this implementation is that it doesn't
|
||||
* close the ProxyThread socket if the client disconnects
|
||||
* or the server never responds, so you could end up with
|
||||
* a bunch of loose threads running amuck and waiting for
|
||||
* connections. As a band-aid, you can set the server socket
|
||||
* to timeout after a certain amount of time (use the
|
||||
* setTimeout() method in the ProxyThread class), although
|
||||
* this can cause false timeouts if a remote server is simply
|
||||
* slow to respond.
|
||||
*
|
||||
* Another thing is that it doesn't limit the number of
|
||||
* socket threads it will create, so if you use this on a
|
||||
* really busy machine that processed a bunch of requests,
|
||||
* you may have problems. You should use thread pools if
|
||||
* you're going to try something like this in a "real"
|
||||
* application.
|
||||
*
|
||||
* Note that if you're using the "main" method to run this
|
||||
* by itself and you don't need the debug output, it will
|
||||
* run a bit faster if you pipe the std output to 'nul'.
|
||||
*
|
||||
* You may use this code as you wish, just don't pretend
|
||||
* that you wrote it yourself, and don't hold me liable for
|
||||
* anything that it does or doesn't do. If you're feeling
|
||||
* especially honest, please include a link to nsftools.com
|
||||
* along with the code. Thanks, and good luck.
|
||||
*
|
||||
* Julian Robichaux -- http://www.nsftools.com
|
||||
*/
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.lang.reflect.Array;
|
||||
|
||||
import net.sourceforge.jsocks.socks.Socks4Proxy;
|
||||
import net.sourceforge.jsocks.socks.Socks5Proxy;
|
||||
import net.sourceforge.jsocks.socks.SocksSocket;
|
||||
|
||||
public class HttpProxy extends Thread
|
||||
{
|
||||
public static final int DEFAULT_PORT = 8888;
|
||||
|
||||
private ServerSocket server = null;
|
||||
private int thisPort = DEFAULT_PORT;
|
||||
private String fwdServer = "";
|
||||
private int fwdPort = 0;
|
||||
private int ptTimeout = ProxyThread.DEFAULT_TIMEOUT;
|
||||
private int debugLevel = 0;
|
||||
private PrintStream debugOut = System.out;
|
||||
|
||||
private boolean doSocks = false;
|
||||
|
||||
private Socks5Proxy sProxy = null;
|
||||
|
||||
/**
|
||||
* @return the doSocks
|
||||
*/
|
||||
public boolean isDoSocks() {
|
||||
return doSocks;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param doSocks the doSocks to set
|
||||
*/
|
||||
public void setDoSocks(boolean doSocks) {
|
||||
this.doSocks = doSocks;
|
||||
}
|
||||
|
||||
|
||||
/* here's a main method, in case you want to run this by itself */
|
||||
public static void main (String args[])
|
||||
{
|
||||
int port = 0;
|
||||
String fwdProxyServer = "";
|
||||
int fwdProxyPort = 0;
|
||||
|
||||
if (args.length == 0)
|
||||
{
|
||||
System.err.println("USAGE: java jProxy <port number> [<fwd proxy> <fwd port>]");
|
||||
System.err.println(" <port number> the port this service listens on");
|
||||
System.err.println(" <fwd proxy> optional proxy server to forward requests to");
|
||||
System.err.println(" <fwd port> the port that the optional proxy server is on");
|
||||
System.err.println("\nHINT: if you don't want to see all the debug information flying by,");
|
||||
System.err.println("you can pipe the output to a file or to 'nul' using \">\". For example:");
|
||||
System.err.println(" to send output to the file prox.txt: java jProxy 8080 > prox.txt");
|
||||
System.err.println(" to make the output go away: java jProxy 8080 > nul");
|
||||
return;
|
||||
}
|
||||
|
||||
// get the command-line parameters
|
||||
port = Integer.parseInt(args[0]);
|
||||
if (args.length > 2)
|
||||
{
|
||||
fwdProxyServer = args[1];
|
||||
fwdProxyPort = Integer.parseInt(args[2]);
|
||||
}
|
||||
|
||||
// create and start the jProxy thread, using a 20 second timeout
|
||||
// value to keep the threads from piling up too much
|
||||
System.err.println(" ** Starting jProxy on port " + port + ". Press CTRL-C to end. **\n");
|
||||
HttpProxy jp = new HttpProxy(port, fwdProxyServer, fwdProxyPort, 20);
|
||||
jp.setDebug(1, System.out); // or set the debug level to 2 for tons of output
|
||||
jp.start();
|
||||
|
||||
// run forever; if you were calling this class from another
|
||||
// program and you wanted to stop the jProxy thread at some
|
||||
// point, you could write a loop that waits for a certain
|
||||
// condition and then calls jProxy.closeSocket() to kill
|
||||
// the running jProxy thread
|
||||
while (true)
|
||||
{
|
||||
try { Thread.sleep(3000); } catch (Exception e) {}
|
||||
}
|
||||
|
||||
// if we ever had a condition that stopped the loop above,
|
||||
// we'd want to do this to kill the running thread
|
||||
//jp.closeSocket();
|
||||
//return;
|
||||
}
|
||||
|
||||
|
||||
/* the proxy server just listens for connections and creates
|
||||
* a new thread for each connection attempt (the ProxyThread
|
||||
* class really does all the work)
|
||||
*/
|
||||
public HttpProxy (int port)
|
||||
{
|
||||
thisPort = port;
|
||||
|
||||
try {
|
||||
sProxy = new Socks5Proxy(TorConstants.IP_LOCALHOST,TorConstants.PORT_SOCKS);
|
||||
} catch (UnknownHostException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
sProxy.resolveAddrLocally(false);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public HttpProxy (int port, String proxyServer, int proxyPort)
|
||||
{
|
||||
thisPort = port;
|
||||
fwdServer = proxyServer;
|
||||
fwdPort = proxyPort;
|
||||
}
|
||||
|
||||
public HttpProxy (int port, String proxyServer, int proxyPort, int timeout)
|
||||
{
|
||||
thisPort = port;
|
||||
fwdServer = proxyServer;
|
||||
fwdPort = proxyPort;
|
||||
ptTimeout = timeout;
|
||||
}
|
||||
|
||||
|
||||
/* allow the user to decide whether or not to send debug
|
||||
* output to the console or some other PrintStream
|
||||
*/
|
||||
public void setDebug (int level, PrintStream out)
|
||||
{
|
||||
debugLevel = level;
|
||||
debugOut = out;
|
||||
}
|
||||
|
||||
|
||||
/* get the port that we're supposed to be listening on
|
||||
*/
|
||||
public int getPort ()
|
||||
{
|
||||
return thisPort;
|
||||
}
|
||||
|
||||
|
||||
/* return whether or not the socket is currently open
|
||||
*/
|
||||
public boolean isRunning ()
|
||||
{
|
||||
if (server == null)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/* closeSocket will close the open ServerSocket; use this
|
||||
* to halt a running jProxy thread
|
||||
*/
|
||||
public void closeSocket ()
|
||||
{
|
||||
try {
|
||||
// close the open server socket
|
||||
server.close();
|
||||
// send it a message to make it stop waiting immediately
|
||||
// (not really necessary)
|
||||
/*Socket s = new Socket("localhost", thisPort);
|
||||
OutputStream os = s.getOutputStream();
|
||||
os.write((byte)0);
|
||||
os.close();
|
||||
s.close();*/
|
||||
} catch(Exception e) {
|
||||
if (debugLevel > 0)
|
||||
debugOut.println(e);
|
||||
}
|
||||
|
||||
server = null;
|
||||
}
|
||||
|
||||
|
||||
public void run()
|
||||
{
|
||||
try {
|
||||
// create a server socket, and loop forever listening for
|
||||
// client connections
|
||||
server = new ServerSocket(thisPort);
|
||||
|
||||
while (true)
|
||||
{
|
||||
Socket client = server.accept();
|
||||
ProxyThread t = new ProxyThread(client, doSocks, sProxy);
|
||||
//t.setDebug(debugLevel, debugOut);
|
||||
//t.setTimeout(ptTimeout);
|
||||
t.start();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (debugLevel > 0)
|
||||
debugOut.println("jProxy Thread error: " + e);
|
||||
}
|
||||
|
||||
closeSocket();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The ProxyThread will take an HTTP request from the client
|
||||
* socket and send it to either the server that the client is
|
||||
* trying to contact, or another proxy server
|
||||
*/
|
||||
class ProxyThread extends Thread
|
||||
{
|
||||
private Socket pSocket;
|
||||
private String fwdServer = "";
|
||||
private int fwdPort = 0;
|
||||
private int debugLevel = 0;
|
||||
private PrintStream debugOut = System.out;
|
||||
|
||||
// the socketTimeout is used to time out the connection to
|
||||
// the remote server after a certain period of inactivity;
|
||||
// the value is in milliseconds -- use zero if you don't want
|
||||
// a timeout
|
||||
public static final int DEFAULT_TIMEOUT = 20 * 1000;
|
||||
private int socketTimeout = DEFAULT_TIMEOUT;
|
||||
|
||||
private boolean doSocks = false;
|
||||
|
||||
private static Socks5Proxy sProxy = null;
|
||||
|
||||
public ProxyThread(Socket s, boolean doSocks, Socks5Proxy sProxy)
|
||||
{
|
||||
pSocket = s;
|
||||
|
||||
this.sProxy = sProxy;
|
||||
this.doSocks = doSocks;
|
||||
}
|
||||
|
||||
public ProxyThread(Socket s, String proxy, int port)
|
||||
{
|
||||
pSocket = s;
|
||||
fwdServer = proxy;
|
||||
fwdPort = port;
|
||||
}
|
||||
|
||||
|
||||
public void setTimeout (int timeout)
|
||||
{
|
||||
// assume that the user will pass the timeout value
|
||||
// in seconds (because that's just more intuitive)
|
||||
socketTimeout = timeout * 1000;
|
||||
}
|
||||
|
||||
|
||||
public void setDebug (int level, PrintStream out)
|
||||
{
|
||||
debugLevel = level;
|
||||
debugOut = out;
|
||||
}
|
||||
|
||||
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
// client streams (make sure you're using streams that use
|
||||
// byte arrays, so things like GIF and JPEG files and file
|
||||
// downloads will transfer properly)
|
||||
BufferedInputStream clientIn = new BufferedInputStream(pSocket.getInputStream());
|
||||
BufferedOutputStream clientOut = new BufferedOutputStream(pSocket.getOutputStream());
|
||||
|
||||
// the socket to the remote server
|
||||
Socket server = null;
|
||||
|
||||
// other variables
|
||||
byte[] request = null;
|
||||
byte[] response = null;
|
||||
int requestLength = 0;
|
||||
int responseLength = 0;
|
||||
int pos = -1;
|
||||
StringBuffer host = new StringBuffer("");
|
||||
String hostName = "";
|
||||
int hostPort = 80;
|
||||
|
||||
// get the header info (the web browser won't disconnect after
|
||||
// it's sent a request, so make sure the waitForDisconnect
|
||||
// parameter is false)
|
||||
request = getHTTPData(clientIn, host, false);
|
||||
requestLength = Array.getLength(request);
|
||||
|
||||
// separate the host name from the host port, if necessary
|
||||
// (like if it's "servername:8000")
|
||||
hostName = host.toString();
|
||||
pos = hostName.indexOf(":");
|
||||
if (pos > 0)
|
||||
{
|
||||
try { hostPort = Integer.parseInt(hostName.substring(pos + 1));
|
||||
} catch (Exception e) { }
|
||||
hostName = hostName.substring(0, pos);
|
||||
}
|
||||
|
||||
// either forward this request to another proxy server or
|
||||
// send it straight to the Host
|
||||
try
|
||||
{
|
||||
|
||||
if (!doSocks)
|
||||
{
|
||||
if ((fwdServer.length() > 0) && (fwdPort > 0))
|
||||
{
|
||||
server = new Socket(fwdServer, fwdPort);
|
||||
} else {
|
||||
server = new Socket(hostName, hostPort);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
server = new SocksSocket(sProxy,hostName, hostPort);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
// tell the client there was an error
|
||||
String errMsg = "HTTP/1.0 500\nContent Type: text/plain\n\n" +
|
||||
"Error connecting to the server:\n" + e + "\n";
|
||||
clientOut.write(errMsg.getBytes(), 0, errMsg.length());
|
||||
}
|
||||
|
||||
if (server != null)
|
||||
{
|
||||
server.setSoTimeout(socketTimeout);
|
||||
BufferedInputStream serverIn = new BufferedInputStream(server.getInputStream());
|
||||
BufferedOutputStream serverOut = new BufferedOutputStream(server.getOutputStream());
|
||||
|
||||
// send the request out
|
||||
serverOut.write(request, 0, requestLength);
|
||||
serverOut.flush();
|
||||
|
||||
// and get the response; if we're not at a debug level that
|
||||
// requires us to return the data in the response, just stream
|
||||
// it back to the client to save ourselves from having to
|
||||
// create and destroy an unnecessary byte array. Also, we
|
||||
// should set the waitForDisconnect parameter to 'true',
|
||||
// because some servers (like Google) don't always set the
|
||||
// Content-Length header field, so we have to listen until
|
||||
// they decide to disconnect (or the connection times out).
|
||||
if (debugLevel > 1)
|
||||
{
|
||||
response = getHTTPData(serverIn, true);
|
||||
responseLength = Array.getLength(response);
|
||||
} else {
|
||||
responseLength = streamHTTPData(serverIn, clientOut, true);
|
||||
}
|
||||
|
||||
serverIn.close();
|
||||
serverOut.close();
|
||||
}
|
||||
|
||||
// send the response back to the client, if we haven't already
|
||||
if (debugLevel > 1)
|
||||
clientOut.write(response, 0, responseLength);
|
||||
|
||||
// if the user wants debug info, send them debug info; however,
|
||||
// keep in mind that because we're using threads, the output won't
|
||||
// necessarily be synchronous
|
||||
if (debugLevel > 0)
|
||||
{
|
||||
long endTime = System.currentTimeMillis();
|
||||
debugOut.println("Request from " + pSocket.getInetAddress().getHostAddress() +
|
||||
" on Port " + pSocket.getLocalPort() +
|
||||
" to host " + hostName + ":" + hostPort +
|
||||
"\n (" + requestLength + " bytes sent, " +
|
||||
responseLength + " bytes returned, " +
|
||||
Long.toString(endTime - startTime) + " ms elapsed)");
|
||||
debugOut.flush();
|
||||
}
|
||||
if (debugLevel > 1)
|
||||
{
|
||||
debugOut.println("REQUEST:\n" + (new String(request)));
|
||||
debugOut.println("RESPONSE:\n" + (new String(response)));
|
||||
debugOut.flush();
|
||||
}
|
||||
|
||||
// close all the client streams so we can listen again
|
||||
clientOut.close();
|
||||
clientIn.close();
|
||||
pSocket.close();
|
||||
} catch (Exception e) {
|
||||
if (debugLevel > 0)
|
||||
debugOut.println("Error in ProxyThread: " + e);
|
||||
//e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private byte[] getHTTPData (InputStream in, boolean waitForDisconnect)
|
||||
{
|
||||
// get the HTTP data from an InputStream, and return it as
|
||||
// a byte array
|
||||
// the waitForDisconnect parameter tells us what to do in case
|
||||
// the HTTP header doesn't specify the Content-Length of the
|
||||
// transmission
|
||||
StringBuffer foo = new StringBuffer("");
|
||||
return getHTTPData(in, foo, waitForDisconnect);
|
||||
}
|
||||
|
||||
|
||||
private byte[] getHTTPData (InputStream in, StringBuffer host, boolean waitForDisconnect)
|
||||
{
|
||||
// get the HTTP data from an InputStream, and return it as
|
||||
// a byte array, and also return the Host entry in the header,
|
||||
// if it's specified -- note that we have to use a StringBuffer
|
||||
// for the 'host' variable, because a String won't return any
|
||||
// information when it's used as a parameter like that
|
||||
ByteArrayOutputStream bs = new ByteArrayOutputStream();
|
||||
streamHTTPData(in, bs, host, waitForDisconnect);
|
||||
return bs.toByteArray();
|
||||
}
|
||||
|
||||
|
||||
private int streamHTTPData (InputStream in, OutputStream out, boolean waitForDisconnect)
|
||||
{
|
||||
StringBuffer foo = new StringBuffer("");
|
||||
return streamHTTPData(in, out, foo, waitForDisconnect);
|
||||
}
|
||||
|
||||
private int streamHTTPData (InputStream in, OutputStream out,
|
||||
StringBuffer host, boolean waitForDisconnect)
|
||||
{
|
||||
// get the HTTP data from an InputStream, and send it to
|
||||
// the designated OutputStream
|
||||
StringBuffer header = new StringBuffer("");
|
||||
String data = "";
|
||||
int responseCode = 200;
|
||||
int contentLength = 0;
|
||||
int pos = -1;
|
||||
int byteCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
// get the first line of the header, so we know the response code
|
||||
data = readLine(in);
|
||||
if (data != null)
|
||||
{
|
||||
header.append(data + "\r\n");
|
||||
pos = data.indexOf(" ");
|
||||
if ((data.toLowerCase().startsWith("http")) &&
|
||||
(pos >= 0) && (data.indexOf(" ", pos+1) >= 0))
|
||||
{
|
||||
String rcString = data.substring(pos+1, data.indexOf(" ", pos+1));
|
||||
try
|
||||
{
|
||||
responseCode = Integer.parseInt(rcString);
|
||||
} catch (Exception e) {
|
||||
if (debugLevel > 0)
|
||||
debugOut.println("Error parsing response code " + rcString);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// get the rest of the header info
|
||||
while ((data = readLine(in)) != null)
|
||||
{
|
||||
// the header ends at the first blank line
|
||||
if (data.length() == 0)
|
||||
break;
|
||||
header.append(data + "\r\n");
|
||||
|
||||
// check for the Host header
|
||||
pos = data.toLowerCase().indexOf("host:");
|
||||
if (pos >= 0)
|
||||
{
|
||||
host.setLength(0);
|
||||
host.append(data.substring(pos + 5).trim());
|
||||
}
|
||||
|
||||
// check for the Content-Length header
|
||||
pos = data.toLowerCase().indexOf("content-length:");
|
||||
if (pos >= 0)
|
||||
contentLength = Integer.parseInt(data.substring(pos + 15).trim());
|
||||
}
|
||||
|
||||
// add a blank line to terminate the header info
|
||||
header.append("\r\n");
|
||||
|
||||
// convert the header to a byte array, and write it to our stream
|
||||
out.write(header.toString().getBytes(), 0, header.length());
|
||||
|
||||
// if the header indicated that this was not a 200 response,
|
||||
// just return what we've got if there is no Content-Length,
|
||||
// because we may not be getting anything else
|
||||
if ((responseCode != 200) && (contentLength == 0))
|
||||
{
|
||||
out.flush();
|
||||
return header.length();
|
||||
}
|
||||
|
||||
// get the body, if any; we try to use the Content-Length header to
|
||||
// determine how much data we're supposed to be getting, because
|
||||
// sometimes the client/server won't disconnect after sending us
|
||||
// information...
|
||||
if (contentLength > 0)
|
||||
waitForDisconnect = false;
|
||||
|
||||
if ((contentLength > 0) || (waitForDisconnect))
|
||||
{
|
||||
try {
|
||||
byte[] buf = new byte[4096];
|
||||
int bytesIn = 0;
|
||||
while ( ((byteCount < contentLength) || (waitForDisconnect))
|
||||
&& ((bytesIn = in.read(buf)) >= 0) )
|
||||
{
|
||||
out.write(buf, 0, bytesIn);
|
||||
byteCount += bytesIn;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String errMsg = "Error getting HTTP body: " + e;
|
||||
if (debugLevel > 0)
|
||||
debugOut.println(errMsg);
|
||||
//bs.write(errMsg.getBytes(), 0, errMsg.length());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (debugLevel > 0)
|
||||
debugOut.println("Error getting HTTP data: " + e);
|
||||
}
|
||||
|
||||
//flush the OutputStream and return
|
||||
try { out.flush(); } catch (Exception e) {}
|
||||
return (header.length() + byteCount);
|
||||
}
|
||||
|
||||
|
||||
private String readLine (InputStream in)
|
||||
{
|
||||
// reads a line of text from an InputStream
|
||||
StringBuffer data = new StringBuffer("");
|
||||
int c;
|
||||
|
||||
try
|
||||
{
|
||||
// if we have nothing to read, just return null
|
||||
in.mark(1);
|
||||
if (in.read() == -1)
|
||||
return null;
|
||||
else
|
||||
in.reset();
|
||||
|
||||
while ((c = in.read()) >= 0)
|
||||
{
|
||||
// check for an end-of-line character
|
||||
if ((c == 0) || (c == 10) || (c == 13))
|
||||
break;
|
||||
else
|
||||
data.append((char)c);
|
||||
}
|
||||
|
||||
// deal with the case where the end-of-line terminator is \r\n
|
||||
if (c == 13)
|
||||
{
|
||||
in.mark(1);
|
||||
if (in.read() != 10)
|
||||
in.reset();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (debugLevel > 0)
|
||||
debugOut.println("Error getting header: " + e);
|
||||
}
|
||||
|
||||
// and return what we have
|
||||
return data.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,830 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.torproject.android.service.ITorService;
|
||||
import org.torproject.android.service.ITorServiceCallback;
|
||||
import org.torproject.android.service.TorServiceConstants;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
import android.os.RemoteException;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.View.OnLongClickListener;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class Orbot extends Activity implements OnLongClickListener, TorConstants
|
||||
{
|
||||
|
||||
/* Useful UI bits */
|
||||
private TextView lblStatus = null; //the main text display widget
|
||||
private ImageView imgStatus = null; //the main touchable image for activating Orbot
|
||||
private ProgressDialog progressDialog;
|
||||
private MenuItem mItemOnOff = null;
|
||||
|
||||
/* Some tracking bits */
|
||||
private int torStatus = STATUS_READY; //latest status reported from the tor service
|
||||
|
||||
/* Tor Service interaction */
|
||||
/* The primary interface we will be calling on the service. */
|
||||
ITorService mService = null;
|
||||
private boolean autoStartOnBind = false;
|
||||
|
||||
SharedPreferences prefs;
|
||||
|
||||
/** Called when the activity is first created. */
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
//if Tor binary is not running, then start the service up
|
||||
startService(new Intent(INTENT_TOR_SERVICE));
|
||||
bindService ();
|
||||
|
||||
|
||||
setTheme(android.R.style.Theme_Black_NoTitleBar);
|
||||
|
||||
prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
||||
setContentView(R.layout.layout_main);
|
||||
|
||||
lblStatus = (TextView)findViewById(R.id.lblStatus);
|
||||
lblStatus.setOnLongClickListener(this);
|
||||
imgStatus = (ImageView)findViewById(R.id.imgStatus);
|
||||
imgStatus.setOnLongClickListener(this);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the UI Options Menu (non-Javadoc)
|
||||
* @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
|
||||
*/
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
super.onCreateOptionsMenu(menu);
|
||||
|
||||
MenuItem mItem = null;
|
||||
|
||||
mItemOnOff = menu.add(0, 1, Menu.NONE, getString(R.string.menu_start));
|
||||
mItemOnOff.setIcon(android.R.drawable.ic_menu_share);
|
||||
mItemOnOff.setAlphabeticShortcut('t');
|
||||
|
||||
mItem = menu.add(0, 4, Menu.NONE, getString(R.string.menu_settings));
|
||||
mItem.setIcon(R.drawable.ic_menu_register);
|
||||
|
||||
mItem = menu.add(0, 7, Menu.NONE, getString(R.string.menu_verify));
|
||||
mItem.setIcon(R.drawable.ic_menu_check);
|
||||
|
||||
mItem = menu.add(0,6, Menu.NONE, getString(R.string.menu_about));
|
||||
mItem.setIcon(R.drawable.ic_menu_about);
|
||||
|
||||
mItem = menu.add(0, 3, Menu.NONE, getString(R.string.menu_wizard));
|
||||
mItem.setIcon(R.drawable.ic_menu_goto);
|
||||
|
||||
mItem = menu.add(0, 8, Menu.NONE, getString(R.string.menu_exit));
|
||||
mItem.setIcon(R.drawable.ic_menu_exit);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private void showAbout ()
|
||||
{
|
||||
|
||||
LayoutInflater li = LayoutInflater.from(this);
|
||||
View view = li.inflate(R.layout.layout_about, null);
|
||||
|
||||
TextView versionName = (TextView)view.findViewById(R.id.versionName);
|
||||
versionName.setText(R.string.app_version);
|
||||
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(getString(R.string.button_about))
|
||||
.setView(view)
|
||||
.show();
|
||||
}
|
||||
|
||||
/* When a menu item is selected launch the appropriate view or activity
|
||||
* (non-Javadoc)
|
||||
* @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
|
||||
*/
|
||||
public boolean onMenuItemSelected(int featureId, MenuItem item) {
|
||||
|
||||
super.onMenuItemSelected(featureId, item);
|
||||
|
||||
if (item.getItemId() == 1)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
if (mService == null)
|
||||
{
|
||||
|
||||
}
|
||||
else if (mService.getStatus() == STATUS_READY)
|
||||
{
|
||||
if (mItemOnOff != null)
|
||||
mItemOnOff.setTitle(R.string.menu_stop);
|
||||
startTor();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mItemOnOff != null)
|
||||
mItemOnOff.setTitle(R.string.menu_start);
|
||||
stopTor();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
catch (RemoteException re)
|
||||
{
|
||||
Log.w(TAG, "Unable to start/top Tor from menu UI", re);
|
||||
}
|
||||
}
|
||||
else if (item.getItemId() == 4)
|
||||
{
|
||||
showSettings();
|
||||
}
|
||||
else if (item.getItemId() == 3)
|
||||
{
|
||||
showHelp();
|
||||
}
|
||||
else if (item.getItemId() == 7)
|
||||
{
|
||||
doTorCheck();
|
||||
}
|
||||
else if (item.getItemId() == 8)
|
||||
{
|
||||
//exit app
|
||||
doExit();
|
||||
|
||||
|
||||
}
|
||||
else if (item.getItemId() == 6)
|
||||
{
|
||||
showAbout();
|
||||
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void doExit ()
|
||||
{
|
||||
try {
|
||||
|
||||
stopTor();
|
||||
|
||||
stopService(new Intent(ITorService.class.getName()));
|
||||
|
||||
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
mNotificationManager.cancelAll();
|
||||
|
||||
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
|
||||
finish();
|
||||
|
||||
}
|
||||
|
||||
/* Return to the main view when the back key is pressed
|
||||
* (non-Javadoc)
|
||||
* @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
|
||||
*/
|
||||
/*
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event){
|
||||
|
||||
if(keyCode==KeyEvent.KEYCODE_BACK){
|
||||
|
||||
if(currentView != R.layout.layout_main){
|
||||
|
||||
showMain ();
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
}
|
||||
|
||||
return super.onKeyDown(keyCode, event);
|
||||
|
||||
}*/
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onPause()
|
||||
*/
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void onSaveInstanceState(Bundle savedInstanceState) {
|
||||
// Save UI state changes to the savedInstanceState.
|
||||
// This bundle will be passed to onCreate if the process is
|
||||
// killed and restarted.
|
||||
// etc.
|
||||
super.onSaveInstanceState(savedInstanceState);
|
||||
}
|
||||
|
||||
public void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||
super.onRestoreInstanceState(savedInstanceState);
|
||||
// Restore UI state from the savedInstanceState.
|
||||
// This bundle has also been passed to onCreate.
|
||||
|
||||
}
|
||||
|
||||
private void doTorCheck ()
|
||||
{
|
||||
|
||||
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
switch (which){
|
||||
case DialogInterface.BUTTON_POSITIVE:
|
||||
|
||||
openBrowser(URL_TOR_CHECK);
|
||||
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case DialogInterface.BUTTON_NEGATIVE:
|
||||
|
||||
//do nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
|
||||
.setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
|
||||
|
||||
}
|
||||
|
||||
private void enableHiddenServicePort (int hsPort)
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
Editor pEdit = prefs.edit();
|
||||
|
||||
String hsPortString = prefs.getString("pref_hs_ports", "");
|
||||
|
||||
if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
|
||||
hsPortString += ',' + hsPort;
|
||||
else
|
||||
hsPortString = hsPort + "";
|
||||
|
||||
pEdit.putString("pref_hs_ports", hsPortString);
|
||||
pEdit.putBoolean("pref_hs_enable", true);
|
||||
|
||||
pEdit.commit();
|
||||
|
||||
String onionHostname = prefs.getString("pref_hs_hostname","");
|
||||
|
||||
Intent nResult = new Intent();
|
||||
nResult.putExtra("hs_host", onionHostname);
|
||||
setResult(RESULT_OK, nResult);
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onResume()
|
||||
*/
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
updateStatus("");
|
||||
|
||||
if (getIntent() == null)
|
||||
return;
|
||||
|
||||
String action = getIntent().getAction();
|
||||
|
||||
if (action == null)
|
||||
return;
|
||||
|
||||
if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
|
||||
{
|
||||
|
||||
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
switch (which){
|
||||
case DialogInterface.BUTTON_POSITIVE:
|
||||
|
||||
int hsPort = getIntent().getIntExtra("hs_port", -1);
|
||||
|
||||
enableHiddenServicePort (hsPort);
|
||||
|
||||
finish();
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case DialogInterface.BUTTON_NEGATIVE:
|
||||
//No button clicked
|
||||
finish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int hsPort = getIntent().getIntExtra("hs_port", -1);
|
||||
|
||||
String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
|
||||
.setNegativeButton("Deny", dialogClickListener).show();
|
||||
|
||||
|
||||
}
|
||||
else if (action.equals("org.torproject.android.START_TOR"))
|
||||
{
|
||||
autoStartOnBind = true;
|
||||
|
||||
if (mService == null)
|
||||
bindService();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
|
||||
|
||||
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
mNotificationManager.cancelAll();
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
||||
boolean showWizard = prefs.getBoolean("show_wizard",true);
|
||||
|
||||
if (showWizard)
|
||||
{
|
||||
|
||||
Editor pEdit = prefs.edit();
|
||||
|
||||
pEdit.putBoolean("show_wizard",false);
|
||||
|
||||
pEdit.commit();
|
||||
|
||||
new WizardHelper(this).showWizard();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onStart()
|
||||
*/
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
|
||||
|
||||
updateStatus ("");
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onStop()
|
||||
*/
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
|
||||
unbindService();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Launch the system activity for Uri viewing with the provided url
|
||||
*/
|
||||
private void openBrowser(String url)
|
||||
{
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Show the help view - a popup dialog
|
||||
*/
|
||||
private void showHelp ()
|
||||
{
|
||||
|
||||
new WizardHelper(this).showWizard();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Load the basic settings application to display torrc
|
||||
*/
|
||||
private void showSettings ()
|
||||
{
|
||||
|
||||
startActivityForResult(new Intent(this, SettingsPreferences.class), 1);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
if (requestCode == 1 && resultCode == 1010 && mService != null)
|
||||
{
|
||||
new ProcessSettingsAsyncTask().execute(mService);
|
||||
}
|
||||
}
|
||||
|
||||
private AlertDialog aDialog = null;
|
||||
|
||||
private void showAlert(String title, String msg, boolean button)
|
||||
{
|
||||
if (aDialog != null)
|
||||
aDialog.dismiss();
|
||||
|
||||
if (button)
|
||||
{
|
||||
aDialog = new AlertDialog.Builder(this)
|
||||
.setIcon(R.drawable.icon)
|
||||
.setTitle(title)
|
||||
.setMessage(msg)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
}
|
||||
else
|
||||
{
|
||||
aDialog = new AlertDialog.Builder(this)
|
||||
.setIcon(R.drawable.icon)
|
||||
.setTitle(title)
|
||||
.setMessage(msg)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Set the state of the running/not running graphic and label
|
||||
*/
|
||||
public void updateStatus (String torServiceMsg)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
if (mService != null)
|
||||
torStatus = mService.getStatus();
|
||||
|
||||
if (imgStatus != null)
|
||||
{
|
||||
|
||||
if (torStatus == STATUS_ON)
|
||||
{
|
||||
imgStatus.setImageResource(R.drawable.toron);
|
||||
|
||||
if (progressDialog != null)
|
||||
{
|
||||
progressDialog.dismiss();
|
||||
progressDialog = null;
|
||||
}
|
||||
|
||||
|
||||
String lblMsg = getString(R.string.status_activated);
|
||||
//+ "\n" + torServiceMsg;
|
||||
|
||||
lblStatus.setText(lblMsg);
|
||||
|
||||
if (torServiceMsg.length() > 0)
|
||||
showAlert("Update", torServiceMsg, false);
|
||||
|
||||
boolean showFirstTime = prefs.getBoolean("connect_first_time",true);
|
||||
|
||||
if (showFirstTime)
|
||||
{
|
||||
|
||||
Editor pEdit = prefs.edit();
|
||||
|
||||
pEdit.putBoolean("connect_first_time",false);
|
||||
|
||||
pEdit.commit();
|
||||
|
||||
showAlert(getString(R.string.status_activated),getString(R.string.connect_first_time),true);
|
||||
|
||||
}
|
||||
if (mItemOnOff != null)
|
||||
mItemOnOff.setTitle(R.string.menu_stop);
|
||||
|
||||
}
|
||||
else if (torStatus == STATUS_CONNECTING)
|
||||
{
|
||||
|
||||
imgStatus.setImageResource(R.drawable.torstarting);
|
||||
if (progressDialog == null)
|
||||
{
|
||||
progressDialog =ProgressDialog.show(this, "", getString(R.string.status_starting_up));
|
||||
}
|
||||
else
|
||||
progressDialog.setMessage(torServiceMsg);
|
||||
|
||||
if (mItemOnOff != null)
|
||||
mItemOnOff.setTitle(R.string.menu_stop);
|
||||
|
||||
}
|
||||
else if (torStatus == STATUS_OFF)
|
||||
{
|
||||
imgStatus.setImageResource(R.drawable.toroff);
|
||||
|
||||
if (progressDialog != null)
|
||||
{
|
||||
progressDialog.dismiss();
|
||||
progressDialog = null;
|
||||
}
|
||||
|
||||
lblStatus.setText(getString(R.string.status_shutting_down));
|
||||
|
||||
if (mItemOnOff != null)
|
||||
mItemOnOff.setTitle(R.string.menu_start);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (progressDialog != null)
|
||||
{
|
||||
progressDialog.dismiss();
|
||||
progressDialog = null;
|
||||
}
|
||||
|
||||
|
||||
imgStatus.setImageResource(R.drawable.toroff);
|
||||
lblStatus.setText(getString(R.string.status_disabled) + "\n" + getString(R.string.press_to_start));
|
||||
|
||||
if (mItemOnOff != null)
|
||||
mItemOnOff.setTitle(R.string.menu_start);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (RemoteException e)
|
||||
{
|
||||
Log.e(TAG,"remote exception updating status",e);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void startTor () throws RemoteException
|
||||
{
|
||||
|
||||
mService.setProfile(TorServiceConstants.PROFILE_ON); //this means turn on
|
||||
|
||||
imgStatus.setImageResource(R.drawable.torstarting);
|
||||
lblStatus.setText(getString(R.string.status_starting_up));
|
||||
|
||||
Message msg = mHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
|
||||
mHandler.sendMessage(msg);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void stopTor () throws RemoteException
|
||||
{
|
||||
if (mService != null)
|
||||
{
|
||||
mService.setProfile(TorServiceConstants.PROFILE_OFF);
|
||||
Message msg = mHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
|
||||
// stopService(new Intent(ITorService.class.getName()));
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see android.view.View.OnClickListener#onClick(android.view.View)
|
||||
*/
|
||||
public boolean onLongClick(View view) {
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
if (mService == null)
|
||||
{
|
||||
|
||||
}
|
||||
else if (mService.getStatus() == STATUS_READY)
|
||||
{
|
||||
|
||||
startTor();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
stopTor();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.d(TAG,"error onclick",e);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This implementation is used to receive callbacks from the remote
|
||||
* service.
|
||||
*/
|
||||
private ITorServiceCallback mCallback = new ITorServiceCallback.Stub() {
|
||||
/**
|
||||
* This is called by the remote service regularly to tell us about
|
||||
* new values. Note that IPC calls are dispatched through a thread
|
||||
* pool running in each process, so the code executing here will
|
||||
* NOT be running in our main thread like most other things -- so,
|
||||
* to update the UI, we need to use a Handler to hop over there.
|
||||
*/
|
||||
public void statusChanged(String value) {
|
||||
|
||||
Message msg = mHandler.obtainMessage(TorServiceConstants.STATUS_MSG);
|
||||
msg.getData().putString(HANDLER_TOR_MSG, value);
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logMessage(String value) throws RemoteException {
|
||||
|
||||
Message msg = mHandler.obtainMessage(TorServiceConstants.LOG_MSG);
|
||||
msg.getData().putString(HANDLER_TOR_MSG, value);
|
||||
mHandler.sendMessage(msg);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private Handler mHandler = new Handler() {
|
||||
public void handleMessage(Message msg) {
|
||||
switch (msg.what) {
|
||||
case TorServiceConstants.STATUS_MSG:
|
||||
|
||||
String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
|
||||
|
||||
updateStatus(torServiceMsg);
|
||||
|
||||
break;
|
||||
case TorServiceConstants.LOG_MSG:
|
||||
|
||||
|
||||
break;
|
||||
case TorServiceConstants.ENABLE_TOR_MSG:
|
||||
|
||||
if (progressDialog == null)
|
||||
{
|
||||
progressDialog = ProgressDialog.show(Orbot.this, "", getString(R.string.status_starting_up));
|
||||
}
|
||||
|
||||
|
||||
updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
|
||||
|
||||
break;
|
||||
case TorServiceConstants.DISABLE_TOR_MSG:
|
||||
|
||||
updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
super.handleMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Class for interacting with the main interface of the service.
|
||||
*/
|
||||
private ServiceConnection mConnection = new ServiceConnection() {
|
||||
public void onServiceConnected(ComponentName className,
|
||||
IBinder service) {
|
||||
// This is called when the connection with the service has been
|
||||
// established, giving us the service object we can use to
|
||||
// interact with the service. We are communicating with our
|
||||
// service through an IDL interface, so get a client-side
|
||||
// representation of that from the raw service object.
|
||||
mService = ITorService.Stub.asInterface(service);
|
||||
|
||||
// We want to monitor the service for as long as we are
|
||||
// connected to it.
|
||||
try {
|
||||
mService.registerCallback(mCallback);
|
||||
|
||||
updateStatus("");
|
||||
|
||||
if (autoStartOnBind)
|
||||
{
|
||||
autoStartOnBind = false;
|
||||
|
||||
startTor();
|
||||
|
||||
}
|
||||
|
||||
} catch (RemoteException e) {
|
||||
// In this case the service has crashed before we could even
|
||||
// do anything with it; we can count on soon being
|
||||
// disconnected (and then reconnected if it can be restarted)
|
||||
// so there is no need to do anything here.
|
||||
Log.d(TAG,"error registering callback to service",e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void onServiceDisconnected(ComponentName className) {
|
||||
// This is called when the connection with the service has been
|
||||
// unexpectedly disconnected -- that is, its process crashed.
|
||||
mService = null;
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
boolean mIsBound = false;
|
||||
|
||||
private void bindService ()
|
||||
{
|
||||
bindService(new Intent(ITorService.class.getName()),
|
||||
mConnection, Context.BIND_AUTO_CREATE);
|
||||
|
||||
mIsBound = true;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void unbindService ()
|
||||
{
|
||||
if (mIsBound) {
|
||||
// If we have received the service, and hence registered with
|
||||
// it, then now is the time to unregister.
|
||||
if (mService != null) {
|
||||
try {
|
||||
mService.unregisterCallback(mCallback);
|
||||
|
||||
} catch (RemoteException e) {
|
||||
// There is nothing special we need to do if the service
|
||||
// has crashed.
|
||||
}
|
||||
}
|
||||
|
||||
// Detach our existing connection.
|
||||
unbindService(mConnection);
|
||||
mIsBound = false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package org.torproject.android;
|
||||
|
||||
import org.torproject.android.service.ITorService;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.os.RemoteException;
|
||||
|
||||
public class ProcessSettingsAsyncTask extends AsyncTask<ITorService, Integer, Long>
|
||||
{
|
||||
|
||||
|
||||
@Override
|
||||
protected Long doInBackground(ITorService... torService) {
|
||||
|
||||
try {
|
||||
torService[0].processSettings();
|
||||
} catch (RemoteException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return 100L;
|
||||
}
|
||||
|
||||
protected void onProgressUpdate(Integer... progress) {
|
||||
|
||||
}
|
||||
|
||||
protected void onPostExecute(Long result) {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,132 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android;
|
||||
|
||||
import org.torproject.android.service.TorServiceUtils;
|
||||
import org.torproject.android.service.TorTransProxy;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.preference.Preference.OnPreferenceClickListener;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceCategory;
|
||||
|
||||
|
||||
public class SettingsPreferences
|
||||
extends PreferenceActivity implements OnPreferenceClickListener {
|
||||
|
||||
private CheckBoxPreference prefCBTransProxy = null;
|
||||
private CheckBoxPreference prefcBTransProxyAll = null;
|
||||
private Preference prefTransProxyApps = null;
|
||||
private CheckBoxPreference prefHiddenServices = null;
|
||||
|
||||
private boolean hasRoot = false;
|
||||
|
||||
protected void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
||||
if (prefs.contains("has_root"))
|
||||
{
|
||||
hasRoot = prefs.getBoolean("has_root",false);
|
||||
}
|
||||
else
|
||||
{
|
||||
hasRoot = TorServiceUtils.checkRootAccess();
|
||||
Editor pEdit = prefs.edit();
|
||||
pEdit.putBoolean("has_root",hasRoot);
|
||||
pEdit.commit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
|
||||
super.onResume();
|
||||
|
||||
|
||||
int transProxyGroupIdx = 1;
|
||||
|
||||
if (!hasRoot)
|
||||
{
|
||||
getPreferenceScreen().getPreference(transProxyGroupIdx).setEnabled(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
prefCBTransProxy = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(0));
|
||||
prefcBTransProxyAll = (CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(1);
|
||||
prefTransProxyApps = ((PreferenceCategory)this.getPreferenceScreen().getPreference(transProxyGroupIdx)).getPreference(2);
|
||||
|
||||
prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
|
||||
|
||||
prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
|
||||
|
||||
prefCBTransProxy.setOnPreferenceClickListener(this);
|
||||
prefcBTransProxyAll.setOnPreferenceClickListener(this);
|
||||
prefTransProxyApps.setOnPreferenceClickListener(this);
|
||||
|
||||
}
|
||||
|
||||
int hiddenGroupIdx = 5;
|
||||
|
||||
prefHiddenServices = ((CheckBoxPreference)((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(0));
|
||||
prefHiddenServices.setOnPreferenceClickListener(this);
|
||||
((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
|
||||
((PreferenceCategory)this.getPreferenceScreen().getPreference(hiddenGroupIdx)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onStop()
|
||||
*/
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
|
||||
//Log.d(getClass().getName(),"Exiting Preferences");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
||||
setResult(1010);
|
||||
|
||||
if (preference == prefTransProxyApps)
|
||||
{
|
||||
startActivity(new Intent(this, AppManager.class));
|
||||
|
||||
}
|
||||
else if (preference == prefHiddenServices)
|
||||
{
|
||||
|
||||
((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(1).setEnabled(prefHiddenServices.isChecked());
|
||||
((PreferenceCategory)this.getPreferenceScreen().getPreference(5)).getPreference(2).setEnabled(prefHiddenServices.isChecked());
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
prefcBTransProxyAll.setEnabled(prefCBTransProxy.isChecked());
|
||||
prefTransProxyApps.setEnabled(prefCBTransProxy.isChecked() && (!prefcBTransProxyAll.isChecked()));
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,129 +0,0 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
/** SOCKS aware echo client*/
|
||||
|
||||
package org.torproject.android;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.InetAddress;
|
||||
import java.net.Socket;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import net.sourceforge.jsocks.socks.*;
|
||||
|
||||
|
||||
public class SocksClient implements Runnable {
|
||||
|
||||
private int port;
|
||||
private InetAddress hostIP;
|
||||
|
||||
private Socket ss;
|
||||
private InputStream in;
|
||||
private OutputStream out;
|
||||
|
||||
private static final int BUF_SIZE = 1024;
|
||||
|
||||
public SocksClient(String host,int port)
|
||||
throws IOException,UnknownHostException,SocksException{
|
||||
this.port = port;
|
||||
|
||||
ss = new SocksSocket(host, port);
|
||||
out = ss.getOutputStream();
|
||||
in = ss.getInputStream();
|
||||
System.out.println("Connected...");
|
||||
System.out.println("TO: "+host+":"+port);
|
||||
System.out.println("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])
|
||||
: TorConstants.PORT_SOCKS;
|
||||
|
||||
host = args[0];
|
||||
proxyHost =(args.length > 2)? args[2]
|
||||
: TorConstants.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
|
|
@ -1,158 +0,0 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
public class TorBinaryInstaller implements TorConstants {
|
||||
|
||||
private final static String LOG_TAG = "Tor";
|
||||
|
||||
|
||||
public TorBinaryInstaller ()
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* Start the binary installation if the file doesn't exist or is forced
|
||||
*/
|
||||
public void start (boolean force)
|
||||
{
|
||||
boolean binaryExists = new File(TOR_BINARY_INSTALL_PATH).exists();
|
||||
|
||||
Log.i(LOG_TAG,"Tor binary exists=" + binaryExists);
|
||||
|
||||
if (!binaryExists || force)
|
||||
installFromZip ();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract the Tor binary from the APK file using ZIP
|
||||
*/
|
||||
private void installFromZip ()
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
ZipFile zip = new ZipFile(APK_PATH);
|
||||
|
||||
ZipEntry zipen = zip.getEntry(TOR_BINARY_ZIP_KEY);
|
||||
streamToFile(zip.getInputStream(zipen),TOR_BINARY_INSTALL_PATH);
|
||||
|
||||
zipen = zip.getEntry(TORRC_ZIP_KEY);
|
||||
streamToFile(zip.getInputStream(zipen),TORRC_INSTALL_PATH);
|
||||
|
||||
zip.close();
|
||||
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
Log.i(LOG_TAG,"unable to unzip tor binary from apk",ioe);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Write the inputstream contents to the file
|
||||
*/
|
||||
private static void streamToFile(InputStream stm, String targetFilename)
|
||||
|
||||
{
|
||||
|
||||
FileOutputStream stmOut = null;
|
||||
|
||||
byte[] buffer = new byte[FILE_WRITE_BUFFER_SIZE];
|
||||
|
||||
int bytecount;
|
||||
|
||||
|
||||
File outFile = new File(targetFilename);
|
||||
|
||||
try {
|
||||
outFile.createNewFile();
|
||||
|
||||
stmOut = new FileOutputStream(outFile);
|
||||
}
|
||||
|
||||
catch (java.io.IOException e)
|
||||
|
||||
{
|
||||
|
||||
Log.i(LOG_TAG,"Error opening output file " + targetFilename,e);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
try
|
||||
|
||||
{
|
||||
|
||||
while ((bytecount = stm.read(buffer)) > 0)
|
||||
|
||||
{
|
||||
|
||||
stmOut.write(buffer, 0, bytecount);
|
||||
|
||||
}
|
||||
|
||||
stmOut.close();
|
||||
|
||||
}
|
||||
|
||||
catch (java.io.IOException e)
|
||||
|
||||
{
|
||||
|
||||
Log.i(LOG_TAG,"Error writing output file '" + targetFilename + "': " + e.toString());
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//copy the file from inputstream to File output - alternative impl
|
||||
public void copyFile (InputStream is, File outputFile)
|
||||
{
|
||||
|
||||
try {
|
||||
outputFile.createNewFile();
|
||||
DataOutputStream out = new DataOutputStream(new FileOutputStream(outputFile));
|
||||
DataInputStream in = new DataInputStream(is);
|
||||
|
||||
int b;
|
||||
byte[] data = new byte[1024];
|
||||
|
||||
while ((b = in.read(data)) != -1) {
|
||||
out.write(data);
|
||||
}
|
||||
//
|
||||
out.flush();
|
||||
out.close();
|
||||
in.close();
|
||||
// chmod?
|
||||
|
||||
|
||||
|
||||
} catch (IOException ex) {
|
||||
Log.e(LOG_TAG, "error copying binary", ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,59 +1,50 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, The Guardian Project - http://openideals.com/guardian */
|
||||
/* 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 {
|
||||
|
||||
//home directory of Android application
|
||||
public final static String TOR_HOME = "/data/data/org.torproject.android/";
|
||||
public final static String TAG = "Orbot";
|
||||
|
||||
//name of the tor C binary
|
||||
public final static String TOR_BINARY_ASSET_KEY = "tor";
|
||||
|
||||
//path to install the Tor binary too
|
||||
public final static String TOR_BINARY_INSTALL_PATH = TOR_HOME + TOR_BINARY_ASSET_KEY;
|
||||
|
||||
//key of the tor binary in the Zip file
|
||||
public final static String TOR_BINARY_ZIP_KEY = "assets/" + TOR_BINARY_ASSET_KEY;
|
||||
|
||||
//torrc file name
|
||||
public final static String TORRC_ASSET_KEY = "torrc";
|
||||
|
||||
//path to install torrc to within the android app data folder
|
||||
public final static String TORRC_INSTALL_PATH = TOR_HOME + TORRC_ASSET_KEY;
|
||||
|
||||
//key of the torrc file in the Zip file
|
||||
public final static String TORRC_ZIP_KEY = "assets/" + TORRC_ASSET_KEY;
|
||||
|
||||
//where to send the notices log
|
||||
public final static String TOR_LOG_PATH = TOR_HOME + "notices.log";
|
||||
|
||||
//how to launch tor
|
||||
public final static String TOR_COMMAND_LINE_ARGS = "-f " + TORRC_INSTALL_PATH;
|
||||
|
||||
//various console cmds
|
||||
public final static String SHELL_CMD_CHMOD = "/system/bin/chmod";
|
||||
public final static String SHELL_CMD_KILLALL = "/system/bin/kill";
|
||||
public final static String SHELL_CMD_RM = "/system/bin/rm";
|
||||
public final static String SHELL_CMD_PS = "ps";
|
||||
public final static String CHMOD_EXE_VALUE = "777";
|
||||
|
||||
//path of the installed APK file
|
||||
public final static String APK_PATH = "/data/app/org.torproject.android.apk";
|
||||
|
||||
//path to check Tor against
|
||||
public final static String URL_TOR_CHECK = "http://check.torproject.org";
|
||||
public final static String PREFS_KEY = "OrbotPrefs";
|
||||
public final static String PREFS_KEY_TORIFIED = "PrefTord";
|
||||
|
||||
public final static int FILE_WRITE_BUFFER_SIZE = 2048;
|
||||
|
||||
//HTTP Proxy server port
|
||||
public final static int PORT_HTTP = 8118; //just like Privoxy!
|
||||
//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 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";
|
||||
|
||||
//Socks port client connects to, server is the Tor binary
|
||||
public final static int PORT_SOCKS = 9050;
|
||||
|
||||
//what is says!
|
||||
public final static String IP_LOCALHOST = "127.0.0.1";
|
||||
|
||||
}
|
||||
|
|
|
@ -1,337 +0,0 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class TorControlPanel extends Activity implements OnClickListener, TorConstants
|
||||
{
|
||||
|
||||
private final static String LOG_TAG = "Tor";
|
||||
|
||||
private Intent torService = null;
|
||||
|
||||
private boolean updateLog = false;
|
||||
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
|
||||
|
||||
showMain();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onPause()
|
||||
*/
|
||||
@Override
|
||||
protected void onPause() {
|
||||
// TODO Auto-generated method stub
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onResume()
|
||||
*/
|
||||
@Override
|
||||
protected void onResume() {
|
||||
// TODO Auto-generated method stub
|
||||
super.onResume();
|
||||
|
||||
setUIState ();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onStart()
|
||||
*/
|
||||
@Override
|
||||
protected void onStart() {
|
||||
// TODO Auto-generated method stub
|
||||
super.onStart();
|
||||
|
||||
setUIState ();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Activity#onStop()
|
||||
*/
|
||||
@Override
|
||||
protected void onStop() {
|
||||
// TODO Auto-generated method stub
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Show the main form UI
|
||||
*/
|
||||
private void showMain ()
|
||||
{
|
||||
updateLog = false;
|
||||
|
||||
setContentView(R.layout.layout_main);
|
||||
|
||||
((Button)findViewById(R.id.btnStart)).setOnClickListener(this);
|
||||
|
||||
((Button)findViewById(R.id.btnLog)).setOnClickListener(this);
|
||||
|
||||
((Button)findViewById(R.id.btnSettings)).setOnClickListener(this);
|
||||
|
||||
|
||||
setUIState ();
|
||||
}
|
||||
|
||||
/*
|
||||
* Show the message log UI
|
||||
*/
|
||||
private void showMessageLog ()
|
||||
{
|
||||
setContentView(R.layout.layout_log);
|
||||
((Button)findViewById(R.id.btnLogClose)).setOnClickListener(this);
|
||||
|
||||
updateLog = true;
|
||||
|
||||
Thread thread = new Thread ()
|
||||
{
|
||||
public void run ()
|
||||
{
|
||||
|
||||
while (updateLog)
|
||||
{
|
||||
handler.sendEmptyMessage(0);
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
} catch (InterruptedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
thread.start();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Load the Tor log and display it in a text field
|
||||
*/
|
||||
private void updateMessageLog ()
|
||||
{
|
||||
|
||||
TextView tvLog = (TextView)findViewById(R.id.messageLog);
|
||||
|
||||
String output = loadLogFile(TOR_LOG_PATH);
|
||||
|
||||
tvLog.setText(output);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle to reload Tor debug log every few seconds while viewing it
|
||||
*/
|
||||
private Handler handler = new Handler() {
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
|
||||
updateMessageLog ();
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* Load the basic settings application to display torrc
|
||||
* TODO: these needs to be improved into an actual form GUI
|
||||
*/
|
||||
private void showSettings ()
|
||||
{
|
||||
setContentView(R.layout.layout_settings);
|
||||
|
||||
TextView tvLog = (TextView)findViewById(R.id.textSettings);
|
||||
((Button)findViewById(R.id.btnSettingsClose)).setOnClickListener(this);
|
||||
|
||||
String output = loadLogFile(TORRC_INSTALL_PATH);
|
||||
|
||||
tvLog.setText(output);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Set the state of the running/not running graphic and label
|
||||
*/
|
||||
public void setUIState ()
|
||||
{
|
||||
|
||||
|
||||
TextView lblStatus = (TextView)findViewById(R.id.lblStatus);
|
||||
ImageView imgStatus = (ImageView)findViewById(R.id.imgStatus);
|
||||
|
||||
Button btnStart = (Button)findViewById(R.id.btnStart);
|
||||
|
||||
if (TorService.isRunning())
|
||||
{
|
||||
btnStart.setText("Stop Tor");
|
||||
imgStatus.setImageResource(R.drawable.toron);
|
||||
lblStatus.setText("Tor is running");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
btnStart.setText("Start Tor");
|
||||
imgStatus.setImageResource(R.drawable.toroff);
|
||||
lblStatus.setText("Tor is not running");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see android.view.View.OnClickListener#onClick(android.view.View)
|
||||
*/
|
||||
public void onClick(View view) {
|
||||
|
||||
// the start button
|
||||
if (view.getId()==R.id.btnStart)
|
||||
{
|
||||
//if Tor binary is not running, then start the service up
|
||||
if (!TorService.isRunning())
|
||||
{
|
||||
torService = new Intent(this, TorService.class);
|
||||
torService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
TorService.setActivity(this);
|
||||
|
||||
startService(torService);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (torService == null)
|
||||
torService = new Intent(this, TorService.class);
|
||||
|
||||
|
||||
TorService.setActivity(this);
|
||||
|
||||
stopService(torService);
|
||||
|
||||
}
|
||||
|
||||
//update the UI
|
||||
setUIState ();
|
||||
|
||||
}
|
||||
else if (view.getId()==R.id.btnLog)
|
||||
{
|
||||
showMessageLog();
|
||||
|
||||
}
|
||||
else if (view.getId()==R.id.btnSettings)
|
||||
{
|
||||
showSettings();
|
||||
|
||||
}
|
||||
else if (view.getId()==R.id.btnLogClose || view.getId()==R.id.btnSettingsClose)
|
||||
{
|
||||
|
||||
showMain();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Load the log file text
|
||||
*/
|
||||
public static String loadLogFile (String path)
|
||||
{
|
||||
String line = null;
|
||||
|
||||
StringBuffer out = new StringBuffer();
|
||||
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader((new FileReader(new File(path))));
|
||||
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
out.append(line);
|
||||
out.append('\n');
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return out.toString();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get the last line of the log file for status display
|
||||
*/
|
||||
public static String getLastLine (String path)
|
||||
{
|
||||
String line = null;
|
||||
|
||||
String lastLine = null;
|
||||
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader((new FileReader(new File(path))));
|
||||
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
lastLine = line;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return lastLine;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,391 +0,0 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import net.sourceforge.jsocks.socks.Proxy;
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class TorService extends Service implements TorConstants
|
||||
{
|
||||
|
||||
private static TorControlPanel ACTIVITY = null;
|
||||
|
||||
private final static String TAG = "Tor";
|
||||
|
||||
private static HttpProxy webProxy = null;
|
||||
|
||||
private static Process procTor = null;
|
||||
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static boolean isRunning ()
|
||||
{
|
||||
int procId = findProcessId(TorConstants.TOR_BINARY_INSTALL_PATH);
|
||||
|
||||
return (procId != -1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Service#onRebind(android.content.Intent)
|
||||
*/
|
||||
@Override
|
||||
public void onRebind(Intent intent) {
|
||||
// TODO Auto-generated method stub
|
||||
super.onRebind(intent);
|
||||
|
||||
Log.i(TAG,"on rebind");
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Service#onStart(android.content.Intent, int)
|
||||
*/
|
||||
@Override
|
||||
public void onStart(Intent intent, int startId) {
|
||||
// TODO Auto-generated method stub
|
||||
super.onStart(intent, startId);
|
||||
|
||||
Log.i(TAG,"on start");
|
||||
|
||||
startService();
|
||||
}
|
||||
|
||||
|
||||
private void startService ()
|
||||
{
|
||||
Log.i(TAG,"Tor thread started");
|
||||
|
||||
|
||||
initTor();
|
||||
|
||||
|
||||
setupWebProxy(true);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void onDestroy ()
|
||||
{
|
||||
|
||||
killTorProcess ();
|
||||
setupWebProxy(false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void setActivity(TorControlPanel activity) {
|
||||
ACTIVITY = activity;
|
||||
}
|
||||
|
||||
private void setupWebProxy (boolean enabled)
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
|
||||
if (webProxy == null)
|
||||
{
|
||||
Log.i(TAG,"Setting up Web Proxy on port 8888");
|
||||
//httpd s
|
||||
webProxy = new HttpProxy(PORT_HTTP);
|
||||
webProxy.setDoSocks(true);
|
||||
webProxy.start();
|
||||
|
||||
//socks
|
||||
try
|
||||
{
|
||||
Proxy.setDefaultProxy(IP_LOCALHOST,PORT_SOCKS);
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.w(TAG,e.getMessage());
|
||||
}
|
||||
|
||||
//Settings.System.putString(getContentResolver(), Settings.System.HTTP_PROXY, proxySetting);//enable proxy
|
||||
// Settings.Secure.putString(getContentResolver(), Settings.Secure.HTTP_PROXY, proxySetting);//enable proxy
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
webProxy.setDoSocks(true);
|
||||
Log.i(TAG,"Web Proxy already running...");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.i(TAG,"Turning off Socks/Tor routing on Web Proxy");
|
||||
|
||||
if (webProxy != null)
|
||||
{
|
||||
showToast("Tor is disabled - browsing is not anonymous!");
|
||||
webProxy.setDoSocks(false);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void killTorProcess ()
|
||||
{
|
||||
//doCommand(SHELL_CMD_KILLALL, CHMOD_EXE_VALUE, TOR_BINARY_INSTALL_PATH);
|
||||
|
||||
if (procTor != null)
|
||||
{
|
||||
Log.i(TAG,"shutting down Tor process...");
|
||||
|
||||
procTor.destroy();
|
||||
|
||||
try {
|
||||
procTor.waitFor();
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
int exitStatus = procTor.exitValue();
|
||||
Log.i(TAG,"Tor exit: " + exitStatus);
|
||||
|
||||
procTor = null;
|
||||
|
||||
}
|
||||
|
||||
int procId = findProcessId(TorConstants.TOR_BINARY_INSTALL_PATH);
|
||||
|
||||
if (procId != -1)
|
||||
{
|
||||
Log.i(TAG,"Found Tor PID=" + procId + " - killing now...");
|
||||
|
||||
doCommand(SHELL_CMD_KILLALL, procId + "");
|
||||
}
|
||||
|
||||
if (ACTIVITY != null)
|
||||
((TorControlPanel)ACTIVITY).setUIState();
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void showToast (String msg)
|
||||
{
|
||||
|
||||
Toast toast = Toast.makeText(ACTIVITY, msg, Toast.LENGTH_LONG);
|
||||
toast.show();
|
||||
|
||||
}
|
||||
|
||||
public void initTor ()
|
||||
{
|
||||
try {
|
||||
|
||||
|
||||
boolean binaryExists = new File(TOR_BINARY_INSTALL_PATH).exists();
|
||||
|
||||
if (!binaryExists)
|
||||
{
|
||||
TorBinaryInstaller installer = new TorBinaryInstaller();
|
||||
installer.start(false);
|
||||
|
||||
binaryExists = new File(TOR_BINARY_INSTALL_PATH).exists();
|
||||
if (binaryExists)
|
||||
{
|
||||
showToast("Tor binary installed!");
|
||||
}
|
||||
else
|
||||
{
|
||||
showToast("Tor binary install FAILED!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Log.i(TAG,"Setting permission on Tor binary");
|
||||
doCommand(SHELL_CMD_CHMOD, CHMOD_EXE_VALUE + ' ' + TOR_BINARY_INSTALL_PATH);
|
||||
|
||||
killTorProcess ();
|
||||
|
||||
doCommand(SHELL_CMD_RM,TOR_LOG_PATH);
|
||||
|
||||
Log.i(TAG,"Starting tor process");
|
||||
procTor = doCommand(TOR_BINARY_INSTALL_PATH, TOR_COMMAND_LINE_ARGS);
|
||||
|
||||
//Log.i(TAG,"Tor process id=" + procTor.);
|
||||
|
||||
showToast("Tor is starting up...");
|
||||
|
||||
((TorControlPanel)ACTIVITY).setUIState();
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
Log.w(TAG,"unable to start Tor Process",e);
|
||||
|
||||
e.printStackTrace();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void logStream (InputStream is)
|
||||
{
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
|
||||
String line = null;
|
||||
|
||||
|
||||
try {
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
Log.i(TAG, line);
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent arg0) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int findProcessId(String command)
|
||||
{
|
||||
int procId = -1;
|
||||
|
||||
Runtime r = Runtime.getRuntime();
|
||||
|
||||
Process procPs = null;
|
||||
|
||||
try {
|
||||
|
||||
procPs = r.exec(SHELL_CMD_PS);
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(procPs.getInputStream()));
|
||||
String line = null;
|
||||
|
||||
while ((line = reader.readLine())!=null)
|
||||
{
|
||||
if (line.indexOf(command)!=-1)
|
||||
{
|
||||
|
||||
StringTokenizer st = new StringTokenizer(line," ");
|
||||
st.nextToken(); //proc owner
|
||||
|
||||
procId = Integer.parseInt(st.nextToken().trim());
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "error: " + e.getMessage(), e);
|
||||
}
|
||||
|
||||
return procId;
|
||||
|
||||
}
|
||||
|
||||
public Process doCommand(String command, String arg1)
|
||||
{
|
||||
|
||||
Runtime r = Runtime.getRuntime();
|
||||
|
||||
Process child = null;
|
||||
|
||||
try {
|
||||
if(child != null) {
|
||||
child.destroy();
|
||||
child = null;
|
||||
}
|
||||
|
||||
child = r.exec(command + ' ' + arg1);
|
||||
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "error: " + e.getMessage(), e);
|
||||
}
|
||||
|
||||
return child;
|
||||
|
||||
}
|
||||
/*
|
||||
public static String doCommand(String command, String arg0, String arg1, boolean logOutput) {
|
||||
try {
|
||||
// android.os.Exec is not included in android.jar so we need to use reflection.
|
||||
Class execClass = Class.forName("android.os.Exec");
|
||||
Method createSubprocess = execClass.getMethod("createSubprocess",
|
||||
String.class, String.class, String.class, int[].class);
|
||||
Method waitFor = execClass.getMethod("waitFor", int.class);
|
||||
|
||||
// Executes the command.
|
||||
// NOTE: createSubprocess() is asynchronous.
|
||||
int[] pid = new int[1];
|
||||
FileDescriptor fd = (FileDescriptor)createSubprocess.invoke(
|
||||
null, command, arg0, arg1, pid);
|
||||
|
||||
StringBuffer output = new StringBuffer();
|
||||
|
||||
if (logOutput)
|
||||
{
|
||||
// Reads stdout.
|
||||
// NOTE: You can write to stdin of the command using new FileOutputStream(fd).
|
||||
FileInputStream in = new FileInputStream(fd);
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
|
||||
try {
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
output.append(line);
|
||||
output.append('\n');
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// It seems IOException is thrown when it reaches EOF.
|
||||
Log.e(TAG, "error reading output file", e);
|
||||
|
||||
}
|
||||
|
||||
// Waits for the command to finish.
|
||||
waitFor.invoke(null, pid[0]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// send output to the textbox
|
||||
return output.toString();
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.i(TAG, "unable to execute command",e);
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
|
||||
package org.torproject.android;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
public class Utils {
|
||||
|
||||
|
||||
public static String readString (InputStream stream)
|
||||
{
|
||||
String line = null;
|
||||
|
||||
StringBuffer out = new StringBuffer();
|
||||
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
|
||||
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
out.append(line);
|
||||
out.append('\n');
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return out.toString();
|
||||
|
||||
}
|
||||
/*
|
||||
* Load the log file text
|
||||
*/
|
||||
public static String loadTextFile (String path)
|
||||
{
|
||||
String line = null;
|
||||
|
||||
StringBuffer out = new StringBuffer();
|
||||
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader((new FileReader(new File(path))));
|
||||
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
out.append(line);
|
||||
out.append('\n');
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return out.toString();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Load the log file text
|
||||
*/
|
||||
public static boolean saveTextFile (String path, String contents)
|
||||
{
|
||||
|
||||
try {
|
||||
|
||||
FileWriter writer = new FileWriter( path, false );
|
||||
writer.write( contents );
|
||||
|
||||
writer.close();
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
|
||||
} catch (IOException e) {
|
||||
// Log.d(TAG, "error writing file: " + path, e);
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|