more cleanup, removal of unused items from orbotservice
|
@ -6,34 +6,14 @@
|
|||
path = external/libevent
|
||||
url = https://github.com/libevent/libevent.git
|
||||
ignore = dirty
|
||||
[submodule "external/jtorctl"]
|
||||
path = external/jtorctl
|
||||
url = https://github.com/guardianproject/jtorctl
|
||||
ignore = dirty
|
||||
[submodule "external/openssl"]
|
||||
path = external/openssl
|
||||
url = https://github.com/openssl/openssl.git
|
||||
ignore = dirty
|
||||
[submodule "external/iptables"]
|
||||
path = external/iptables
|
||||
url = git://git.netfilter.org/iptables
|
||||
ignore = dirty
|
||||
[submodule "external/polipo"]
|
||||
path = external/polipo
|
||||
url = https://github.com/jech/polipo.git
|
||||
ignore = dirty
|
||||
[submodule "external/badvpn"]
|
||||
path = external/badvpn
|
||||
url = https://github.com/guardianproject/badvpn.git
|
||||
ignore = dirty
|
||||
[submodule "external/pluto"]
|
||||
path = external/pluto
|
||||
url = https://github.com/guardianproject/pluto.git
|
||||
ignore = dirty
|
||||
[submodule "external/jsocks"]
|
||||
path = external/jsocks
|
||||
url = https://github.com/guardianproject/jsocks.git
|
||||
ignore = dirty
|
||||
[submodule "external/zstd"]
|
||||
path = external/zstd
|
||||
url = https://github.com/facebook/zstd.git
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.0.0'
|
||||
|
@ -11,5 +12,6 @@ buildscript {
|
|||
allprojects {
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Subproject commit fbc279c3c6999f8357666f4b85969dfd29764465
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 99b85b7837707bd6c6d578c9328e1321fceb8082
|
|
@ -1,39 +0,0 @@
|
|||
Bionic defines socklen_t as a signed int, so redefining it as unsigned
|
||||
breaks the build.
|
||||
|
||||
This change comes from AOSP.
|
||||
|
||||
Signed-off-by: Kevin Cernekee <cernekee@xxxxxxxxx>
|
||||
---
|
||||
libiptc/libip4tc.c | 2 +-
|
||||
libiptc/libip6tc.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libiptc/libip4tc.c b/libiptc/libip4tc.c
|
||||
index dd59951..2b029d4 100644
|
||||
--- a/libiptc/libip4tc.c
|
||||
+++ b/libiptc/libip4tc.c
|
||||
@@ -22,7 +22,7 @@
|
||||
#define inline
|
||||
#endif
|
||||
|
||||
-#if !defined(__GLIBC__) || (__GLIBC__ < 2)
|
||||
+#if !defined(__ANDROID__) && (!defined(__GLIBC__) || (__GLIBC__ < 2))
|
||||
typedef unsigned int socklen_t;
|
||||
#endif
|
||||
|
||||
diff --git a/libiptc/libip6tc.c b/libiptc/libip6tc.c
|
||||
index ca01bcb..4e47e69 100644
|
||||
--- a/libiptc/libip6tc.c
|
||||
+++ b/libiptc/libip6tc.c
|
||||
@@ -23,7 +23,7 @@
|
||||
#define inline
|
||||
#endif
|
||||
|
||||
-#if !defined(__GLIBC__) || (__GLIBC__ < 2)
|
||||
+#if !defined(__ANDROID__) && (!defined(__GLIBC__) || (__GLIBC__ < 2))
|
||||
typedef unsigned int socklen_t;
|
||||
#endif
|
||||
|
||||
--
|
||||
1.7.9.5
|
|
@ -1,26 +0,0 @@
|
|||
<netinet/ip.h> and <linux/ip.h> redefine a couple of structs, including
|
||||
iphdr. Handle this the same way as on glibc, i.e. don't include
|
||||
<linux/ip.h>.
|
||||
|
||||
This change comes from AOSP.
|
||||
|
||||
Signed-off-by: Kevin Cernekee <cernekee@xxxxxxxxx>
|
||||
---
|
||||
include/libiptc/ipt_kernel_headers.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/libiptc/ipt_kernel_headers.h b/include/libiptc/ipt_kernel_headers.h
|
||||
index 18861fe..60c7998 100644
|
||||
--- a/include/libiptc/ipt_kernel_headers.h
|
||||
+++ b/include/libiptc/ipt_kernel_headers.h
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
-#if defined(__GLIBC__) && __GLIBC__ == 2
|
||||
+#if defined(__ANDROID__) || (defined(__GLIBC__) && __GLIBC__ == 2)
|
||||
#include <netinet/ip.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/ip_icmp.h>
|
||||
--
|
||||
1.7.9.5
|
|
@ -1,30 +0,0 @@
|
|||
Bionic's <netinet/tcp.h> is missing constants needed to build this module,
|
||||
so have autoconf check for this condition before trying to build it.
|
||||
|
||||
Signed-off-by: Kevin Cernekee <cernekee@xxxxxxxxx>
|
||||
---
|
||||
configure.ac | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 76d0b37..53a9ded 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -91,6 +91,14 @@ if test "$nfconntrack" -ne 1; then
|
||||
echo "WARNING: libnetfilter_conntrack not found, connlabel match will not be built";
|
||||
fi;
|
||||
|
||||
+AC_CHECK_DECL([TCPOPT_WINDOW], [tcpopt_ok=1], [tcpopt_ok=0],
|
||||
+ [[#include <netinet/tcp.h>]])
|
||||
+
|
||||
+if test "$tcpopt_ok" -ne 1; then
|
||||
+ blacklist_modules="$blacklist_modules TCPOPTSTRIP";
|
||||
+ echo "WARNING: TCPOPT_* constants not found, TCPOPTSTRIP target will not be built";
|
||||
+fi;
|
||||
+
|
||||
AC_SUBST([blacklist_modules])
|
||||
AC_CHECK_SIZEOF([struct ip6_hdr], [], [#include <netinet/ip6.h>])
|
||||
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
--- extensions/libipt_ULOG.c 2015-05-13 11:59:59.752055326 -0400
|
||||
+++ extensions/libipt_ULOG.new.c 2015-05-13 12:09:29.410078607 -0400
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <xtables.h>
|
||||
+#define ffs(i) __builtin_ffs(i)
|
||||
/* For 64bit kernel / 32bit userspace */
|
||||
#include <linux/netfilter_ipv4/ipt_ULOG.h>
|
||||
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 9ae7520508d37a2b7fbb8477871f8f2c2a0a3b3d
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 9f8affffbb03737b5606212c3ade9a1114df755f
|
|
@ -1 +0,0 @@
|
|||
Subproject commit b3f330b15bf5f199b5114b11c93dec818feade04
|
|
@ -27,8 +27,7 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':jsocksAndroid')
|
||||
compile 'com.android.support:appcompat-v7:25.0.0'
|
||||
compile 'com.android.support:appcompat-v7:25.4.0'
|
||||
compile 'com.jrummyapps:android-shell:1.0.1'
|
||||
compile fileTree(dir: 'libs', include: ['*.jar','*.so'])
|
||||
testCompile 'junit:junit:4.12'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.torproject.android.service">
|
||||
package="org.torproject.android.native">
|
||||
|
||||
|
||||
</manifest>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android.service.util;
|
||||
package org.torproject.android.binary;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
|
@ -13,7 +13,6 @@ import java.io.InputStream;
|
|||
import java.io.OutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.io.StringBufferInputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
@ -22,9 +21,7 @@ import android.content.Context;
|
|||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
|
||||
import org.torproject.android.service.OrbotConstants;
|
||||
import org.torproject.android.service.R;
|
||||
import org.torproject.android.service.TorServiceConstants;
|
||||
|
||||
public class TorResourceInstaller implements TorServiceConstants {
|
||||
|
||||
|
@ -269,7 +266,7 @@ public class TorResourceInstaller implements TorServiceConstants {
|
|||
|
||||
|
||||
} catch (IOException ex) {
|
||||
Log.e(OrbotConstants.TAG, "error copying binary", ex);
|
||||
Log.e(TAG, "error copying binary", ex);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -311,23 +308,7 @@ public class TorResourceInstaller implements TorServiceConstants {
|
|||
// Change the permissions
|
||||
Runtime.getRuntime().exec("chmod "+mode+" "+abspath).waitFor();
|
||||
}
|
||||
/**
|
||||
* Asserts that the binary files are installed in the bin directory.
|
||||
* @param ctx context
|
||||
* @param showErrors indicates if errors should be alerted
|
||||
* @return false if the binary files could not be installed
|
||||
*/
|
||||
/*
|
||||
public static boolean assertIpTablesBinaries(Context ctx, boolean showErrors) throws Exception {
|
||||
boolean changed = false;
|
||||
|
||||
// Check iptables_g1
|
||||
File file = new File(ctx.getDir("bin",0), "iptables");
|
||||
copyRawFile(ctx, R.raw.iptables, file, CHMOD_EXEC, false);
|
||||
|
||||
return true;
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
private void setExecutable(File fileBin) {
|
||||
fileBin.setReadable(true);
|
|
@ -0,0 +1,47 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android.binary;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
public interface TorServiceConstants {
|
||||
|
||||
String TAG = "TorBinary";
|
||||
String DIRECTORY_TOR_BINARY = "bin";
|
||||
String DIRECTORY_TOR_DATA = "data";
|
||||
|
||||
//name of the tor C binary
|
||||
String TOR_ASSET_KEY = "tor";
|
||||
|
||||
//torrc (tor config file)
|
||||
String TORRC_ASSET_KEY = "torrc";
|
||||
String TORRCDIAG_ASSET_KEY = "torrcdiag";
|
||||
String TORRC_TETHER_KEY = "torrctether";
|
||||
|
||||
String TOR_CONTROL_COOKIE = "control_auth_cookie";
|
||||
|
||||
//privoxy
|
||||
String POLIPO_ASSET_KEY = "polipo";
|
||||
|
||||
//privoxy.config
|
||||
String POLIPOCONFIG_ASSET_KEY = "torpolipo.conf";
|
||||
|
||||
//geoip data file asset key
|
||||
String GEOIP_ASSET_KEY = "geoip";
|
||||
String GEOIP6_ASSET_KEY = "geoip6";
|
||||
|
||||
String SHELL_CMD_PS = "toolbox ps";
|
||||
|
||||
int FILE_WRITE_BUFFER_SIZE = 1024;
|
||||
|
||||
//obfsproxy
|
||||
String OBFSCLIENT_ASSET_KEY = "obfs4proxy";
|
||||
|
||||
//DNS daemon for TCP DNS over TOr
|
||||
String PDNSD_ASSET_KEY = "pdnsd";
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
/* See LICENSE for licensing information */
|
||||
|
||||
|
||||
package org.torproject.android.service.util;
|
||||
package org.torproject.android.binary;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
|
@ -1,25 +0,0 @@
|
|||
package org.torproject.android.service;
|
||||
|
||||
|
||||
//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,42 +0,0 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, Orbot/The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android.service;
|
||||
|
||||
public interface OrbotConstants {
|
||||
|
||||
public final static String TAG = "Orbot";
|
||||
|
||||
public final static String PREFS_KEY = "OrbotPrefs";
|
||||
public final static String PREFS_KEY_TORIFIED = "PrefTord";
|
||||
|
||||
public final static int FILE_WRITE_BUFFER_SIZE = 2048;
|
||||
|
||||
//path to check Tor against
|
||||
public final static String URL_TOR_CHECK = "https://check.torproject.org";
|
||||
|
||||
public final static String URL_TOR_BRIDGES = "https://bridges.torproject.org/bridges?transport=";
|
||||
|
||||
public final static String PREF_BRIDGES_UPDATED = "pref_bridges_enabled";
|
||||
//public final static String PREF_BRIDGES_OBFUSCATED = "pref_bridges_obfuscated";
|
||||
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 int RESULT_CLOSE_ALL = 0;
|
||||
|
||||
public final static String PREF_DISABLE_NETWORK = "pref_disable_network";
|
||||
|
||||
public final static String PREF_TOR_SHARED_PREFS = "org.torproject.android_preferences";
|
||||
|
||||
public final static int MAX_LOG_LENGTH = 10000;
|
||||
|
||||
public final static String PREF_SOCKS = "pref_socks";
|
||||
|
||||
public final static String PREF_ISOLATE_DEST = "pref_isolate_dest";
|
||||
|
||||
public final static String PREF_CONNECTION_PADDING = "pref_connection_padding";
|
||||
public final static String PREF_REDUCED_CONNECTION_PADDING = "pref_reduced_connection_padding";
|
||||
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
|
||||
package org.torproject.android.service;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.torproject.android.service.util.Prefs;
|
||||
|
||||
|
||||
public class StartTorReceiver extends BroadcastReceiver implements TorServiceConstants {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
/* sanitize the Intent before forwarding it to TorService */
|
||||
Prefs.setContext(context);
|
||||
String action = intent.getAction();
|
||||
if (TextUtils.equals(action, ACTION_START)) {
|
||||
String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME);
|
||||
if (Prefs.allowBackgroundStarts()) {
|
||||
Intent startTorIntent = new Intent(context, TorService.class);
|
||||
startTorIntent.setAction(action);
|
||||
if (packageName != null)
|
||||
startTorIntent.putExtra(EXTRA_PACKAGE_NAME, packageName);
|
||||
context.startService(startTorIntent);
|
||||
} else if (!TextUtils.isEmpty(packageName)) {
|
||||
// let the requesting app know that the user has disabled
|
||||
// starting via Intent
|
||||
Intent startsDisabledIntent = new Intent(ACTION_STATUS);
|
||||
startsDisabledIntent.putExtra(EXTRA_STATUS, STATUS_STARTS_DISABLED);
|
||||
startsDisabledIntent.setPackage(packageName);
|
||||
context.sendBroadcast(startsDisabledIntent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,325 +0,0 @@
|
|||
package org.torproject.android.service;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Proxy;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
|
||||
import org.torproject.android.control.EventHandler;
|
||||
import org.torproject.android.service.util.Prefs;
|
||||
|
||||
/**
|
||||
* Created by n8fr8 on 9/25/16.
|
||||
*/
|
||||
public class TorEventHandler implements EventHandler, TorServiceConstants {
|
||||
|
||||
private TorService mService;
|
||||
|
||||
|
||||
private long lastRead = -1;
|
||||
private long lastWritten = -1;
|
||||
private long mTotalTrafficWritten = 0;
|
||||
private long mTotalTrafficRead = 0;
|
||||
|
||||
private NumberFormat mNumberFormat = null;
|
||||
|
||||
|
||||
private HashMap<String,Node> hmBuiltNodes = new HashMap<String,Node>();
|
||||
|
||||
public class Node
|
||||
{
|
||||
String status;
|
||||
String id;
|
||||
String name;
|
||||
String ipAddress;
|
||||
String country;
|
||||
String organization;
|
||||
}
|
||||
|
||||
public HashMap<String,Node> getNodes ()
|
||||
{
|
||||
return hmBuiltNodes;
|
||||
}
|
||||
|
||||
public TorEventHandler (TorService service)
|
||||
{
|
||||
mService = service;
|
||||
mNumberFormat = NumberFormat.getInstance(Locale.getDefault()); //localized numbers!
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void message(String severity, String msg) {
|
||||
mService.logNotice(severity + ": " + msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newDescriptors(List<String> orList) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void orConnStatus(String status, String orName) {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("orConnStatus (");
|
||||
sb.append(parseNodeName(orName) );
|
||||
sb.append("): ");
|
||||
sb.append(status);
|
||||
|
||||
mService.debug(sb.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void streamStatus(String status, String streamID, String target) {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("StreamStatus (");
|
||||
sb.append((streamID));
|
||||
sb.append("): ");
|
||||
sb.append(status);
|
||||
|
||||
mService.logNotice(sb.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unrecognized(String type, String msg) {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Message (");
|
||||
sb.append(type);
|
||||
sb.append("): ");
|
||||
sb.append(msg);
|
||||
|
||||
mService.logNotice(sb.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bandwidthUsed(long read, long written) {
|
||||
|
||||
if (read != lastRead || written != lastWritten)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(formatCount(read));
|
||||
sb.append(" \u2193");
|
||||
sb.append(" / ");
|
||||
sb.append(formatCount(written));
|
||||
sb.append(" \u2191");
|
||||
|
||||
int iconId = R.drawable.ic_stat_tor;
|
||||
|
||||
if (read > 0 || written > 0)
|
||||
iconId = R.drawable.ic_stat_tor_xfer;
|
||||
|
||||
if (mService.hasConnectivity() && Prefs.expandedNotifications())
|
||||
mService.showToolbarNotification(sb.toString(), mService.getNotifyId(), iconId);
|
||||
|
||||
mTotalTrafficWritten += written;
|
||||
mTotalTrafficRead += read;
|
||||
}
|
||||
|
||||
lastWritten = written;
|
||||
lastRead = read;
|
||||
|
||||
mService.sendCallbackBandwidth(lastWritten, lastRead, mTotalTrafficWritten, mTotalTrafficRead);
|
||||
}
|
||||
|
||||
private String formatCount(long count) {
|
||||
// Converts the supplied argument into a string.
|
||||
|
||||
// Under 2Mb, returns "xxx.xKb"
|
||||
// Over 2Mb, returns "xxx.xxMb"
|
||||
if (mNumberFormat != null)
|
||||
if (count < 1e6)
|
||||
return mNumberFormat.format(Math.round((float)((int)(count*10/1024))/10)) + "kbps";
|
||||
else
|
||||
return mNumberFormat.format(Math.round((float)((int)(count*100/1024/1024))/100)) + "mbps";
|
||||
else
|
||||
return "";
|
||||
|
||||
//return count+" kB";
|
||||
}
|
||||
|
||||
public void circuitStatus(String status, String circID, String path) {
|
||||
|
||||
/* once the first circuit is complete, then announce that Orbot is on*/
|
||||
if (mService.getCurrentStatus() == STATUS_STARTING && TextUtils.equals(status, "BUILT"))
|
||||
mService.sendCallbackStatus(STATUS_ON);
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Circuit (");
|
||||
sb.append((circID));
|
||||
sb.append(") ");
|
||||
sb.append(status);
|
||||
sb.append(": ");
|
||||
|
||||
StringTokenizer st = new StringTokenizer(path,",");
|
||||
Node node = null;
|
||||
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
String nodePath = st.nextToken();
|
||||
node = new Node();
|
||||
|
||||
String[] nodeParts;
|
||||
|
||||
if (nodePath.contains("="))
|
||||
nodeParts = nodePath.split("=");
|
||||
else
|
||||
nodeParts = nodePath.split("~");
|
||||
|
||||
if (nodeParts.length == 1)
|
||||
{
|
||||
node.id = nodeParts[0].substring(1);
|
||||
node.name = node.id;
|
||||
}
|
||||
else if (nodeParts.length == 2)
|
||||
{
|
||||
node.id = nodeParts[0].substring(1);
|
||||
node.name = nodeParts[1];
|
||||
}
|
||||
|
||||
node.status = status;
|
||||
|
||||
sb.append(node.name);
|
||||
|
||||
if (st.hasMoreTokens())
|
||||
sb.append (" > ");
|
||||
}
|
||||
|
||||
if (Prefs.useDebugLogging())
|
||||
mService.debug(sb.toString());
|
||||
else if(status.equals("BUILT"))
|
||||
mService.logNotice(sb.toString());
|
||||
else if (status.equals("CLOSED"))
|
||||
mService.logNotice(sb.toString());
|
||||
|
||||
if (Prefs.expandedNotifications())
|
||||
{
|
||||
//get IP from last nodename
|
||||
if(status.equals("BUILT")){
|
||||
|
||||
if (node.ipAddress == null)
|
||||
mService.exec(new ExternalIPFetcher(node));
|
||||
|
||||
hmBuiltNodes.put(circID, node);
|
||||
}
|
||||
|
||||
if (status.equals("CLOSED"))
|
||||
{
|
||||
hmBuiltNodes.remove(circID);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class ExternalIPFetcher implements Runnable {
|
||||
|
||||
private Node mNode;
|
||||
private int MAX_ATTEMPTS = 3;
|
||||
private final static String ONIONOO_BASE_URL = "https://onionoo.torproject.org/details?fields=country_name,as_name,or_addresses&lookup=";
|
||||
|
||||
public ExternalIPFetcher (Node node)
|
||||
{
|
||||
mNode = node;
|
||||
}
|
||||
|
||||
public void run ()
|
||||
{
|
||||
|
||||
for (int i = 0; i < MAX_ATTEMPTS; i++)
|
||||
{
|
||||
if (mService.getControlConnection() != null)
|
||||
{
|
||||
try {
|
||||
|
||||
URLConnection conn = null;
|
||||
|
||||
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8118));
|
||||
conn = new URL(ONIONOO_BASE_URL + mNode.id).openConnection(proxy);
|
||||
|
||||
conn.setRequestProperty("Connection","Close");
|
||||
conn.setConnectTimeout(60000);
|
||||
conn.setReadTimeout(60000);
|
||||
|
||||
InputStream is = conn.getInputStream();
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
|
||||
|
||||
// getting JSON string from URL
|
||||
|
||||
StringBuffer json = new StringBuffer();
|
||||
String line = null;
|
||||
|
||||
while ((line = reader.readLine())!=null)
|
||||
json.append(line);
|
||||
|
||||
JSONObject jsonNodeInfo = new org.json.JSONObject(json.toString());
|
||||
|
||||
JSONArray jsonRelays = jsonNodeInfo.getJSONArray("relays");
|
||||
|
||||
if (jsonRelays.length() > 0)
|
||||
{
|
||||
mNode.ipAddress = jsonRelays.getJSONObject(0).getJSONArray("or_addresses").getString(0).split(":")[0];
|
||||
mNode.country = jsonRelays.getJSONObject(0).getString("country_name");
|
||||
mNode.organization = jsonRelays.getJSONObject(0).getString("as_name");
|
||||
|
||||
StringBuffer sbInfo = new StringBuffer();
|
||||
sbInfo.append(mNode.ipAddress);
|
||||
|
||||
if (mNode.country != null)
|
||||
sbInfo.append(' ').append(mNode.country);
|
||||
|
||||
if (mNode.organization != null)
|
||||
sbInfo.append(" (").append(mNode.organization).append(')');
|
||||
|
||||
mService.logNotice(sbInfo.toString());
|
||||
|
||||
}
|
||||
|
||||
reader.close();
|
||||
is.close();
|
||||
|
||||
break;
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
mService.debug ("Error getting node details from onionoo: " + e.getMessage());
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private String parseNodeName(String node)
|
||||
{
|
||||
if (node.indexOf('=')!=-1)
|
||||
{
|
||||
return (node.substring(node.indexOf("=")+1));
|
||||
}
|
||||
else if (node.indexOf('~')!=-1)
|
||||
{
|
||||
return (node.substring(node.indexOf("~")+1));
|
||||
}
|
||||
else
|
||||
return node;
|
||||
}
|
||||
}
|
|
@ -1,157 +0,0 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
package org.torproject.android.service;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
public interface TorServiceConstants {
|
||||
|
||||
String TOR_APP_USERNAME = "org.torproject.android";
|
||||
String BROWSER_APP_USERNAME = "info.guardianproject.orfox";
|
||||
|
||||
String DIRECTORY_TOR_BINARY = "bin";
|
||||
String DIRECTORY_TOR_DATA = "data";
|
||||
|
||||
//name of the tor C binary
|
||||
String TOR_ASSET_KEY = "tor";
|
||||
|
||||
//torrc (tor config file)
|
||||
String TORRC_ASSET_KEY = "torrc";
|
||||
String TORRCDIAG_ASSET_KEY = "torrcdiag";
|
||||
String TORRC_TETHER_KEY = "torrctether";
|
||||
|
||||
String TOR_CONTROL_COOKIE = "control_auth_cookie";
|
||||
|
||||
//privoxy
|
||||
String POLIPO_ASSET_KEY = "polipo";
|
||||
|
||||
//privoxy.config
|
||||
String POLIPOCONFIG_ASSET_KEY = "torpolipo.conf";
|
||||
|
||||
//geoip data file asset key
|
||||
String GEOIP_ASSET_KEY = "geoip";
|
||||
String GEOIP6_ASSET_KEY = "geoip6";
|
||||
|
||||
//various console cmds
|
||||
String SHELL_CMD_CHMOD = "chmod";
|
||||
String SHELL_CMD_KILL = "kill -9";
|
||||
String SHELL_CMD_RM = "rm";
|
||||
String SHELL_CMD_PS = "toolbox ps";
|
||||
String SHELL_CMD_PS_ALT = "ps";
|
||||
|
||||
|
||||
//String SHELL_CMD_PIDOF = "pidof";
|
||||
String SHELL_CMD_LINK = "ln -s";
|
||||
String SHELL_CMD_CP = "cp";
|
||||
|
||||
|
||||
String CHMOD_EXE_VALUE = "770";
|
||||
|
||||
int FILE_WRITE_BUFFER_SIZE = 1024;
|
||||
|
||||
String IP_LOCALHOST = "127.0.0.1";
|
||||
int UPDATE_TIMEOUT = 1000;
|
||||
int TOR_TRANSPROXY_PORT_DEFAULT = 9040;
|
||||
|
||||
int STANDARD_DNS_PORT = 53;
|
||||
int TOR_DNS_PORT_DEFAULT = 5400;
|
||||
String TOR_VPN_DNS_LISTEN_ADDRESS = "127.0.0.1";
|
||||
|
||||
int CONTROL_PORT_DEFAULT = 9051;
|
||||
int HTTP_PROXY_PORT_DEFAULT = 8118; // like Privoxy!
|
||||
int SOCKS_PROXY_PORT_DEFAULT = 9050;
|
||||
|
||||
|
||||
//path to check Tor against
|
||||
String URL_TOR_CHECK = "https://check.torproject.org";
|
||||
|
||||
//control port
|
||||
String TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE = "Bootstrapped 100%";
|
||||
String LOG_NOTICE_HEADER = "NOTICE";
|
||||
String LOG_NOTICE_BOOTSTRAPPED = "Bootstrapped";
|
||||
|
||||
/**
|
||||
* A request to Orbot to transparently start Tor services
|
||||
*/
|
||||
String ACTION_START = "org.torproject.android.intent.action.START";
|
||||
/**
|
||||
* {@link Intent} send by Orbot with {@code ON/OFF/STARTING/STOPPING} status
|
||||
*/
|
||||
String ACTION_STATUS = "org.torproject.android.intent.action.STATUS";
|
||||
/**
|
||||
* {@code String} that contains a status constant: {@link #STATUS_ON},
|
||||
* {@link #STATUS_OFF}, {@link #STATUS_STARTING}, or
|
||||
* {@link #STATUS_STOPPING}
|
||||
*/
|
||||
String EXTRA_STATUS = "org.torproject.android.intent.extra.STATUS";
|
||||
/**
|
||||
* A {@link String} {@code packageName} for Orbot to direct its status reply
|
||||
* to, used in {@link #ACTION_START} {@link Intent}s sent to Orbot
|
||||
*/
|
||||
String EXTRA_PACKAGE_NAME = "org.torproject.android.intent.extra.PACKAGE_NAME";
|
||||
/**
|
||||
* The SOCKS proxy settings in URL form.
|
||||
*/
|
||||
String EXTRA_SOCKS_PROXY = "org.torproject.android.intent.extra.SOCKS_PROXY";
|
||||
String EXTRA_SOCKS_PROXY_HOST = "org.torproject.android.intent.extra.SOCKS_PROXY_HOST";
|
||||
String EXTRA_SOCKS_PROXY_PORT = "org.torproject.android.intent.extra.SOCKS_PROXY_PORT";
|
||||
/**
|
||||
* The HTTP proxy settings in URL form.
|
||||
*/
|
||||
String EXTRA_HTTP_PROXY = "org.torproject.android.intent.extra.HTTP_PROXY";
|
||||
String EXTRA_HTTP_PROXY_HOST = "org.torproject.android.intent.extra.HTTP_PROXY_HOST";
|
||||
String EXTRA_HTTP_PROXY_PORT = "org.torproject.android.intent.extra.HTTP_PROXY_PORT";
|
||||
|
||||
String LOCAL_ACTION_LOG = "log";
|
||||
String LOCAL_ACTION_BANDWIDTH = "bandwidth";
|
||||
String LOCAL_EXTRA_LOG = "log";
|
||||
|
||||
/**
|
||||
* All tor-related services and daemons are stopped
|
||||
*/
|
||||
String STATUS_OFF = "OFF";
|
||||
/**
|
||||
* All tor-related services and daemons have completed starting
|
||||
*/
|
||||
String STATUS_ON = "ON";
|
||||
String STATUS_STARTING = "STARTING";
|
||||
String STATUS_STOPPING = "STOPPING";
|
||||
|
||||
/**
|
||||
* The user has disabled the ability for background starts triggered by
|
||||
* apps. Fallback to the old {@link Intent} action that brings up Orbot:
|
||||
* {@link org.torproject.android.OrbotMainActivity#INTENT_ACTION_REQUEST_START_TOR}
|
||||
*/
|
||||
String STATUS_STARTS_DISABLED = "STARTS_DISABLED";
|
||||
|
||||
// actions for internal command Intents
|
||||
String CMD_SIGNAL_HUP = "signal_hup";
|
||||
String CMD_STATUS = "status";
|
||||
String CMD_FLUSH = "flush";
|
||||
String CMD_NEWNYM = "newnym";
|
||||
String CMD_VPN = "vpn";
|
||||
String CMD_VPN_CLEAR = "vpnclear";
|
||||
String CMD_UPDATE_TRANS_PROXY = "update";
|
||||
String CMD_SET_EXIT = "setexit";
|
||||
|
||||
String BINARY_TOR_VERSION = "0.3.1.8-openssl1.0.2k";
|
||||
String PREF_BINARY_TOR_VERSION_INSTALLED = "BINARY_TOR_VERSION_INSTALLED";
|
||||
|
||||
//obfsproxy
|
||||
String OBFSCLIENT_ASSET_KEY = "obfs4proxy";
|
||||
|
||||
// String MEEK_ASSET_KEY = "meek-client";
|
||||
|
||||
//DNS daemon for TCP DNS over TOr
|
||||
String PDNSD_ASSET_KEY = "pdnsd";
|
||||
|
||||
//EXIT COUNTRY CODES
|
||||
String[] COUNTRY_CODES = {"DE","AT","SE","CH","IS","CA","US","ES","FR","BG","PL","AU","BR","CZ","DK","FI","GB","HU","NL","JP","RO","RU","SG","SK"};
|
||||
|
||||
|
||||
String HIDDEN_SERVICES_DIR = "hidden_services";
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
package org.torproject.android.service;
|
||||
|
||||
public class TorrcConfig {
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* GeoIPFile
|
||||
*/
|
||||
/*
|
||||
HTTPProxy host[:port]
|
||||
Tor will make all its directory requests through this host:port (or host:80 if port is not specified), rather than connecting directly to any directory servers.
|
||||
|
||||
HTTPProxyAuthenticator username:password
|
||||
If defined, Tor will use this username:password for Basic HTTP proxy authentication, as in RFC 2617. This is currently the only form of HTTP proxy authentication that Tor supports; feel free to submit a patch if you want it to support others.
|
||||
|
||||
HTTPSProxy host[:port]
|
||||
Tor will make all its OR (SSL) connections through this host:port (or host:443 if port is not specified), via HTTP CONNECT rather than connecting directly to servers. You may want to set FascistFirewall to restrict the set of ports you might try to connect to, if your HTTPS proxy only allows connecting to certain ports.
|
||||
|
||||
HTTPSProxyAuthenticator username:password
|
||||
If defined, Tor will use this username:password for Basic HTTPS proxy authentication, as in RFC 2617. This is currently the only form of HTTPS proxy authentication that Tor supports; feel free to submit a patch if you want it to support others.
|
||||
|
||||
Socks4Proxy host[:port]
|
||||
Tor will make all OR connections through the SOCKS 4 proxy at host:port (or host:1080 if port is not specified).
|
||||
|
||||
Socks5Proxy host[:port]
|
||||
Tor will make all OR connections through the SOCKS 5 proxy at host:port (or host:1080 if port is not specified).
|
||||
|
||||
Socks5ProxyUsername username
|
||||
|
||||
Socks5ProxyPassword password
|
||||
If defined, authenticate to the SOCKS 5 server using username and password in accordance to RFC 1929. Both username and password must be between 1 and 255 characters.
|
||||
*/
|
|
@ -1,15 +0,0 @@
|
|||
package org.torproject.android.service.util;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
||||
/*
|
||||
* To combat background service being stopped/swiped
|
||||
*/
|
||||
public class DummyActivity extends Activity {
|
||||
@Override
|
||||
public void onCreate( Bundle icicle ) {
|
||||
super.onCreate( icicle );
|
||||
finish();
|
||||
}
|
||||
}
|
|
@ -1,136 +0,0 @@
|
|||
|
||||
package org.torproject.android.service.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class Prefs {
|
||||
|
||||
private final static String PREF_BRIDGES_ENABLED = "pref_bridges_enabled";
|
||||
private final static String PREF_BRIDGES_LIST = "pref_bridges_list";
|
||||
private final static String PREF_DEFAULT_LOCALE = "pref_default_locale";
|
||||
private final static String PREF_ENABLE_LOGGING = "pref_enable_logging";
|
||||
private final static String PREF_EXPANDED_NOTIFICATIONS = "pref_expanded_notifications";
|
||||
private final static String PREF_HAS_ROOT = "has_root";
|
||||
private final static String PREF_PERSIST_NOTIFICATIONS = "pref_persistent_notifications";
|
||||
private final static String PREF_START_ON_BOOT = "pref_start_boot";
|
||||
private final static String PREF_ALLOW_BACKGROUND_STARTS = "pref_allow_background_starts";
|
||||
private final static String PREF_TRANSPARENT = "pref_transparent";
|
||||
private final static String PREF_TRANSPARENT_ALL = "pref_transparent_all";
|
||||
private final static String PREF_TRANSPARENT_TETHERING = "pref_transparent_tethering";
|
||||
private final static String PREF_TRANSPROXY_REFRESH = "pref_transproxy_refresh";
|
||||
private final static String PREF_USE_SYSTEM_IPTABLES = "pref_use_sys_iptables";
|
||||
private final static String PREF_USE_VPN = "pref_vpn";
|
||||
private final static String PREF_EXIT_NODES = "pref_exit_nodes";
|
||||
|
||||
private static SharedPreferences prefs;
|
||||
|
||||
public static void setContext(Context context) {
|
||||
if (prefs == null)
|
||||
prefs = TorServiceUtils.getSharedPrefs(context);
|
||||
}
|
||||
|
||||
private static void putBoolean(String key, boolean value) {
|
||||
prefs.edit().putBoolean(key, value).apply();
|
||||
}
|
||||
|
||||
private static void putString(String key, String value) {
|
||||
prefs.edit().putString(key, value).apply();
|
||||
}
|
||||
|
||||
public static boolean bridgesEnabled() {
|
||||
return prefs.getBoolean(PREF_BRIDGES_ENABLED, false);
|
||||
}
|
||||
|
||||
public static void putBridgesEnabled(boolean value) {
|
||||
putBoolean(PREF_BRIDGES_ENABLED, value);
|
||||
}
|
||||
|
||||
public static String getBridgesList() {
|
||||
return prefs.getString(PREF_BRIDGES_LIST, "");
|
||||
}
|
||||
|
||||
public static void setBridgesList(String value) {
|
||||
putString(PREF_BRIDGES_LIST, value);
|
||||
}
|
||||
|
||||
public static String getDefaultLocale() {
|
||||
return prefs.getString(PREF_DEFAULT_LOCALE, Locale.getDefault().getLanguage());
|
||||
}
|
||||
|
||||
public static void setDefaultLocale(String value) {
|
||||
putString(PREF_DEFAULT_LOCALE, value);
|
||||
}
|
||||
|
||||
public static boolean useSystemIpTables() {
|
||||
return prefs.getBoolean(PREF_USE_SYSTEM_IPTABLES, false);
|
||||
}
|
||||
|
||||
public static boolean useRoot() {
|
||||
return prefs.getBoolean(PREF_HAS_ROOT, false);
|
||||
}
|
||||
|
||||
public static boolean useTransparentProxying() {
|
||||
return prefs.getBoolean(PREF_TRANSPARENT, false);
|
||||
}
|
||||
|
||||
public static void disableTransparentProxying() {
|
||||
putBoolean(PREF_TRANSPARENT, false);
|
||||
}
|
||||
|
||||
public static boolean transparentProxyAll() {
|
||||
return prefs.getBoolean(PREF_TRANSPARENT_ALL, false);
|
||||
}
|
||||
|
||||
public static boolean transparentTethering() {
|
||||
return prefs.getBoolean(PREF_TRANSPARENT_TETHERING, false);
|
||||
}
|
||||
|
||||
public static boolean transProxyNetworkRefresh() {
|
||||
return prefs.getBoolean(PREF_TRANSPROXY_REFRESH, false);
|
||||
}
|
||||
|
||||
public static boolean expandedNotifications() {
|
||||
return prefs.getBoolean(PREF_EXPANDED_NOTIFICATIONS, true);
|
||||
}
|
||||
|
||||
public static boolean useDebugLogging() {
|
||||
return prefs.getBoolean(PREF_ENABLE_LOGGING, false);
|
||||
}
|
||||
|
||||
public static boolean persistNotifications() {
|
||||
return prefs.getBoolean(PREF_PERSIST_NOTIFICATIONS, true);
|
||||
}
|
||||
|
||||
public static boolean allowBackgroundStarts() {
|
||||
return prefs.getBoolean(PREF_ALLOW_BACKGROUND_STARTS, true);
|
||||
}
|
||||
|
||||
public static boolean useVpn() {
|
||||
return prefs.getBoolean(PREF_USE_VPN, false);
|
||||
}
|
||||
|
||||
public static void putUseVpn(boolean value) {
|
||||
putBoolean(PREF_USE_VPN, value);
|
||||
}
|
||||
|
||||
public static boolean startOnBoot() {
|
||||
return prefs.getBoolean(PREF_START_ON_BOOT, true);
|
||||
}
|
||||
|
||||
public static void putStartOnBoot(boolean value) {
|
||||
putBoolean(PREF_START_ON_BOOT, value);
|
||||
}
|
||||
|
||||
public static String getExitNodes ()
|
||||
{
|
||||
return prefs.getString(PREF_EXIT_NODES, "");
|
||||
}
|
||||
|
||||
public static void setExitNodes (String exits)
|
||||
{
|
||||
putString(PREF_EXIT_NODES,exits);
|
||||
}
|
||||
}
|
|
@ -1,183 +0,0 @@
|
|||
/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
|
||||
/* See LICENSE for licensing information */
|
||||
package org.torproject.android.service.util;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.ConnectException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
|
||||
import org.torproject.android.service.OrbotConstants;
|
||||
import org.torproject.android.service.TorServiceConstants;
|
||||
|
||||
public class TorServiceUtils implements TorServiceConstants {
|
||||
|
||||
|
||||
|
||||
public static int findProcessId(String command) throws IOException
|
||||
{
|
||||
int procId = findProcessIdWithPS(command);
|
||||
return procId;
|
||||
}
|
||||
|
||||
//use 'pidof' command
|
||||
/**
|
||||
public static int findProcessIdWithPidOf(String command) throws Exception
|
||||
{
|
||||
|
||||
int procId = -1;
|
||||
|
||||
Runtime r = Runtime.getRuntime();
|
||||
|
||||
Process procPs = null;
|
||||
|
||||
String baseName = new File(command).getName();
|
||||
//fix contributed my mikos on 2010.12.10
|
||||
procPs = r.exec(new String[] {SHELL_CMD_PIDOF, baseName});
|
||||
//procPs = r.exec(SHELL_CMD_PIDOF);
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(procPs.getInputStream()));
|
||||
String line = null;
|
||||
|
||||
while ((line = reader.readLine())!=null)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
//this line should just be the process id
|
||||
procId = Integer.parseInt(line.trim());
|
||||
break;
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
Log.e("TorServiceUtils","unable to parse process pid: " + line,e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return procId;
|
||||
|
||||
}
|
||||
* @throws IOException */
|
||||
|
||||
//use 'ps' command
|
||||
public static int findProcessIdWithPS(String command) throws IOException
|
||||
{
|
||||
|
||||
int procId = -1;
|
||||
|
||||
Runtime r = Runtime.getRuntime();
|
||||
|
||||
Process procPs = null;
|
||||
|
||||
procPs = r.exec(SHELL_CMD_PS); // this is the android ps <name> command
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(procPs.getInputStream()));
|
||||
String line = null;
|
||||
|
||||
while ((line = reader.readLine())!=null)
|
||||
{
|
||||
if (line.contains("PID"))
|
||||
continue;
|
||||
|
||||
if (line.contains(command))
|
||||
{
|
||||
|
||||
String[] lineParts = line.split("\\s+");
|
||||
|
||||
try {
|
||||
|
||||
procId = Integer.parseInt(lineParts[1]); //for most devices it is the second number
|
||||
} catch(NumberFormatException e) {
|
||||
procId = Integer.parseInt(lineParts[0]); //but for samsungs it is the first
|
||||
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
try { procPs.destroy(); } catch (Exception e) {} // try to destroy just to make sure we clean it up
|
||||
|
||||
return procId;
|
||||
|
||||
}
|
||||
|
||||
public static SharedPreferences getSharedPrefs (Context context)
|
||||
{
|
||||
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
|
||||
return context.getSharedPreferences(OrbotConstants.PREF_TOR_SHARED_PREFS,0 | Context.MODE_MULTI_PROCESS);
|
||||
else
|
||||
return context.getSharedPreferences(OrbotConstants.PREF_TOR_SHARED_PREFS,Context.MODE_PRIVATE);
|
||||
|
||||
}
|
||||
|
||||
public static void killProcess(File fileProcBin) throws Exception {
|
||||
killProcess(fileProcBin, "-9"); // this is -KILL
|
||||
}
|
||||
|
||||
public static void killProcess(File fileProcBin, String signal) throws Exception {
|
||||
int procId = -1;
|
||||
int killAttempts = 0;
|
||||
|
||||
while ((procId = TorServiceUtils.findProcessId(fileProcBin.getCanonicalPath())) != -1) {
|
||||
killAttempts++;
|
||||
//logNotice("Found " + fileProcBin.getName() + " PID=" + procId + " - killing now...");
|
||||
String pidString = String.valueOf(procId);
|
||||
/*
|
||||
* first try as the normal app user to be safe, then if that fails,
|
||||
* try root since the process might be left over from
|
||||
* uninstall/reinstall with different UID.
|
||||
*/
|
||||
|
||||
/**
|
||||
if (Prefs.useRoot() && killAttempts > 2) {
|
||||
shell = Shell.startRootShell();
|
||||
Log.i(OrbotApp.TAG, "using a root shell");
|
||||
} else {
|
||||
shell = Shell.startShell();
|
||||
}*/
|
||||
|
||||
try { Runtime.getRuntime().exec("busybox killall " + signal + " " + fileProcBin.getName());}catch(IOException ioe){}
|
||||
try { Runtime.getRuntime().exec("toolbox kill " + signal + " " + pidString);}catch(IOException ioe){}
|
||||
try { Runtime.getRuntime().exec("busybox kill " + signal + " " + pidString);}catch(IOException ioe){}
|
||||
try { Runtime.getRuntime().exec("kill " + signal + " " + pidString);}catch(IOException ioe){}
|
||||
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
// ignored
|
||||
}
|
||||
|
||||
if (killAttempts > 4)
|
||||
throw new Exception("Cannot kill: " + fileProcBin.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isPortOpen(final String ip, final int port, final int timeout) {
|
||||
try {
|
||||
Socket socket = new Socket();
|
||||
socket.connect(new InetSocketAddress(ip, port), timeout);
|
||||
socket.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
catch(ConnectException ce){
|
||||
//ce.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
catch (Exception ex) {
|
||||
//ex.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,458 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2011 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.torproject.android.service.vpn;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Application;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.net.VpnService;
|
||||
import android.net.VpnService.Builder;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.runjva.sourceforge.jsocks.protocol.ProxyServer;
|
||||
import com.runjva.sourceforge.jsocks.server.ServerAuthenticatorNone;
|
||||
|
||||
import org.torproject.android.service.R;
|
||||
import org.torproject.android.service.TorServiceConstants;
|
||||
import org.torproject.android.service.util.TorServiceUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
import java.net.InetAddress;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
|
||||
public class OrbotVpnManager implements Handler.Callback {
|
||||
private static final String TAG = "OrbotVpnService";
|
||||
|
||||
private PendingIntent mConfigureIntent;
|
||||
|
||||
private Thread mThreadVPN;
|
||||
|
||||
private String mSessionName = "OrbotVPN";
|
||||
private ParcelFileDescriptor mInterface;
|
||||
|
||||
private int mTorSocks = TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT;
|
||||
|
||||
public static int sSocksProxyServerPort = -1;
|
||||
public static String sSocksProxyLocalhost = null;
|
||||
private ProxyServer mSocksProxyServer;
|
||||
|
||||
private final static int VPN_MTU = 1500;
|
||||
|
||||
private final static boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
|
||||
|
||||
//this is the actual DNS server we talk to over UDP or TCP (now using Tor's DNS port)
|
||||
private final static String DEFAULT_ACTUAL_DNS_HOST = "127.0.0.1";
|
||||
private final static int DEFAULT_ACTUAL_DNS_PORT = TorServiceConstants.TOR_DNS_PORT_DEFAULT;
|
||||
|
||||
|
||||
File filePdnsd = null;
|
||||
|
||||
private boolean isRestart = false;
|
||||
|
||||
private VpnService mService;
|
||||
|
||||
|
||||
public OrbotVpnManager (VpnService service)
|
||||
{
|
||||
mService = service;
|
||||
|
||||
File fileBinHome = mService.getDir(TorServiceConstants.DIRECTORY_TOR_BINARY, Application.MODE_PRIVATE);
|
||||
filePdnsd = new File(fileBinHome,TorServiceConstants.PDNSD_ASSET_KEY);
|
||||
|
||||
Tun2Socks.init();
|
||||
|
||||
}
|
||||
|
||||
//public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
public int handleIntent(Builder builder, Intent intent) {
|
||||
|
||||
if (intent != null)
|
||||
{
|
||||
String action = intent.getAction();
|
||||
|
||||
if (action.equals("start"))
|
||||
{
|
||||
|
||||
// Stop the previous session by interrupting the thread.
|
||||
if (mThreadVPN == null || (!mThreadVPN.isAlive()))
|
||||
{
|
||||
Log.d(TAG,"starting OrbotVPNService service!");
|
||||
|
||||
mTorSocks = intent.getIntExtra("torSocks", TorServiceConstants.SOCKS_PROXY_PORT_DEFAULT);
|
||||
|
||||
if (!mIsLollipop)
|
||||
{
|
||||
startSocksBypass();
|
||||
}
|
||||
|
||||
setupTun2Socks(builder);
|
||||
}
|
||||
}
|
||||
else if (action.equals("stop"))
|
||||
{
|
||||
Log.d(TAG,"stop OrbotVPNService service!");
|
||||
|
||||
stopVPN();
|
||||
//if (mHandler != null)
|
||||
//mHandler.postDelayed(new Runnable () { public void run () { stopSelf(); }}, 1000);
|
||||
}
|
||||
else if (action.equals("refresh"))
|
||||
{
|
||||
Log.d(TAG,"refresh OrbotVPNService service!");
|
||||
|
||||
if (!mIsLollipop)
|
||||
startSocksBypass();
|
||||
|
||||
if (!isRestart)
|
||||
setupTun2Socks(builder);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Service.START_STICKY;
|
||||
}
|
||||
|
||||
private void startSocksBypass()
|
||||
{
|
||||
|
||||
new Thread ()
|
||||
{
|
||||
|
||||
public void run ()
|
||||
{
|
||||
|
||||
//generate the proxy port that the
|
||||
if (sSocksProxyServerPort == -1)
|
||||
{
|
||||
try {
|
||||
|
||||
sSocksProxyLocalhost = "127.0.0.1";// InetAddress.getLocalHost().getHostAddress();
|
||||
sSocksProxyServerPort = (int)((Math.random()*1000)+10000);
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG,"Unable to access localhost",e);
|
||||
throw new RuntimeException("Unable to access localhost: " + e);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (mSocksProxyServer != null)
|
||||
{
|
||||
stopSocksBypass ();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
mSocksProxyServer = new ProxyServer(new ServerAuthenticatorNone(null, null));
|
||||
ProxyServer.setVpnService(mService);
|
||||
mSocksProxyServer.start(sSocksProxyServerPort, 5, InetAddress.getLocalHost());
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.e(TAG,"error getting host",e);
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
|
||||
}
|
||||
|
||||
private synchronized void stopSocksBypass ()
|
||||
{
|
||||
|
||||
if (mSocksProxyServer != null){
|
||||
mSocksProxyServer.stop();
|
||||
mSocksProxyServer = null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
// Set the locale to English (or probably any other language that^M
|
||||
// uses Hindu-Arabic (aka Latin) numerals).^M
|
||||
// We have found that VpnService.Builder does something locale-dependent^M
|
||||
// internally that causes errors when the locale uses its own numerals^M
|
||||
// (i.e., Farsi and Arabic).^M
|
||||
Locale.setDefault(new Locale("en"));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
stopVPN();
|
||||
}*/
|
||||
|
||||
private void stopVPN ()
|
||||
{
|
||||
if (mIsLollipop)
|
||||
stopSocksBypass ();
|
||||
|
||||
if (mInterface != null){
|
||||
try
|
||||
{
|
||||
Log.d(TAG,"closing interface, destroying VPN interface");
|
||||
|
||||
mInterface.close();
|
||||
mInterface = null;
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.d(TAG,"error stopping tun2socks",e);
|
||||
}
|
||||
catch (Error e)
|
||||
{
|
||||
Log.d(TAG,"error stopping tun2socks",e);
|
||||
}
|
||||
}
|
||||
|
||||
Tun2Socks.Stop();
|
||||
|
||||
try {
|
||||
TorServiceUtils.killProcess(filePdnsd);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
mThreadVPN = null;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleMessage(Message message) {
|
||||
if (message != null) {
|
||||
Toast.makeText(mService, message.what, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private synchronized void setupTun2Socks(final Builder builder) {
|
||||
|
||||
|
||||
if (mInterface != null) //stop tun2socks now to give it time to clean up
|
||||
{
|
||||
isRestart = true;
|
||||
Tun2Socks.Stop();
|
||||
}
|
||||
|
||||
mThreadVPN = new Thread ()
|
||||
{
|
||||
|
||||
public void run ()
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
if (isRestart)
|
||||
{
|
||||
Log.d(TAG,"is a restart... let's wait for a few seconds");
|
||||
Thread.sleep(3000);
|
||||
}
|
||||
|
||||
//start PDNSD daemon pointing to actual DNS
|
||||
startDNS(DEFAULT_ACTUAL_DNS_HOST,DEFAULT_ACTUAL_DNS_PORT);
|
||||
|
||||
final String vpnName = "OrbotVPN";
|
||||
final String localhost = "127.0.0.1";
|
||||
|
||||
final String virtualGateway = "10.10.10.1";
|
||||
final String virtualIP = "10.10.10.2";
|
||||
final String virtualNetMask = "255.255.255.0";
|
||||
final String dummyDNS = "8.8.8.8"; //this is intercepted by the tun2socks library, but we must put in a valid DNS to start
|
||||
final String defaultRoute = "0.0.0.0";
|
||||
|
||||
final String localSocks = localhost + ':'
|
||||
+ String.valueOf(mTorSocks);
|
||||
|
||||
final String localDNS = virtualGateway + ':' + "8091";//String.valueOf(TorServiceConstants.TOR_DNS_PORT_DEFAULT);
|
||||
final boolean localDnsTransparentProxy = true;
|
||||
|
||||
builder.setMtu(VPN_MTU);
|
||||
builder.addAddress(virtualGateway,32);
|
||||
|
||||
builder.setSession(vpnName);
|
||||
|
||||
builder.addDnsServer(dummyDNS);
|
||||
builder.addRoute(dummyDNS,32);
|
||||
|
||||
//route all traffic through VPN (we might offer country specific exclude lists in the future)
|
||||
builder.addRoute(defaultRoute,0);
|
||||
|
||||
//handle ipv6
|
||||
//builder.addAddress("fdfe:dcba:9876::1", 126);
|
||||
//builder.addRoute("::", 0);
|
||||
|
||||
if (mIsLollipop)
|
||||
doLollipopAppRouting(builder);
|
||||
|
||||
// Create a new interface using the builder and save the parameters.
|
||||
ParcelFileDescriptor newInterface = builder.setSession(mSessionName)
|
||||
.setConfigureIntent(mConfigureIntent)
|
||||
.establish();
|
||||
|
||||
if (mInterface != null)
|
||||
{
|
||||
Log.d(TAG,"Stopping existing VPN interface");
|
||||
mInterface.close();
|
||||
mInterface = null;
|
||||
}
|
||||
|
||||
mInterface = newInterface;
|
||||
|
||||
Tun2Socks.Start(mInterface, VPN_MTU, virtualIP, virtualNetMask, localSocks , localDNS , localDnsTransparentProxy);
|
||||
|
||||
isRestart = false;
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.d(TAG,"tun2Socks has stopped",e);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
mThreadVPN.start();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
private void doLollipopAppRouting (Builder builder) throws NameNotFoundException
|
||||
{
|
||||
|
||||
ArrayList<TorifiedApp> apps = TorifiedApp.getApps(mService, TorServiceUtils.getSharedPrefs(mService.getApplicationContext()));
|
||||
|
||||
boolean perAppEnabled = false;
|
||||
|
||||
for (TorifiedApp app : apps)
|
||||
{
|
||||
if (app.isTorified() && (!app.getPackageName().equals(mService.getPackageName())))
|
||||
{
|
||||
builder.addAllowedApplication(app.getPackageName());
|
||||
perAppEnabled = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!perAppEnabled)
|
||||
builder.addDisallowedApplication(mService.getPackageName());
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void onRevoke() {
|
||||
|
||||
Log.w(TAG,"VPNService REVOKED!");
|
||||
|
||||
if (!isRestart)
|
||||
{
|
||||
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(mService.getApplicationContext());
|
||||
prefs.edit().putBoolean("pref_vpn", false).commit();
|
||||
stopVPN();
|
||||
}
|
||||
|
||||
isRestart = false;
|
||||
|
||||
//super.onRevoke();
|
||||
|
||||
}
|
||||
|
||||
private void startDNS (String dns, int port) throws IOException, TimeoutException
|
||||
{
|
||||
makePdnsdConf(mService, dns, port,filePdnsd.getParentFile() );
|
||||
|
||||
ArrayList<String> customEnv = new ArrayList<String>();
|
||||
String baseDirectory = filePdnsd.getParent();
|
||||
|
||||
String[] cmdString = {filePdnsd.getCanonicalPath(),"-c",baseDirectory + "/pdnsd.conf"};
|
||||
ProcessBuilder pb = new ProcessBuilder(cmdString);
|
||||
pb.redirectErrorStream(true);
|
||||
Process proc = pb.start();
|
||||
try { proc.waitFor();} catch (Exception e){}
|
||||
|
||||
Log.i(TAG,"PDNSD: " + proc.exitValue());
|
||||
|
||||
if (proc.exitValue() != 0)
|
||||
{
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
|
||||
|
||||
String line = null;
|
||||
while ((line = br.readLine ()) != null) {
|
||||
Log.d(TAG,"pdnsd: " + line);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void makePdnsdConf(Context context, String dns, int port, File fileDir) throws FileNotFoundException {
|
||||
String conf = String.format(context.getString(R.string.pdnsd_conf), dns, port);
|
||||
|
||||
File f = new File(fileDir,"pdnsd.conf");
|
||||
|
||||
if (f.exists()) {
|
||||
f.delete();
|
||||
}
|
||||
|
||||
FileOutputStream fos = new FileOutputStream(f, false);
|
||||
PrintStream ps = new PrintStream(fos);
|
||||
ps.print(conf);
|
||||
ps.close();
|
||||
|
||||
File cache = new File(fileDir,"pdnsd.cache");
|
||||
|
||||
if (!cache.exists()) {
|
||||
try {
|
||||
cache.createNewFile();
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
package org.torproject.android.service.vpn;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.net.VpnService;
|
||||
import android.os.Build;
|
||||
|
||||
/**
|
||||
* Created by n8fr8 on 9/26/16.
|
||||
*/
|
||||
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
|
||||
public class TorVpnService extends VpnService {
|
||||
|
||||
|
||||
OrbotVpnManager mVpnManager;
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
mVpnManager = new OrbotVpnManager(this);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Service#onStart(android.content.Intent, int)
|
||||
*/
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
|
||||
mVpnManager.handleIntent(new Builder(),intent);
|
||||
|
||||
return Service.START_STICKY;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,261 +0,0 @@
|
|||
package org.torproject.android.service.vpn;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
import org.torproject.android.service.OrbotConstants;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
public class TorifiedApp implements Comparable {
|
||||
|
||||
private boolean enabled;
|
||||
private int uid;
|
||||
private String username;
|
||||
private String procname;
|
||||
private String name;
|
||||
private Drawable icon;
|
||||
private String packageName;
|
||||
|
||||
private boolean torified = false;
|
||||
private boolean usesInternet = false;
|
||||
|
||||
public boolean usesInternet() {
|
||||
return usesInternet;
|
||||
}
|
||||
public void setUsesInternet(boolean usesInternet) {
|
||||
this.usesInternet = usesInternet;
|
||||
}
|
||||
/**
|
||||
* @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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Object another) {
|
||||
|
||||
return this.toString().compareTo(another.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString ()
|
||||
{
|
||||
return getName();
|
||||
}
|
||||
|
||||
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
}
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
public static ArrayList<TorifiedApp> getApps (Context context, SharedPreferences prefs)
|
||||
{
|
||||
|
||||
String tordAppString = prefs.getString(OrbotConstants.PREFS_KEY_TORIFIED, "");
|
||||
String[] tordApps;
|
||||
|
||||
StringTokenizer st = new StringTokenizer(tordAppString,"|");
|
||||
tordApps = new String[st.countTokens()];
|
||||
int tordIdx = 0;
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
tordApps[tordIdx++] = st.nextToken();
|
||||
}
|
||||
|
||||
Arrays.sort(tordApps);
|
||||
|
||||
//else load the apps up
|
||||
PackageManager pMgr = context.getPackageManager();
|
||||
|
||||
List<ApplicationInfo> lAppInfo = pMgr.getInstalledApplications(0);
|
||||
|
||||
Iterator<ApplicationInfo> itAppInfo = lAppInfo.iterator();
|
||||
|
||||
ArrayList<TorifiedApp> apps = new ArrayList<TorifiedApp>();
|
||||
|
||||
ApplicationInfo aInfo = null;
|
||||
|
||||
int appIdx = 0;
|
||||
TorifiedApp app = null;
|
||||
|
||||
while (itAppInfo.hasNext())
|
||||
{
|
||||
aInfo = itAppInfo.next();
|
||||
|
||||
app = new TorifiedApp();
|
||||
|
||||
try {
|
||||
PackageInfo pInfo = pMgr.getPackageInfo(aInfo.packageName, PackageManager.GET_PERMISSIONS);
|
||||
|
||||
if (pInfo != null && pInfo.requestedPermissions != null)
|
||||
{
|
||||
for (String permInfo:pInfo.requestedPermissions)
|
||||
{
|
||||
if (permInfo.equals("android.permission.INTERNET"))
|
||||
{
|
||||
app.setUsesInternet(true);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if ((aInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
|
||||
{
|
||||
//System app
|
||||
app.setUsesInternet(true);
|
||||
}
|
||||
|
||||
|
||||
if (!app.usesInternet())
|
||||
continue;
|
||||
else
|
||||
{
|
||||
apps.add(app);
|
||||
}
|
||||
|
||||
|
||||
app.setEnabled(aInfo.enabled);
|
||||
app.setUid(aInfo.uid);
|
||||
app.setUsername(pMgr.getNameForUid(app.getUid()));
|
||||
app.setProcname(aInfo.processName);
|
||||
app.setPackageName(aInfo.packageName);
|
||||
|
||||
try
|
||||
{
|
||||
app.setName(pMgr.getApplicationLabel(aInfo).toString());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
app.setName(aInfo.packageName);
|
||||
}
|
||||
|
||||
|
||||
//app.setIcon(pMgr.getApplicationIcon(aInfo));
|
||||
|
||||
// check if this application is allowed
|
||||
if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) {
|
||||
app.setTorified(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
app.setTorified(false);
|
||||
}
|
||||
|
||||
appIdx++;
|
||||
}
|
||||
|
||||
Collections.sort(apps);
|
||||
|
||||
return apps;
|
||||
}
|
||||
}
|
|
@ -1,125 +0,0 @@
|
|||
package org.torproject.android.service.vpn;
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013, Psiphon Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.os.Build;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.util.Log;
|
||||
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.Socket;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
|
||||
public class Tun2Socks
|
||||
{
|
||||
|
||||
static{
|
||||
System.loadLibrary("tun2socks");
|
||||
}
|
||||
|
||||
public static interface IProtectSocket
|
||||
{
|
||||
boolean doVpnProtect(Socket socket);
|
||||
boolean doVpnProtect(DatagramSocket socket);
|
||||
};
|
||||
|
||||
private static final String TAG = Tun2Socks.class.getSimpleName();
|
||||
private static final boolean LOGD = true;
|
||||
|
||||
private static Thread mThread;
|
||||
private static ParcelFileDescriptor mVpnInterfaceFileDescriptor;
|
||||
private static int mVpnInterfaceMTU;
|
||||
private static String mVpnIpAddress;
|
||||
private static String mVpnNetMask;
|
||||
private static String mSocksServerAddress;
|
||||
private static String mUdpgwServerAddress;
|
||||
private static boolean mUdpgwTransparentDNS;
|
||||
|
||||
// Note: this class isn't a singleton, but you can't run more
|
||||
// than one instance due to the use of global state (the lwip
|
||||
// module, etc.) in the native code.
|
||||
|
||||
public static void init () {}
|
||||
|
||||
public static void Start(
|
||||
ParcelFileDescriptor vpnInterfaceFileDescriptor,
|
||||
int vpnInterfaceMTU,
|
||||
String vpnIpAddress,
|
||||
String vpnNetMask,
|
||||
String socksServerAddress,
|
||||
String udpgwServerAddress,
|
||||
boolean udpgwTransparentDNS)
|
||||
{
|
||||
|
||||
mVpnInterfaceFileDescriptor = vpnInterfaceFileDescriptor;
|
||||
mVpnInterfaceMTU = vpnInterfaceMTU;
|
||||
mVpnIpAddress = vpnIpAddress;
|
||||
mVpnNetMask = vpnNetMask;
|
||||
mSocksServerAddress = socksServerAddress;
|
||||
mUdpgwServerAddress = udpgwServerAddress;
|
||||
mUdpgwTransparentDNS = udpgwTransparentDNS;
|
||||
|
||||
if (mVpnInterfaceFileDescriptor != null)
|
||||
runTun2Socks(
|
||||
mVpnInterfaceFileDescriptor.detachFd(),
|
||||
mVpnInterfaceMTU,
|
||||
mVpnIpAddress,
|
||||
mVpnNetMask,
|
||||
mSocksServerAddress,
|
||||
mUdpgwServerAddress,
|
||||
mUdpgwTransparentDNS ? 1 : 0);
|
||||
}
|
||||
|
||||
public static void Stop()
|
||||
{
|
||||
|
||||
terminateTun2Socks();
|
||||
|
||||
}
|
||||
|
||||
public static void logTun2Socks(
|
||||
String level,
|
||||
String channel,
|
||||
String msg)
|
||||
{
|
||||
String logMsg = level + "(" + channel + "): " + msg;
|
||||
if (0 == level.compareTo("ERROR"))
|
||||
{
|
||||
Log.e(TAG, logMsg);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LOGD) Log.d(TAG, logMsg);
|
||||
}
|
||||
}
|
||||
|
||||
private native static int runTun2Socks(
|
||||
int vpnInterfaceFileDescriptor,
|
||||
int vpnInterfaceMTU,
|
||||
String vpnIpAddress,
|
||||
String vpnNetMask,
|
||||
String socksServerAddress,
|
||||
String udpgwServerAddress,
|
||||
int udpgwTransparentDNS);
|
||||
|
||||
private native static void terminateTun2Socks();
|
||||
|
||||
}
|
Before Width: | Height: | Size: 480 B |
Before Width: | Height: | Size: 802 B |
Before Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 967 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 616 B |
Before Width: | Height: | Size: 713 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 553 B |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 852 B |
Before Width: | Height: | Size: 990 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 294 B |
Before Width: | Height: | Size: 390 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 342 B |
Before Width: | Height: | Size: 358 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 319 B |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 647 B |
Before Width: | Height: | Size: 606 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 357 B |
Before Width: | Height: | Size: 517 B |
Before Width: | Height: | Size: 607 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 458 B |
Before Width: | Height: | Size: 475 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 364 B |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 883 B |
Before Width: | Height: | Size: 535 B |
Before Width: | Height: | Size: 600 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 618 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 747 B |
Before Width: | Height: | Size: 970 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 716 B |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.0 KiB |
|
@ -1,126 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2012 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:internal="http://schemas.android.com/apk/prv/res/android"
|
||||
android:id="@+id/status_bar_latest_event_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
>
|
||||
<ImageView android:id="@+id/icon"
|
||||
android:layout_width="@dimen/notification_large_icon_width"
|
||||
android:layout_height="@dimen/notification_large_icon_height"
|
||||
android:scaleType="center"
|
||||
/>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="fill_vertical"
|
||||
android:layout_marginStart="@dimen/notification_large_icon_width"
|
||||
android:layout_marginLeft="@dimen/notification_large_icon_width"
|
||||
|
||||
android:minHeight="@dimen/notification_large_icon_height"
|
||||
android:orientation="vertical"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:paddingTop="2dp"
|
||||
android:paddingBottom="2dp"
|
||||
android:gravity="top"
|
||||
>
|
||||
<LinearLayout
|
||||
android:id="@+id/line1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="6dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:orientation="horizontal"
|
||||
>
|
||||
<TextView android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="marquee"
|
||||
android:fadingEdge="horizontal"
|
||||
android:layout_weight="1"
|
||||
android:textStyle="bold"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:id="@+id/line3"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
>
|
||||
<TextView android:id="@+id/text"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="marquee"
|
||||
android:fadingEdge="horizontal"
|
||||
/>
|
||||
<TextView android:id="@+id/info"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="0"
|
||||
android:singleLine="true"
|
||||
android:gravity="center"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingLeft="8dp"
|
||||
/>
|
||||
<ImageView android:id="@+id/right_icon"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="0"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:scaleType="centerInside"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
<!--
|
||||
<ImageButton
|
||||
android:id="@+id/_tor_notificationBT"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:src="@drawable/nav_refresh" />
|
||||
-->
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:orientation="horizontal"
|
||||
android:background="#999999"
|
||||
android:layout_marginTop="3dp"
|
||||
android:layout_marginBottom="3dp"
|
||||
|
||||
/>
|
||||
<TextView android:id="@+id/text2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="-2dp"
|
||||
android:layout_marginBottom="-2dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:fadingEdge="horizontal"
|
||||
/>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
|
@ -1,25 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2012 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<Chronometer android:id="@+id/chronometer" xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="0"
|
||||
android:singleLine="true"
|
||||
android:gravity="center"
|
||||
android:paddingStart="8dp"
|
||||
/>
|
|
@ -1,25 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2012 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<DateTimeView android:id="@+id/time" xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="0"
|
||||
android:singleLine="true"
|
||||
android:gravity="center"
|
||||
android:paddingStart="8dp"
|
||||
/>
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--Welcome Wizard strings (DJH)-->
|
||||
<!--END Welcome Wizard strings (DJH)-->
|
||||
<!--New Wizard Strings-->
|
||||
<!--Title Screen-->
|
||||
<!--Warning screen-->
|
||||
<!--Permissions screen-->
|
||||
<!--TipsAndTricks screen-->
|
||||
<!--Transparent Proxy screen-->
|
||||
<string name="default_bridges"></string>
|
||||
</resources>
|
|
@ -1,262 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">اوربوت</string>
|
||||
<string name="app_description">اوربوت هو تطبيق الوكيل-البروكسي الحر الذي يمكّن تطبيقات أخرى لاستخدام الإنترنت بأمان أكثر . يُستخدم اوربوت تور لتشفير تحركات مرورك على الإنترنت ، ثم يخفيك ويجعلك وهمي من خلال سلسلة من أجهزة الكمبيوتر في جميع أنحاء العالم . تور هو تطبيق حر وشبكة مفتوحة والتي تساعدك على حماية نفسك من مراقبة الشبكات التي تهدد الحرية الشخصية والخصوصية ، والأنشطة التجارية السرية والعلاقات ، وأمن الدولة والحكومات القمعيّة والتي تستخدم مايعرف باسم تحليل حركة مرور البيانات .</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_starting">جاري تشغيل تور...</string>
|
||||
<string name="tor_process_complete">كامل.</string>
|
||||
<string name="tor_process_waiting">انتظار.</string>
|
||||
<string name="not_anonymous_yet">تحذير: حركة مرورك ليست خفية حتي الآن! من فضلك قم بتكوين التطبيقات الخاصة بك لإستخدام بروكسي HTTP 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_promo_apps">حمل التطبيق ...</string>
|
||||
<string name="main_layout_download">تحميل</string>
|
||||
<string name="main_layout_upload">رفع</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="menu_scan">فحص QR الجسر</string>
|
||||
<string name="menu_share_bridge">مشاركة QR الجسر</string>
|
||||
<string name="press_to_start">- اضغط لفترة طويلة للبدء -</string>
|
||||
<string name="pref_trans_proxy_group">بروكسي ضمني (يتطلب اذن حساب رووت)</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">تراجع منفذ البروكسي</string>
|
||||
<string name="pref_transparent_port_fallback_summary">تحذير: تتحايل علي المنافذ الشائعة (80, 443, إلى آخره) *استخدم فقط* إذا كان وضع \'كل\' أو \'التطبيق\' لا يعمل.</string>
|
||||
<string name="pref_transparent_port_title">قائمة المنافذ</string>
|
||||
<string name="pref_transparent_port_summary">قائمة بجميع المنافذ إلي البروكسي. *استخدم فقط* إذا كان وضع \'كل\' أو \'التطبيق\' لا يعمل.</string>
|
||||
<string name="pref_transparent_port_dialog">ادخل المناقذ للبروكسي</string>
|
||||
<string name="pref_has_root">اطلب إذن رووت</string>
|
||||
<string name="pref_has_root_summary">اطلب إذن رووت لتفعيل البروكسي الضمني</string>
|
||||
<string name="status_install_success">تم تثبيت تور بنجاح!</string>
|
||||
<string name="status_install_fail">غير قادر على تثبيت ملفات تور. يرجى مراجعة السجل وإعلامنا على البريد الإلكتروني tor-assistants@torproject.org</string>
|
||||
<string name="title_error">خطأ في التطبيق</string>
|
||||
<string name="wizard_title">اوربوت</string>
|
||||
<string name="wizard_btn_tell_me_more">عن اوربوت</string>
|
||||
<string name="btn_next">التالي</string>
|
||||
<string name="btn_back">رجوع</string>
|
||||
<string name="btn_finish">إنهاء</string>
|
||||
<string name="btn_okay">موافق</string>
|
||||
<string name="btn_cancel">إلغاء</string>
|
||||
<!--Welcome Wizard strings (DJH)-->
|
||||
<string name="wizard_details">بعض التفاصيل عن اوربوت</string>
|
||||
<string name="wizard_details_msg">اوربوت تطبيق مفتوح المصدر يحتويه تور، \"ليب افنت\" و \"بوليبو\".
|
||||
وهو يوفر الوكيل-البروكسي المحلي HTTP (8118) ووكيل SOCKS (9050) في شبكة تور.
|
||||
اوربوت أيضا قادر على الوصول لجذور الجهاز ، لإرسال كل تحركات الإنترنت من خلاله.</string>
|
||||
<string name="wizard_permissions_root">تم منح الإذن</string>
|
||||
<string name="wizard_permissions_stock">أذونات اوربوت</string>
|
||||
<string name="wizard_premissions_msg_root">ممتاز! لقد وجدنا بأنه لديك صلاحية حساب رووت لتمكين اوربوت. سوف نستخدم هذه السلطة بحكمة.</string>
|
||||
<string name="wizard_permissions_msg_stock">رغم أنه ليس ضروريا، يمكن ان يصبح أوربوت أداة قوية إذا كان لدى جهازك صلاحية حساب رووت. استخدم الزر بالأسفل لمنح اوربوت قوة أكبر!</string>
|
||||
<string name="wizard_permissions_no_root">إذا لم يكن لديك صلاحية حساب رووت أو ليست لديك أدنى فكرة عما نتحدث عنه، تأكد فقط من استخدام تطبيقات تعمل مع اوربوت.</string>
|
||||
<string name="wizard_permissions_consent">أفهم ذلك وأود أن أستمر بدون صلاحيات حساب رووت</string>
|
||||
<string name="wizard_permission_enable_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">التطبيقات التالية تم تطويرها حتي تعمل مع اوربوت. اضغط علي ما تريد تثبيتة علي جهازك الأن, أو يمكنك ان تجدهم لاحقاً علي جوجل بلاي, أو علي موقعنا GuardianProject.info أو من خلال F-Droid.org.</string>
|
||||
<string name="wizard_tips_otrchat">الدردشة الآمنة - تأمين الرسائل الفورية لمستخدمي الاندرويد</string>
|
||||
<string name="wizard_tips_proxy">إعدادات البروكسي - تعلم كيفية تكوين التطبيقات لتعمل مع اوربوت</string>
|
||||
<string name="wizard_tips_duckgo">تطبيق محرك البحث DuckDuckGo</string>
|
||||
<string name="wizard_tips_twitter">اضبط البروكسي الخاص بتويتر إلي مستضيف \"localhost\" و المنفذ إلي 8118</string>
|
||||
<string name="wizard_tips_story_maker">صانع القصة - اصنع قصة واتركها لأمان تور !</string>
|
||||
<string name="twitter_setup_url">https://guardianproject.info/2012/05/02/orbot-your-twitter/</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 إذا أمكن \ N \ N \ N \ N يمكنك معرفة المزيد حول إنشاء الوكلاء على الروبوت من خلال التعليمات على:
|
||||
HTTP: / /tinyurl.com/proxyandroid\n</string>
|
||||
<string name="wizard_final">اوربوت جاهز للاستخدام!</string>
|
||||
<string name="wizard_final_msg">الملايين من الناس في جميع أنحاء العالم تستخدم تور لمجموعة واسعة من الأسباب . الصحفيين والمدونين , المدافعين عن حقوق الإنسان ، وضباط تنفيذ القانون ، والجنود ، والشركات والمواطنين من الأنظمة القمعية ، وايضاً المواطنين العاديين ... والآن هل أنت جاهز ، هيا بنا !</string>
|
||||
<string name="wizard_exit_at_first_screen_toast">يرجى تكوين اوربوت واعداده لتستطيع البدء بإستخدامه !</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">عام</string>
|
||||
<string name="pref_start_boot_title">شغل اوربوت عند فتح الجهاز</string>
|
||||
<string name="pref_start_boot_summary">فعل اوربوت و اتصل بتور تلقائياً عندما يبدء جهاز الأندرويد الخاص بك بالعمل</string>
|
||||
<!--New Wizard Strings-->
|
||||
<!--Title Screen-->
|
||||
<string name="wizard_title_msg">اوربت يجعل تور ممكناً على نظام الأندرويد. يساعدك تور في الدفاع ضد عملية ترشيح المحتويات, تحليل مسارات المرور, ومراقبة الشبكة والتي تهدد خصوصيتك, المعلومات السرية والعلاقات الشخصية. هذه الأداة ستساعدك من تهيئة اوربت مع تور على جهازك</string>
|
||||
<!--Warning screen-->
|
||||
<string name="wizard_warning_title">تحذير</string>
|
||||
<string name="wizard_warning_msg">لن يقوم اوربت بأخفاء هوية مسارك بشكل اوتوماتيكي او آلي بمجرد تنصيبه. بل يجب عليك ان تقوم بتهيئته مع جهازك بالأضافة الى تهيئة تطبيقات اخرى لتستطيع استخدام تور بنجاح.</string>
|
||||
<!--Permissions screen-->
|
||||
<string name="wizard_permissions_title">الصلاحيات</string>
|
||||
<string name="wizard_permissions_root_msg1">يمكنك اعطاء اوربوت صلاحيات حساب رووت لتشغيل المميزات المتقدمة مثل البروكسي الضمني.</string>
|
||||
<string name="wizard_permissions_root_msg2">إذا كنت لا تريد أن تفعل هذا, الرجاء إستخدام برامج معدة للعمل مع اوربوت</string>
|
||||
<!--TipsAndTricks screen-->
|
||||
<string name="wizard_tips_title"> برامج معدة للعمل مع اوربوت</string>
|
||||
<string name="wizard_tips_gibberbot">جات سكيور: هو تطبيق للدردشة بشكل آمن مع تشفير عالي جداً</string>
|
||||
<string name="wizard_tips_orweb">اورفوكس: متصفح ذو خصوصية متقدمة يعمل ظمن او من خلال تور</string>
|
||||
<string name="wizard_tips_play">يمكنك الحصول علي جميع تطبيقات مشروع الجاردين على جوجل بلاي</string>
|
||||
<string name="wizard_tips_fdroid">اكتشف كل تطبيقات مشروع الجارديان على اف-درويد</string>
|
||||
<string name="wizard_tips_fdroid_org">اكتشف كل تطبيقات مشروع الجارديان على https://f-droid.org </string>
|
||||
<!--Transparent Proxy screen-->
|
||||
<string name="wizard_transproxy_title">بروكسي ضمني</string>
|
||||
<string name="wizard_transproxy_msg">هذه ستسمح للبرامج بالاتصال بشبكة تور تلقائياً دون اعداد مسبق.</string>
|
||||
<string name="wizard_transproxy_hint">(اختر هذا المربع إذا كنت لا تعلم عما نتحدث)</string>
|
||||
<string name="wizard_transproxy_none">لا شيء</string>
|
||||
<string name="pref_transparent_tethering_title">الربط بتور</string>
|
||||
<string name="pref_transparent_tethering_summary">اسمح بالبروكسي الضمني للواي فاي و اجهزة اليو اس بي (تحتاج لإعادة تشغيل الجهاز)</string>
|
||||
<string name="button_grant_superuser">اطلب صلاحيات حساب رووت</string>
|
||||
<string name="pref_select_apps">حدد البرامج</string>
|
||||
<string name="pref_select_apps_summary">اختر البرامح التي تريد تمريرها إلي شبكة تور</string>
|
||||
<string name="pref_node_configuration">تكوين نقطة الاتصال</string>
|
||||
<string name="pref_node_configuration_summary">هذه الإعدادات متقدمة و قد تقلل من حماية هويتك</string>
|
||||
<string name="pref_entrance_node">نقاط الدخول</string>
|
||||
<string name="pref_entrance_node_summary">بصمات، اسماء مستعارة، البلدان و العناوين لأول نقطة اتصال</string>
|
||||
<string name="pref_entrance_node_dialog">أدخل نقاط الدخول</string>
|
||||
<string name="pref_allow_background_starts_title">إسمح للخلفية بألبدأ</string>
|
||||
<string name="pref_allow_background_starts_summary">إسمح لأي تطبيق بأن يُخبِر اوربت بأن يفعل تور مع الخدمات المرتبطة به</string>
|
||||
<string name="button_proxy_all">اُخوِّل الكل</string>
|
||||
<string name="button_proxy_none">بدون تخويل</string>
|
||||
<string name="button_invert_selection">اعكس المُحدد</string>
|
||||
<string name="pref_proxy_title">بروكسي الشبكة الصادرة (اختياري)</string>
|
||||
<string name="pref_proxy_type_title">نوع البروكسي الصادر</string>
|
||||
<string name="pref_proxy_type_summary">البروتوكول المستخدم لخادم البروكسي: HTTP, HTTPS, Socks4, Socks5</string>
|
||||
<string name="pref_proxy_type_dialog">أدخل نوع البروكسي</string>
|
||||
<string name="pref_proxy_host_title">عنوان البروكسي الصادر</string>
|
||||
<string name="pref_proxy_host_summary">اسم مضيف خادم البروكسي</string>
|
||||
<string name="pref_proxy_host_dialog">أدخل مضيف البروكسي</string>
|
||||
<string name="pref_proxy_port_title">منفذ البروكسي الصادر</string>
|
||||
<string name="pref_proxy_port_summary">منفذ خادم البروكسي</string>
|
||||
<string name="pref_proxy_port_dialog">أدخل منفذ البروكسي</string>
|
||||
<string name="pref_proxy_username_title">اسم مستخدم البروكسي الصادر</string>
|
||||
<string name="pref_proxy_username_summary">اسم مستخدم البروكسي (اختياري)</string>
|
||||
<string name="pref_proxy_username_dialog">ادخل اسم مستخدم البروكسي</string>
|
||||
<string name="pref_proxy_password_title">كلمة مرور بروكسي الشبكة الصادرة</string>
|
||||
<string name="pref_proxy_password_summary">كلمة مرور البروكسي (اختياري)</string>
|
||||
<string name="pref_proxy_password_dialog">ادخل كلمة مرور البروكسي</string>
|
||||
<string name="status">الحالة</string>
|
||||
<string name="setting_up_full_transparent_proxying_">يتم إعداد بروكسي ضمني كامل...</string>
|
||||
<string name="setting_up_app_based_transparent_proxying_">يتم إعداد البروكسي الضمني حسب البرامج...</string>
|
||||
<string name="transparent_proxying_enabled">البروكسي الضمني مُفعل</string>
|
||||
<string name="transproxy_enabled_for_tethering_">البروكسي الضمني جاهز للربط!</string>
|
||||
<string name="warning_error_starting_transparent_proxying_">تحذير: حصل خطأ بتشغيل البروكسي الضمني!</string>
|
||||
<string name="transproxy_rules_cleared">تم مسح قواعد البروكسي الضمني</string>
|
||||
<string name="couldn_t_start_tor_process_">لقد تعذر بدء تشغيل تور:</string>
|
||||
<string name="privoxy_is_running_on_port_">بوليبو يعمل على المحمول </string>
|
||||
<string name="setting_up_port_based_transparent_proxying_">يتم إعداد البروكسي الضمني حسب المنفذ...</string>
|
||||
<string name="bridge_error">خطأ بالجسر</string>
|
||||
<string name="bridge_requires_ip">حتي تستطيع إستخدم ميزة الجسور، يجب عليك ادخال عنوان انترنت لجسر واحد علي الأقل.</string>
|
||||
<string name="send_email_for_bridges">أرسل بريد إلكتروني إلى bridges@torproject.org مع عبارة \"get bridges\" بداخل الرسالة من حساب بريد gmail.</string>
|
||||
<string name="error">خطأ</string>
|
||||
<string name="your_reachableaddresses_settings_caused_an_exception_">إعدادات العنوان القابل للاتصال لديك تسببت بخطأ!</string>
|
||||
<string name="your_relay_settings_caused_an_exception_">إعدادات المرحلات لديك تسببت بخطأ!</string>
|
||||
<string name="exit_nodes">نقاط الخروج</string>
|
||||
<string name="fingerprints_nicks_countries_and_addresses_for_the_last_hop">البصمات، الاسماء المستعارة، البلدان و العناوين لآخر نقطة اتصال</string>
|
||||
<string name="enter_exit_nodes">أدخل نقاط الخروج</string>
|
||||
<string name="exclude_nodes">استثني النقاط</string>
|
||||
<string name="fingerprints_nicks_countries_and_addresses_to_exclude">بصمات، الأسماء المستعارة، البلدان و العناوين ليتم استثنائها</string>
|
||||
<string name="enter_exclude_nodes">أدخل النقاط المستثناه</string>
|
||||
<string name="strict_nodes">النقاط المشددة</string>
|
||||
<string name="use_only_these_specified_nodes">استخدم فقط تلك النقاط المحددة</string>
|
||||
<string name="bridges">الجسور</string>
|
||||
<string name="use_bridges">استخدم الجسور</string>
|
||||
<string name="bridges_obfuscated">الجسور الغامضة</string>
|
||||
<string name="enable_alternate_entrance_nodes_into_the_tor_network">اسمح باستخدام نقاط دخول بديلة إلي شبكة تور</string>
|
||||
<string name="enable_if_configured_bridges_are_obfuscated_bridges">فعل هذا الخيار إذا كانت الجسور المحددة جسور غامضة</string>
|
||||
<string name="ip_address_and_port_of_bridges">عنوان الانترنت و المنفذ للجسور</string>
|
||||
<string name="enter_bridge_addresses">أدخل عناوين الجسور</string>
|
||||
<string name="relays">المرحلات</string>
|
||||
<string name="relaying">يرحل</string>
|
||||
<string name="enable_your_device_to_be_a_non_exit_relay">اسمح لجهازك ليكون مرحل غير نهائي</string>
|
||||
<string name="relay_port">منفذ المرحل</string>
|
||||
<string name="listening_port_for_your_tor_relay">المنفذ المصغي لمُرحل تور الخاص بك</string>
|
||||
<string name="enter_or_port">أدخل منفذ OR</string>
|
||||
<string name="relay_nickname">الاسم المستعار للمُرحل</string>
|
||||
<string name="the_nickname_for_your_tor_relay">الاسم المستعار لمُرحل تور الخاص بك</string>
|
||||
<string name="enter_a_custom_relay_nickname">أدخل اسم مستعار للمُرحل</string>
|
||||
<string name="reachable_addresses">العناوين التي يمكن الوصول إليها</string>
|
||||
<string name="run_as_a_client_behind_a_firewall_with_restrictive_policies">العمل كخدمة من وراء جدار ناري بسياسات تقيدية</string>
|
||||
<string name="reachable_ports">المنافذ التي يمكن الوصول إليها</string>
|
||||
<string name="ports_reachable_behind_a_restrictive_firewall">منافذ مفتوحة عبر جدار ناري تقيدي</string>
|
||||
<string name="enter_ports">أدخل المنافذ</string>
|
||||
<string name="enable_hidden_services">استضافة الخدمة المخفية</string>
|
||||
<string name="run_servers_accessible_via_the_tor_network">السماح للخادم الذي علي جهازك بأمكانية الوصول إليه من خلال شبكة تور</string>
|
||||
<string name="enter_localhost_ports_for_hidden_services">أدخل المنافذ المحلية للخدمات المخفية</string>
|
||||
<string name="hidden_service_ports">منافذ الخدمات المخفية</string>
|
||||
<string name="the_addressable_name_for_your_hidden_service_generated_automatically_">اسم العنوان لخدمتك المخفية (يتم انشائه تلقائياً)</string>
|
||||
<string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">شغل سجل الـdebug ( للمراجعة يجب استخدام adb أو LogCat)</string>
|
||||
<string name="project_home">الموقع الرسمي للمشروع (المشاريع):</string>
|
||||
<string name="project_urls">https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/orbot/</string>
|
||||
<string name="the_tor_license">رخصة استخدام تور</string>
|
||||
<string name="https_torproject_org">https://torproject.org</string>
|
||||
<string name="third_party_software">برامج من الطرف الثالث:</string>
|
||||
<string name="tor_version">تور: https://www.torproject.org</string>
|
||||
<string name="libevent_version">لب إيفينت النسخة http://www.monkey.org/~provos/libevent/ :v2.0.21</string>
|
||||
<string name="polipo_version">بوليبو النسخة 1.1.9 : https://github.com/jech/polipo</string>
|
||||
<string name="iptables_version">آي بي تايبلز النسخة 1.4.21: http://www.netfilter.org</string>
|
||||
<string name="openssl_version">اوبن اس اس ال النسخة: http://www.openssl.org 1.0.1q</string>
|
||||
<string name="hidden_service_request">هناك برنامج يحاول فتح منفذ لخادم مخفي %S إلي شبكة تور. هذا السلوك آمن إذا كنت تثق بهذا البرنامج.</string>
|
||||
<string name="found_existing_tor_process">عُثر علي عملية تور سابقة تعمل...</string>
|
||||
<string name="something_bad_happened">حصل خطأ ما. افحص السجل</string>
|
||||
<string name="hidden_service_on">الخدمات المخفية التي تعمل حالياً:</string>
|
||||
<string name="unable_to_read_hidden_service_name">غير قادر على قراءة اسم الخدمة المخفية</string>
|
||||
<string name="unable_to_start_tor">غير قادر على بدء تور:</string>
|
||||
<string name="unable_to_reset_tor">أعِد تشغيل جهازك, غير قادر على اعادة تشغيل تور</string>
|
||||
<string name="pref_use_sys_iptables_title">استخدم الـiptables التلقائية</string>
|
||||
<string name="pref_use_sys_iptables_summary">استخدم مكونات الـiptables الموجودة ضمناً بالجهاز بدل النسخة المرفقة مع اوربوت</string>
|
||||
<string name="error_installing_binares">غير قادرة على تثبيت أو تحديث تور</string>
|
||||
<string name="pref_use_persistent_notifications">دائما ضع الأيقونة في شريط الأدوات عندما يكون اوربوت متصلاً</string>
|
||||
<string name="pref_use_persistent_notifications_title">تنبيهات دائمة</string>
|
||||
<string name="pref_use_expanded_notifications">قم بأظهار التنبيه بشكل موسع بأستخدام تور. أخرج من البلد ورقم الآي بي رقم العنوان على الشبكة</string>
|
||||
<string name="pref_use_expanded_notifications_title">تنبيه موسّع</string>
|
||||
<string name="notification_using_bridges">تم تفعيل الجسور!</string>
|
||||
<string name="default_bridges"></string>
|
||||
<string name="set_locale_title">اللغة</string>
|
||||
<string name="set_locale_summary">اختار الإعدادات المحلية و اللغة لاوربوت</string>
|
||||
<string name="wizard_locale_title">اختار اللغة</string>
|
||||
<string name="wizard_locale_msg">إما ان تترك اللغة الافتراضية او إما ان تغير اللغة</string>
|
||||
<string name="powered_by">مدعومة من قبل تور</string>
|
||||
<string name="btn_save_settings">حفظ الإعدادات</string>
|
||||
<string name="no_internet_connection_tor">لا يوجد ارتباط بألانترنيت: تور في وضع الوقف المؤقت</string>
|
||||
<string name="bandwidth_">عرض النطاق</string>
|
||||
<string name="down">اسفل</string>
|
||||
<string name="up">أعلى</string>
|
||||
<string name="pref_disable_network_title">لاتوجد شبكة نوم-آلي</string>
|
||||
<string name="pref_disable_network_summary">ضع تور في وضع النوم عند عدم وجود الأنترنيت</string>
|
||||
<string name="newnym">لقد تحولت الى هوية تور جديدة</string>
|
||||
<string name="menu_verify_browser">متصفح</string>
|
||||
<string name="menu_use_chatsecure">استخدم جات سكيور </string>
|
||||
<string name="permission_manage_tor_label">أدارة تور</string>
|
||||
<string name="permission_manage_tor_description">قم بتمكين هذا التطبيق من التحكم بخدمات تور</string>
|
||||
<string name="it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_">لا يبدو بأن لديك اورفوكس منصباً. هل تريد مساعدتاً في ذلك او لنقم فقط بتشغيل المتصفح؟</string>
|
||||
<string name="install_apps_">هل ترغب بتنصيب التطبيقات؟</string>
|
||||
<string name="no_network_connectivity_putting_tor_to_sleep_">لا يوجد اتصال بألشبكة. سيدخل تور الى وضع النوم</string>
|
||||
<string name="network_connectivity_is_good_waking_tor_up_">الاتصال بألشبكة جيد. تنبيه تور من النوم</string>
|
||||
<string name="updating_settings_in_tor_service">تحديث الاعدادات في خدمات تور</string>
|
||||
<string name="pref_socks_title">تور سوكس</string>
|
||||
<string name="pref_socks_summary">منفذ الشبكات الحاسوبية او بورت الذي يقدمه تور الى وحدة الخدمة النائبة البروكسي في سوكس. (التقصير 9050 او 0 عدم القدرة)</string>
|
||||
<string name="pref_socks_dialog">تهيئة منفذ الشبكات الحاسوبية بورت في سوكس</string>
|
||||
<string name="pref_transport_title">منفذ الشبكات الحاسوبية في وحدة الخدمة النائبة البروكسي في تور</string>
|
||||
<string name="pref_transport_summary">منفذ الشبكات الحاسوبية او بورت الذي يقدمه تور الى البروكسي الشفاف (التقصير 9040 او 0 عدم القدرة)</string>
|
||||
<string name="pref_transport_dialog">تهيئة بورت البروكسي الشفاف</string>
|
||||
<string name="pref_dnsport_title">تور, نظام اسماء النطاقات, بورت</string>
|
||||
<string name="pref_dnsport_summary">منفذ الشبكات الحاسوبية او بورت الذي يقدمه تور الى خدمة اسماء النطاق دي ان اس. (التقصير 5400 او 0 لعدم القدرة)</string>
|
||||
<string name="pref_dnsport_dialog">إعدادات بورت خادم اسماء النطاق</string>
|
||||
<string name="menu_vpn">في بي ان شبكة وهمية خاصة</string>
|
||||
</resources>
|
|
@ -1,297 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Orbot</string>
|
||||
<string name="app_description">Pulsuz proksi tətbiqetməsi olan Orbot başqa tətbiqetmələrə internetdən daha təhlükəsiz istifadə etmək imkanı verir. Orbot sizin internet trafikinizi şifrələmək üçün Tordan istifadə edir və dünyanın hər yerində kompüterlərin birindən o birinə sıçramaqla bunu gizlədir. Tor pulsuz proqram təminatıdır, eyni zamanda sizin şəxsi azadlığınız və təhlükəsizliyinizə, gizli biznes fəaliyyəti və əlaqələrə, o cümlədən trafik analiz adlanan dövlət təhlükəsizliyinə xələl gətirə biləcək şəbəkə nəzarəti formalarından müdafiə olunmağa yardım edən açıq şəbəkədir.</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">Toru başlat və dayandır
|
||||
</string>
|
||||
<string name="tor_proxy_service_process">torproxyservice</string>
|
||||
<string name="status_starting_up">Orbot başlayır...</string>
|
||||
<string name="status_activated">Tor şəbəkəsinə bağlandı</string>
|
||||
<string name="status_disabled">Orbot deaktivasiya edildi</string>
|
||||
<string name="status_shutting_down">Tor xidməti işini başa vurur</string>
|
||||
<string name="tor_process_starting">Tor xidməti başlayır...</string>
|
||||
<string name="tor_process_complete">tamamla.</string>
|
||||
<string name="tor_process_waiting">gözləyirik.</string>
|
||||
<string name="not_anonymous_yet">TƏHLÜKƏ: Sənin trafikin hələ anonim deyil! Lütfən, aplikasiyanı ya HTTP proksi 127.0.0.1:8118, ya SOCKS4A, ya da SOCKS5 proksi 127.0.0.1:9050 istifadə etmək üçün quraşdır.</string>
|
||||
<string name="menu_home">Ev</string>
|
||||
<string name="menu_browse">Bax</string>
|
||||
<string name="menu_settings">Quraşdırmalar</string>
|
||||
<string name="menu_log">Jurnal</string>
|
||||
<string name="menu_info">Kömək</string>
|
||||
<string name="menu_apps">VPN</string>
|
||||
<string name="menu_start">Başla</string>
|
||||
<string name="menu_stop">Dur</string>
|
||||
<string name="menu_about">Haqqında</string>
|
||||
<string name="menu_promo_apps">Tətbiqetmələri əldə edin...</string>
|
||||
<string name="main_layout_download">Endir</string>
|
||||
<string name="main_layout_upload">Yüklə</string>
|
||||
<string name="button_help">Kömək</string>
|
||||
<string name="button_close">Bağla</string>
|
||||
<string name="button_about">Haqqında</string>
|
||||
<string name="button_clear_log">Jurnalı Təmizlə</string>
|
||||
<string name="menu_verify">Yoxla</string>
|
||||
<string name="menu_exit">Çıx</string>
|
||||
<string name="menu_scan">KörpüQR kodu skan edin</string>
|
||||
<string name="menu_share_bridge">KörpüQR kodu paylaşın</string>
|
||||
<string name="press_to_start">- başlamaq üçün uzun klik -</string>
|
||||
<string name="pref_trans_proxy_group">Şəffaf Proksiləmə (Root Tələb Edir)</string>
|
||||
<string name="pref_trans_proxy_title">Şəffaf Proksiləmə</string>
|
||||
<string name="pref_trans_proxy_summary">Aplikasiyaların Avtomatik Torlanması</string>
|
||||
<string name="pref_transparent_all_title">Hər şeyi Torla</string>
|
||||
<string name="pref_transparent_all_summary">Tor vasitəsilə bütün aplikasiyaların proksi trafiki</string>
|
||||
<string name="pref_transparent_port_fallback_title">Port Proksi Ehtiyatı</string>
|
||||
<string name="pref_transparent_port_fallback_summary">TƏHLÜKƏ: Ümumi alt portlar (80, 443 və s.). \'Hamısı\' və ya \'Tətbiqetmə\' işləmirsə, *YALNIZ İSTİFADƏ ET*.</string>
|
||||
<string name="pref_transparent_port_title">Port Siyahısı</string>
|
||||
<string name="pref_transparent_port_summary">Proksiyə port siyahısı. \'Hamısı\' və ya \'Tətbiqetmə\' işləmirsə, *YALNIZ İSTİFADƏ ET*.</string>
|
||||
<string name="pref_transparent_port_dialog">Proksiyə port daxil et</string>
|
||||
<string name="pref_has_root">Root Giriş Tələb Et</string>
|
||||
<string name="pref_has_root_summary">Şəffaf proksiləmə üçün mənbə tələb et</string>
|
||||
<string name="status_install_success">Tor ikilisi müvəffəqiyyətlə yükləndi!</string>
|
||||
<string name="status_install_fail">Tor ikili fayllarının quraşdırılması mümkün olmadı. Lütfən girişi yoxla və assistants@torproject.org-a xəbər ver.</string>
|
||||
<string name="title_error">Tətbiq Səhvi</string>
|
||||
<string name="wizard_title">Orbot</string>
|
||||
<string name="wizard_btn_tell_me_more">Orbot Haqqında</string>
|
||||
<string name="btn_next">Sonrakı</string>
|
||||
<string name="btn_back">Geri</string>
|
||||
<string name="btn_finish">Bitir</string>
|
||||
<string name="btn_okay">Okey</string>
|
||||
<string name="btn_cancel">Ləğv et</string>
|
||||
<!--Welcome Wizard strings (DJH)-->
|
||||
<string name="wizard_details">Bəzi Orbot Detalları</string>
|
||||
<string name="wizard_details_msg">Orbot Tor, LibEvent və Polipodan ibarət olan açıq mənbəli tətbiqetmədir. O, Tor şəbəkəsini yerli HTTP proksi (8118) və SOCKS proksi (9050) ilə təmin edir. Orbot həm də bütün internet trafikləri köklü mexanizm əsasında Tor vasitəsiylə göndərmək qabiliyyətinə malikdir. </string>
|
||||
<string name="wizard_permissions_root">İcazə Verilir</string>
|
||||
<string name="wizard_permissions_stock">Orbot İcazələri</string>
|
||||
<string name="wizard_premissions_msg_root">Əla! Sənin Orbot üçün mənbə icazələrinə malik olmanı müəyyən etmişik. Biz bu gücü ağılla istifadə edəcəyik.</string>
|
||||
<string name="wizard_permissions_msg_stock">Bu tələb edilmədiyi halda sənin qurğunun mənbə girişi varsa, Orbot daha güclü işləyəcək. Orbota super gücü vermək üçün aşağıdakı düyməni istifadə et!</string>
|
||||
<string name="wizard_permissions_no_root">Əgər sənin mənbə girişinə icazən yoxdursa, ya da nə haqqında danışdığımızı anlamırsansa, əmin ol ki, istifadə etdiyin aplikasiyalar Orbotla işləyə biləndirlər.</string>
|
||||
<string name="wizard_permissions_consent">Superistifadəçisiz davam etməyi anlayır və istəyirəm</string>
|
||||
<string name="wizard_permission_enable_root">Orbot üçün Mənbə Ver</string>
|
||||
<string name="wizard_configure">Torifikasiyanı Quraşdır</string>
|
||||
<string name="wizard_configure_msg">Orbot sənə bütün və ya seçilmiş aplikasiyalarını Tor vasitəsilə istifadə etməyə imkan yaradır.</string>
|
||||
<string name="wizard_configure_all">Bütün Aplikasiyaları Tor Vasitəsilə Proksi Et</string>
|
||||
<string name="wizard_configure_select_apps">Tor üçün Müəyyən Aplikasiyaları Seç</string>
|
||||
<string name="wizard_tips_tricks">Orbota-açıq Aplikasiyalar</string>
|
||||
<string name="wizard_tips_msg">Aşağıdakı aplikasiyalar Orbotla işləmək üçün quraşdırılmışdır. İndi quraşdırmaq üçün hər düyməni kliklə, ya da başqa vaxt onları Google Play, GuardianProject.info saytı və ya F-Doid.org-da tap.</string>
|
||||
<string name="wizard_tips_otrchat">ChatSecure - Android üçün təhlükəsiz mesajlaşma müştərisi</string>
|
||||
<string name="wizard_tips_proxy">Proksi Seçimləri - Aplikasiyaların Orbotla necə işləyəcəyini öyrən</string>
|
||||
<string name="wizard_tips_duckgo">DuckDuckGO Axtarış Qurğu aplikasiyası</string>
|
||||
<string name="wizard_tips_twitter">\"Yerlihost\" və 8118 portuna sahiblik üçün Twitter proksini quraşdır</string>
|
||||
<string name="wizard_tips_story_maker">StoryMaker--Yazı yaz, təhlükəsizlik məsələsini torun öhdəsinə burax!</string>
|
||||
<string name="twitter_setup_url">https://guardianproject.info/2012/05/02/orbot-your-twitter/</string>
|
||||
<string name="wizard_proxy_help_info">Proksi qurğuları</string>
|
||||
<string name="wizard_proxy_help_msg">İstifadə etdiyiniz Android tətbiqetməsi HTTP və SOCKS proksinin istifadəsini dəstəkləyə bilirsə, siz onu Orbotla birləşdirmək üçün tənzimləyə və Tor.\n\n\n-dən istifadə edə bilərsiniz. Host quraşdırmaları 127.0.0.1-dir, yaxud \"yerlihost\"dur. HTTP üçün port quraşdırması 8118-dir. SOCKS üçün proksi 9050-dir. Siz SOCKS4A, yaxud mümkünsə, SOCKS5-dən istifadə etməlisiniz.\n \n\n\n FAQ vasitəsiylə siz Androiddə proksiləmə haqda daha çox məlumat ala bilərsiniz: http://tinyurl.com/proxyandroid\n</string>
|
||||
<string name="wizard_final">Orbot hazırdır!</string>
|
||||
<string name="wizard_final_msg">Dünyanın müxtəlif yerlərində milyonlarla insan Tordan müxtəlif məqsədlərlə istifadə edir. \n\n Jurnalistlər, blogerlər, insan haqları müdafiəçiləri, hüquq-mühafizə orqanlarının işçiləri, əsgərlər, korporasiyalar, repressiv rejimlərin vətəndaşları, ya da adi vətəndaşlar...İndi buna siz də hazırsınız!</string>
|
||||
<string name="wizard_exit_at_first_screen_toast">Zəhmət olmasa, istifadəyə başlamazdan əvvəl Orbotu tənzimləyin!</string>
|
||||
<!--END Welcome Wizard strings (DJH)-->
|
||||
<string name="connect_first_time">Siz Tor şəbəkəsinə uğurla qoşuldunuz. Ancaq bu o demək deyil ki, sizin cihazınız təhlükəsizdir. Əlqəni yoxlamaq üçün \'Browser\' düyməsindən istifadə edə bilərsiniz. \n\n Bizə https://guardianproject.info/apps/orbot səhifəsində qonaq ola bilərsiniz. Daha çox məlumat əldə etmək üçün help@guardianproject.info ünvanına məktub yazmaq olar. </string>
|
||||
<string name="tor_check">Orbotun konfiqurasiya edilməsini və sənin Tor-a qoşulduğunu dəqiqləşdirmək üçün bu sənin brauzerini https://check.torproject.org saytı ilə açacaq.</string>
|
||||
<string name="pref_hs_group">Gizli Xidmət Hostinqi</string>
|
||||
<string name="pref_general_group">Əsas</string>
|
||||
<string name="pref_start_boot_title">Android Açıldıqda Orbotu Başlat</string>
|
||||
<string name="pref_start_boot_summary">Android cihazın işə başladıqda avtomatik olaraq Orbot başlansın və Tor-a qoşulsun</string>
|
||||
<!--New Wizard Strings-->
|
||||
<!--Title Screen-->
|
||||
<string name="wizard_title_msg">Orbot Toru Androidə gətirir!\n\nTor məxfiliyə, gizli informasiya və şəxsi münasibətlərə xələl gətirə biləcək şəbəkə nəzarəti, məzmunun süzgəcdən keçirilməsi və trafik analizindən müdafiə olunmaqda sizə yardım edir.\n\nBu sehrbaz Orbot və Toru sizin cihazınıza quraşdırmağa kömək edəcək. </string>
|
||||
<!--Warning screen-->
|
||||
<string name="wizard_warning_title">Xəbərdarlıq</string>
|
||||
<string name="wizard_warning_msg">Sadəcə Orbotun quraşdırılması mobil trafikinizi avtomatik olaraq anonimləşdirə bilməz.\n\nTordan uğurla istifadə etmək üçün siz Orbotu, cihazınızı və başqa tətbiqetmələri bir-birinə uyğunlaşdırmalısınız. </string>
|
||||
<!--Permissions screen-->
|
||||
<string name="wizard_permissions_title">İcazə</string>
|
||||
<string name="wizard_permissions_root_msg1">Sən istəsən Orbot-un \'Superistifadəçi\' girişini əldə edib Şəffaf Proksiləmə kimi əlavə seçimlər qazana bilərsən.</string>
|
||||
<string name="wizard_permissions_root_msg2">Bunu etmək istəmirsənsə, yalnız Orbot-la işləməsi mümkün aplikasiyalara sahib olduğuna əmin ol</string>
|
||||
<string name="wizard_permissions_no_root_msg">Sizin cihazınız yəqin ki, rout olunmayıb, ya da rout və ya \"Superistifadəçi\" keçidi ilə təmin etmir.\n\nXahiş edirik, bunun əvəzinə əsas ekranda \'Tətbiqetmələr\' rejimindən istifadə etməyə çalışın. </string>
|
||||
<!--TipsAndTricks screen-->
|
||||
<string name="wizard_tips_title">Orbot-a Açıq Aplikasiyalar</string>
|
||||
<string name="wizard_tips_gibberbot">ChatSecure: Çat aplikasiyasını Qeydsiz Şifrləmə ilə təhlükəsizləşdir</string>
|
||||
<string name="wizard_tips_orweb">Orfox: Tor vasitəsiylə işləyən və məxfiliyi artıran brauzer</string>
|
||||
<string name="wizard_tips_play">Google Play-də bütün Guardian Layihə aplikasiyaları tap</string>
|
||||
<string name="wizard_tips_fdroid">F-Droiddəki bütün Guardian Project tətbiqetmələrini tapın </string>
|
||||
<string name="wizard_tips_fdroid_org">https://f-droid.org-də bütün Guardian Project tətbiqetmələrini tapın</string>
|
||||
<!--Transparent Proxy screen-->
|
||||
<string name="wizard_transproxy_title">Şəffaf Proksiləmə</string>
|
||||
<string name="wizard_transproxy_msg">Bu heç bir konfiqurasiyaya ehtiyac olmadan aplikasiyalarının avtomatik olaraq Tor şəbəkəsi vasitəsilə işləməsini təmin edir.</string>
|
||||
<string name="wizard_transproxy_hint">(Dediklərimizdən heç biri haqqında xəbərin yoxdursa, qutunu işarələ)</string>
|
||||
<string name="wizard_transproxy_none">Heç biri</string>
|
||||
<string name="pref_transparent_tethering_title">Tor-un Son Həddi</string>
|
||||
<string name="pref_transparent_tethering_summary">Wifi və USB ilə Bağlanan Cihazlar üçün Tor Şəffaf Proksiləməni Aktivləşdir (cihazın yenidən yüklənməsini tələb edir)</string>
|
||||
<string name="button_grant_superuser">Superistifadəçi Giriş Tələbi</string>
|
||||
<string name="pref_select_apps">Aplikasiya Seç</string>
|
||||
<string name="pref_select_apps_summary">Tor vasitəsilə açılması üçün Aplikasiya seç</string>
|
||||
<string name="pref_node_configuration">Kəsişmə Konfiqurasiyası</string>
|
||||
<string name="pref_node_configuration_summary">Bunlar sənin anonimliyini azalda biləcək ətraflı seçimlərdir</string>
|
||||
<string name="pref_entrance_node">Giriş Kəsişmələri</string>
|
||||
<string name="pref_entrance_node_summary">Birinci sıçrayış üçün barmaq izləri, nişanlar, ölkələr və ünvanlar</string>
|
||||
<string name="pref_entrance_node_dialog">Giriş Kəsişmələrini Əlavə et</string>
|
||||
<string name="pref_allow_background_starts_title">Arxa fonun işə başlamasına icazə verin</string>
|
||||
<string name="pref_allow_background_starts_summary">Qoy hər-hansı tətbiqetmə Orbota Tor və əlaqəli xidmətləri işə salmalı olduğunu desin</string>
|
||||
<string name="button_proxy_all">Hər şeyi proksilə
|
||||
</string>
|
||||
<string name="button_proxy_none">Heç nəyi proksiləmə</string>
|
||||
<string name="button_invert_selection">Seçiminin yerini dəyiş</string>
|
||||
<string name="pref_proxy_title">İxrac Edilən Şəbəkə Proksisi (istəyə bağlı)</string>
|
||||
<string name="pref_proxy_type_title">İxrac Edilən Proksi Növü</string>
|
||||
<string name="pref_proxy_type_summary">Proksi serveri istifadə etmək üçün protokol: HTTP, HTTPS, Socks4, Socks5</string>
|
||||
<string name="pref_proxy_type_dialog">Proksi Növünü Daxil Et</string>
|
||||
<string name="pref_proxy_host_title">İxrac Edilən Proksi Hostu</string>
|
||||
<string name="pref_proxy_host_summary">Proksi Server host adı</string>
|
||||
<string name="pref_proxy_host_dialog">Proksi Hostu Daxil Et</string>
|
||||
<string name="pref_proxy_port_title">İxrac Edilən Proksi Port</string>
|
||||
<string name="pref_proxy_port_summary">Proksi Server portu</string>
|
||||
<string name="pref_proxy_port_dialog">Proksi portu daxil et</string>
|
||||
<string name="pref_proxy_username_title">İxrac Edilən Proxy İstifadəçi Adı</string>
|
||||
<string name="pref_proxy_username_summary">Proksi İstifadəçi Adı (istəyə bağlı)</string>
|
||||
<string name="pref_proxy_username_dialog">Proksi İstifadəçi Adı Daxil Et</string>
|
||||
<string name="pref_proxy_password_title">İxrac Edilən Proksi Şifrə</string>
|
||||
<string name="pref_proxy_password_summary">Proksi Şifrə (istəyə bağlı)</string>
|
||||
<string name="pref_proxy_password_dialog">Proksi Şifrə Daxil et</string>
|
||||
<string name="status">Status</string>
|
||||
<string name="setting_up_full_transparent_proxying_">Tam şəffaf proksiləmənin quraşdırılması...</string>
|
||||
<string name="setting_up_app_based_transparent_proxying_">Aplikasiya əsaslı şəffaf proksiləmənin quraşdırılması...</string>
|
||||
<string name="transparent_proxying_enabled">Şəffaf proksiləmə AKTİVLƏŞDİRİLDİ</string>
|
||||
<string name="transproxy_enabled_for_tethering_">Bağlanma üçün TransProksi aktivləşdirildi!</string>
|
||||
<string name="warning_error_starting_transparent_proxying_">TƏHLÜKƏ: şəffaf proksiləmənin başlanmasında xəta!</string>
|
||||
<string name="transproxy_rules_cleared">TransProksi qaydalar təmizləndi</string>
|
||||
<string name="couldn_t_start_tor_process_">Tor prosesi başlana bilmədi:</string>
|
||||
<string name="privoxy_is_running_on_port_">Polipo portda işləyir</string>
|
||||
<string name="setting_up_port_based_transparent_proxying_">Porta əsaslanmış proksiləmənin quraşdırılması...</string>
|
||||
<string name="bridge_error">Körpü Xətası</string>
|
||||
<string name="bridge_requires_ip">Körpü funksiyasını istifadə etmək üçün ən azı bir körpü IP ünvanı əlavə etməlisən.</string>
|
||||
<string name="send_email_for_bridges">Gmail hesabından bridges@torproject.org ünvanına mətn hissəsində \"körpü əldə et\" sözləri yazılmaqla məktub göndər.</string>
|
||||
<string name="error">Xəta</string>
|
||||
<string name="your_reachableaddresses_settings_caused_an_exception_">Sənin ƏlçatanÜnvanlar seçimin istisnaya səbəb oldu!</string>
|
||||
<string name="your_relay_settings_caused_an_exception_">Sənin keçid seçimlərin istisnaya səbəb oldu!</string>
|
||||
<string name="exit_nodes">Kəsişmələri Xaric Et</string>
|
||||
<string name="fingerprints_nicks_countries_and_addresses_for_the_last_hop">Son sıçrayış üçün barmaq izləri, nişanlar, ölkələr və ünvanlar</string>
|
||||
<string name="enter_exit_nodes">Çıxış Kəsişmələrini Daxil Et</string>
|
||||
<string name="exclude_nodes">Kəsişmələri Xaric Et</string>
|
||||
<string name="fingerprints_nicks_countries_and_addresses_to_exclude">İxrac üçün barmaq izləri, nişanlar, ölkələr və ünvanlar</string>
|
||||
<string name="enter_exclude_nodes">İxrac Kəsişmələrini Daxil Et</string>
|
||||
<string name="strict_nodes">Kəskin Kəsişmələr</string>
|
||||
<string name="use_only_these_specified_nodes">*Yalnız* bu xüsusi kəsişmələri istifadə et</string>
|
||||
<string name="bridges">Körpülər</string>
|
||||
<string name="use_bridges">Körpü İstifadə Et</string>
|
||||
<string name="bridges_obfuscated">Çaşdırıcı Körpülər</string>
|
||||
<string name="enable_alternate_entrance_nodes_into_the_tor_network">Tor Şəbəkəsinə alternativ giriş kəsişmələrini aktivləşdir</string>
|
||||
<string name="enable_if_configured_bridges_are_obfuscated_bridges">Quraşdırılmış körpülər çaşdırıcı körpülər olsa, aktivləşdir</string>
|
||||
<string name="ip_address_and_port_of_bridges">Körpülərin IP ünvanı və portu</string>
|
||||
<string name="enter_bridge_addresses">Körpü Ünvanlarını Daxil et</string>
|
||||
<string name="relays">Keçidlər</string>
|
||||
<string name="relaying">Keçidləmə</string>
|
||||
<string name="enable_your_device_to_be_a_non_exit_relay">Cihazının son-keçid funksiyasını aktivləşdir</string>
|
||||
<string name="relay_port">Keçid Portu</string>
|
||||
<string name="listening_port_for_your_tor_relay">Tor keçidin üçün portun dinlənməsi</string>
|
||||
<string name="enter_or_port">OR port daxil et</string>
|
||||
<string name="relay_nickname">Keçid adı</string>
|
||||
<string name="the_nickname_for_your_tor_relay">Tor keçidin üçün ad</string>
|
||||
<string name="enter_a_custom_relay_nickname">İlkin keçidə ad daxil et</string>
|
||||
<string name="reachable_addresses">Əlçatan Ünvanlar</string>
|
||||
<string name="run_as_a_client_behind_a_firewall_with_restrictive_policies">Məhdudlaşmış siyasətlə qoruyucu divar arxasındakı müştəri kimi işlət</string>
|
||||
<string name="reachable_ports">Əlçatan portlar</string>
|
||||
<string name="ports_reachable_behind_a_restrictive_firewall">Məhdudlaşdırılmış qoruyucu divar arxasında əlçatan portlar</string>
|
||||
<string name="enter_ports">Port daxil et</string>
|
||||
<string name="enable_hidden_services">Gizli Xidmət Hostinqi</string>
|
||||
<string name="run_servers_accessible_via_the_tor_network">cihaz serverinin Tor şəbəkəsi tərəfindənəldə edilən olmasına icazə ver</string>
|
||||
<string name="enter_localhost_ports_for_hidden_services">gizli xidmətlər üçün yerlihost portlarını daxil et</string>
|
||||
<string name="hidden_service_ports">Gizli Xidmət Portları</string>
|
||||
<string name="the_addressable_name_for_your_hidden_service_generated_automatically_">gizli xidmətin üçün ünvanlanan ad (avtomatik hazırlanmış)</string>
|
||||
<string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">məhsul üçün sazlama girişi daxil et (baxmaq üçün adb və ya aLogCat istifadə etməlisən)</string>
|
||||
<string name="project_home">Layihə Evi(ləri):</string>
|
||||
<string name="project_urls">https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/orbot/</string>
|
||||
<string name="the_tor_license">Tor Lisenziyası</string>
|
||||
<string name="https_torproject_org">https://torproject.org</string>
|
||||
<string name="third_party_software">Xidməti Quraşdırma:</string>
|
||||
<string name="tor_version">
|
||||
Tor: https://www.torproject.org</string>
|
||||
<string name="libevent_version">
|
||||
LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
|
||||
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
|
||||
<string name="iptables_version">IPtables v1.4.21: http://www.netfilter.org</string>
|
||||
<string name="openssl_version">SSL-i aç v1.0.1q: http://www.openssl.org</string>
|
||||
<string name="hidden_service_request">Aplikasiya Tor şəbəkəsinə %S gizli server portu açmaq istəyir. Aplikasiyaya inandığın halda bu təhlükəsizdir.</string>
|
||||
<string name="found_existing_tor_process">mövcud Tor prosesi tapıldı...</string>
|
||||
<string name="something_bad_happened">Nə isə pis bir şey oldu. Girişi yoxla</string>
|
||||
<string name="hidden_service_on">burada gizli xidməti:</string>
|
||||
<string name="unable_to_read_hidden_service_name">gizli xidmət adını oxumağı deaktivləşdir</string>
|
||||
<string name="unable_to_start_tor">Tor-un başlanmasını dayandır:</string>
|
||||
<string name="unable_to_reset_tor">Cihazınızı yenidən yükləyin, Toru bərpa etmək olmur!</string>
|
||||
<string name="pref_use_sys_iptables_title">Mövcud Ipstol İstifadə Et</string>
|
||||
<string name="pref_use_sys_iptables_summary">Orbotla bağlanmış ipstol əvəzinə daxili cüt ipstol istifadə et</string>
|
||||
<string name="error_installing_binares">Tor cütlükləri quraşdırıla və ya təkmilləşdirilə bilmədi.</string>
|
||||
<string name="pref_use_persistent_notifications">Həmişə Orbot qoşulduğu hallarda nişanı alətlət panelində saxla</string>
|
||||
<string name="pref_use_persistent_notifications_title">Həmişə Açıq Xəbərdarlıqlar</string>
|
||||
<string name="pref_use_expanded_notifications">Torla birlikdə ətraflı bildirişi göstərib ölkə və IP-dən çıxın. </string>
|
||||
<string name="pref_use_expanded_notifications_title">Ətraflı bildirişlər</string>
|
||||
<string name="notification_using_bridges">Körpülər aktivləşdirildi!</string>
|
||||
<string name="default_bridges"></string>
|
||||
<string name="set_locale_title">Dil</string>
|
||||
<string name="set_locale_summary">Orbot üçün dil standartlarını və dili seç</string>
|
||||
<string name="wizard_locale_title">Dil Seç</string>
|
||||
<string name="wizard_locale_msg">Olduğu kimi saxla, ya da mövcud dilə keç</string>
|
||||
<string name="powered_by">Tor tərəfindən yaradılmış</string>
|
||||
<string name="btn_save_settings">Seçimləri Saxla</string>
|
||||
<string name="no_internet_connection_tor">İnternet yoxdur; Tor gözləyir</string>
|
||||
<string name="bandwidth_">Ötürmə qabiliyyəti:</string>
|
||||
<string name="down">aşağı</string>
|
||||
<string name="up">yuxarı</string>
|
||||
<string name="pref_disable_network_title">Avto-Yuxu Şəbəkəsi Yoxdur</string>
|
||||
<string name="pref_disable_network_summary">İnternet olmadıqda icazə ver Tor yatsın</string>
|
||||
<string name="newnym">Yeni Tor oxşarına qoşuldun!</string>
|
||||
<string name="menu_verify_browser">Bax</string>
|
||||
<string name="menu_use_chatsecure">ChatSecure istifadə et</string>
|
||||
<string name="permission_manage_tor_label">Toru İdarə Et</string>
|
||||
<string name="permission_manage_tor_description">Tor xidmətini idarə etməsi üçün aplikasiyanı aktivləşdir</string>
|
||||
<string name="it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_">Deyəsən Orfoxu quraşdırmamısınız. Yardıma ehtiyacınız var, yoxsa yalnız brauzeri açmalıyıq?</string>
|
||||
<string name="install_apps_">Aplikasiya quraşdırılsın?</string>
|
||||
<string name="no_network_connectivity_putting_tor_to_sleep_">İnternetlə əlaqə yoxdur. Tor gözləmə rejiminə keçir...</string>
|
||||
<string name="network_connectivity_is_good_waking_tor_up_">İnternetlə əlaqə yaxşıdır. Tor iş rejiminə keçir...</string>
|
||||
<string name="updating_settings_in_tor_service">Tor xidmətində quraşdırmalar yüklənir</string>
|
||||
<string name="pref_socks_title">Tor SOCKS</string>
|
||||
<string name="pref_socks_summary">Torun təklif etdiyi Port SOCKS proksi işləyir (standart: 9050, yaxud söndürmək üçün 0) </string>
|
||||
<string name="pref_socks_dialog">SOCKS Port Config</string>
|
||||
<string name="pref_transport_title">Tor TransProxy Port</string>
|
||||
<string name="pref_transport_summary">Torun təklif etdiyi Port Transparent proksi işləyir (standart: 9040, yaxud söndürmək üçün 0) </string>
|
||||
<string name="pref_transport_dialog">TransProxy Port Config</string>
|
||||
<string name="pref_dnsport_title">Tor DNS Port</string>
|
||||
<string name="pref_dnsport_summary">Torun təklif etdiyi Port DNS işləyir (standart: 5400, yaxud söndürmək üçün 0)</string>
|
||||
<string name="pref_dnsport_dialog">DNS Port Config</string>
|
||||
<string name="pref_torrc_title">Torrc Custom Config</string>
|
||||
<string name="pref_torrc_summary">YALNIZ EKSPERTLƏR: birbaşa torrc config xətlərini daxil edin</string>
|
||||
<string name="pref_torrc_dialog">Custom Torrc</string>
|
||||
<string name="wizard_tips_martus">Mobile Martus - Benetech İnsan haqları Sənədləri tətbiqetməsi</string>
|
||||
<string name="your_tor_public_ips_">Sizin ictimai Tor İP-ləriniz</string>
|
||||
<string name="please_disable_this_app_in_android_settings_apps_if_you_are_having_problems_with_orbot_">Orbotla bağlı probleminiz varsa, lütfən, Android->Settings->Apps-də bu tətbiqetməni söndürün;</string>
|
||||
<string name="app_conflict">Tətbiqetmə konflikti</string>
|
||||
<string name="pref_transproxy_refresh_title">Transproxy avtomatik yeniləmə</string>
|
||||
<string name="pref_transproxy_refresh_summary">Şəbəkə vəziyyəti dəyişəndə Transproxy qaydalarını yenidən tətbiq edin</string>
|
||||
<string name="pref_transproxy_flush_title">Transproxy MƏCBURİ POZMA</string>
|
||||
<string name="pref_transproxy_flush_summary">Bütün transproxy şəbəkə qaydalarını elə İNDİ ləğv etmək üçün bura klikləyin</string>
|
||||
<string name="transparent_proxy_rules_flushed_">Transparent proksi qaydaları ləğv edildi</string>
|
||||
<string name="you_do_not_have_root_access_enabled">Root girişiniz yoxdur</string>
|
||||
<string name="you_may_need_to_stop_and_start_orbot_for_settings_change_to_be_enabled_">Quraşdırma dəyişikliklərinin tətbiq edilməsi üçün Orbota başlamağa və ya onu dayandırmağa ehtiyacınız ola bilər. </string>
|
||||
<string name="menu_vpn">VPN</string>
|
||||
<string name="kbps">kbps</string>
|
||||
<string name="mbps">mbps</string>
|
||||
<string name="kb">KB</string>
|
||||
<string name="mb">MB</string>
|
||||
<string name="bridges_updated">Körpülər yeniləndi</string>
|
||||
<string name="restart_orbot_to_use_this_bridge_">Lütfən, Orbotu söndürün və yenidən yandırın ki, dəyişikliklər tətbiq edilsin.</string>
|
||||
<string name="menu_qr">QR kodlar</string>
|
||||
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Sənin mobil şəbəkən Toru aktiv şəkildə əngəlləyirsə, şəbəkəyə daxil olmaq üçün Körpüdən istifadə edə bilərsən. Körpüləri aktivləşdirmək üçün yuxarıdakı körpü növlərindən birini SEÇ.</string>
|
||||
<string name="bridge_mode">Körpü rejimi</string>
|
||||
<string name="get_bridges_email">Emeyl</string>
|
||||
<string name="get_bridges_web">Veb</string>
|
||||
<string name="activate">Aktivləşdir</string>
|
||||
<string name="apps_mode">Tətbiqetmələr VPN Rejimi</string>
|
||||
<string name="you_can_enable_all_apps_on_your_device_to_run_through_the_tor_network_using_the_vpn_feature_of_android_">Tor şəbəkəsi vasitəsiylə qoşulmaq üçün Android.\n\n*WARNING*-in VPN funksiyasından istifadə edərək öz qurğunda bütün tətbiqetmələri aktivləşdirə bilərsən. Bu, yeni, eksperimental funksiyadır və bəzən avtomatik olaraq başlamaya, yaxud dayana bilər. Bundan anonimlik məqsədiylə istifadə etmək OLMAZ, bundan YALNIZ süzgəc və qoruma divarlarından keçmək üçün istifadə etmək lazımdır. </string>
|
||||
<string name="send_email">Emeyl göndərin</string>
|
||||
<string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Körpü ünvanını siz emeyl və veb vasitəsiylə, ya da körpünün QR kodunu skan etməklə əldə edə bilərsiniz. Körpü ünvanı haqda sorğunun altında \'Email\'i, yaxud \'Web\'i seçin.\n\nÜnvanı əldə edəndən sonra &amp-i nüsxələyin və onu Orbot quraşdırmasındakı \"Bridges\" parametrinə qoyun və cihazı yenidən yükləyin.</string>
|
||||
<string name="install_orweb">Orfoxu quraşdırın</string>
|
||||
<string name="standard_browser">Standart Brauzer</string>
|
||||
<string name="note_only_standard_tor_bridges_work_on_intel_x86_atom_devices">QEYD: Intel X86/ATOM cihazlarında yalnız standart Tor körpülər işləyir.</string>
|
||||
<string name="vpn_default_world">Dünya</string>
|
||||
</resources>
|
|
@ -1,293 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Орбот</string>
|
||||
<string name="app_description">Orbot е безплатна прокси програма, която дава възможноста на други програми да използват интерент по-сигурно. Orbot използва Tor, за да криптира Интернет трафика и след това го скрива като препраща през няколко компютъра по целия свят. Tor е безплатен софтуер и отворена мрежа, която ти помага да се предпазиш от шпиониране по мрежата, което заплашва твоята свобода и лично пространство, конфиденциални бизнес отношение и връзки, и от вид правителствено следене наречено трафик анализ.</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">Tor прокси</string>
|
||||
<string name="status_starting_up">Орбот стартира...</string>
|
||||
<string name="status_activated">Свързан към Тор мрежата</string>
|
||||
<string name="status_disabled">Орбот е деактивиран</string>
|
||||
<string name="status_shutting_down">TorService спира</string>
|
||||
<string name="tor_process_starting">Стартиране на Тор клиент...</string>
|
||||
<string name="tor_process_complete">завършено.</string>
|
||||
<string name="tor_process_waiting">изчакване.</string>
|
||||
<string name="not_anonymous_yet">ВНИМАНИЕ: Трафикът Ви не е анонимен! Моля конфигурирайте приложенията си да използват HTTP proxy 127.0.0.1:8118 или SOCKS4A или SOCKS5 proxy 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">VPN</string>
|
||||
<string name="menu_start">Старт</string>
|
||||
<string name="menu_stop">Стоп</string>
|
||||
<string name="menu_about">Относно</string>
|
||||
<string name="menu_promo_apps">Изтегли приложения...</string>
|
||||
<string name="main_layout_download">Изтегли</string>
|
||||
<string name="main_layout_upload">Качи</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">Check</string>
|
||||
<string name="menu_exit">Изход</string>
|
||||
<string name="menu_scan">Сканирай BridgeQR</string>
|
||||
<string name="menu_share_bridge">Сподели BridgeQR</string>
|
||||
<string name="press_to_start">- за старт натисни и задръж -</string>
|
||||
<string name="pref_trans_proxy_group">Прозрачно прокси (Изисква Root)</string>
|
||||
<string name="pref_trans_proxy_title">Прозрачно прокси</string>
|
||||
<string name="pref_trans_proxy_summary">Автоматично прекарване на приложенията през Тор</string>
|
||||
<string name="pref_transparent_all_title">Всичко през Тор</string>
|
||||
<string name="pref_transparent_all_summary">Прехвърляй през Тор трафика на всички приложения</string>
|
||||
<string name="pref_transparent_port_fallback_title">Тор прокси услугата смени порта</string>
|
||||
<string name="pref_transparent_port_fallback_summary">ВНИМАНИЕ: Заобикаля стандартните портове(80, 443, т.н.). *ИЗПОЛЗВАЙ САМО* ако режимиете \'Всички\' или \'Програма\' не работят.</string>
|
||||
<string name="pref_transparent_port_title">Списък портове</string>
|
||||
<string name="pref_transparent_port_summary">Списък с портовете, на които да се ползва прокси. *ИЗПОЛЗВАЙ САМО* ако режимиете \'Всички\' или \'Програма\' не работят.</string>
|
||||
<string name="pref_transparent_port_dialog">Въведи портове на прокси</string>
|
||||
<string name="pref_has_root">Изисквай Root достъп</string>
|
||||
<string name="pref_has_root_summary">Изисквай root достъп за прозрачно прокси</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_details">Някои Орбот детайли</string>
|
||||
<string name="wizard_details_msg">Orbot е приложение с отворен код, което съдържа Tor, LibEvent и Polipo. То предлага локално HTTP прокси (8118) и SOCKS прокси (9050) към Tor мрежата. Orbot също така има възможноста, на усройства с root достъп, да препраща целият интернет трафик през Tor.</string>
|
||||
<string name="wizard_permissions_root">Правата дадени</string>
|
||||
<string name="wizard_permissions_stock">Orbot Permissions</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">Разбирам и искам да продължа без Суперпотребител</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">ChatSecure - Криптиран чат програма за Андроид</string>
|
||||
<string name="wizard_tips_proxy">Proxy Settings - Научете как да конфигурирате приложения да работят през Орбот</string>
|
||||
<string name="wizard_tips_duckgo">DuckDuckGo Търсачка</string>
|
||||
<string name="wizard_tips_twitter">Нагласете проксито на Twitter на \"localhost\" и порт 8118</string>
|
||||
<string name="wizard_tips_story_maker">StoryMaker - Създай история и остави сигурноста на tor!</string>
|
||||
<string name="twitter_setup_url">https://guardianproject.info/2012/05/02/orbot-your-twitter/</string>
|
||||
<string name="wizard_proxy_help_info">Прокси настройки</string>
|
||||
<string name="wizard_proxy_help_msg">Ако Андроид приложението, което използваш поддържа HTTP или SOCKS прокси, тогава мжоеш да го конфигурираш да се свързва с Orbot и да използва Tor.\n\n\nНастойките са host 127.0.0.1 или \"localhost\". За HTTP, портът е 8118. За SOCKS проксито е 9050. Най-добре е по възможност да се използва SOCKS4A или SOCKS5.\n\n\n\nМожеш да научиш повече за прокситата в Андроид през странцита с въпроси и отговори: http://tinyurl.com/proxyandroid\n </string>
|
||||
<string name="wizard_final">Орбот е готов!</string>
|
||||
<string name="wizard_final_msg">Милиони хора по света използват Tor по голям брой причини.\n\nЖурналисти и блогъри, защитници на човешките права, органите на реда, войници, корпорации, граждани на държави с репресивни режими, и най-обикновени граждани... а сега и ти!</string>
|
||||
<string name="wizard_exit_at_first_screen_toast">Моля, настрой Orbot преди да почнеш да го използваш!</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 е правилно настроен и дали си свързан с Tор.</string>
|
||||
<string name="pref_hs_group">Скрити услуги</string>
|
||||
<string name="pref_general_group">Главни</string>
|
||||
<string name="pref_start_boot_title">Стартирай Орбот при стартиране на устройството</string>
|
||||
<string name="pref_start_boot_summary">Автоматично стартирай Орбот и се свържи към Тор когато твоето Андроид устройство стартира</string>
|
||||
<!--New Wizard Strings-->
|
||||
<!--Title Screen-->
|
||||
<string name="wizard_title_msg">Орбот дава достъп до Tor през Android!\n\nTor ти помага да се предпазиш от филтриране на интернетът, анализ на трафика и подслушване по интернет всички, от които заплашват личното ти пространство, конфиденциалната ти информация и личните ти връзки.\n\nТози стъпка по стъпка наръчни ще ти помогне да настроиш Orbot и Tor на устройството си.</string>
|
||||
<!--Warning screen-->
|
||||
<string name="wizard_warning_title">Внимание</string>
|
||||
<string name="wizard_warning_msg">Самото инсталиране на Orbot няма автоматично да анонимизира мобилния ти трафик.\n\nТрябва да настроиш Orbot, устройството ти и други приложения, за да ползваш Tor успешно.</string>
|
||||
<!--Permissions screen-->
|
||||
<string name="wizard_permissions_title">Права</string>
|
||||
<string name="wizard_permissions_root_msg1">Ако желаеш може да разрешиш на Orbot \'Superuser\' права, за да включиш допълнителни функиции, като Прозрачно Проксифициране.</string>
|
||||
<string name="wizard_permissions_root_msg2">Ако не желаеш това се увери, че програмите, които ще използваш са съвместими с Orbot </string>
|
||||
<string name="wizard_permissions_no_root_msg">Устройството ти не изглежда да има или предлага root или така наречения \'Суперпотребителски\' достъп.\n\nМоля, използвай режидъмът \'Приложения\' на главния екран.</string>
|
||||
<!--TipsAndTricks screen-->
|
||||
<string name="wizard_tips_title">Приложения през Орбот</string>
|
||||
<string name="wizard_tips_gibberbot">ChatSecure: Криптирана чат програма с подръжка на Off-the-Record енкрипция.</string>
|
||||
<string name="wizard_tips_orweb">Orfox: Браузър с насоченост към осигуряване на личното пространство, който работи през Tor</string>
|
||||
<string name="wizard_tips_play">Намери всики Guardin Project програми в Google Play</string>
|
||||
<string name="wizard_tips_fdroid">Намери всички приложения на Guardian Project в F-Droid</string>
|
||||
<string name="wizard_tips_fdroid_org">Намери всички Guardian Project приложения на https://f-droid.org</string>
|
||||
<!--Transparent Proxy screen-->
|
||||
<string name="wizard_transproxy_title">Прозрачно прокси</string>
|
||||
<string name="wizard_transproxy_msg">Това позволява на приложенията Ви автоматично да използват мрежата на Тор без никаква конфигурация.</string>
|
||||
<string name="wizard_transproxy_hint">(Избери тази опция ако нямаш представа за какво става въпрос)</string>
|
||||
<string name="wizard_transproxy_none">Нищо</string>
|
||||
<string name="pref_transparent_tethering_title">Тетъринг през Тор</string>
|
||||
<string name="pref_transparent_tethering_summary">Включи Прозрачно Тор Проксифициране през Wifi и USB (изисква рестартирване)</string>
|
||||
<string name="button_grant_superuser">Изискай достъп на Суперпотребител</string>
|
||||
<string name="pref_select_apps">Избери приложения</string>
|
||||
<string name="pref_select_apps_summary">Избрери приложения за използване през Тор</string>
|
||||
<string name="pref_node_configuration">Настройки на node-а</string>
|
||||
<string name="pref_node_configuration_summary">Това са допълнителни настройки, които могат да намалят Вашата анонимност</string>
|
||||
<string name="pref_entrance_node">Входящи точки</string>
|
||||
<string name="pref_entrance_node_summary">Отпечатъци, никсове, държави и адреси за първия скок</string>
|
||||
<string name="pref_entrance_node_dialog">Въведи входящи точки</string>
|
||||
<string name="pref_allow_background_starts_title">Разреши тихо стартиране</string>
|
||||
<string name="pref_allow_background_starts_summary">Разреши на всяко приложение да иска от Orbot да стартира Tor услуги</string>
|
||||
<string name="button_proxy_all">Прокси за всички</string>
|
||||
<string name="button_proxy_none">Прокси за нито една</string>
|
||||
<string name="button_invert_selection">Обърни селекцията</string>
|
||||
<string name="pref_proxy_title">Изходящо Мрежово Прокси (Незадължително)</string>
|
||||
<string name="pref_proxy_type_title">Тип прокси</string>
|
||||
<string name="pref_proxy_type_summary">Протокол за прокси сървър: HTTP, HTTPS, Socks4, Socks5</string>
|
||||
<string name="pref_proxy_type_dialog">Тип на входящо прокси</string>
|
||||
<string name="pref_proxy_host_title">Прокси хост</string>
|
||||
<string name="pref_proxy_host_summary">Адреса на Прокси Сървърът</string>
|
||||
<string name="pref_proxy_host_dialog">Въведи прокси хост</string>
|
||||
<string name="pref_proxy_port_title">Порт на прокси</string>
|
||||
<string name="pref_proxy_port_summary">Порта на Прокси Сървърът</string>
|
||||
<string name="pref_proxy_port_dialog">Въведи прокси порт</string>
|
||||
<string name="pref_proxy_username_title">Изходящ Прокси Потребителско Име</string>
|
||||
<string name="pref_proxy_username_summary">Прокси Потребителско Име (Незадължително)</string>
|
||||
<string name="pref_proxy_username_dialog">Въведи Прокси Потребителско Име</string>
|
||||
<string name="pref_proxy_password_title">Изходяща Прокси Парола</string>
|
||||
<string name="pref_proxy_password_summary">Прокси Парола (Незадължително)</string>
|
||||
<string name="pref_proxy_password_dialog">Въведи Прокси Парола</string>
|
||||
<string name="status">Статус</string>
|
||||
<string name="setting_up_full_transparent_proxying_">Конфигуриране на напълно прозрачно прокси...</string>
|
||||
<string name="setting_up_app_based_transparent_proxying_">Конфигуриране на прозрачно прокси на база приложение...</string>
|
||||
<string name="transparent_proxying_enabled">Прозрачно прокси АКТИВНО</string>
|
||||
<string name="transproxy_enabled_for_tethering_">TransProxy е включен за Тетъринг!</string>
|
||||
<string name="warning_error_starting_transparent_proxying_">ВНИМАНИЕ: грешка при стартиране на прозрачно проски!</string>
|
||||
<string name="transproxy_rules_cleared">TransProxy правила изчистени</string>
|
||||
<string name="couldn_t_start_tor_process_">Неуспешно стартиране на Тор процес: </string>
|
||||
<string name="privoxy_is_running_on_port_">Polipo работи на порт:</string>
|
||||
<string name="setting_up_port_based_transparent_proxying_">Конфигуриране на прозрачно прокси на база порт...</string>
|
||||
<string name="bridge_error">Бридж грешка</string>
|
||||
<string name="bridge_requires_ip">За да използвате бридж функционалността трябва да въведете поне един IP адрес на бридж.</string>
|
||||
<string name="send_email_for_bridges">Изпрати и-мейл до bridges@torproject.org със съдържание \"get bridges\" в и-мейл от акаунт в gmail.</string>
|
||||
<string name="error">Грешка</string>
|
||||
<string name="your_reachableaddresses_settings_caused_an_exception_">Твоята ReachableAddresses настройка предизвика грешка!</string>
|
||||
<string name="your_relay_settings_caused_an_exception_">Твоите настройки за препращане предизвикаха изключение!</string>
|
||||
<string name="exit_nodes">Изходни точки</string>
|
||||
<string name="fingerprints_nicks_countries_and_addresses_for_the_last_hop">Отпечатъци, никсове, държави и адреси за последния скок</string>
|
||||
<string name="enter_exit_nodes">Въведи изходни точки</string>
|
||||
<string name="exclude_nodes">Не ползвай Node-ве</string>
|
||||
<string name="fingerprints_nicks_countries_and_addresses_to_exclude">Отпечатъци, никсове, държави и адреси, които да не бъдат ползвани</string>
|
||||
<string name="enter_exclude_nodes">Край</string>
|
||||
<string name="strict_nodes">Задължителни Node-we</string>
|
||||
<string name="use_only_these_specified_nodes">Използвай *само* изброените node-ве</string>
|
||||
<string name="bridges">Бриджове</string>
|
||||
<string name="use_bridges">Използвай Бриджове</string>
|
||||
<string name="bridges_obfuscated">Скрити Мостове</string>
|
||||
<string name="enable_alternate_entrance_nodes_into_the_tor_network">Включи алтернативени входящи node-ве в Tor Мрежата</string>
|
||||
<string name="enable_if_configured_bridges_are_obfuscated_bridges">Включи ако настроените мостове са скрити мостове</string>
|
||||
<string name="ip_address_and_port_of_bridges">IP адрес и порт на бриджове</string>
|
||||
<string name="enter_bridge_addresses">Въведи адреси на бриджове</string>
|
||||
<string name="relays">Препращачи(Relays)</string>
|
||||
<string name="relaying">Препращане</string>
|
||||
<string name="enable_your_device_to_be_a_non_exit_relay">Разреши устройството ти да бъде не изходен препращач</string>
|
||||
<string name="relay_port">Порт за Препращане</string>
|
||||
<string name="listening_port_for_your_tor_relay">Порт за слушане на твоя Тор препращач</string>
|
||||
<string name="enter_or_port">Въведи OR порт</string>
|
||||
<string name="relay_nickname">Прякор на препращача</string>
|
||||
<string name="the_nickname_for_your_tor_relay">Прякор за твоя Tor препращач</string>
|
||||
<string name="enter_a_custom_relay_nickname">Въведи прякор за препращача</string>
|
||||
<string name="reachable_addresses">Достижими адреси</string>
|
||||
<string name="run_as_a_client_behind_a_firewall_with_restrictive_policies">Стартирай като клиент зад firewall с рестриктивни политики</string>
|
||||
<string name="reachable_ports">Достъпни портове</string>
|
||||
<string name="ports_reachable_behind_a_restrictive_firewall">Портове достъпни зад firewall с рестриктивни политики</string>
|
||||
<string name="enter_ports">Въведи портове</string>
|
||||
<string name="enable_hidden_services">Включи скрити услуги</string>
|
||||
<string name="run_servers_accessible_via_the_tor_network">стартирай сървъри достъпни през Тор мрежата</string>
|
||||
<string name="enter_localhost_ports_for_hidden_services">въведи локални портове за скрити услуги</string>
|
||||
<string name="hidden_service_ports">Портове на скрити услуги</string>
|
||||
<string name="the_addressable_name_for_your_hidden_service_generated_automatically_">Автоматично генериран адрес за твоята скрита услуга(hidden service)</string>
|
||||
<string name="enable_debug_log_to_output_must_use_adb_or_alogcat_to_view_">включи запис на дебъг доклади (трябва да ползвате aLogCat или adb, за да ги разглеждаш)</string>
|
||||
<string name="project_home">Начални Станици на Проектите:</string>
|
||||
<string name="project_urls">https://www.torproject.org/docs/android\nhttps://guardianproject.info/apps/orbot/</string>
|
||||
<string name="the_tor_license">Тор лиценз</string>
|
||||
<string name="https_torproject_org">https://torproject.org</string>
|
||||
<string name="third_party_software">Софтуер на трети страни: </string>
|
||||
<string name="tor_version">Tor: https://www.torproject.org</string>
|
||||
<string name="libevent_version">LibEvent v2.0.21: http://www.monkey.org/~provos/libevent/</string>
|
||||
<string name="polipo_version">Polipo v1.1.9: https://github.com/jech/polipo</string>
|
||||
<string name="iptables_version">IPtables v1.4.21: http://www.netfilter.org</string>
|
||||
<string name="openssl_version">OpenSSL v1.0.1q: http://www.openssl.org</string>
|
||||
<string name="hidden_service_request">Приложение иска да отвори порт на скрит сървър %S към Тор мрежата. Безопасно е да се доверите на приложението.</string>
|
||||
<string name="found_existing_tor_process">намерил си съвместим Tor проект...</string>
|
||||
<string name="something_bad_happened">Нещо лошо се случи. Проверете лога</string>
|
||||
<string name="hidden_service_on">Скрита услуга включена:</string>
|
||||
<string name="unable_to_read_hidden_service_name">не може да прочете име на скрита услуга</string>
|
||||
<string name="unable_to_start_tor">Не може да стартира Тор:</string>
|
||||
<string name="unable_to_reset_tor">Рестартирай устройството си, неуспешно рестариване на Tor!</string>
|
||||
<string name="pref_use_sys_iptables_title">Използвай Iptables по подразбиране</string>
|
||||
<string name="pref_use_sys_iptables_summary">използвай вградените двуични iptables вместо тези идващи с Orbot</string>
|
||||
<string name="error_installing_binares">Двуичните файлове на Тор не бяха инсталирани или обновени.</string>
|
||||
<string name="pref_use_persistent_notifications">Винаги показвай икона в тулбара когато Орбот е свързан</string>
|
||||
<string name="pref_use_persistent_notifications_title">Уведомления винаги включени</string>
|
||||
<string name="pref_use_expanded_notifications">Покажи разширена информация за Tor изходната държава и IP в лентата за известия</string>
|
||||
<string name="pref_use_expanded_notifications_title">Разширени известия</string>
|
||||
<string name="notification_using_bridges">Мостове включени!</string>
|
||||
<string name="default_bridges"></string>
|
||||
<string name="set_locale_title">Език</string>
|
||||
<string name="set_locale_summary">Избери местоположение и език за Орбот</string>
|
||||
<string name="wizard_locale_title">Избери език</string>
|
||||
<string name="wizard_locale_msg">Остави по подразбиране или смени наличния език</string>
|
||||
<string name="powered_by">базиран на Tor</string>
|
||||
<string name="btn_save_settings">Запази настройки</string>
|
||||
<string name="no_internet_connection_tor">Няма интернет връзка; Tor е в режим на изчакване...</string>
|
||||
<string name="bandwidth_">Скорост:</string>
|
||||
<string name="down">теглене</string>
|
||||
<string name="up">изпращане</string>
|
||||
<string name="pref_disable_network_title">Лиспва Автоматичен Режим на Изчакване</string>
|
||||
<string name="pref_disable_network_summary">Сложи Tor в режим на изчакване, когато няма интернет</string>
|
||||
<string name="newnym">Сменихте своята Тор идентичност!</string>
|
||||
<string name="menu_verify_browser">Браузър</string>
|
||||
<string name="menu_use_chatsecure">Използвай ChatSecure</string>
|
||||
<string name="permission_manage_tor_label">Настрой Tor</string>
|
||||
<string name="permission_manage_tor_description">Разреши тази програма да контролира Tor</string>
|
||||
<string name="it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_">Не изглежда да имате Orfox инсталиран. Желаете ли помощ с това, или просто да отворим браузъра?</string>
|
||||
<string name="install_apps_">Инсталирай програми?</string>
|
||||
<string name="no_network_connectivity_putting_tor_to_sleep_">Няма интернет връзка. Преминаване в режим на изчкаване...</string>
|
||||
<string name="network_connectivity_is_good_waking_tor_up_">Добра интернет връзка. Събуждане на Tor...</string>
|
||||
<string name="updating_settings_in_tor_service">обновяване на настройките в Tor услугата</string>
|
||||
<string name="pref_socks_title">Tor SOCKS</string>
|
||||
<string name="pref_socks_summary">Порт, на който Tor предлага своето SOCKS прокси(подразбиране: 9050 или 0, за да забраниш)</string>
|
||||
<string name="pref_socks_dialog">SOCKS Port Config</string>
|
||||
<string name="pref_transport_title">Tor TransProxy Port</string>
|
||||
<string name="pref_transport_summary">Порт, на който Tor предлага своето Transparent прокси прокси(подразбиране: 9040 или 0, за да забраниш)</string>
|
||||
<string name="pref_transport_dialog">TransProxy Port Config</string>
|
||||
<string name="pref_dnsport_title">Tor DNS Port</string>
|
||||
<string name="pref_dnsport_summary">Порт, на който Tor предлага своят DNS (подразбиране: 5400 или 0, за да забраниш)</string>
|
||||
<string name="pref_dnsport_dialog">DNS Port Config</string>
|
||||
<string name="pref_torrc_title">Torrc Custom Config</string>
|
||||
<string name="pref_torrc_summary">САМО ЗА ЕКСПЕРТИ: въведи директно torrc конфигурационният код</string>
|
||||
<string name="pref_torrc_dialog">Ръчно настроен Torrc</string>
|
||||
<string name="wizard_tips_martus">Mobile Martus - Benetech Human Rights Documentation App</string>
|
||||
<string name="your_tor_public_ips_">Твоите публични Tor IP-та:</string>
|
||||
<string name="please_disable_this_app_in_android_settings_apps_if_you_are_having_problems_with_orbot_">Моля, забрани тази програма в Android->Настройки->Приложения ако имаш проблеми с Orbot:</string>
|
||||
<string name="app_conflict">Конфликт с друго приложение</string>
|
||||
<string name="pref_transproxy_refresh_title">Транспрокси автоматично освежаване</string>
|
||||
<string name="pref_transproxy_refresh_summary">Приложи повторно транспрокси правилата при промяна на състоянието на мрежата</string>
|
||||
<string name="pref_transproxy_flush_title">Транспроски ПРИНУДИТЕЛНО ПРЕМАХВАНЕ</string>
|
||||
<string name="pref_transproxy_flush_summary">Натисни тук, за да изтриеш всички транспркси мрежови правила ВЕДНАГА</string>
|
||||
<string name="transparent_proxy_rules_flushed_">Транспрокси правилата изтрити!</string>
|
||||
<string name="you_do_not_have_root_access_enabled">Нямаш ROOT достъп до устройството</string>
|
||||
<string name="you_may_need_to_stop_and_start_orbot_for_settings_change_to_be_enabled_">Може да се наложи да спреш и стартираш Orbot, за да могат някои настройки да влязат в действие.</string>
|
||||
<string name="menu_vpn">VPN</string>
|
||||
<string name="kbps">kbps</string>
|
||||
<string name="mbps">mbps</string>
|
||||
<string name="kb">KB</string>
|
||||
<string name="mb">MB</string>
|
||||
<string name="bridges_updated">Мостове включени!</string>
|
||||
<string name="restart_orbot_to_use_this_bridge_">Моля, рестартирай Orbot, за да влязат в действие промените</string>
|
||||
<string name="menu_qr">QR Кодове</string>
|
||||
<string name="if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_">Ако вашата мрежа целенасочено блирва Tor, може да използвате Мост, за да се свържете. ИЗБЕРЕТЕ един от видовете мостове изброени по-горе, за да включите тази функционалност.</string>
|
||||
<string name="bridge_mode">Режим мост</string>
|
||||
<string name="get_bridges_email">Имейл</string>
|
||||
<string name="get_bridges_web">Уеб</string>
|
||||
<string name="activate">Активирай</string>
|
||||
<string name="apps_mode">Приложения във VPN режим</string>
|
||||
<string name="you_can_enable_all_apps_on_your_device_to_run_through_the_tor_network_using_the_vpn_feature_of_android_">Можеш да настроиш всички приложения да минават през Tor мрежата използвайки VPN функцията на Андроид.\n\n*ПРЕДУПРЕЖДЕНИЕ* Това е нова, експериментална функция и в някои случаи може да не стартира автоматично, или да спре. НЕ бива да се използва за анонимност, а САМО за преминаване през файъруоли и филтри.</string>
|
||||
<string name="send_email">Изпрати имейл</string>
|
||||
<string name="you_must_get_a_bridge_address_by_email_web_or_from_a_friend_once_you_have_this_address_please_paste_it_into_the_bridges_preference_in_orbot_s_setting_and_restart_">Можеш да получиш адреса на мост по имейл, интернет или като сканираш QR kod. Избери \'Имейл\' или \'Интернет\' по-долу, за да поискаш адрес на мост.\n\nВеднъж щом получиш адреса го копирай в \"Мостове\", в настройките на Orbot и рестартирай приложението.</string>
|
||||
<string name="install_orweb">Инсталирай Orfox</string>
|
||||
<string name="standard_browser">Нормален Браузър</string>
|
||||
<string name="note_only_standard_tor_bridges_work_on_intel_x86_atom_devices">БЕЛЕЖКА: Само стандартни Tor мостове работя на Intel X86/ATOM устройства</string>
|
||||
<string name="vpn_default_world">Свят</string>
|
||||
</resources>
|