mirror of
https://github.com/PurpleI2P/i2pd-android.git
synced 2024-12-06 19:27:28 +01:00
Compare commits
73 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c7bdaac061 | |||
| 3b7f9b511f | |||
| 9bf0a7b787 | |||
| 2d2662fe63 | |||
| 97abcc661f | |||
| 8a791c45c2 | |||
| 4334fd4bdb | |||
| f0132e9847 | |||
| 06b567d910 | |||
| dd17608af9 | |||
| 2e10678278 | |||
| 8132dbde08 | |||
| f2ee4e5ea0 | |||
| 57fef00c48 | |||
| b003a07f1b | |||
| 3b328d7f7c | |||
| f2b7ae1ada | |||
| fce1dc98d0 | |||
| 5d86c53204 | |||
| a88037692f | |||
| 67a98991d0 | |||
| a3cddc954d | |||
| a36131b1bc | |||
| e0a2d6f015 | |||
| a411f9132f | |||
| e2dfde17bf | |||
| 447407483d | |||
| e925b58239 | |||
| 1a4e0c02de | |||
| b0f8bf87ba | |||
| 99fc0992f2 | |||
| e27534dbbe | |||
| 8abfd1f5fb | |||
| 6c162bc689 | |||
| a61012f72d | |||
| 2bdb97db0f | |||
| d72e3aeea6 | |||
| a82a4cc211 | |||
| 063173e546 | |||
| cc14c7e6c2 | |||
| 61846ef57b | |||
| 063b416bf1 | |||
| 470cc90b6a | |||
| b0204a59ea | |||
| ef5f7a1d95 | |||
| 82897ccb93 | |||
| 97f0490fdf | |||
| d1c6ecb850 | |||
| 2a4fa8c036 | |||
| 8debf9fc73 | |||
| 8e2e80ea5d | |||
| 3dbb4e9759 | |||
| 0ead601868 | |||
| 9b4ee8447a | |||
| 7611296f63 | |||
| b63dbb5223 | |||
| ed985c6082 | |||
| 8bdb77b4cf | |||
| d57a241d6e | |||
| ae3016e4b7 | |||
| 4be1d99e8f | |||
| 578a97f549 | |||
| 21a7200b34 | |||
| 84636050c6 | |||
| f363c10040 | |||
| 67fb27a6ce | |||
| c62429513f | |||
| 1b09291b84 | |||
| c74b3f7ff0 | |||
| 75d444f374 | |||
| ba6fb5bbb9 | |||
| 4c0cc3f637 | |||
| c345816030 |
@@ -9,28 +9,28 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
- name: Install rename tool
|
||||
- name: Install GNU C++ compiler
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y g++ rename
|
||||
- name: Setup JDK 1.8
|
||||
sudo apt-get install -y g++
|
||||
- name: Setup JDK 1.11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: 1.11
|
||||
- name: Setup Android SDK
|
||||
uses: maxim-lobanov/setup-android-tools@v1
|
||||
with:
|
||||
packages: |
|
||||
build-tools;31.0.0
|
||||
platforms;android-31
|
||||
ndk;23.1.7779620
|
||||
build-tools;32.0.0
|
||||
platforms;android-32
|
||||
ndk;23.2.8568313
|
||||
cmake;3.22.1
|
||||
cache: true
|
||||
- name: Build required modules
|
||||
run: |
|
||||
export ANDROID_SDK_ROOT=$ANDROID_HOME
|
||||
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.1.7779620
|
||||
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.2.8568313
|
||||
pushd app/jni
|
||||
sed -i -e 's/d+2/d+0/' boost/build-android.sh
|
||||
./build_boost.sh
|
||||
./build_openssl.sh
|
||||
./build_miniupnpc.sh
|
||||
@@ -40,5 +40,56 @@ jobs:
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: android-apks
|
||||
path: app/build/outputs/apk/debug/*.apk
|
||||
|
||||
build-binary:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
- name: Install GNU C++ compiler
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y g++
|
||||
- name: Setup JDK 1.11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 1.11
|
||||
- name: Setup Android SDK
|
||||
uses: maxim-lobanov/setup-android-tools@v1
|
||||
with:
|
||||
packages: |
|
||||
ndk;23.2.8568313
|
||||
cmake;3.22.1
|
||||
cache: true
|
||||
- name: Build required modules
|
||||
run: |
|
||||
export ANDROID_SDK_ROOT=$ANDROID_HOME
|
||||
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.2.8568313
|
||||
pushd binary/jni
|
||||
./build_boost.sh
|
||||
./build_openssl.sh
|
||||
./build_miniupnpc.sh
|
||||
popd
|
||||
- name: Build binaries with NDK
|
||||
run: |
|
||||
pushd binary/jni
|
||||
$ANDROID_NDK_HOME/ndk-build -j2 NDK_MODULE_PATH=$PWD
|
||||
popd
|
||||
- name: Create package with built binaries
|
||||
run: |
|
||||
pushd contrib/binary_pack
|
||||
./build-archive
|
||||
popd
|
||||
- name: Upload binaries archive
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: android-binaries
|
||||
path: binary/libs/*
|
||||
- name: Upload binaries package
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: android-binaries-pack
|
||||
path: contrib/binary_pack/i2pd_*_android_binary.zip
|
||||
|
||||
@@ -12,40 +12,46 @@ This repository contains Android application sources of i2pd
|
||||
|
||||
## How to build
|
||||
|
||||
### Install OpenJDK, g++, rename (used for building modules), gradle 5.1+, download Android SDK
|
||||
### Install g++, OpenJDK 11+, gradle 5.1+
|
||||
|
||||
```bash
|
||||
sudo apt-get install g++ rename gradle
|
||||
sudo apt-get install g++ openjdk-11-jdk gradle
|
||||
```
|
||||
|
||||
Android SDK Available here:
|
||||
|
||||
https://developer.android.com/studio#downloads
|
||||
|
||||
If your system provides gradle with version < 5.1, download it from gradle homepage:
|
||||
|
||||
https://gradle.org/install/
|
||||
|
||||
### Prepare Android SDK for building
|
||||
Download Android SDK, unpack it to any directory (`/opt/anrdoid-sdk` for example) and install required packages
|
||||
### Download and prepare Android SDK for building
|
||||
|
||||
Android SDK Available here:
|
||||
|
||||
https://developer.android.com/studio#downloads
|
||||
|
||||
Download Android SDK, unpack it to temporary directory `/tmp/anrdoid-sdk` and install it (in `/opt/android-sdk` for example) with required packages
|
||||
```bash
|
||||
mkdir /opt/android-sdk
|
||||
cd /opt/android-sdk
|
||||
mkdir /tmp/android-sdk
|
||||
cd /tmp/android-sdk
|
||||
wget https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
|
||||
unzip commandlinetools-linux-8092744_latest.zip
|
||||
# install required tools
|
||||
./cmdline-tools/bin/sdkmanager --sdk_root=/opt/android-sdk "build-tools;29.0.3" "cmake;3.18.1" "ndk;23.1.7779620"
|
||||
./cmdline-tools/bin/sdkmanager --sdk_root=/opt/android-sdk "build-tools;33.0.1" "cmake;3.22.1" "ndk;23.2.8568313"
|
||||
```
|
||||
|
||||
### Clone repository with submodules
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules https://github.com/PurpleI2P/i2pd-android.git
|
||||
```
|
||||
|
||||
### Compile application
|
||||
|
||||
```bash
|
||||
export ANDROID_SDK_ROOT=/opt/android-sdk
|
||||
export ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/23.1.7779620
|
||||
# if you are not using Java 11 by default:
|
||||
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
|
||||
|
||||
export ANDROID_HOME=/opt/android-sdk
|
||||
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.2.8568313
|
||||
|
||||
pushd app/jni
|
||||
./build_boost.sh
|
||||
@@ -57,3 +63,21 @@ gradle clean assembleDebug
|
||||
```
|
||||
|
||||
You will find APKs in `app/build/outputs/apk`
|
||||
|
||||
### Building on Windows
|
||||
|
||||
For building on Windows you must use MSYS2 with `mingw64` or `ucrt64` shell and preinstalled `gcc` ( package `mingw-w64-x86_64-gcc` or `mingw-w64-ucrt-x86_64-gcc`).
|
||||
|
||||
Java 11 can be downloaded from [jdk.java.com](https://jdk.java.net/java-se-ri/11)
|
||||
|
||||
Download Android SDK command line tools for Windows, unpack and install it replacing `--sdk_root=` path.
|
||||
|
||||
`ANDROID_HOME` variable must point to SDK using linux-way path, like `/c/dev/android-sdk` when SDK installed to `C:\dev\android-sdk`.
|
||||
|
||||
Gradle can be called with `./gradlew` command inside project root, or you can install it using `pacman` and call `gradle` like on linux.
|
||||
|
||||
## Release signing
|
||||
|
||||
Current releases signed with certificate fingerprint (SHA-256):
|
||||
|
||||
`FC:C3:C7:34:9E:22:6A:77:B3:70:46:BB:00:FD:04:BB:A5:30:32:21:01:F8:62:F3:6D:8C:3D:B0:EB:B6:35:20`
|
||||
|
||||
+10
-8
@@ -3,20 +3,21 @@ plugins {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'androidx.core:core:1.3.2'
|
||||
implementation 'androidx.core:core:1.9.0'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
compileSdkVersion 33
|
||||
|
||||
defaultConfig {
|
||||
applicationId "org.purplei2p.i2pd"
|
||||
targetSdkVersion 29
|
||||
targetSdkVersion 33
|
||||
minSdkVersion 16
|
||||
versionCode 24100
|
||||
versionName "2.41.0"
|
||||
setProperty("archivesBaseName", archivesBaseName + "-" + versionName)
|
||||
versionCode 2460100
|
||||
versionName "2.46.1"
|
||||
archivesBaseName += "-$versionName"
|
||||
ndkVersion "23.2.8568313"
|
||||
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a"
|
||||
@@ -69,9 +70,10 @@ android {
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = "1.8"
|
||||
targetCompatibility = "1.8"
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
namespace 'org.purplei2p.i2pd'
|
||||
}
|
||||
|
||||
ext.abiCodes = ['armeabi-v7a': 1, 'x86': 2, 'arm64-v8a': 3, 'x86_64': 4]
|
||||
|
||||
+16
-15
@@ -24,56 +24,57 @@ LOCAL_SRC_FILES := \
|
||||
$(DAEMON_SRC_PATH)/Daemon.cpp \
|
||||
$(DAEMON_SRC_PATH)/UPnP.cpp \
|
||||
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
|
||||
$(DAEMON_SRC_PATH)/I2PControl.cpp
|
||||
$(DAEMON_SRC_PATH)/I2PControl.cpp \
|
||||
$(DAEMON_SRC_PATH)/I2PControlHandlers.cpp
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := boost_system
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_system.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := boost_date_time
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_date_time.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := boost_filesystem
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_filesystem.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := boost_program_options
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_program_options.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := crypto
|
||||
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libcrypto.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libcrypto.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := ssl
|
||||
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libssl.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libssl.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
|
||||
LOCAL_STATIC_LIBRARIES := crypto
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := miniupnpc
|
||||
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/libminiupnpc.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/include
|
||||
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
@@ -4,7 +4,7 @@ APP_STL := c++_static
|
||||
# Enable c++17 extensions in source code
|
||||
APP_CPPFLAGS += -std=c++17 -fexceptions -frtti
|
||||
|
||||
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP -Wno-deprecated-declarations -fstack-protector
|
||||
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP -Wno-deprecated-declarations
|
||||
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
|
||||
APP_CPPFLAGS += -DANDROID_ARM7A
|
||||
endif
|
||||
|
||||
+19
-119
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2020, The PurpleI2P Project
|
||||
* Copyright (c) 2013-2022, The PurpleI2P Project
|
||||
*
|
||||
* This file is part of Purple i2pd project and licensed under BSD3
|
||||
*
|
||||
@@ -22,135 +22,43 @@ namespace i2p
|
||||
{
|
||||
namespace android
|
||||
{
|
||||
/* Worker::Worker (DaemonAndroidImpl& daemon):
|
||||
m_Daemon (daemon)
|
||||
{
|
||||
}
|
||||
|
||||
void Worker::startDaemon()
|
||||
{
|
||||
Log.d(TAG"Performing daemon start...");
|
||||
m_Daemon.start();
|
||||
Log.d(TAG"Daemon started.");
|
||||
emit resultReady();
|
||||
}
|
||||
void Worker::restartDaemon()
|
||||
{
|
||||
Log.d(TAG"Performing daemon restart...");
|
||||
m_Daemon.restart();
|
||||
Log.d(TAG"Daemon restarted.");
|
||||
emit resultReady();
|
||||
}
|
||||
void Worker::stopDaemon() {
|
||||
Log.d(TAG"Performing daemon stop...");
|
||||
m_Daemon.stop();
|
||||
Log.d(TAG"Daemon stopped.");
|
||||
emit resultReady();
|
||||
}
|
||||
|
||||
Controller::Controller(DaemonAndroidImpl& daemon):
|
||||
m_Daemon (daemon)
|
||||
{
|
||||
Worker *worker = new Worker (m_Daemon);
|
||||
worker->moveToThread(&workerThread);
|
||||
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
|
||||
connect(this, &Controller::startDaemon, worker, &Worker::startDaemon);
|
||||
connect(this, &Controller::stopDaemon, worker, &Worker::stopDaemon);
|
||||
connect(this, &Controller::restartDaemon, worker, &Worker::restartDaemon);
|
||||
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
|
||||
workerThread.start();
|
||||
}
|
||||
Controller::~Controller()
|
||||
{
|
||||
Log.d(TAG"Closing and waiting for daemon worker thread...");
|
||||
workerThread.quit();
|
||||
workerThread.wait();
|
||||
Log.d(TAG"Waiting for daemon worker thread finished.");
|
||||
if(m_Daemon.isRunning())
|
||||
{
|
||||
Log.d(TAG"Stopping the daemon...");
|
||||
m_Daemon.stop();
|
||||
Log.d(TAG"Stopped the daemon.");
|
||||
}
|
||||
}
|
||||
*/
|
||||
std::string dataDir = "";
|
||||
std::string language = "";
|
||||
|
||||
DaemonAndroidImpl::DaemonAndroidImpl ()
|
||||
//:
|
||||
/*mutex(nullptr), */
|
||||
//m_IsRunning(false),
|
||||
//m_RunningChangedCallback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
DaemonAndroidImpl::~DaemonAndroidImpl ()
|
||||
{
|
||||
//delete mutex;
|
||||
}
|
||||
|
||||
bool DaemonAndroidImpl::init(int argc, char* argv[])
|
||||
{
|
||||
//mutex=new QMutex(QMutex::Recursive);
|
||||
//setRunningCallback(0);
|
||||
//m_IsRunning=false;
|
||||
|
||||
// make sure assets are ready before proceed
|
||||
i2p::fs::DetectDataDir(dataDir, false);
|
||||
int numAttempts = 0;
|
||||
do
|
||||
{
|
||||
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
|
||||
numAttempts++;
|
||||
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
|
||||
}
|
||||
while (numAttempts <= 10); // 10 seconds max
|
||||
return Daemon.init(argc, argv);
|
||||
}
|
||||
|
||||
void DaemonAndroidImpl::start()
|
||||
{
|
||||
//QMutexLocker locker(mutex);
|
||||
//setRunning(true);
|
||||
Daemon.start();
|
||||
}
|
||||
|
||||
void DaemonAndroidImpl::stop()
|
||||
{
|
||||
//QMutexLocker locker(mutex);
|
||||
Daemon.stop();
|
||||
//setRunning(false);
|
||||
}
|
||||
|
||||
void DaemonAndroidImpl::restart()
|
||||
{
|
||||
//QMutexLocker locker(mutex);
|
||||
stop();
|
||||
start();
|
||||
}
|
||||
/*
|
||||
void DaemonAndroidImpl::setRunningCallback(runningChangedCallback cb)
|
||||
|
||||
void DaemonAndroidImpl::setDataDir(std::string path)
|
||||
{
|
||||
m_RunningChangedCallback = cb;
|
||||
Daemon.setDataDir(path);
|
||||
}
|
||||
|
||||
bool DaemonAndroidImpl::isRunning()
|
||||
{
|
||||
return m_IsRunning;
|
||||
}
|
||||
|
||||
void DaemonAndroidImpl::setRunning(bool newValue)
|
||||
{
|
||||
bool oldValue = m_IsRunning;
|
||||
if(oldValue!=newValue)
|
||||
{
|
||||
m_IsRunning = newValue;
|
||||
if(m_RunningChangedCallback)
|
||||
m_RunningChangedCallback();
|
||||
}
|
||||
}
|
||||
*/
|
||||
static DaemonAndroidImpl daemon;
|
||||
static char* argv[1]={strdup("tmp")};
|
||||
/**
|
||||
@@ -161,40 +69,32 @@ namespace android
|
||||
{
|
||||
try
|
||||
{
|
||||
//int result;
|
||||
|
||||
{
|
||||
//Log.d(TAG"Initialising the daemon...");
|
||||
// make sure assets are ready before proceed
|
||||
i2p::fs::DetectDataDir(dataDir, false);
|
||||
int numAttempts = 0;
|
||||
do
|
||||
{
|
||||
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
|
||||
numAttempts++;
|
||||
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
|
||||
}
|
||||
while (numAttempts <= 10); // 10 seconds max
|
||||
|
||||
// Set application directory
|
||||
daemon.setDataDir(dataDir);
|
||||
|
||||
bool daemonInitSuccess = daemon.init(1, argv);
|
||||
if(!daemonInitSuccess)
|
||||
{
|
||||
//QMessageBox::critical(0, "Error", "Daemon init failed");
|
||||
return "Daemon init failed";
|
||||
}
|
||||
|
||||
// Set webconsole language from application
|
||||
i2p::i18n::SetLanguage(language);
|
||||
|
||||
//Log.d(TAG"Initialised, creating the main window...");
|
||||
//MainWindow w;
|
||||
//Log.d(TAG"Before main window.show()...");
|
||||
//w.show ();
|
||||
|
||||
{
|
||||
//i2p::qt::Controller daemonQtController(daemon);
|
||||
//Log.d(TAG"Starting the daemon...");
|
||||
//emit daemonQtController.startDaemon();
|
||||
//daemon.start ();
|
||||
//Log.d(TAG"Starting GUI event loop...");
|
||||
//result = app.exec();
|
||||
//daemon.stop ();
|
||||
daemon.start();
|
||||
}
|
||||
daemon.start();
|
||||
}
|
||||
|
||||
//QMessageBox::information(&w, "Debug", "demon stopped");
|
||||
//Log.d(TAG"Exiting the application");
|
||||
//return result;
|
||||
}
|
||||
catch (boost::exception& ex)
|
||||
{
|
||||
|
||||
+12
-60
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2020, The PurpleI2P Project
|
||||
* Copyright (c) 2013-2022, The PurpleI2P Project
|
||||
*
|
||||
* This file is part of Purple i2pd project and licensed under BSD3
|
||||
*
|
||||
@@ -22,79 +22,31 @@ namespace android
|
||||
DaemonAndroidImpl ();
|
||||
~DaemonAndroidImpl ();
|
||||
|
||||
//typedef void (*runningChangedCallback)();
|
||||
|
||||
/**
|
||||
* @return success
|
||||
*/
|
||||
bool init(int argc, char* argv[]);
|
||||
void start();
|
||||
void stop();
|
||||
void restart();
|
||||
//void setRunningCallback(runningChangedCallback cb);
|
||||
//bool isRunning();
|
||||
private:
|
||||
//void setRunning(bool running);
|
||||
private:
|
||||
//QMutex* mutex;
|
||||
//bool m_IsRunning;
|
||||
//runningChangedCallback m_RunningChangedCallback;
|
||||
bool init (int argc, char* argv[]);
|
||||
void start ();
|
||||
void stop ();
|
||||
void restart ();
|
||||
|
||||
void setDataDir (std::string path);
|
||||
};
|
||||
|
||||
/**
|
||||
* returns "ok" if daemon init failed
|
||||
* returns errinfo if daemon initialized and started okay
|
||||
*/
|
||||
std::string start();
|
||||
std::string start ();
|
||||
|
||||
// stops the daemon
|
||||
void stop();
|
||||
void stop ();
|
||||
|
||||
// set datadir received from jni
|
||||
void SetDataDir(std::string jdataDir);
|
||||
void SetDataDir (std::string jdataDir);
|
||||
// get datadir
|
||||
std::string GetDataDir(void);
|
||||
std::string GetDataDir (void);
|
||||
// set webconsole language
|
||||
void SetLanguage(std::string jlanguage);
|
||||
/*
|
||||
class Worker : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
Worker (DaemonAndroidImpl& daemon);
|
||||
|
||||
private:
|
||||
|
||||
DaemonAndroidImpl& m_Daemon;
|
||||
|
||||
public slots:
|
||||
void startDaemon();
|
||||
void restartDaemon();
|
||||
void stopDaemon();
|
||||
|
||||
signals:
|
||||
void resultReady();
|
||||
};
|
||||
|
||||
class Controller : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
QThread workerThread;
|
||||
public:
|
||||
Controller(DaemonAndroidImpl& daemon);
|
||||
~Controller();
|
||||
private:
|
||||
DaemonAndroidImpl& m_Daemon;
|
||||
|
||||
public slots:
|
||||
void handleResults(){}
|
||||
signals:
|
||||
void startDaemon();
|
||||
void stopDaemon();
|
||||
void restartDaemon();
|
||||
};
|
||||
*/
|
||||
void SetLanguage (std::string jlanguage);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
Submodule app/jni/boost updated: ccfc74f1c9...53e6c16ea8
+15
-63
@@ -3,69 +3,19 @@
|
||||
set -e
|
||||
|
||||
BOOST_VERSION=1.78.0
|
||||
BOOST_VERSION_SUFFIX=1_78
|
||||
BOOST_LIBS=date_time,filesystem,program_options,system
|
||||
|
||||
REMOVE_BOOST_LIBS_SUFFIX_x86_64=-clang-mt-x64-${BOOST_VERSION_SUFFIX}
|
||||
REMOVE_BOOST_LIBS_SUFFIX_ARM64=-clang-mt-a64-${BOOST_VERSION_SUFFIX}
|
||||
REMOVE_BOOST_LIBS_SUFFIX_x86=-clang-mt-x32-${BOOST_VERSION_SUFFIX}
|
||||
REMOVE_BOOST_LIBS_SUFFIX_ARM=-clang-mt-a32-${BOOST_VERSION_SUFFIX}
|
||||
|
||||
function build_one {
|
||||
echo "Configuring and building..."
|
||||
CXXFLAGS="-std=c++14" \
|
||||
NCPU=$(nproc) \
|
||||
./build-android.sh \
|
||||
--boost=${BOOST_VERSION} \
|
||||
--arch=${CPU} \
|
||||
--target-version=${API} \
|
||||
--with-libraries=${BOOST_LIBS} \
|
||||
${ANDROID_NDK_HOME}
|
||||
|
||||
case "${CPU}" in
|
||||
x86_64)
|
||||
mkdir -p out/{x86_64,include}
|
||||
cp build/out/x86_64/lib/*.a out/${CPU}
|
||||
rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_x86_64}'//' out/x86_64/*.a
|
||||
cp -r build/out/x86_64/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include
|
||||
|
||||
;;
|
||||
arm64-v8a)
|
||||
mkdir -p out/{arm64-v8a,include}
|
||||
cp build/out/arm64-v8a/lib/*.a out/${CPU}
|
||||
rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_ARM64}'//' out/arm64-v8a/*.a
|
||||
cp -r build/out/arm64-v8a/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include
|
||||
;;
|
||||
x86)
|
||||
mkdir -p out/{x86,include}
|
||||
cp build/out/x86/lib/*.a out/${CPU}
|
||||
rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_x86}'//' out/x86/*.a
|
||||
cp -r build/out/x86/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include
|
||||
;;
|
||||
armeabi-v7a)
|
||||
mkdir -p out/{armeabi-v7a,include}
|
||||
cp build/out/armeabi-v7a/lib/*.a out/${CPU}
|
||||
rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_ARM}'//' out/armeabi-v7a/*.a
|
||||
cp -r build/out/armeabi-v7a/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include
|
||||
;;
|
||||
*)
|
||||
mkdir -p out/{x86_64,arm64-v8a,x86,armeabi-v7a,include}
|
||||
|
||||
cp build/out/x86_64/lib/*.a out/x86_64
|
||||
rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_x86_64}'//' out/x86_64/*.a
|
||||
|
||||
cp build/out/arm64-v8a/lib/*.a out/arm64-v8a
|
||||
rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_ARM64}'//' out/arm64-v8a/*.a
|
||||
|
||||
cp build/out/x86/lib/*.a out/x86
|
||||
rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_x86}'//' out/x86/*.a
|
||||
|
||||
cp build/out/armeabi-v7a/lib/*.a out/armeabi-v7a
|
||||
rename 's/'${REMOVE_BOOST_LIBS_SUFFIX_ARM}'//' out/armeabi-v7a/*.a
|
||||
|
||||
cp -r build/out/arm64-v8a/include/boost-${BOOST_VERSION_SUFFIX}/boost out/include
|
||||
;;
|
||||
esac
|
||||
--boost=$BOOST_VERSION \
|
||||
--arch=$CPU \
|
||||
--target-version=$API \
|
||||
--with-libraries=$BOOST_LIBS \
|
||||
--layout=system \
|
||||
$ANDROID_NDK_HOME
|
||||
}
|
||||
|
||||
function checkPreRequisites {
|
||||
@@ -82,14 +32,9 @@ function checkPreRequisites {
|
||||
fi
|
||||
}
|
||||
|
||||
checkPreRequisites
|
||||
|
||||
cd boost
|
||||
rm -rf out
|
||||
|
||||
function build {
|
||||
for arg in "$@"; do
|
||||
case "${arg}" in
|
||||
case "$arg" in
|
||||
x86_64)
|
||||
API=21
|
||||
TARGET=x86_64
|
||||
@@ -112,7 +57,6 @@ function build {
|
||||
;;
|
||||
all)
|
||||
API=16
|
||||
CPU=x86_64,arm64-v8a,x86,armeabi-v7a
|
||||
build_one
|
||||
;;
|
||||
*)
|
||||
@@ -121,6 +65,14 @@ function build {
|
||||
done
|
||||
}
|
||||
|
||||
checkPreRequisites
|
||||
|
||||
cd boost
|
||||
|
||||
# disable verbose output
|
||||
sed -i -E -e 's/d\+2/d\+0/' build-android.sh
|
||||
sed -i -E -e 's/\"23\.1\"\|\"25\.0\"/\"23\.1\"\|\"23\.2\"\|\"25\.0\"/' build-android.sh
|
||||
|
||||
if (( $# == 0 )); then
|
||||
build all
|
||||
else
|
||||
|
||||
+24
-25
@@ -2,32 +2,31 @@
|
||||
|
||||
set -e
|
||||
|
||||
CMAKE_VERSION=3.18.1
|
||||
CMAKE_VERSION=3.22.1
|
||||
|
||||
function build_one {
|
||||
mkdir -p out/${CPU}
|
||||
cd out/${CPU}
|
||||
mkdir -p build out/$CPU
|
||||
cd build
|
||||
|
||||
cmake \
|
||||
-G "Unix Makefiles" \
|
||||
-DUPNPC_BUILD_SHARED=False \
|
||||
-DUPNPC_BUILD_TESTS=False \
|
||||
-DUPNPC_BUILD_SAMPLE=False \
|
||||
-DANDROID_NATIVE_API_LEVEL=${API} \
|
||||
-DANDROID_ABI=${CPU} \
|
||||
-DANDROID_NATIVE_API_LEVEL=$API \
|
||||
-DANDROID_ABI=$CPU \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DANDROID_NDK=${ANDROID_NDK_HOME} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake \
|
||||
../..
|
||||
-DANDROID_NDK=$ANDROID_NDK_HOME \
|
||||
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
|
||||
-DCMAKE_INSTALL_PREFIX=../out/$CPU \
|
||||
..
|
||||
|
||||
echo "Building..."
|
||||
cmake --build . -- libminiupnpc-static
|
||||
make install
|
||||
|
||||
cd ../..
|
||||
|
||||
if [[ -n 'out/include' ]]; then
|
||||
mkdir -p out/include/miniupnpc
|
||||
cp include/* out/include/miniupnpc
|
||||
fi
|
||||
cd ..
|
||||
rm -rf build
|
||||
}
|
||||
|
||||
function checkPreRequisites {
|
||||
@@ -38,8 +37,8 @@ function checkPreRequisites {
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -z "$ANDROID_SDK_ROOT" -a "$ANDROID_SDK_ROOT" == "" ]; then
|
||||
echo -e "\033[31mFailed! ANDROID_SDK_ROOT is empty. Run 'export ANDROID_SDK_ROOT=[PATH_TO_NDK]'\033[0m"
|
||||
if [ -z "$ANDROID_HOME" -a "$ANDROID_HOME" == "" ]; then
|
||||
echo -e "\033[31mFailed! ANDROID_HOME is empty. Run 'export ANDROID_HOME=[PATH_TO_NDK]'\033[0m"
|
||||
exit
|
||||
fi
|
||||
|
||||
@@ -49,17 +48,9 @@ function checkPreRequisites {
|
||||
fi
|
||||
}
|
||||
|
||||
checkPreRequisites
|
||||
|
||||
cd miniupnp/miniupnpc
|
||||
rm -rf out
|
||||
|
||||
# add cmake from Android SDK to PATH
|
||||
PATH=$ANDROID_SDK_ROOT/cmake/${CMAKE_VERSION}/bin:$PATH
|
||||
|
||||
function build {
|
||||
for arg in "$@"; do
|
||||
case "${arg}" in
|
||||
case "$arg" in
|
||||
x86_64)
|
||||
API=21
|
||||
CPU=x86_64
|
||||
@@ -86,6 +77,14 @@ function build {
|
||||
done
|
||||
}
|
||||
|
||||
checkPreRequisites
|
||||
|
||||
cd miniupnp/miniupnpc
|
||||
rm -rf build out
|
||||
|
||||
# add cmake from Android SDK to PATH
|
||||
PATH=$ANDROID_HOME/cmake/$CMAKE_VERSION/bin:$PATH
|
||||
|
||||
if (( $# == 0 )); then
|
||||
build x86_64 arm64 arm x86
|
||||
else
|
||||
|
||||
+27
-32
@@ -2,33 +2,25 @@
|
||||
|
||||
set -e
|
||||
|
||||
function build_one {
|
||||
mkdir -p out/${CPU}
|
||||
mkdir output
|
||||
HOST_OS=`uname -a`
|
||||
|
||||
echo "Configuring OpenSSL for ${CPU}..."
|
||||
function build_one {
|
||||
mkdir -p out/$CPU
|
||||
|
||||
echo "Configuring OpenSSL for $CPU..."
|
||||
./Configure \
|
||||
--prefix="$PWD/output" \
|
||||
${TARGET} \
|
||||
--prefix="$PWD/out/$CPU" \
|
||||
$TARGET \
|
||||
no-shared \
|
||||
no-tests \
|
||||
-D__ANDROID_API__=${API} \
|
||||
-D__ANDROID_API__=$API \
|
||||
-Wno-macro-redefined
|
||||
|
||||
echo "Building OpenSSL for ${CPU}..."
|
||||
make -j $(nproc) > output/build.log
|
||||
echo "Building OpenSSL for $CPU..."
|
||||
make -j $(nproc) > out/build.log
|
||||
|
||||
echo "Installing to temporary directory..."
|
||||
make install_sw >> output/build.log
|
||||
make install_sw >> out/build.log
|
||||
|
||||
cp output/lib/*.a out/${CPU}
|
||||
|
||||
if [[ -n 'out/include' ]]; then
|
||||
mkdir -p out/include
|
||||
cp -r output/include/openssl out/include
|
||||
fi
|
||||
|
||||
rm -rf output
|
||||
make clean
|
||||
}
|
||||
|
||||
@@ -46,21 +38,9 @@ function checkPreRequisites {
|
||||
fi
|
||||
}
|
||||
|
||||
checkPreRequisites
|
||||
|
||||
cd openssl
|
||||
rm -rf out output
|
||||
|
||||
if [[ -f 'Makefile' ]]; then
|
||||
make clean
|
||||
fi
|
||||
|
||||
|
||||
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
|
||||
|
||||
function build {
|
||||
for arg in "$@"; do
|
||||
case "${arg}" in
|
||||
case "$arg" in
|
||||
x86_64)
|
||||
API=21
|
||||
CPU=x86_64
|
||||
@@ -91,6 +71,21 @@ function build {
|
||||
done
|
||||
}
|
||||
|
||||
checkPreRequisites
|
||||
|
||||
cd openssl
|
||||
rm -rf out
|
||||
|
||||
if [[ "$HOST_OS" == *"_NT-"* ]]; then
|
||||
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH
|
||||
else
|
||||
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
|
||||
fi
|
||||
|
||||
if [[ -f 'Makefile' ]]; then
|
||||
make clean
|
||||
fi
|
||||
|
||||
if (( $# == 0 )); then
|
||||
build x86_64 arm64 arm x86
|
||||
else
|
||||
|
||||
+1
-1
Submodule app/jni/i2pd updated: b7e20b9b86...ebee6c5f13
+30
-24
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2020, The PurpleI2P Project
|
||||
* Copyright (c) 2013-2022, The PurpleI2P Project
|
||||
*
|
||||
* This file is part of Purple i2pd project and licensed under BSD3
|
||||
*
|
||||
@@ -59,7 +59,7 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
|
||||
(JNIEnv *env, jclass clazz) {
|
||||
return env->NewStringUTF( i2p::android::GetDataDir().c_str() );
|
||||
return env->NewStringUTF(i2p::android::GetDataDir().c_str());
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
|
||||
@@ -90,31 +90,12 @@ JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setDataDir
|
||||
(JNIEnv *env, jclass clazz, jstring jdataDir) {
|
||||
|
||||
/*
|
||||
// Method 1: convert UTF-16 jstring to std::string (https://stackoverflow.com/a/41820336)
|
||||
const jclass stringClass = env->GetObjectClass(jdataDir);
|
||||
const jmethodID getBytes = env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B");
|
||||
const jbyteArray stringJbytes = (jbyteArray) env->CallObjectMethod(jdataDir, getBytes, env->NewStringUTF("UTF-8"));
|
||||
|
||||
size_t length = (size_t) env->GetArrayLength(stringJbytes);
|
||||
jbyte* pBytes = env->GetByteArrayElements(stringJbytes, NULL);
|
||||
|
||||
std::string dataDir = std::string((char *)pBytes, length);
|
||||
env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT);
|
||||
|
||||
env->DeleteLocalRef(stringJbytes);
|
||||
env->DeleteLocalRef(stringClass); */
|
||||
|
||||
// Method 2: get string chars and make char array.
|
||||
auto dataDir = env->GetStringUTFChars(jdataDir, NULL);
|
||||
env->ReleaseStringUTFChars(jdataDir, dataDir);
|
||||
|
||||
// Set DataDir
|
||||
i2p::android::SetDataDir(dataDir);
|
||||
env->ReleaseStringUTFChars(jdataDir, dataDir);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_GetTransitTunnelsCount
|
||||
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getTransitTunnelsCount
|
||||
(JNIEnv *env, jclass clazz) {
|
||||
return i2p::tunnel::tunnels.CountTransitTunnels();
|
||||
}
|
||||
@@ -130,6 +111,31 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage
|
||||
(JNIEnv *env, jclass clazz, jstring jlanguage) {
|
||||
auto language = env->GetStringUTFChars(jlanguage, NULL);
|
||||
env->ReleaseStringUTFChars(jlanguage, language);
|
||||
i2p::android::SetLanguage(language);
|
||||
env->ReleaseStringUTFChars(jlanguage, language);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getHTTPProxyState
|
||||
(JNIEnv *, jclass) {
|
||||
return i2p::client::context.GetHttpProxy () ? true : false;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSOCKSProxyState
|
||||
(JNIEnv *, jclass) {
|
||||
return i2p::client::context.GetSocksProxy() ? true : false;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getBOBState
|
||||
(JNIEnv *, jclass) {
|
||||
return i2p::client::context.GetBOBCommandChannel() ? true : false;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSAMState
|
||||
(JNIEnv *, jclass) {
|
||||
return i2p::client::context.GetSAMBridge() ? true : false;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getI2CPState
|
||||
(JNIEnv *, jclass) {
|
||||
return i2p::client::context.GetI2CPServer() ? true : false;
|
||||
}
|
||||
|
||||
+1
-1
Submodule app/jni/openssl updated: ac3cef223a...830bf8e1e4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2020, The PurpleI2P Project
|
||||
* Copyright (c) 2013-2022, The PurpleI2P Project
|
||||
*
|
||||
* This file is part of Purple i2pd project and licensed under BSD3
|
||||
*
|
||||
@@ -15,46 +15,57 @@
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: org_purplei2p_i2pd_I2PD_JNI
|
||||
* Method: stringFromJNI
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startAcceptingTunnels
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_reloadTunnelsConfigs
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
|
||||
(JNIEnv * env, jclass clazz, jboolean isConnected);
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_reloadTunnelsConfigs
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setDataDir
|
||||
(JNIEnv *env, jclass clazz, jstring jdataDir);
|
||||
|
||||
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_GetTransitTunnelsCount
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage
|
||||
(JNIEnv *env, jclass clazz, jstring jlanguage);
|
||||
|
||||
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getTransitTunnelsCount
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage
|
||||
(JNIEnv *env, jclass clazz, jstring jlanguage);
|
||||
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getHTTPProxyState
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSOCKSProxyState
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getBOBState
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSAMState
|
||||
(JNIEnv *, jclass) ;
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getI2CPState
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
|
||||
(JNIEnv * env, jclass clazz, jboolean isConnected);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,24 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.purplei2p.i2pd"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:installLocation="auto">
|
||||
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="29" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="29" />
|
||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
|
||||
tools:ignore="ScopedStorage" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/logo"
|
||||
android:label="@string/app_name"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
|
||||
android:theme="@android:style/Theme.DeviceDefault"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
<receiver
|
||||
@@ -40,15 +42,17 @@
|
||||
|
||||
<receiver
|
||||
android:name=".NetworkStateChangeReceiver"
|
||||
android:label="NetworkChangeReceiver" >
|
||||
android:label="NetworkChangeReceiver"
|
||||
android:exported="true" >
|
||||
<intent-filter>
|
||||
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
|
||||
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"
|
||||
tools:ignore="BatteryLife" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<activity
|
||||
android:name=".I2PDPermsAskerActivity"
|
||||
android:label="@string/app_name">
|
||||
android:exported="true" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
@@ -56,8 +60,7 @@
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".I2PDActivity"
|
||||
android:label="@string/app_name" />
|
||||
android:name=".I2PDActivity" />
|
||||
|
||||
<service
|
||||
android:name=".ForegroundService"
|
||||
|
||||
@@ -1,137 +1,165 @@
|
||||
0xff.i2p,apo53zid3xe7rewxjw7whdym2rmyowsj7jeoiwrl5zlmf7oqrxwq
|
||||
0xpaste.i2p,oyfcxkrmrnaplu24aobv7s36hm3vyxszlbees4hl6kpk6izwa5da
|
||||
102chan-memorial.i2p,t6uwxydnfd7mo2knxklmnrudxafe4mw5ojiqikj7xfrc4ynltz3q
|
||||
111.i2p,s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
|
||||
333.i2p,ctvfe2fimcsdfxmzmd42brnbf7ceenwrbroyjx3wzah5eudjyyza
|
||||
CrustyIRC.i2p,4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
|
||||
aaoth.i2p,aaoth5tidbhizgerysxlfrqmg5t7jzb76zt6lattwjj3up524qwa
|
||||
abdlandrubbernetwork.i2p,asnpognglrcx34l5vywatfkoaashziedfylun4w6cf5wue5gujca
|
||||
acetone.i2p,tzwfy3dnqtm4wuofmcp3gcb5qjcytri635ei7kw7yrl6n3ul5n2a
|
||||
afk.i2p,chrbzqjzaxvtdonbv3mahn3mr5sstzrv3vd7cupfovp4wmkkko4q
|
||||
agentoocat.i2p,voanmdeayaccgaxumtehvxxiv4sdscsixoxsqmhh7nfwhusrvfaa
|
||||
agoradesk.i2p,ztqnvu7c35jyoqmfjyymqggjpyky6z3tlgewk2qgbgcmcyl4ecta
|
||||
algorithm.i2p,algout6clo74ywqtjyemehnf4bzhegpju5yvi6zdcfszso7iirka
|
||||
aliensarehere.i2p,6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
|
||||
alphabay.i2p,tnaefzkcnhryeusi7hdpqujqiqmnbtah3dmjcg3gvezohunjuxbq
|
||||
amogus.i2p,udcjqqoo7mc54ephxnhzaxdwtqxsgxjzvh4wr4boope6vyr4mrhq
|
||||
animal.i2p,5iedafy32swqq4t2wcmjb4fvg3onscng7ct7wb237jkvrclaftla
|
||||
anongw.i2p,owrnciwubb3f3dctvlmnaknb6tjdxtlzvv7klocb45mmhievdjhq
|
||||
anonyradio.i2p,cbobsax3rhoyjbk7ii2nd2fnl5bxh3x7bbearokyxgvmudn7o5bq
|
||||
anothermusic.i2p,p5mhrtnjfyonumqjzkzxakxais4fjtjgappvoioztqehaii4smpq
|
||||
apophis.i2p,aybax36xssplylkueyy3szi3n2spd7mgxcmzbawapg3vxznwlkda
|
||||
apt.idk.i2p,s7qemnncvmy5zs3khd6qzlcnsvtu6drnkeae4r3yyc7akuzuqiia
|
||||
aqua.i2p,xqwrqfuoae43grkmzs63sw5upathbjerid3ch4bhskle3bibeqba
|
||||
arav.i2p,t42fkp6zp5dfqywantq3zp427ig3q2onrmfv246tyaztpg4ckb5a
|
||||
archaicbinarybbs.i2p,t7o2tw36cffedgfr6kahewpkrntofnliuapji2e4rucl3os55epa
|
||||
archiv.tutorials.i2p,lldr2miowq6353fxy44pnxfk37d6yn2f6kaivzecbmvvnnf5exyq
|
||||
archlinux.i2p,5ms4k3cn5dx53b46hqgwogigsjhtinuf4g6fdr6pplkldi5vjcxa
|
||||
atetsu.i2p,pcr6k5krxwcvmessygjmfsbxgnyju6ipq5236ki55n2i5u4uylpq
|
||||
azathabar.i2p,v35rwae5zb6fcgd7phzkireghtuen43umi7l5yvahm7ezkqg5uwq
|
||||
b0nk.i2p,hxkzqqo4smyspzx7qv2wqqnbxod3ytabpat2ea5ilh7byvymdz2a
|
||||
bandura-yacy.i2p,e4t4yer7o6dbttk4xmpsfd56vhuse5upksgjqejnrvrdz35ia2qq
|
||||
bandura.i2p,n6eqyu6glmtgt544ys43ggrozhpiw7biyrelrvmkmg7llfcjwm4a
|
||||
banka.i2p,vuo5wavhhstnv5gehgmvhjy2jhpm3mdlcvtovfqunfzv5ngug5cq
|
||||
bbs.i2p,7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua
|
||||
bellingcat.i2p,nk6hd2mzzoieui22xzcdiz7i2irp7gel3qscwanuqzstkdxqxp3a
|
||||
bentasker.i2p,gdncgijky3xvocpkq6xqk5uda4vsnvzuk7ke7jrvxnvyjwkq35iq
|
||||
bible4u.i2p,xs6lr2g5jiaajtb3nkno2zmy34eipitrggooxb7wtey7uko7bqmq
|
||||
bitchan.i2p,waycuw2c27ruakfblkf5tcegwmt3ot445dlfoypil6bzmm4yxg7a
|
||||
blackexchange.i2p,ztgr5kghkyn43fhhkuycroxgfti6cojo3vg4wdd3usqonyvrla5q
|
||||
blackgnu.i2p,hskxmtmwqnmq7pnxzntlwt36ew4nuqzmwhzbqjo233ncfoaj7mpa
|
||||
blawg.i2p,uq5hbw7bplczde3pbugbxnvtqbjjdba6wfggpvbmaghuwoulputq
|
||||
blog.raccoondad.i2p,ouc5i7xknchig3qdtkoydoeg2oqe354roxkjrrwzuzjcqr4xpvna
|
||||
blog.tinlans.i2p,ylkch2nkrwehakx4z6wiyjbeqwlgasknukdkex6r6yq4xusrjnda
|
||||
blog.torproject.i2p,woelslt2oh4dn5wlxfmpjggyyu6l7ntgk3rngrooldn57x4kduma
|
||||
bobross.i2p,54y7lkvndr3fa4c4fw6e5udfx37dkrh4wbdjvxbwapertwz2vtqq
|
||||
boerse.i2p,7633w56hd53sesr6b532r5qlbdnvyl5bnvama6ign6xryaxol4rq
|
||||
bofh.i2p,auvuinzogu6gc4pwsgbjijuszxgcjygciu2wy53pfz7mo5nfpc5a
|
||||
bonobonet.acetone.i2p,keihicq2fcfooqvdqtufjpigg3ge5mw5mjdpdnxy5utazrqkcnxa
|
||||
boran.i2p,boranyzcefxqw2ktndemy3npt4zhetpp6edldtlym2ap7n5azt5a
|
||||
bote.i2p,bhjhc3lsdqzoyhxwzyrd63kvyg4br6n2337d74blyintae66mr2a
|
||||
braindead.i2p,braindsku6jnpmnaats2cu2qzax4pga6dwhx436kxanpxgx2pcyq
|
||||
brick.i2p,lfeip77mf2j75izalrenv2aft5h3mfwauqqu3nqdmoq5ldwwsvga
|
||||
bridges.torproject.i2p,2tiwhibsjvys63t43xncar6y52dy3dpct6edglenhzlalmyirb2a
|
||||
bublik.i2p,npx6e6trk37ovoxzk3j3yoh5huenh24avbmsgeroiejkuzb2vo6q
|
||||
bugfuzz.i2p,ubszn4gsf22vga67rvzzlg4qj2bfcq6o52fmxz46xruawqm6z7rq
|
||||
bunkerfiles.i2p,lyrhscn2hfe6mjn7jo3titioitfzcy7x23hhkksydin6ildsgxiq
|
||||
bunkerirc.i2p,mdt7h4zsbwafsikg3r4iiqh5wriaisznjj5d3f3lyeahipudsxoq
|
||||
bunkertreffinfo.i2p,ow4q3pdfdwofiqb4btopg5ou734w32k3z4hoiinsezg5zkzdlq6a
|
||||
bytepay.i2p,7amc4ztwkzu3cgsaaaw3223ohuihn5hlsqc6gpf2rxdyptdkyugq
|
||||
ca.i2pd.i2p,u5safmawcxj5vlrdtqrsqbsndkr5cfenpicgg5euu4xqm73yicba
|
||||
cake.i2p,hpdbe6o6qqqqvgygbcznssat46kybsm7rcauofqaoly4ajdi2jeq
|
||||
calculator.i2p,itj23yb325dma24i4qpnhuwrz26hzpps6izkaf3mowavtvoznnva
|
||||
cantonese.i2p,3r3d43jejiezwb6daqgtk23ccs4jm3bvkhxwwwnpymvjn2aymriq
|
||||
carvet.i2p,r5ukmkit6n3ztitar6clfc6te3o3235ys4jdbiugnkvzmfurxbnq
|
||||
cbs.i2p,u3lp7wazvq6opodzwjg5sc5w5kwxehmxd4wcdpt4s4j2k4dx4apq
|
||||
ccp.i2p,gd3s5oigjkgoiavxzjvyqb6y4yz5c7paccgd5pxnyhu7ix2zk7qq
|
||||
chaox.i2p,6bcqgkedaq2krrhvidjlmdsoltmzuwaqtrafycfzbc56h5swumoq
|
||||
cheapeth.i2p,x6pq4h33wu6txj6vvpgywrgew2y6cwzs5l63w726paqsvogeqdra
|
||||
chive.i2p,tvsopmxs2enrjlefhuq4zthr6lkyfg7vwwosddcwt62qoncstpgq
|
||||
chudo.i2p,iaublzhzc4ssa3rcrjbdigautm66mslt6g2sninugagiarl4at3q
|
||||
ci.idk.i2p,antkos5hjxraxduyewoo4qwwr6vyceiggd562nctvmtpnfjsuqlq
|
||||
chmok.i2p,w7eqh6nndwk4yr5vxtbnvizgsg776vamwingijetnnqojrzjxm3q
|
||||
chungus.i2p,ot7kljg7js4iedtsxl7es4wnynvxxyyaravier2dqkxmr7wsdzxa
|
||||
cipherlist.i2p,gbm4kiotqjqmklwsp3qibdtn7mhatjsyeebbb5zxwjlp6w22fuga
|
||||
citrus.i2p,citrusogkieyk3hleilk5scb5a64jdzoogi5wjv35klrvmqsh5ma
|
||||
cloaca.i2p,pnsyl5plmmwuqfvpg36cbvvhe6mpoy2j5zzemfb5sfbpvklyozta
|
||||
closedshop.i2p,6fg67mbw2okopzyonsck4bsy3cy7l2fame56uiysr2cezhjhzdbq
|
||||
cobalt.idk.i2p,m63cbwomq4e4q6df3n6idnuveqa4yastxnls6kacseuutrp5um4q
|
||||
co.i2p,3mvo5eifcwplcsoubtvqkzdahwo2sdhfygfdde7lj2glybk4q22q
|
||||
coffeejazz.i2p,mrt55kugqimzxeittpwwjwznejs3b3zxcfht3hp6dlujetyqh5ua
|
||||
cofob.i2p,srac56l4oue35pbnibzk27eztkkk7pljbqoyshnwnmdct2t6avbq
|
||||
coldhell.i2p,z2kerfik5dzqd2kj74cuhhtptkrizsblc5nm6ke2gcnj5mnwgwja
|
||||
community.i2p,64luakopnvffchxnibn3d2p7uqxixtyuallfqfgifkkcmfcrczxa
|
||||
community.torproject.i2p,wmw22z5c24b35hlepzc2g6k3cpcg44rcg46qdwfo5heiplv7m4ca
|
||||
contact.i2p,rn5hqxierph4eegft3hiiqkgn2zyyfgj2c6pq75bkahl3pu5shvq
|
||||
costeira.i2p,abhty5xlmnyab2kqdxcd56352kcescxoux3p6dbqdrghggyygnxa
|
||||
cs.i2p,kzaeunogz6s75ptgy6ifjzwwy75xdfenenswvrczd7mewxgrad5a
|
||||
cyberchef.i2p,5k22kdukxkobertlyheal5aro32gls6nhgktneq3mtrracubt2bq
|
||||
cyberia.i2p,3jrfzgnetbjwnyrua5jpyeqk7gb6dgfw3hu5q6lyggnwqhrury5q
|
||||
darknetbible.i2p,lcaocuhvocje2gociyyuiip5sxhbgmkvaicbm6g6axtflf5wc6pa
|
||||
darknetdaily.i2p,gehxh3zlns3ezyuc35bszc42hdr4g5uzasexzyrqfxwcwkeiulia
|
||||
darknethub.i2p,tnh5bp4si7x47vhwk6njtimbbk77gai3abkfh2gz2dhml46uu3uq
|
||||
darkrealm.i2p,gbh4eerxdsph7etxsxznfhvmuiz54trlkenakqep343u4xcoekzq
|
||||
darktech.i2p,nlkpudgmmgsdiemnbehq5llymdmxp6tn4rzjuse7nhvavr2kgkga
|
||||
dashninja.i2p,dzjzoefy7fx57h5xkdknikvfv3ckbxu2bx5wryn6taud343g2jma
|
||||
datagrip.i2p,ajreyxslv6lijap2hykp3uvnnsca6fyvax76u2w6n3vexngkif4a
|
||||
dcherukhin.i2p,qa4boq364ndjdgow4kadycr5vvch7hofzblcqangh3nobzvyew7a
|
||||
ddosecrets.i2p,vyhw7t7fbj7nghx3oe4y5komczeb5egnhuvlslpkqupaymnhtlka
|
||||
deavmi.i2p,fh5r3hlkkwh7udtjeqmekmq4qd62jnjqmnqob5hm3ndiuo6lauza
|
||||
deepwebradio.i2p,2nait2gdeozkgf6gyhzjfij6mwldwkxxwcvtxobb4b5q5cvtm5la
|
||||
det.i2p,y6d4fs3rpqrctuv77ltfajf5m4tl4kzcu7rtwhxgiohylfxxow4q
|
||||
diasporg.i2p,edvccoobtjukjgw2os5eetywanbb2mpag5aknkrpia5qx2koksua
|
||||
diffyq.i2p,hkjvyuc3asswxa7uxyalrnpqab4lyvzriu2rsq6jbjc2kaoabghq
|
||||
dickinass.i2p,5x55ucmwxf2fvrcboapylnrcwdvunlokq5c7mnofno3bkrlqltza
|
||||
digitalsr.i2p,ldavoapfhoqpxvihdsdjjo3phlt5ujkgkzigzbesab3g42rwvbpq
|
||||
discuss.i2p,wrnowoalzz5mquzaygmcrm4feuqco5gsxyn42fizbqjaprtdx5gq
|
||||
dist.torproject.i2p,pbhgoronppg7tq3dssnwmhzkbrscbvtmy3d5pmar5hyhnqwjj46q
|
||||
diva.i2p,auoqibfnyujhcht4v3nzahpqztwlyomesfywltuls5bqqi3nd3ka
|
||||
dlms.i2p,krsbxsaw3lnb6ctdpydygm2gqobjcpm4pf367ddo5hylbscnynmq
|
||||
dnl.i2p,4pjdhyaot4kktjathgjmom4ykfccezyezasbtvgdtmar2b76cpqa
|
||||
dns.acetone.i2p,dnsgzxkak4zlrrs5tfh42ob57iley4xrp7srrltn2j2yl2ynbiaq
|
||||
dns.chudo.i2p,zzfmtnnmacop3xvpznc4c2jfvk226wpep2gaoanja3gfzf3ih7xq
|
||||
dreadpiratessociety.i2p,fbdd4syj2v52x5zord67av2xclmjsg6bc6xdvrqmvqkyd3whij6q
|
||||
donate.torproject.i2p,crxdz4n5viyy46upbd4amlzxcinkea7hwj3mkiudrw3nkpnfv42q
|
||||
donotafraid.i2p,w6jq5xsixmolxvh5xtxaqolary2nmx5n4orc5bilc2j7ejcytgfa
|
||||
drommedaris.i2p,2cth2loujyjvouft5z7cr2ajdv7r46tdxxew5xoqwpprucd7nf2a
|
||||
dumpteam.i2p,2fwlpuouwxlk2nj4xklvm43m52tqyhqnu2fcfiuv7clvf3wd5nwa
|
||||
dysfinis.i2p,6dhhk2azkdqd4zt2azsmnxddhooiztnaxgz6ft5sbusb5a4vonva
|
||||
e-reading.i2p,z54dnry6rxtmzcg7e6y3qtsig5yf5fmehuvakcg5wnuahx3iafuq
|
||||
e8.i2p,5spb6cl4ffallahbaj2yadag2zgyuciouhz2rdcnyjcf5phqcu4a
|
||||
easygpg2.i2p,bwxry5alzx5ihgrd3glah4eotddblzhalvpheppnw4zcajzqoora
|
||||
ebooks.i2p,bvpy6xf6ivyws6mshhqmdmr36pruh2hvoceznzeag52mpu647nzq
|
||||
ebuild.agentoocat.i2p,lu56romn7lp6ggjtofbwwsaee6kcfonci2ezi5jb5nyo3vdo7vkq
|
||||
echo.idk.i2p,63sgpiu6f33arldcxkbjsn3jgf6asyx3onjmz6j6gsk7hgbiehkq
|
||||
eddysblog.i2p,ieac3ub4g5sy3wuhsbqfembnpp7f3a37xgcx537ytzsmgfzexnbq
|
||||
ei2.i2p,y4hhbqzpjdcsgvz5dsgaytttxygos6h2qt66wbbiuvcpcekdmmoq
|
||||
eight.i2p,gd3s5oigjkgoiavxzjvyqb6y4yz5c7paccgd5pxnyhu7ix2zk7qq
|
||||
elefteria.i2p,f5s6jvekhmq7aj77xmgm7jwnw2f75ci275togqya76urm745zpdq
|
||||
eleven.i2p,n2er74vsv7szwvsbsukd2lwhz5epedws7eqwahsmxy65agvjizzq
|
||||
elgoog.i2p,z6hrgkg2ajmuzlrddjlffrgctx7x7fkipm6c4hdzmohyn5wkr4ya
|
||||
envoicesalt.i2p,nsamcq2zidlioxlfuinqzboblpvrnhkbdwavgsvzmt3n3mhuho4a
|
||||
elvn.i2p,vwjtedtgyokakyxgfeoavg535bxe7ymdvfbdwsq4iqngljqtqi3a
|
||||
equwal.i2p,j7zqkvkokxmpkbqrgrkkjym4j7kzuipko4qdujdjbxnrp3qj6ooa
|
||||
esperanto.i2p,2yryi2eb72hnxavjpfot7paiminbzgv5w6fv4sl5wez55ventdeq
|
||||
explorer.gostcoin.i2p,ktoacmumifddtqdw6ewns3szxths2hq2fat2o7xnwq4y3auga3za
|
||||
fabrice.i2p,fabricexhumxqngfziy4xkao5m5ez27jpih4chtmigg46eu7rroa
|
||||
false.i2p,77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
|
||||
fantasy-worlds.i2p,62a4xcyyhvfrcq2bkckb7ia37fmrssrgx467tlkxp32fjpq577wq
|
||||
fiat.i2p,ldnhzi7emxnibjz6g55k2nyywzmcufnst2jy67e75o6dlvtx7wia
|
||||
fido.r4sas.i2p,i522xmu63hfbaw2k54cthffcoqmeao6urjyq3jg4hddf6wf57p3q
|
||||
files.arav.i2p,gajftpr47ze6ao7e3q2tb5xmcqneyaczu4edzvwwg2qzmnernpka
|
||||
fileshare.linuxfarm.i2p,rrx4hxejr4pod3tqrkj5ckzuauwy2aqsfvpiac2tkebp2iuv5qla
|
||||
fishsticks.i2p,btjbfuh2wav3c7bkjqylgatbkvqaireemvsvxwetkrifuvfa35da
|
||||
flibs.i2p,ocdm33e3h5tdml3yyholj4objdwsrhlugfqjnqgdkslmgdzb6b3a
|
||||
flibusta.i2p,zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq
|
||||
forbiddenhistory.i2p,nlduiogwtutni5nwf5kbuekrqf3ymqmkor3hughjkckz7tvruhva
|
||||
forum.rus.i2p,zd37rfivydhkiyvau27qxwzmerlzbqtthsa5ohtcww62zrygjaga
|
||||
fourth.i2p,2cq65hjlt7nnl7mctthj7oejlgep7nh7gmqc6bnbflxw2ti4bxxa
|
||||
freefallheavens.i2p,7etudb75nhe6vxslitptjlwrnbybdshvzxnweuiepsxbbkkxy5ka
|
||||
freegram.i2p,euatsdg24n3j52gd6ptc6gd7hhynl2edpshqyzbehmimpvubt4wa
|
||||
freehaven.i2p,y4giqqrbcb4xit5gp4y6njypupfklfdr74lfi424seenf7usjvza
|
||||
freifunkmobi.bandura.i2p,5shuxvx52e3qszylwn4w7qst4siap3latyap3ff7nfnpjgllkcea
|
||||
frontlinedefenders.i2p,pshxfoeefj67oj4jwjh3cqiztmrgcpsbuttclnc6fiwvv42p6inq
|
||||
fs.i2p,ah4r4vzunzfa67atljlbrdgtg3zak5esh7ablpm6xno6fhqij35q
|
||||
fuck-rkn.i2p,qmlmnhr3ul2lmuu4fjf43kmk6hf3dzsuxv5xu77vwys36xwuu4sa
|
||||
fxruby.i2p,lqhdnr2pvp2igu5e2cxichboqzcgypvrbooynzgkmoze3xae6qkq
|
||||
galacticreststop.i2p,uln6c2abwfzneakdz7dkfmdifwrjr3r53jvkmq6mxrjt2vflvbrq
|
||||
gedanken.i2p,kw6isjbs66uf7576fbb3aniokxtrpqmbegf4tf3xskg2bmrjci7a
|
||||
geekcode.i2p,hzmyzxa6jzag67zcqxhicydusdev77byf2qoyxjxhsrtkce4qiqa
|
||||
gfap.i2p,yasbny2ndcpofprdbtv7dxdtshbebyydjv5zlnwy54gii6xnlmqa
|
||||
ginnegappen.i2p,kbhfkzx5jeqhfgss4xixnf4cb3jpuo432l3hxc32feelcmnr3yja
|
||||
git-srv.b0nk.i2p,6mopdcovd7urmuxo35wopbgsfpv6ifpu7kq2625lyi5hfv5re6ua
|
||||
git.agentoocat.i2p,5ihrbnmcoewaax5kxsghnmxh6p6srufhmo5pqkybdwuz4yj7efja
|
||||
git.apophis.i2p,apep7dtwnuom6b7li6jirhrsygxgcdqb5svqpq6mh2rpindrzp2a
|
||||
git.arav.i2p,p5nkflgogwv4esy3ainup6mgurpugmdyufizhuufauznreyvprsa
|
||||
git.b0nk.i2p,7uupnvxwwkxo3au2fdt7ky66pk2eklshggf7r6mox5oofzpmjata
|
||||
git.community.i2p,giteabolfdejtdzblkooalqei6jr67imiugmhtsh6ocw4hlj5a4q
|
||||
git.i2p,giteayof3hpwkfnwnryy6l4qhq3cwdzqlr72jokzbkc6ol43mypa
|
||||
git.idk.i2p,7qeve4v2chmjdqlwpa3vl7aojf3nodbku7vepnjwrsxljzqipz6a
|
||||
git.qorg11.i2p,jf2mrxlbqsct67fces34x6kwbbnmlx6o7gd6g4knqk36soa6efqq
|
||||
git.repo.i2p,vsd2vtgtuua2vwqsal2mpmxm2b2cpn3qzmqjoeumrrw2p4aot7uq
|
||||
gitlag.i2p,triv6mxusoo37mzdu2grf6mguxpytkw5usl7wllrkbd6v4fn2y6a
|
||||
git.varikvalefor.i2p,6sqxtpnpqqnlqbdxu7dadmorrffnpe3evbz5zye4y5kvljkzkbra
|
||||
gitssh.idk.i2p,g6u4vqiuy6bdc3dbu6a7gmi3ip45sqwgtbgrr6uupqaaqfyztrka
|
||||
glue.idk.i2p,ykbx7chmkivx3idmxd3lu2jc5w4wtlps4r3md57wszhk5w7jykyq
|
||||
gostcoin.i2p,4gzcllfxktrqzv3uys5k4vgkzbth4gqednwhfpt755yivm3davuq
|
||||
gusion.i2p,4qyfdhizjixe2psu7wcvqufix5wlijocehpb2futurcmlhlktrta
|
||||
h0p3.i2p,k5fppzxc3bwoz2mjc7q37jojbrxo6vtprac3dzrk4wapv7irr4iq
|
||||
h13.i2p,tozb4vssixoccyqtgnpaatkg2ql52kkjwnsdo3dltezges2na4bq
|
||||
hacking.i2p,uvxiknnzaxtcijzagp5xuweua2ctghmjfubqdufxilvnkajhezaq
|
||||
hagen.i2p,e2t6rqd2ysbvs53t5nnaf7drllkgk6kfriq3lfuz6mip6xfg644q
|
||||
headroom.i2p,uyquth4yeh3zc4alarynrd7r3ieyz2yz4dw6toc44plybjbxjaia
|
||||
harbour.i2p,zohxpycufzcslwb2dgdkfo75flahkl2q7n57ciqjooqia75ybada
|
||||
hardenedbsd.i2p,6ebmdsir52bi3q4wfwug7ylouoq6gdafl3wyy6ccfmpffijhtoca
|
||||
heaven.i2p,y6ejpmln3j2jvf4omb4ptyo2idognputhrccph74yn6eghkpxyhq
|
||||
hex.i2p,sw7m3pxa4d3niun7tz4keq2kwpffhpu6b4zcdeupjem2y2tmycqa
|
||||
hiddenbooru.i2p,zma5du344hy2ip5xcu6xmt4c7dgibnlv5jm4c2fre5nxv44sln3q
|
||||
hiddenchan.i2p,6y4tltjdgqwfdcz6tqwc7dxhhuradop2vejatisu64nwjzh5tuwa
|
||||
hiddenwiki.i2p,2iz3nkopz6fxbzlcjq3ofligi7mwdseuj4ndzqljogyvsggh6dvq
|
||||
hisdarkmaterials.i2p,qcf3vxllflqfsbvxjlypfxsx36g5srknxnhpyz3ph5bcxdjawraq
|
||||
hive.i2p,2koqsqujgndkz3ozgrvx4txezvxpnm65orrr3c5itszy3vd46eea
|
||||
horo.i2p,vrxh2vbqsfvh2utnt3ighimu4vrgla2mfpwksipkjsguv5vewhdq
|
||||
hopjoy.i2p,3wifx34yzdnj5vw3zu3kmqyz57tvlypmdnnyalqjdcaqrege6bpa
|
||||
hotline.i2p,6cczi27iuxkm3aivazaemzltdqgh42ljzurqp43uclbz2lid2uqq
|
||||
hp-net.bandura.i2p,z2ufexrgrxry37y4vs5hted35ygpleskfcs2enanl53hmlpzlqhq
|
||||
hq.postman.i2p,7ewjvbcwgah57n64cwbsxqai7eutqofkesuxfsuhfheijivdjqra
|
||||
http-false.telegram.i2p,77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
|
||||
hungryewok.i2p,to3afquvmrmk4kvozisb562elb2hdka6hwk6oeud32m6h2qtkcqa
|
||||
hutor.i2p,vouttzj22msx7lcpgybfhbqoignrawsgo2sg7g7ml5kyuugbbkza
|
||||
i2chan2.i2p,rqd4efol6ooxukq2jj6toml2s7uutj3kbkl6k7kfm7vpmmt2k4fq
|
||||
i2p-mirror.bandura.i2p,aq7r54ebou47b533y5seiod7dc3aeycucevl2pqvphnjhjwblr6q
|
||||
i2p-projekt.i2p,udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna
|
||||
i2pd.i2p,4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa
|
||||
@@ -145,262 +173,301 @@ i2podisy.i2p,3c2jzypzjpxuq2ncr3wn3swn5d4isxlulqgccb6oq5f6zylcrvcq
|
||||
i2pseed.bandura.i2p,2bpbnalf76ktxzhfekkwcklmo45xzedi5em5bdoyedrhw5bhvtia
|
||||
i2psurvey.i2p,pemwrlamhiiv74ok4kwoo4eqwzzjshp4q7ir3nlh4jfnt4zjncia
|
||||
i2ptimes.i2p,563tjwihw2ql5q2kl7d7md7ywedpapoqgkxgazkz4gmlrb2flqbq
|
||||
i2ptorrents.i2p,yt2qxe6nq3meofloobawy6nlnmu5pxkobqjyspdngfrasd5v7bca
|
||||
i2pwiki.bandura.i2p,isbf7tzeyrutnd5rvmjpqaohe7cz6onqgci2wvbuyfwc62w74r3q
|
||||
i2pwriters.i2p,c4bktwlfzo3xcaccdw4nhtji2dmlg4sd36du2wynpclowx7kqolq
|
||||
i2pyacy.bandura.i2p,owy6s5xlkf4zsrwwpemvoru6x6qmrye2pe3v4v3dncvcrzix3fiq
|
||||
i2speed.i2p,532c5r6ra6rcf2mvfgtlcxbn3lpplybwxul4xsg3ps64dlx73fga
|
||||
i2search.i2p,cpgupqyhxamjfgdd3qk5ux673qomu3o5kqszvq6fwuigzifkxzta
|
||||
ibft.i2p,ds36spqcf7dnj46in5vfnbbwcbjpslo6aafkdrkc47a2oq3zvtta
|
||||
identiguy.i2p,3mzmrus2oron5fxptw7hw2puho3bnqmw2hqy7nw64dsrrjwdilva
|
||||
idk.i2p,b2o47zwxqjbn7jj37yqkmvbmci7kqubwgxu3umqid7cexmc7xudq
|
||||
ilcosmista.i2p,6u2rfuq3cyeb7ytjzjxgbfa73ipzpzen5wx3tihyast2f2oeo24q
|
||||
ilita.i2p,isxls447iuumsb35pq5r3di6xrxr2igugvshqwhi5hj5gvhwvqba
|
||||
in.i2p,r5vbv2akbp6txy5amkftia757klgdy44s6cglqhmstpg65xycyjq
|
||||
infocon.i2p,ic7rentjh6ilzz6p5kveiuyzov534ksfcexmpeniyallzf5in67a
|
||||
infoserver.i2p,jd3agbakybnhfvkeoxrx7t33iln6suzomv3kxkxf77j7rkonch6q
|
||||
infox.i2p,qoz4bwrtnicqyxemrxubdc65uojrqn2iem6v55b6xmxzdmfzcvlq
|
||||
inr.i2p,joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq
|
||||
insecurities.i2p,4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
|
||||
ioannism.i2p,g2246vc2tq64rmomwe47v3jnbpz3b3ec2wrrhadukj7lxmwd5aoa
|
||||
irc.acetone.i2p,qyzbrdw26ejjdjzsrcmq5h3ggdzk6cq5xynrgee5t5q73gq545yq
|
||||
irc.coldhell.i2p,d4b3dcqt32yq55b6ct6f4rsib5svzgwkfz4klfczuz7e4p2v6rkq
|
||||
irc.crustyirc.i2p,4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
|
||||
irc.echelon.i2p,ez2czsvej5p3z5bquue5q3thujcodfze7ptybctqhnqc7hms5uzq
|
||||
irc.ilita.i2p,5xeoyfvtddmo5k3kxzv7b3d5risil6333ntqrr3yvx3yubz5tk3a
|
||||
irc.kitsune.i2p,cpesprosbsuycn4ui3neidqdtqz5ufekthob7cobl3p7bcuaoh3q
|
||||
irc.nerds.i2p,nlqhsdd5a7hanjea33mwizg5ixh3xcv5dczufpf3qcfpo6tx4esa
|
||||
irc.postman.i2p,hhcy7zznltay2tzwdvtd37g2inptemz3hk5zmxyi57d3sxgxbseq
|
||||
irc.r4sas.i2p,hodhusp73gltozgrnianlbploon3rrvhrzfn5mf2g46o7aaau5la
|
||||
irc.rpi.i2p,ppqu4shst5hfjn6jgxyragcanyxurhmof7jdrxag5srpeobevh5q
|
||||
ircs.nerds.i2p,w4d6hj3q7eyfrkb3kcy7rox2fdjzywypvmyrudtf2q4gdzs2qlhq
|
||||
isitup.i2p,xk6ypey2az23vtdkitjxvanlshztmjs2ekd6sp77m4obszf6ocfq
|
||||
isotoxin.i2p,wue3ycaccf4texikza3fh6p5yrmtgnooisuypnepo5mo67lmpcqq
|
||||
itphx.i2p,zwu2erk3wtyxlcbmd73kmxcirjghdkk4lpupy3xcavpm3qbob4da
|
||||
ivorytower.i2p,fpwrfvidfexsz7dspofkwtkmmizm7lyralfz5kvykffk7gubvxsq
|
||||
jakesthoughts.i2p,g7tjf655mw6wzykkux4ntkky75ovluexfz3wcpwu44mbibkcksfa
|
||||
javadoc.skank.i2p,us3amyq3emvm6rcxmrar3o3uoiifnafijgseho4dxdsjgonfyaxq
|
||||
javascript.i2p,idxpwvskkaq3pssrnqpxmiilgeqwf7d2hf5xpusossqz6r2nudva
|
||||
jbo.varikvalefor.i2p,3flbkdhahkgq47s7vytubh3v4vk3lyqgwwh6dd2k5szqlrivdmta
|
||||
jdj.i2p,mqxhou4icts5tmoq7ndz56sb2ox4s2atzm2urmyn2ndrj2dzzguq
|
||||
jimkiebs.i2p,epqxjestvatyv2ala7iqbm45elnecqecz2zmpoklzvekwjapu45q
|
||||
k1773r.i2p,zam7u6vslhemddz347uusuzjdk5wma4h5hcmcqlng4ybbpdbjhnq
|
||||
karamba.i2p,g2lizyuyzms7m6gv24pzege5zapbinxfd2dzbaha6k246pl2xu3q
|
||||
kelvinchan.i2p,6s72dyf6jwlvk2u455lksvcs5r7deafc3iniwo5kp4ssm777noma
|
||||
keys.dlms.i2p,znl2swe5pez65qxrr2s2s4lmdfky6mnppvh3p5j6suuiovymhjtq
|
||||
keys.echelon.i2p,mwfpkdmjur5ytq4og36ym3ychinv36b2a57f4rmgqmtrwepq3fva
|
||||
kibykarni.i2p,xowcvzbeq72slpbrwmjl3zy6xkrkb2ncctpkkskeqts63vedtg7a
|
||||
kill-9.i2p,3i3bbs2zfabyleqxcqueeegakutrtk3hbxmvbtkrgwvetlmity4q
|
||||
kislitsa.i2p,khceo3smaxtng2tnuicmcbhdnkk2j6myi4nkigcux76qh3aabdhq
|
||||
kkk.i2p,kukluxklanib666d73z5fyeyb6vnystmvvreaodhjf73rhl4wxva
|
||||
knijka.i2p,knjkodsakcxihwk5w5new76hibywia5zqcgoqgjttzsausnd22oa
|
||||
kohlchan.i2p,kohlchanvn6vtsujobyw4pt5naaszmxqutd5hsdatmxfe2qaqhya
|
||||
korol4ik.i2p,mr3z5lggdppc3yw2r2egstpg33ga2wfocmozac6kjmhhfk3asm2q
|
||||
kurator.i2p,sp3umnyofy5ytixbqcue4jrpxixccgnrxtiuvhg6juep5s5lrs6q
|
||||
kycklingar.i2p,gctswdhp4447yibxfbqg3uq2bvx63qjeqnaoaux75zw73leakyva
|
||||
labor-union-ru.i2p,u3j76uo5awabsidre6epnm433snw5hwp3ezz33w3ca6bbgpblmzq
|
||||
lainzine.i2p,5p7zrmxzxe2t5liuzfpswl7b3uublu2wrrwnkeqkzdxeidntw7yq
|
||||
lbt.i2p,5uhjsgyca6ggdvwjjwf67bcmalpbxitopupjpygtahxvkwlh5mzq
|
||||
leglasen.i2p,q6tqm2klaavlsfqjci2naul2nj57fbxvkwujmqdv53plhdxxi6mq
|
||||
ledechaine.i2p,7s4vtwkvxvmigj3r4zrc7s5ajdeqtris4qnj3n35cuuvuzkpgqsq
|
||||
legalcases.i2p,tms2ibdkp67ddj5ez6l4zwvw33jdpz5tmavv3kpjdcpavfh7np4q
|
||||
legwork.i2p,cuss2sgthm5wfipnnztrjdvtaczb22hnmr2ohnaqqqz3jf6ubf3a
|
||||
li.i2p,jwzmbp5djo5t4mkbchhejq5mrx2yye7tkbwry22scihwy5s4hcba
|
||||
libremarkets.i2p,3jknyeprdyirtzhc5ysh7qma4bgswazxgeylfxjtrx2xxtycq2lq
|
||||
lenczewski.i2p,7uypwo47x4vnryoz25vwisu5jpyhz7pcdvnfzvopww3wxc7wiiia
|
||||
libreddit.i2p,libr7vbp7i3lsvqwy5aqgql44uxaufawi5yrloh3x7sezubsoaba
|
||||
limak.i2p,jzoxeuuqt6wo55pvt4uh7o5i47oyadrvhyjli4hidqldhihu6lna
|
||||
linuxfarm.i2p,br3njhezhzx7mcv25nrxkrwu5g553xp4oyavsjhfa7jwmzyp3q5q
|
||||
lm.i2p,yeyar743vuwmm6fpgf3x6bzmj7fxb5uxhuoxx4ea76wqssdi4f3q
|
||||
lnxcloud.i2p,wryxsgqp3xl7fuohijmxlugrndtp2vixqlt2obpgriwt3fpdjn6q
|
||||
lockdown.bnet.i2p,vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
|
||||
lockdown.i2p,vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
|
||||
lolicat.i2p,2mvlbpgzlawdxqv3zlcgcje475kv35ow2itpztjpdqegbtjpvbda
|
||||
lolicatgirls.i2p,pjhlh4h7zn3slglx46ffob5ifcccrcqr5dzbyyueh3wd6a6bizra
|
||||
longseason.i2p,ighnngssgd6p4kyrec6m556rasvbtx5xe7bsyxol4lie2dibi4da
|
||||
lucas.i2p,hcb6j5indzeqfyerq4igx45xgruijbs433mh22ye4osoxkxhumwq
|
||||
lyoko.i2p,afuuortfaqejkesne272krqvmafn65mhls6nvcwv3t7l2ic2p4kq
|
||||
lunach.i2p,m27cpx55hqhcfjz4u62tiynjtzqdw4s3kanxdgluuthnndiquoeq
|
||||
madaidans-insecurities.i2p,4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
|
||||
mail.i2p,mail4okikc3tknhn2tfyqzq7mxgzltqg2tw5v5frtzkcsm45zdra
|
||||
mambo.i2p,sm3mumfqv3ak5x3gdl5uq3k2ofpuzajwov3j6ool4w4tnf4n2fzq
|
||||
major.acetone.i2p,majorivqe4wud5ksadgfycdkgqsesqbbnw4hpgcqfixy4sm77f4q
|
||||
major.i2p,majorwsiehucyqfqbw3g2on3xqq2pwrwdd6hhyludqqr6ct7xdoa
|
||||
mapwiki.i2p,p2lufcvbzq3smirs7ijwds3y34cxzchveogb4jflbpmk5pzy3wqa
|
||||
marenostrum.i2p,tlrae2xdtewfb262daw6ygm5nz5vusc7rbiefpndubjk4jvh5roq
|
||||
mastodon.chudo.i2p,bba3rhijp3btiinfeixrk2jzz5rilnxxrxvjjx5os23ro4n6g4cq
|
||||
masflam.i2p,ucvzbekxpbzfizwndx4bgsj5bjbygdu4vc3xukiseiw5bvatxivq
|
||||
mattermost.i2p,x5oovnhnuli5fnwtgkbd5z5jvrvdvprqyuofywx6uoxkk4bie6ya
|
||||
max.headroom.i2p,qf4gfhjxrzkmjlcz24zy2itm6iohe3bbcij6trg62hdngeodcuna
|
||||
mayvaneday.i2p,zli2qsg54w7y42vgw4xxlnj4nktcpg7xp33yjxkp33sjafvznbwa
|
||||
meeh.i2p,4oes3rlgrpbkmzv4lqcfili23h3cvpwslqcfjlk6vvguxyggspwa
|
||||
metalist.i2p,wkx64uy4wzstqe3sx47xrm23h5y7g65tjithcfwtb54ykmjlus3a
|
||||
maza.i2p,wiigkmy5je5ox4byjt7z7fh4btojbixbmfv4chnzqoovmgnvdpoa
|
||||
mdleom.i2p,ggucqf2jmtfxcw7us5sts3x7u2qljseocfzlhzebfpihkyvhcqfa
|
||||
metager.i2p,4zdcetlcp3tdg5h23gd3aeyzbvodepid7a6mb3w4qvxkdnm2by6q
|
||||
metrics.i2p,z45ieamhex2ihqv7oowk5fz4qq47rbvxhhhbaaiinpajbhuevtpq
|
||||
mhatta.i2p,o4rsxdeepfrnncsnjq675xogp5v5qkbfgbt6ooqeyfvlifobrjxq
|
||||
mirrormy.i2p,tbxczhirmyaueix5ptaaduamyes2rxh3tv4ie52u2a25jj2x2hsa
|
||||
minecraft.reloaded.i2p,qs5ihihltxhhfi6wesihgbvoaurqxgdpxgmwnmsk5d5beabtvmvq
|
||||
minecraftlog.i2p,vu2v5xnfk4ivrcmjx4fvofzts7fj47jcq23zfpg6ajj6p3ytt3hq
|
||||
mk16de.bandura.i2p,rrllz7nkoeaydqzc5tqdexbfpkvensi26nqg3ly3cxrm5qt6m5sq
|
||||
moneroauth.i2p,kt6uh4z24tendrol5zbm4wv4apq4nbv4w7k5vcguvbpg3alrqyxa
|
||||
moneroexplorer.i2p,je4vbduigce7pgjivvo26d4abn3u5mfsos5zemp3a75xzcv7nm4q
|
||||
monerujo.i2p,puri6y5dtwh6zr4u77ep6ozatun6iz7v4wai2dzxppz7654corlq
|
||||
mooks.i2p,6txhjmnxnrjku4cmdwtyacjzhwythc7l5euqaxieyrc4vjotqwzq
|
||||
mosfet.i2p,s5ynkgagndmpxpf2kmnenv4x72io664gzd2x3qef54ilammnte3q
|
||||
mtn.i2p-projekt.i2p,f52x5fp6uhq53f5zle5d6rq5un34xgmxgazvilvmzcby37xcmsfa
|
||||
mtproxy.ilita.i2p,vxxfipsygx6jpz57pmb3d3mjgsk5ls2idxeo2bffs3yp62muyq7q
|
||||
mucats.i2p,4vjquedemoznbsva4j6wnr7hyms5k3gwucmxgcnwcwweontbcrha
|
||||
mumble.acetone.i2p,plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa
|
||||
mumble.chudo.i2p,2xoqoq5pdwqabm2xhkftcqovgx7h56w26jmyoqlqh5zlntq7njda
|
||||
muwire.i2p,c3r6by4k4kzbx7yvq36u5rieuymshuq2pebo3dzs6oovpzn52uoa
|
||||
nebula.hutor.i2p,575g5k3loi72jyq6fni6w3cdp2uoj2g63qowqjbnylbpc6evxpfa
|
||||
nekit.i2p,axis6zcqacv7le2ms5xqaerecuk3jyrijifrstvxl3or5g5n4ova
|
||||
neodome.i2p,5hkhjehj3ct2pvcah7dcylwef2oti3xij5myxbv3pd7rocio5vkq
|
||||
nekofiles.i2p,rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
|
||||
nerds.i2p,5wpwlbka4wj74rrnwbieopppgtivbqxljznl3bs542mxtvjz7ffq
|
||||
netbsd.i2p,jjz5ajknu5rku4p6xb6i5xwjnp3nd6c3jwi2qnzbpaodyf7g2lja
|
||||
netcontent.i2p,lc7ppfwcq7dm65s57l4uxiez5dqty3bxmdnkwhvl7fv4u2mngcsa
|
||||
nethack.idk.i2p,zcojbufszefu5bfht5cem3zlhfvv5y3jzpzbaccu3ehje4d7pb2a
|
||||
news-i2pn.i2p,wwcqkwfo5yhe6uribv5tzylk25j5hkdk6gdnyftzd3k7dawlzwca
|
||||
news.neodome.i2p,trhwcnygfkeqjj6g4xhmrdp4gsjqsye47lsxshbmwbten4ywt5oq
|
||||
newsxml.idk.i2p,dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka
|
||||
nexus.i2p,6uz2ihv4avlfhui5eyrisw7yx2t5mclxyl6blwjgw7zc5q4j3isa
|
||||
nicksphere.i2p,nickg4tsj3wy3i23faxp5momjcnlwrvwl5ek5l7lkm5vrbblvgbq
|
||||
nightcore.i2p,qg5l3mr6rmu6slzmopojkvl6umtthsygexmxntv2vt4rmx3kwpwa
|
||||
nitter.swurl.i2p,ezrfswcjrkemmsbdttqagtsnc6qdo3yftl3u7un5owjkljocp73a
|
||||
normal.i2p,j5fex634r2altzb3kjvu35qekt2r3hgsqzg5qxoy7dp53heu5pma
|
||||
nitter.skank.i2p,l2aoqvwkq2prrv53cbk4k2ilxw5s2fc7eo2rjunnixp2hrv3iwda
|
||||
nntp.txtcon.i2p,nntpsqgdoky2fuctc2hc6vuls2b4okxpkocic2eo66uup3dtaq7q
|
||||
notbob.i2p,nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a
|
||||
notochina.i2p,h3xsjhfyf4wah4sou3gepzibetdntrmiax3zl3x7ozyjv5krakaa
|
||||
novabbs.i2p,bicoankyijabtj2nlwzjmr4mamybr6bgc6xclpvsgzaaalzhhola
|
||||
nsa.i2p,nsetvbclpomqxfcit4mghn6z7vdhnza6jdzczby4crnto32uykga
|
||||
nullchan.i2p,nullz2mkp7znirlcersxpk7qmkmgcc6u3yhe462p2qkpxsdb3mja
|
||||
nvspc.i2p,anlncoi2fzbsadbujidqmtji7hshfw3nrkqvbgdleepbxx3d5xra
|
||||
nyaaori.i2p,vrth2eefdaica6bliuhmwetasgwdnmyhci5f3zbzq2hmcldepq3q
|
||||
obmen.i2p,vodkv54jaetjw7q2t2iethc4cbi4gjdrmw2ovfmr43mcybt7ekxa
|
||||
ol.i2p,bnb46culzbssz6aipcjkuytanflz6dtndyhmlaxn3pfiv6zqrohq
|
||||
omitracker.i2p,a5ruhsktpdhfk5w46i6yf6oqovgdlyzty7ku6t5yrrpf4qedznjq
|
||||
openbsd.i2p,ahwlj76krc5do77pibighi2frqmfccpezyiqfmiernvivwomgvuq
|
||||
opentracker.dg2.i2p,w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa
|
||||
opentracker.r4sas.i2p,punzipidirfqspstvzpj6gb4tkuykqp6quurj6e23bgxcxhdoe7q
|
||||
opentracker.skank.i2p,by7luzwhx733fhc5ug2o75dcaunblq2ztlshzd7qvptaoa73nqua
|
||||
otkatanet.i2p,psieyl75agjgbztz4jvqctiglbljoz2hvtqdu4fc73e2rez3s4dq
|
||||
outproxy-tor.an0n.i2p,hpa7ojiz6wdjowwpaegzuczmufnaydggk5qw7vj6utakggkcd2kq
|
||||
outproxy-tor.meeh.i2p,77igjr2pbg73ox5ngqy5ohzvrnur3ezqcogtl4vpuqtrcl3irsqq
|
||||
outproxy.bandura.i2p,smaie7bxvpy53iiabfxkhmsjtqs7vzjcr5xxsysjbbobunwrav2q
|
||||
outproxy.purokishi.i2p,nieasaidj7wy5nammqf4f7zzcdafi4apygwn5qwscpn4pq34hqia
|
||||
p4bl0.i2p,lkgdfm4w6e2kkjhcdzr4ahhz26s3aunhrn6t2or436o73qh4z7ga
|
||||
p2p-node.i2p,e7uvwnpkzbn5zdwr76ujlhym4lk5pfkqhvfwivt3mszx7l4lpj7q
|
||||
packages.i2p,2gbnylztt42dgpjh5r5tmy6oxm5xag6qv4femnbbqbpza4l2l6ja
|
||||
pagwin.i2p,qggplwxvsvctsdzgld2shfyjlokfoxur3pkfapygs26i4hwawfga
|
||||
panzerradio.i2p,rawdhtmxzynf5mhrpyhnbjqqxswidr6gvvcbbt4hbpjuv5jebw7q
|
||||
password.i2p,knmjkeabbhudejkikbzhhjqsb4r77o45vkdhve6d254quttfx3wa
|
||||
paste.idk.i2p,qvgktychvlbmqwnoqgz2siuna7f5w764wgkbqcwogipfjzf3ksva
|
||||
paste.r4sas.i2p,csen43keji3qiw6uobsgzysxyjd225g6446ylq5uuz6ur2glkzaa
|
||||
pehotin.i2p,e6tfct7qvso7qrseseubsk5hxn3wejkdivojqeed6i7hbj4dsmqa
|
||||
pharos.i2p,vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
|
||||
pharoz.i2p,vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
|
||||
pi.linuxfarm.i2p,qtv647munv2c6bhdliy2ru754ltjucuyk766eqqfmervbi4z75yq
|
||||
photosarchive.bentasker.i2p,w4lnfcg2chbkwigogba7q3o5pgtq2baip7z3z4afaj65axhyc5ca
|
||||
phreeroma.i2p,44fu2fhq6q36re2xqnkuievdfsroi5xchgbowkqib6ekak3ynm6q
|
||||
pizda666.i2p,bczoowsc6ik7a4mya45qnlq5n6c6llpd5ni3u67r4r4drgohyira
|
||||
pizdabol.i2p,5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
|
||||
planet.i2p,pztcztaklof7s4me2vgtdddzesnunvk55zke6oz5e77ci3qk64yq
|
||||
play-it.i2p,oxt7gdu663baue7lugdmgxqkmtrfdy2izluneqdrpv4pfslxjlta
|
||||
pocketlint.i2p,pocketzsq4r4fef2bw57sn4paufjh5dw75azu5sr4hk2qwdvucsa
|
||||
podger.i2p,56pcmc4rxmtzs6ojvszpiqmh47et3m6amh7kfszp4wbvz2jbpnya
|
||||
polistern.i2p,ztqi2zewgtifrg4efs6eyxxi5www27ymley3aiz4obhulbnszlva
|
||||
pomoyka.i2p,omt56v4jxa4hurbwk44vqbbcwn3eavuynyc24c25cy7grucjh24q
|
||||
pool.gostcoin.i2p,m4f4k3eeaj7otbc254ccj7d5hivguqgnohwelkibr4ddk43qhywa
|
||||
pop.postman.i2p,i7vd76psp3oyocljiqkoyz7fpr4fy2xq2asclf7qih6k57aj5xrq
|
||||
pravtor.i2p,2sr27o5x2v2pyqro7wl5nl6krrsbizwrzsky5y7pkohwh24gn6xq
|
||||
porest.i2p,46l7beij4rerlbuj7xmcngarlkhlpgaztywrleiwagjuiipcebbq
|
||||
privacy-handbuch.i2p,3cccw3cxxghkalgichofulid36ekwplv3stubvfot522mwxcnu5q
|
||||
privatebin.i2p,e7qy5kc7ivqtnrbdn5ymx5nmbdedlrjkdchqmmkhud4ockrime5a
|
||||
privetalena.i2p,alenabivbkqo2xoikterpsc3gquqzacxfef6usbifrez5ioegjjq
|
||||
programthink.i2p,programygfltn24q6foacm5gbuo3z2geub2k2k366llx3bph4ula
|
||||
project-future.i2p,ivqynpfwxzl746gxf376lxqvgktql2lqshzwnwjk2twut6xq7xta
|
||||
proof-of-loss.i2p,ofhehzoj5p4khpkookxb63tmqvrmcxaapgb3v3nm7kd5wjgebs4a
|
||||
prophetgram.i2p,cufuwm75gjpt3svl4wjmo6r4zjv6eqyjdpiuqfckgb5aqqdbgyvq
|
||||
psv.i2p,pmzcuml2oi2ok2h5i6cepcyxxjrughzgliai6hzspdlyt2bucy7a
|
||||
psy.i2p,s3elzoj3wo6v6wqu5ehd56vevpz2vrhhjc5m6mxoazicrl43y62q
|
||||
psychonaut.i2p,laf5nvzn4wz7ndgtdysmhvebpyjo3fkth7i4z4c2kp7su3wi6e2a
|
||||
psyco.i2p,eoilbrgyaiikxzdtmk2zeoalteupjrvcu3ui23p4wvfqo25bb73q
|
||||
ptt.i2p,q7r32j7lc3xgrcw2ym33wv4lfgqbez7vtm4lts7n34qfe3iygeha
|
||||
pubsub.i2p,kse52thhz4srsf2ibw7zj6ua27df5a2u5gnqgf5jxwvranbw6mpa
|
||||
pull.git.repo.i2p,3so7htzxzz6h46qvjm3fbd735zl3lrblerlj2xxybhobublcv67q
|
||||
purokishi.i2p,ia55kcrvskaitnxegirubvderl4vhva6bwkiducbkma4scy2rhca
|
||||
purplechan.i2p,tyiwxpgs7syjvz3cha3uckaxgondtiktlsvriebyy4qmzgbaj3gq
|
||||
push.git.repo.i2p,jef4g5vxnqybm4zpouum3lzbl6ti6456q57nbyj5kfyldkempm3a
|
||||
pvsur.i2p,pvsurxi2hz2n45kfrj5b3ny6ko4ipj2u2piftjen44npkpnbwh6q
|
||||
pwcq.i2p,hcwrhp454aj2jen6clgkw5odw7pvtixhf5dnqsx5ax4vkbxybk7q
|
||||
qorg11.i2p,ivusryc5mfrroomm6s5no4badevf7djzlgzlwarce33no2bsyi3q
|
||||
qtmhkr.i2p,2jj2ikxixz372qzxcdmgkwpzu6kek3mjsvwtzctdkapacfg2epzq
|
||||
quest.idk.i2p,k6stkvw3jr6of4j5g3pu34jowfpl4k4jiqih3yozhcvinkok56aa
|
||||
r4sas.i2p,2gafixvoztrndawkmhfxamci5lgd3urwnilxqmlo6ittu552cndq
|
||||
raccoondad.i2p,utoagugf3imr6mpjsithhnpvvvyehsnebisovn6kqn4vma6va3ca
|
||||
radio.arav.i2p,plkybcgxt4cdanot75cy3pbnqlbqcsrib2fmrpsnug4bqphqvfda
|
||||
radio.idk.i2p,gqla6svl56uazumw2a56rzmvfmcr6fb57bm5kpbb6oibqi6o66gq
|
||||
radio.nerds.i2p,tpbfxyluryodtfxdpwsfvw7fl35p5ezrjk3tlcv2atlmc4fl2ctq
|
||||
radio.r4sas.i2p,cv72xsje5ihg6e24atitmhyk2cbml6eggi6b6fjfh2vgw62gdpla
|
||||
radioliberty.i2p,libertyx5gywnmn4snrr2fborvugmthl2x5vf3rh43v3744kmpwa
|
||||
radioplayer.i2p,5tmr7qghx5eecoyvi77rsy7fqxeoyqcdpvg5wasoitn6ywkyobbq
|
||||
raklet.i2p,j3vnnihngp3ti2trktoxlyblltjn6gxscbmasb5zun5pdndkxkoq
|
||||
ramble.i2p,smv3cryi3n7d5ll7xpvlhstubi5yj4dadeltyrdwdr4onwd2jvvq
|
||||
ransack.i2p,mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq
|
||||
rany.i2p,tcnai23pvo6asfmefl23cllpp3vgrgp2jhtjare7vhloyzwm2pma
|
||||
realsite.i2p,ffacpzudiclaqh6fkck7ungeacfoafvijduhmwvnmp6e4jridhta
|
||||
redzara.i2p,ty7bt62rw5ryvk44dd3v5sua6c7wnbpxxqb6v4dohajmwmezi7va
|
||||
recipebook.bentasker.i2p,ajagzagm5uyc2oac32ycx42znnatejliqorbk3y66xt25guxnh2q
|
||||
reg.i2p,shx5vqsw7usdaunyzr2qmes2fq37oumybpudrd4jjj4e4vk4uusa
|
||||
reg.rus.i2p,k2r2wda4eavt4hoq5hptprqfmixusirq3gi5bl3z2pqzcd6felwa
|
||||
reichsmarket.i2p,2uj4xomizi75swws7q5icmnavekb2w2ws2wlcqtyltde7pgymraq
|
||||
reloaded.i2p,wxbh2yq5twqinsw3ztjogqovvdd6h6j5uxeg3lh53x4w7klzv3tq
|
||||
repo.i2p,uxe3lqueuuyklel23sf5h25zwgqgjwsofrqchhnptd5y6pedzbxa
|
||||
repo.i2pd.i2p,ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
|
||||
repo.r4sas.i2p,ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
|
||||
retrobbs.i2p,mnn77stihntxdoade3ca2vcf456w6vhhvdsfepdvq5qggikvprxq
|
||||
retrobbs2.i2p,ejff7jtyaus37slkwgeqrrcmyhpj26carp7n27f5h6s5vlbeiy6q
|
||||
retrosharenodezero.i2p,2new3x3t6kudc4i7mfvs7k3kltefhqjcj3lq5cowt66wy2dp6kca
|
||||
rideronthestorm.i2p,xrdc2qc7quhumhglpbcuiqxr42nuffv4xj4a73jbr4ygepitibqq
|
||||
rpi.i2p,56p5qxsrvo5ereibevetw2qbj5bronmos7wxunku27g2s4kpbnlq
|
||||
rslight.i2p,bitag46q3465nylvzuikfwjcj7ewi4gjkjtvuxhn73f6vsxffyiq
|
||||
rufurus.i2p,7msryymfdta3ssyz34qur6gi4jyfkvca5iyfmnceviipwu7g2wca
|
||||
rus.azathabar.i2p,6gp6ykan6ovr7p6dln56msvmdk6nrtvzoypz5dbhkkt4bdnryjna
|
||||
rus.i2p,gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga
|
||||
rutor.i2p,rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
|
||||
ryona.i2p,mzt45ux3budteuxz2b4xkwnphgspgljuwp3rxm3d2yr2sij6wopq
|
||||
s01.nullchan.i2p,mirrooeo34iokdgf3wno4ubx6x6uj7f2pqyjmmrvtg4m4parvguq
|
||||
salama.i2p,4uoef63gv2sg6dtqmom5oypt6taypklekvlejfox56eiylprzrmq
|
||||
samainu.i2p,zlwgylqmlx6wxwnxf3mx64jl6yp6wv4sjeiidqw7k3n2wh2m46pa
|
||||
satoshivision.i2p,rn5c533w5baghskquu3gtqlehwjkstzzbk5chbc5qhivsz3a3nqq
|
||||
scamdemia.i2p,fdkiv7o4kzaikwkw6hbn7iedidp25lv6eo7yeyeqxai3jz7mrvzq
|
||||
searx.swurl.i2p,ezrfswcjrkemmsbdttqagtsnc6qdo3yftl3u7un5owjkljocp73a
|
||||
secretchat.i2p,cl3j2zxhpw6u6jevny45i557ojhwfxn4g375nnuqhy6lp27mry2q
|
||||
secretvitebskchat.i2p,6tc7fmbokb3hzajcgpxypxt2excj6tozgrjjofvjcak433dim47q
|
||||
secure.thetinhat.i2p,4q3qyzgz3ub5npbmt3vqqege5lg4zy62rhbgage4lpvnujwfpala
|
||||
scanner.linuxfarm.i2p,kojzsg33v2zxwqp3twpqzfvflaeoxgzxrl3douf2x7xv27ggfnaa
|
||||
secret-site.i2p,p6hbhjgdv2e6gyydrqh2ztl6onxnyilmj4ts7d7aj3uqssr7vvfq
|
||||
securityinabox.i2p,np3agu3ekd3isrzqzvsw4llwlr3hg5xbw7n7a23n2zfvhhm4e7iq
|
||||
serien.i2p,3z5k3anbbk32thinvwcy4g5al7dmb75fagcm3zgh4rzrt3maphda
|
||||
sftp.i2p,sftp22f3a5xwe6mz4q7ybvcn4ptrnwidcgzjmd2jz6ocfxsjxnoq
|
||||
seven.i2p,anqf44jmf7kby2qcvcx7gug6nuyansdu4msdbnp5kojom27rrm7a
|
||||
shadowwiki.i2p,63gxkfc4hlcbxrdoepw2i2hyxai5qkxmi636ag3y7sf5tq3imoya
|
||||
share-les-miquelots.i2p,uxwha4jswnt6jrznj7yhfwldfilvyasnjruimmbylbvq5qykpbpq
|
||||
sharefile.i2p,o7jgnp7bubzdn7mxfqmghn3lzsjtpgkbnpjjsn6ddevqbchz3rta
|
||||
shoieq3.i2p,3fjk4nfk3mccch4hdreghnyijcvovsi3yucjz3qzj5sxngqk5j6q
|
||||
shota.i2p,75xxnc5hkeg7a3z5re4cpybbxt7te3p2krgrrgoka4hib2nr7k4q
|
||||
silkr0adrel0aded.i2p,rdqt2xxpsc5tzj7gjvcrpi7jea5gtbetgx7w2npobveg5teatdvq
|
||||
silkroadreloaded.i2p,hyn3mwmyeovcn2paujxur2eury2ufqpoahvbbqshfoggljn25tra
|
||||
skank.i2p,qiii4iqrj3fwv4ucaji2oykcvsob75jviycv3ghw7dhzxg2kq53q
|
||||
smtp.postman.i2p,3nrunsrgeo6grhx6y6vsx7vibm5vabtockdbys3sqdmj6vha7k5q
|
||||
solr.chudo.i2p,utl2ds5vztfomjgerohvxrgaq3g6zrspyku4s35knfmu4rihhgxq
|
||||
snippets.bentasker.i2p,vgduvgxudaceslvwlvtda6b4csobvczygcqpklm3yeuke2zgvcaa
|
||||
speed-test.i2p,7lk5mgyi2knhqjjwjeiiuwlrn2rs2s577e7jh7z5rmbe2s6qkjpq
|
||||
spirech.i2p,labhopl3kd3eo7cj7kqa6nkwpczc2qj52i37jky77ugqazy7dmna
|
||||
spoika.i2p,u7uyxhgikc5ifj73oz6yedpy5pvtynbqo3n7rk5qyy5h5yhz4wbq
|
||||
sportloto.i2p,sportloto4cqlq6uhzzvgsgd7rcsfu6mqtk7wp6zmzqwcpflbsdq
|
||||
spyware.i2p,36j7itgqmnbinh3ortujakkvqdrbhlqu4b2qcwb46mue3dpzxqfq
|
||||
ssh.b0nk.i2p,fsxdci6r4c52q4ftvdmddxwc45b73h3s2liyg6th3h7hzhjk4q5a
|
||||
srr.i2p,t6vdyn5sbtorn3bp6i7ndnv4lmxhk4qnqmyqlaxykdhcwatchlza
|
||||
ssh.vimarsha.i2p,zttfrujqde5ddndps4stdspvro3khawdhcdgf73pae4i7dnvv4ea
|
||||
stats.i2p,kqypgjpjwrphnzebod5ev3ts2vtii6e5tntrg4rnfijqc7rypldq
|
||||
status.str4d.i2p,ycyyjo3psqbo45nuz243xvgvwnmzlanzqbzxv3kh6gyjztv7425q
|
||||
sto-man.i2p,rg4eilfpe24ws6nctix63qw2dlvd2tqgwdcgdxzji6l5bc4dc7aa
|
||||
str4d.i2p,wrrwzdgsppwl2g2bdohhajz3dh45ui6u3y7yuop5ivvfzxtwnipa
|
||||
streams.darkrealm.i2p,ud3gcmvysjch4lbjr2khmhqpf7r2x5if4q43xkqdptl4k7lc4muq
|
||||
strec.i2p,xez3hkntwaae6iyos3poz4v3elhpmr2abkhsogulugdpu3wwdzcq
|
||||
svong.i2p,wlamzgxjc4k67fn2c2pdems2dzfq3hkdbbt3n7ela7p2wp3pew6a
|
||||
swurl.i2p,5inc2k3h4zjh4cfbvtynce6uvaix24orakxzwm2ftoh7o7p6tqta
|
||||
support.i2p,supportpwqa4cc7q43hb67tgd3dvntrwsy6725iufahm7kiluysq
|
||||
support.torproject.i2p,6r7j6jlbrxb35k32zktopvr3w3pidm2baymwol33hq7xmy2sqm3a
|
||||
syndie-project.i2p,xa63tpfoaqt3zru2ehxjjfbpadwj4ha6qsdvtcqtyr3b7hmt4iaq
|
||||
syndie.echelon.i2p,vwrl2qmcif722fdkn3ldxcgz76df5cq4qypbndzthxwgmykyewta
|
||||
t-ru.i2p,bkhuehxydyprxpd4372h4boyluardjogyuff5p5l3u7syguavz5a
|
||||
tabak.i2p,y5o2vwb6kart7ivpnbpk4yte3i7kf2dsx7fy3i6w7htqtxhmbzia
|
||||
tahoeserve.i2p,yhs7tsjeznxdenmdho5gjmk755wtredfzipb5t272oi5otipfkoa
|
||||
tails.i2p,5d7sl23h4uer4czjdtlomkb6ykeiss6vqkxzausp6f6gmty2plaa
|
||||
takipsizad.i2p,ufkhvmacngokfufxinfkdvfmbpvwvog5vrjiavw5zv32jnekcxia
|
||||
talk.community.i2p,talkakxfa6ihzn2mbzar6q5chdtkpnjp633w3tarul2bb6tfmoua
|
||||
talks.i2p,v45dmrrbjg3ucrazgl3t2tktyjajo7gvfexhmbdos3pi5kfuocaa
|
||||
teddit.i2p,k62ptris7p72aborr4zoanee7xai6wguucveptwgxs5vbgt7qzpq
|
||||
telegram.i2p,i6jow7hymogz2s42xq62gqgej2zdm4xtnmpc6vjcwktdxpdoupja
|
||||
term99.linuxfarm.i2p,dg3mso5klqqgcngalxdh5yvkwv56ou7yotsqxw3twneojytiehra
|
||||
tesla.i2p,em2x6bwsbelqfvlgypcywwoov2rib7mvxiy775dmpfs76m4zcdtq
|
||||
testbox.i2p,voa7ebdulhpcsupz4zqeyikdjztyhiutgvyri4qxqapistjwptbq
|
||||
testmk16de.bandura.i2p,gbdgvcv6wkwctls3tdx4ljmzo4zry3awrr37rkvrxcwg7jzjoyra
|
||||
textboard.i2p,7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua
|
||||
testshark.i2p,u64ropzplqkncdmi4wcknqehjqudxb6elyut2k44ocvgx7ilpgia
|
||||
thealiensarehere.i2p,6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
|
||||
theyosh.i2p,5m7ygxhcdyfa3kx3wfjbbunk4pjey7a5zr5lnfb3upgjbhanrita
|
||||
thornworld.i2p,vinz4ygmodxarocntyjlfwk2wjpvzndlf4hxss2w2t3fk52oplva
|
||||
ti2.i2p,6r77rkt53xcjdpaaihttqjmzigvapmdczkekpogf5epdtcvrhgca
|
||||
tictactoe.i2p,cbr6sya637smfifq2hxj3kzqw5yv7aws2uknmi6ln45r65xej4aa
|
||||
tmpsend.i2p,r2al7m32cg2ypjcny627wkoiyanrasmorub2wqla3y6gn6rwzzvq
|
||||
tomasgl.i2p,tyiu7xok7hvzymxtgg62rjz7mvzr3bryq4i7ii7gudncogn2lpfa
|
||||
tor-gw.meeh.i2p,ounrqi7cfemnt66yhnhigt2u27fkctbvct527cp2522ozy3btjza
|
||||
torrents.chudo.i2p,5ooemze55xiicrlvzjmz3il23dpo4fz5iqr7hmzrygdepan5m3lq
|
||||
tosios.idk.i2p,4mfy2ggcynt5xjkrdstwju2cqicayq7tg5bcb6o575wvab2div7a
|
||||
torch.i2p,vdpmmcq4ysca5rdczr5lqohjtaf5togdy5itoos54s6nn6xqox3a
|
||||
torproject.i2p,torprojaxvxevo4c5qvor3ywgasxkubs5ukazrpq3qcxed6lgbrq
|
||||
torque.i2p,hc3mefp6cq2btwmmjl76atgtftzswu774dyv4a3qkl34wn4g6vta
|
||||
trac.i2p2.i2p,i43xzkihpdq34f2jlmtgiyyay5quafg5rebog7tk7xil2c6kbyoa
|
||||
tracker.chudo.i2p,swhb5i7wcjcohmus3gbt3w6du6pmvl3isdvxvepuhdxxkfbzao6q
|
||||
tracker2.postman.i2p,6a4kxkg5wp33p25qqhgwl6sj4yh4xuf5b3p3qldwgclebchm3eea
|
||||
traditio.i2p,wkpjjloylf6jopu2itgpktr45t2xvpjijxilxd5tq4i7wkqgwhhq
|
||||
translate.idk.i2p,g2l2zr4moqsk2bec346i5tfd2o22cozm5b2k4ifdhbcayazoz2ea
|
||||
triplechan.i2p,blrplscno3ecqb5ihhg73kufmypydjlv4r4gqiajftup5wmcdwna
|
||||
ts.i2p,nebcjgfx3f7q4wzihqmguwcdeopaf7f6wyk2dojw4bcuku472zxq
|
||||
tube.i2p,vipzc556nzjraiqsk5xwvyhz54fvtqt3vrepdarat3zsj4a6eypq
|
||||
tumbach.i2p,u6pciacxnpbsq7nwc3tgutywochfd6aysgayijr7jxzoysgxklvq
|
||||
tutorials.i2p,zy37tq6ynucp3ufoyeegswqjaeofmj57cpm5ecd7nbanh2h6f2ja
|
||||
tv.i2p,znccrkhtgz4wqceyofwsqdsraqhdtteqzrag53lgmp6rhkutuy6q
|
||||
txtcon.i2p,txtcons5lrayl7bq7zsk2mt24clocassid3kh2rvyd3rd2xeklpq
|
||||
tymcz.i2p,pyog2x6v3eyna5pdr765osut52tpbmaheyi5atbqfaixmcq4dp7q
|
||||
ukrainews.i2p,2bocbwrmakg252kicblp5i42feao7qpcw3xppms2i5oevkgelpsa
|
||||
umbra.i2p,xunb4chkeo5xxpfkwrkaqb5etmqpp4ddgvcmy7qkvtxhk5ihck2q
|
||||
unqueued.i2p,3gvn4kwd7z74jxc2sn4ucx52dpvpscxbzjluux3ul4t3eu5g64xq
|
||||
upload.arav.i2p,a5txjx3gjrnw6do4zr66wpwlayxt3dg7kb43wbr3fjp53mkfkbdq
|
||||
vanity-eth.i2p,6djvwwd3mtozyqhpuyvcwqkje5fk3rbxqbgqgdlr32b6hvdqeq5a
|
||||
volatile.i2p,q6rve733tvhgyys57jfw4fymqf3xsnza6dqailcdjcq7w4fa5m3a
|
||||
vxempire.i2p,6z3jnz6mfbdibtebxkhkm45hos6yue5x3yvwljjwy3jtbv6in46q
|
||||
varikvalefor.i2p,yn7ovvjf4nhf7hhk6qqph7utcoce4f2j325rfeuyapw3emlqfqna
|
||||
vimarsha.i2p,ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
|
||||
vps.webhosting.i2p,kfqflh2y36jzp26vloaptqpgwtvw4qtz232wv53xxbggkydhpkaq
|
||||
walker.i2p,5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
|
||||
warez.i2p,warezzqqhsqr6z2isn437osml6liwx3f4oqcp44dhres3jpld2hq
|
||||
wbnet.i2p,2deeocx7jmrbmjxcpkxecw7yy2z7ybzwz5i6mg3ska3p3d2dx45q
|
||||
web.telegram.i2p,re6cgwg2yrkgaixlqvt5ufajbb3w42fsldlq7k5brpvnd5gp6x5a
|
||||
webcam.i2p,fhrkpj4iscrg6etgdlteseoed37q2ph7cizclgpabgcbnaq6g24a
|
||||
webhosting.i2p,hxqjbkpn5fxnmurlab6oluyqf3dd2xnxszeawn4ak2s4rpjnfheq
|
||||
webirc.coldhell.i2p,k2d6bius63w3g35j32dn66fssqwbnyvegx6w6pl5mdeojpp4rjba
|
||||
whois.i2p,whoiswuguobs2rtsmpbao7bvfuxagmlckylh5ig6lxymiixtbfkq
|
||||
wiki.i2p-projekt.i2p,b2rpg7xtzwwfvtorfkrc3m7h222qbobnklra7g4oqhfjx64k2voa
|
||||
wiki.ilita.i2p,r233yskmowqe4od4he4b37wydr5fqzvj3z77v5fdei2etp2kg34a
|
||||
wikiless.i2p,x33lx4h6d7h6xs4eiqwhvaxn3ea5gn2ifmu3jobnvuvn4k4aej7a
|
||||
wikimirror.i2p,2bhh73qhuwjkznnnzjfgo4buo7xy5l4ubhzt3oh23adksscx6gmq
|
||||
wlm.i2p,nigg3rveztrkpzoimq4z46pvbtml27mfhadt7n5bvl3pzzyzefxa
|
||||
woah.i2p,yh2eixirhlhvp7exrtalcwgeirg3fxi2vnumsbp7w6tily5oiwwq
|
||||
wopen.i2p,xvedtnzz3kpwpir23zyr3exrhkrn3267harw7gcjvp25yceyokza
|
||||
www.imule.i2p,657xcllunctawyjtar5kgh3wpt6z4l7ba6mmam5rf7hev5w2lsvq
|
||||
worcester.i2p,5jtgpuzaabxyhahvbmokb3oeh2lwzpiiqlrg3w7kyyg63lzkwabq
|
||||
wordle.i2p,games3kuxvadv3y6tfowiynk2cnbuokrn2guvhkigqulmrvfnyla
|
||||
www.infoserver.i2p,fq7xhxkdcauhwn4loufcadiiy24zbei25elnup33a3gfrdzrtlyq
|
||||
xadmpp.i2p,jb67tnpn67i3pwcuf45rtwu7gq6nkrs72iznhnakpkdzb6dkgfmq
|
||||
xd.i2p,jynrjzdp5qajf2jsdif6bgpijuk72zmuiohq3o7omeksw4pdgejq
|
||||
xeha.i2p,oartgetziabrdemxctowp7bbeggc7ktmj7tr4qgk5y5jcz4prbtq
|
||||
xinku.i2p,xlsmgjin444ccqu7ff5taoov7hecasdyg53keatpbr2qrvgmzvuq
|
||||
xmpp.chudo.i2p,gppd6rx5jkutmt637odkbxh4tjqxy63i4amyhllqn424yt7pd2hq
|
||||
xmpp.ilita.i2p,2dpg43zlfophx5jo4xeqc6cx3zm4x3tfdoinbfuzychf5lwn3dhq
|
||||
xmpp.pubsub.i2p,yxbp3sn2x5t6k7hcxsg4njmaxjomr2wvh4xeldxjlij3ms3sikgq
|
||||
xmpp.reloaded.i2p,hioylmlm3lf3qgp2ncmym3igx6eyytlwioeq2fip4cwpzjtyxfuq
|
||||
xmpp.rpi.i2p,3yv65pfwiwfuv4ciwtx34clqps6o2mc3vtyltcbqdkcki6untbca
|
||||
xmpp.xadmpp.i2p,s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
|
||||
xmpp2.reloaded.i2p,ufeplugqot5e22kottvejlw7yq24kynw5v5faulehc6n2zs62ura
|
||||
xmrnode.i2p,moneroti7lckp4hjrqckoq5cfi2apuyxia42sp5x7tkbzjfwqfiq
|
||||
xmrradio.i2p,olwxvhwaq422rcrlmvh6wgrdczyfyeag645du4cwncutqblkfmaq
|
||||
xn--80ahmijpip2p.i2p,assist2a3jsikp7ufmzpa56mlflhi5kmoack5dm6ua5x2hbgckua
|
||||
xn--hallchen-q4a.i2p,h5c4idxoweambtqajx3ecpu4iw425mfzckb4rrcvftrr7d2utfgq
|
||||
xn--n3h.i2p,6a5bfeil667ksrdgg5hx5x2dse2v6ovnsng3r2k5gp5tb4z67egq
|
||||
xn--r2beng6b4e.i2p,ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
|
||||
xsden.i2p,4dofwhzlkz3k3sedwzs2sx2fudq3jfvaygffc6kp6hsawmfmz6qa
|
||||
xx.i2p,a7hrmb4kbftyk4ovr2la6azi7vjfqwt2zlckos4svoaclqu52j6a
|
||||
yacy.idk.i2p,7ccyylqqxnyexz2acn3nqjdlwqmd5pororbovrarar2dkw3ddrbq
|
||||
yat.i2p,zxg4p6obolmrnkygoodqbdnikzychk5sild3o753hmaljuosl2fq
|
||||
yellowonion.i2p,7l4kgsyatdmntck22i27oui3llftjim33ydav7kdew6ewfqvjzfa
|
||||
yggdrasil.acetone.i2p,tlfhgwzn4v5nlm2or5uy4leqmjbl5bncgcopbqnmcr4hbk3zrvqq
|
||||
yggdrasil.i2p,7hhvvtephitji3ibz4vhbapj4rikoppd5324yttp6k35gkqgri3q
|
||||
yggnet.i2p,deyg5puthy6tc44j56ee2zxv3wu36vlmgxjyz2zoc63w66l5ksua
|
||||
yiffme.i2p,sm6dk2ovxhgdjuu3rmqussc4e2xkfz6rmhng6i2t7parcb4v4y3a
|
||||
yoitsu.i2p,yaaqmj55lsi5c5nukf4hsrift2zslnqkbcghwvjlaqayidtyctwa
|
||||
yourdomain.i2p,witqoik7gjzywta5nss5m6dvialeciismabksrukcvpfdpe6aqha
|
||||
yt2mp3.i2p,7ai77u54gxta2ry326amfq4ugiqgcxd4r663nmxtswcwezyxsbzq
|
||||
zab.i2p,n4xen5sohufgjhv327ex4qra77f4tpqohlcyoa3atoboknzqazeq
|
||||
zerobin.i2p,3564erslxzaoucqasxsjerk4jz2xril7j2cbzd4p7flpb4ut67hq
|
||||
zeronet.i2p,fe6pk5sibhkr64veqxkfochdfptehyxrrbs3edwjs5ckjbjn4bna
|
||||
zetareticuli.i2p,odleh3zcsmyhck4rgrxmjsfo4o33cthxyy3kkgz5vdrqlzdspxma
|
||||
znc.str4d.i2p,ufkajv3stxpxlwgwwb2ae6oixdjircnbwog77qxpxv7nt67rpcxq
|
||||
zx.i2p,4ru5b25ixgz2wt2aqskbr2iflv42gt6ta6qet7rv4et5rh2kq6fq
|
||||
zzz.i2p,lhbd7ojcaiofbfku7ixh47qj537g572zmhdc4oilvugzxdpdghua
|
||||
|
||||
|
@@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICKDCCAc6gAwIBAgIUcPHZXtYSqGNRCD6z8gp79WUFtI0wCgYIKoZIzj0EAwIw
|
||||
gZMxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEPMA0GA1UEBwwGQXVzdGlu
|
||||
MRgwFgYDVQQKDA9TdG9ybXlDbG91ZCBJbmMxIzAhBgNVBAMMGnN0b3JteWNsb3Vk
|
||||
LmZhbWlseS5pMnAubmV0MSQwIgYJKoZIhvcNAQkBFhVhZG1pbkBzdG9ybXljbG91
|
||||
ZC5vcmcwHhcNMjIwMzE5MTU1MjU2WhcNMzIwMzE2MTU1MjU2WjCBkzELMAkGA1UE
|
||||
BhMCVVMxDjAMBgNVBAgMBVRleGFzMQ8wDQYDVQQHDAZBdXN0aW4xGDAWBgNVBAoM
|
||||
D1N0b3JteUNsb3VkIEluYzEjMCEGA1UEAwwac3Rvcm15Y2xvdWQuZmFtaWx5Lmky
|
||||
cC5uZXQxJDAiBgkqhkiG9w0BCQEWFWFkbWluQHN0b3JteWNsb3VkLm9yZzBZMBMG
|
||||
ByqGSM49AgEGCCqGSM49AwEHA0IABFUli0hvJEmowNjJVjbKEIWBJhqe973S4VdL
|
||||
cJuA5yY3dC4Y998abWEox7/Y1BhnBbpJuiodA341bXKkLMXQy/kwCgYIKoZIzj0E
|
||||
AwIDSAAwRQIgD12F/TfY3iV1/WDF7BSKgbD5g2MfELUIy1dtUlJQuJUCIQD69mZw
|
||||
V1Z9j2x0ZsuirS3i6AMfVyTDj0RFS3U1jeHzIQ==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,33 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFyzCCA7OgAwIBAgIRALWNWsnQ0Vmn/99iCNT7cdQwDQYJKoZIhvcNAQELBQAw
|
||||
cTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
|
||||
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGjAYBgNVBAMM
|
||||
EWVjaGVsb24zQG1haWwuaTJwMB4XDTIxMTEyOTE5MzU1OVoXDTMxMTEyOTE5MzU1
|
||||
OVowcTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwG
|
||||
A1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGjAYBgNV
|
||||
BAMMEWVjaGVsb24zQG1haWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
|
||||
CgKCAgEA3pccNiQWJUS1t3QHK7rBCNKAsM2dz4szN3+3SrDy1w+rOrK8Vt5aypPU
|
||||
QYUQwG+odjEPacuoRtO/W14KJl5yAI3eQS+X/cYDXmxvfm4zx5JRumYptXwJD57G
|
||||
rlPHnFvk8R+Hvh+/UyqgSAZ9ZaKjEzYK4AtbYEXtopaM4U2VYN8xKjvKyWlhPdxo
|
||||
kI3//qcTlSqGHHeHrkItLG1LubM1EnPu+9zI2WN2zBBRcm8ZtWqHoqFJ1zgJr/49
|
||||
nMK8Lnb3I54ctva8x5+gsSk4dbG/mMsOIZekFqYJJs3+u9w5fmOYI7v9GlQr7UhE
|
||||
G3MwjJ5Cj1LmLVlz/4LApZrDSd2JvwIUdGL3UW8+blaTeCPKIRvmsTeRxo1gORMF
|
||||
ZH0dg39722lK7ScwOlOUX9ggzRUlYCmvnjQJZGJEUoP68QxjlQfkXZyffmMfvm6K
|
||||
V6mcZ5aHMGO1lYAl40kWNJ0jGpmxJqTDhNFDEKr0TlRGVxXGWzObEOrcJ8ysRMc1
|
||||
x6oXQhh79HXZcKwhZaXLx23ZvVoTfhRm4JH0SSP6XqQm35j4NI1SllEsDns29wU3
|
||||
Re4wOWJCCYlPG3CtY32CinwQRoVgtiJk18W8+Pxw7sBFq8sL5L0Z+5bB6nTkBfV6
|
||||
7OrZGWL0i344zQE0e3yIsLih+5Wyqw6RSSMysenl3alnUB9EvE0CAwEAAaNeMFww
|
||||
DgYDVR0PAQH/BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAP
|
||||
BgNVHRMBAf8EBTADAQH/MBoGA1UdDgQTBBFlY2hlbG9uM0BtYWlsLmkycDANBgkq
|
||||
hkiG9w0BAQsFAAOCAgEAaUMnMYtNFBl9dFON6e4EjYo53Wknj61uIVO11dvLqjnh
|
||||
7X6guPML+GgNZsPQGLu7Bqw4hVgy/cV5AlFc7SXOhzpaYo1ycpjg3Ws1VK2wrk7+
|
||||
4bvUThNcS1KZVFDdRE62549rYNfYNfPxXvccOTW9meTCC1kLHerh65ySDr9J02O6
|
||||
o5Mf685PgBasBH6dlosOLTtee2gRLNFcAluQYKerawS1gDys5239UNHPCqTgO+Od
|
||||
FiKfl48OIOzPGLKEf4lXC+lkwZElewShrHhzd8aGueedTi0UHOtQuY7ocsofqXc8
|
||||
OnyT/y2X6wn/YkzviKgfxYDSI7FJiUgXCPcT0jUNmuwR168yL5BfzoQmrCvlOOQg
|
||||
P7ibdBJ6UkL8pRpv/SYpvaX/kf4agYtwh5IL9FzNCwNu54ZC6JilLUhYAU38Eolq
|
||||
OZ/cGiMoSFQIeBPvB3cdsqEud9W4P+MqN5A76fMzdVV77lGsIS1eCGMceR3CjOiF
|
||||
6SdAskcBZWhFiRNQweC0iv57/nPCeTCuNAqbZSHd7zC1AKhNmmsKSJUJQCGijcce
|
||||
P8Gl0AFfZneN2bVEFvJ/zd71pD8ll1Gkju16bfdWn0V4NRaxFiXNr2bL+ah9blud
|
||||
EXOomE3R6ow1QZk+Gnpy3wh9jfwlrJuFoANvHnv4WREbdjwr//71XjBri5p1wPE=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,32 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
JNJOWTH/Vas1W6XlwGcOOAARTQ==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,32 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
bSl5VHgPXHNM8mcnndMAuzvl7jEK
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,34 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
2Q==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,32 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFfzCCA2egAwIBAgIEbNbRPjANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
|
||||
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
|
||||
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQb3JpZ25hbEBtYWls
|
||||
LmkycDAeFw0yMTA3MDYyMjExMDFaFw0zMTA3MDQyMjExMDFaMHAxCzAJBgNVBAYT
|
||||
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
|
||||
eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBvcmlnbmFsQG1h
|
||||
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvNJz2KGuAkHP
|
||||
tGFobfLvpybtxB50fkcEsTc9opmiy7wBKK9rSI01VS616IhABkWKZVfK2A9NqpGv
|
||||
v/CyhTKoaeSNeXY7+zORUWgWK/zA9fA4GRZFqlW8j4tbompDwcLYNqRBCsn1C0OY
|
||||
YA5JhXPBixMcnXl8N8x4sXhQ4l9R3+QrydhUHRvgDc8dOxRyIX7zuQAyf8tmA2Xo
|
||||
xZLdvDcCJdLBIbFwxhIceIhgcOwaOx7oRkZDZdYcLJd3zjyPbu8JtOM2ZkwH7r+0
|
||||
ro5PktuDp2LAS6SII5yYNcwcrvPZGPqhLdifIw1BrdTIb/rIkQZ5iXOOdyPmT7e8
|
||||
IwAJcPFlfvrS4Vbi9oDqyx3aDUBoubgmFnO1TirL56ck83R/ubcKtdnyzAn5dp+f
|
||||
ZNYW6/foSBpDDOCViylbFAR5H0HJEbBns7PZx6mGEEI4tUAJdNYl7Ly7Df60a9Rz
|
||||
cD/gz08U9UwFXYKoT6roEjToADGAzb5MI4cVlAb2AmQaMNXNe04HcDL1bU50mkNU
|
||||
amqPv8nxf72fBQCEmZz2G57T6QiYTtcCwiWS1QdWsuaOtCo9zO0MKcjzSdUxuxEc
|
||||
dXhjQdNegsgg/Xk7bJ8lKOsACqMpFftdPmuyeZU2t+3RPuBpV/0j2qUfg/y6kb0z
|
||||
CxAOYmlcL4kqw4VT+5V/EeZLIG0h9I0CAwEAAaMhMB8wHQYDVR0OBBYEFD/wJObg
|
||||
CCDuhMJCVWTSTj+B3rsUMA0GCSqGSIb3DQEBDQUAA4ICAQC0PjsTSPWlGbLNeeI8
|
||||
F0B5xAwXYJzZ7/LRxh8u42HDUqVIDjqkuls1l3v9D7htty2Gr3Ws2dcvcOr2KcOy
|
||||
mEWg+jdP/N3vt9IkZeVS4YQoPgq6orn7lVkk00bcKb24f7ZnoQnnVV0/m42Y5P4j
|
||||
LLh+8MBxsez9azXyZbDVEkgsMUAkdVO6KNz6scqz7wb8egV2GAMAp7cwChC6lanK
|
||||
gv9ZyJhG/HdTv6VyuMZhJy6rX4geM97tm1iHu1VLsQcIzBKAdEvWJv8ofMeiyINe
|
||||
hqAP9NYaeowKi975NOrmf+XZwxd0niApIohV684RCVUfL8H7HSPbdXhBJ/WslyDP
|
||||
cTGhA2BLqEXZBn/nLQknlnl0SZTQxG2n4fEgD1E5YS/aoBrig/uXtWm2Zdf8U3mM
|
||||
+bNXhbi9s7LneN2ye8LlNJBSRklNn/bNo8OmzLII1RQwf1+vaHT96lASbTVepMZ/
|
||||
Y9VcC8fAmho/zfQEKueLEB03K+gr2dGD+1crmMtUBjWJ9vPjtooZArtkDbh+kVYA
|
||||
cx4N4NXULRwxVWZe5wTQOqcZ3qSS1ClMwaziwychGaj8xRAirHMZnlPOZO1UK4+5
|
||||
8F4RMJktyZjNgSLP76XPS4rJK5fobuPqFeA4OpDFn/5+/XeQFF6i6wntx1tzztzH
|
||||
zc+BrVZOdcYPqu9iLXyRQ9JwwA==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,33 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,31 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
fpeOSDoGBYJGbIpzDreBDhxaZrwGq36k
|
||||
-----END CERTIFICATE-----
|
||||
@@ -12,7 +12,7 @@ loglevel = none
|
||||
ipv4 = true
|
||||
ipv6 = false
|
||||
|
||||
# ssu = true
|
||||
ssu = false
|
||||
|
||||
bandwidth = L
|
||||
# share = 100
|
||||
@@ -23,6 +23,10 @@ bandwidth = L
|
||||
[ntcp2]
|
||||
enabled = true
|
||||
|
||||
[ssu2]
|
||||
enabled = true
|
||||
published = true
|
||||
|
||||
[http]
|
||||
enabled = true
|
||||
address = 127.0.0.1
|
||||
@@ -63,7 +67,7 @@ enabled = false
|
||||
# port = 7656
|
||||
|
||||
[precomputation]
|
||||
elgamal = true
|
||||
elgamal = false
|
||||
|
||||
[upnp]
|
||||
enabled = true
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
http://reg.i2p/hosts.txt
|
||||
http://identiguy.i2p/hosts.txt
|
||||
http://stats.i2p/cgi-bin/newhosts.txt
|
||||
http://i2p-projekt.i2p/hosts.txt
|
||||
@@ -29,7 +29,7 @@ public class DaemonWrapper {
|
||||
private static final String TAG = "i2pd";
|
||||
private final AssetManager assetManager;
|
||||
private final ConnectivityManager connectivityManager;
|
||||
private String i2pdpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd/";
|
||||
private String i2pdpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd";
|
||||
private boolean assetsCopied;
|
||||
|
||||
private static final String appLocale = Locale.getDefault().getDisplayLanguage(Locale.ENGLISH).toLowerCase(); // lower-case system language (like "english")
|
||||
@@ -85,13 +85,12 @@ public class DaemonWrapper {
|
||||
}
|
||||
|
||||
public int getTransitTunnelsCount() {
|
||||
return I2PD_JNI.GetTransitTunnelsCount();
|
||||
return I2PD_JNI.getTransitTunnelsCount();
|
||||
}
|
||||
|
||||
public enum State {
|
||||
uninitialized(R.string.uninitialized),
|
||||
starting(R.string.starting),
|
||||
jniLibraryLoaded(R.string.jniLibraryLoaded),
|
||||
startedOkay(R.string.startedOkay),
|
||||
startFailed(R.string.startFailed),
|
||||
gracefulShutdownInProgress(R.string.gracefulShutdownInProgress),
|
||||
@@ -129,7 +128,7 @@ public class DaemonWrapper {
|
||||
private String daemonStartResult = "N/A";
|
||||
|
||||
private void fireStateUpdate1(State oldValue, State newValue) {
|
||||
Log.i(TAG, "daemon state change: " + state);
|
||||
Log.d(TAG, "daemon state change: " + state);
|
||||
for (StateUpdateListener listener : stateUpdateListeners) {
|
||||
try {
|
||||
listener.daemonStateUpdate(oldValue, newValue);
|
||||
@@ -153,7 +152,7 @@ public class DaemonWrapper {
|
||||
|
||||
public void changeDataDir(String dataDir, Boolean updateAssets) {
|
||||
I2PD_JNI.setDataDir(dataDir);
|
||||
if( updateAssets ) processAssets();
|
||||
if (updateAssets) processAssets();
|
||||
//ToDo: move old dir to new dir?
|
||||
}
|
||||
|
||||
@@ -168,7 +167,6 @@ public class DaemonWrapper {
|
||||
} catch (Throwable tr) {
|
||||
Log.e(TAG, "", tr);
|
||||
}
|
||||
|
||||
setState(State.stopped);
|
||||
}
|
||||
}
|
||||
@@ -178,7 +176,6 @@ public class DaemonWrapper {
|
||||
try {
|
||||
processAssets();
|
||||
I2PD_JNI.loadLibraries();
|
||||
setState(State.jniLibraryLoaded);
|
||||
//registerNetworkCallback();
|
||||
} catch (Throwable tr) {
|
||||
lastThrowable = tr;
|
||||
@@ -189,7 +186,7 @@ public class DaemonWrapper {
|
||||
synchronized (DaemonWrapper.this) {
|
||||
I2PD_JNI.setDataDir(i2pdpath); // (Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd");
|
||||
|
||||
Log.d(TAG, "setting webconsole language to " + appLocale);
|
||||
Log.i(TAG, "setting webconsole language to " + appLocale);
|
||||
I2PD_JNI.setLanguage(appLocale);
|
||||
|
||||
daemonStartResult = I2PD_JNI.startDaemon();
|
||||
@@ -206,58 +203,51 @@ public class DaemonWrapper {
|
||||
}
|
||||
|
||||
private void processAssets() {
|
||||
if (!assetsCopied) {
|
||||
try {
|
||||
assetsCopied = true;
|
||||
File holderFile = new File(i2pdpath, "assets.ready");
|
||||
String versionName = BuildConfig.VERSION_NAME; // here will be app version, like 2.XX.XX
|
||||
StringBuilder text = new StringBuilder();
|
||||
Log.d(TAG, "checking assets");
|
||||
|
||||
File holderFile = new File(i2pdpath, "assets.ready");
|
||||
String versionName = BuildConfig.VERSION_NAME; // here will be app version, like 2.XX.XX
|
||||
StringBuilder text = new StringBuilder();
|
||||
if (holderFile.exists()) {
|
||||
try { // if holder file exists, read assets version string
|
||||
FileReader fileReader = new FileReader(holderFile);
|
||||
|
||||
if (holderFile.exists()) {
|
||||
try { // if holder file exists, read assets version string
|
||||
FileReader fileReader = new FileReader(holderFile);
|
||||
try {
|
||||
BufferedReader br = new BufferedReader(fileReader);
|
||||
|
||||
try {
|
||||
BufferedReader br = new BufferedReader(fileReader);
|
||||
try {
|
||||
String line;
|
||||
|
||||
try {
|
||||
String line;
|
||||
|
||||
while ((line = br.readLine()) != null) {
|
||||
text.append(line);
|
||||
}
|
||||
}finally {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "", e);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
fileReader.close();
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "", e);
|
||||
}
|
||||
while ((line = br.readLine()) != null) {
|
||||
text.append(line);
|
||||
}
|
||||
}finally {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "", e);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
fileReader.close();
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "", e);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "", e);
|
||||
}
|
||||
}
|
||||
|
||||
// if version differs from current app version or null, try to delete certificates folder
|
||||
if (!text.toString().contains(versionName))
|
||||
try {
|
||||
boolean deleteResult = holderFile.delete();
|
||||
if (!deleteResult)
|
||||
Log.e(TAG, "holderFile.delete() returned " + deleteResult + ", absolute path='" + holderFile.getAbsolutePath() + "'");
|
||||
File certPath = new File(i2pdpath, "certificates");
|
||||
deleteRecursive(certPath);
|
||||
}
|
||||
catch (Throwable tr) {
|
||||
Log.e(TAG, "", tr);
|
||||
}
|
||||
// if version differs from current app version or null, try to delete certificates folder
|
||||
if (!text.toString().contains(versionName)) {
|
||||
try {
|
||||
boolean deleteResult = holderFile.delete();
|
||||
if (!deleteResult)
|
||||
Log.e(TAG, "holderFile.delete() returned " + deleteResult + ", absolute path='" + holderFile.getAbsolutePath() + "'");
|
||||
File certPath = new File(i2pdpath, "certificates");
|
||||
deleteRecursive(certPath);
|
||||
|
||||
// copy assets. If processed file exists, it won't be overwritten
|
||||
copyAsset("addressbook");
|
||||
@@ -312,7 +302,7 @@ public class DaemonWrapper {
|
||||
// Make the directory.
|
||||
File dir = new File(i2pdpath, path);
|
||||
boolean result = dir.mkdirs();
|
||||
Log.d(TAG, "dir.mkdirs() returned " + result);
|
||||
Log.d(TAG, "dir.mkdirs() returned " + result + " for " + dir);
|
||||
|
||||
// Recurse on the contents.
|
||||
for (String entry : contents) {
|
||||
@@ -361,7 +351,7 @@ public class DaemonWrapper {
|
||||
}
|
||||
boolean deleteResult = fileOrDirectory.delete();
|
||||
if (!deleteResult)
|
||||
Log.e(TAG, "fileOrDirectory.delete() returned " + deleteResult + ", absolute path='" + fileOrDirectory.getAbsolutePath() + "'");
|
||||
Log.d(TAG, "fileOrDirectory.delete() returned " + deleteResult + ", absolute path='" + fileOrDirectory.getAbsolutePath() + "'");
|
||||
}
|
||||
|
||||
private void registerNetworkCallback(){
|
||||
@@ -383,14 +373,14 @@ public class DaemonWrapper {
|
||||
public void onAvailable(Network network) {
|
||||
super.onAvailable(network);
|
||||
I2PD_JNI.onNetworkStateChanged(true);
|
||||
Log.i(TAG, "NetworkCallback.onAvailable");
|
||||
Log.d(TAG, "NetworkCallback.onAvailable");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLost(Network network) {
|
||||
super.onLost(network);
|
||||
I2PD_JNI.onNetworkStateChanged(false);
|
||||
Log.i(TAG, " NetworkCallback.onLost");
|
||||
Log.d(TAG, " NetworkCallback.onLost");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.purplei2p.i2pd;
|
||||
|
||||
import static android.app.PendingIntent.FLAG_IMMUTABLE;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -84,7 +86,7 @@ public class ForegroundService extends Service {
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
Log.i("ForegroundService", "Received start id " + startId + ": " + intent);
|
||||
Log.d("ForegroundService", "Received start id " + startId + ": " + intent);
|
||||
return START_STICKY;
|
||||
}
|
||||
|
||||
@@ -139,19 +141,19 @@ public class ForegroundService extends Service {
|
||||
|
||||
// The PendingIntent to launch our activity if the user selects this notification
|
||||
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
|
||||
new Intent(this, I2PDActivity.class), 0);
|
||||
new Intent(this, I2PDActivity.class),
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? FLAG_IMMUTABLE : 0);
|
||||
|
||||
// If earlier version channel ID is not used
|
||||
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
|
||||
String channelId = Build.VERSION.SDK_INT >= 26 ? createNotificationChannel() : "";
|
||||
String channelId = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? createNotificationChannel() : "";
|
||||
|
||||
// Set the info for the views that show in the notification panel.
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId)
|
||||
.setOngoing(true)
|
||||
.setSmallIcon(R.drawable.ic_notification_icon); // the status icon
|
||||
if (Build.VERSION.SDK_INT >= 16)
|
||||
builder = builder.setPriority(Notification.PRIORITY_DEFAULT);
|
||||
if (Build.VERSION.SDK_INT >= 21)
|
||||
builder = builder.setPriority(Notification.PRIORITY_DEFAULT);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
||||
builder = builder.setCategory(Notification.CATEGORY_SERVICE);
|
||||
Notification notification = builder
|
||||
.setTicker(text) // the status text
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.net.ConnectivityManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.os.IBinder;
|
||||
import android.os.PowerManager;
|
||||
import android.preference.PreferenceManager;
|
||||
@@ -27,8 +28,7 @@ import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -37,19 +37,20 @@ import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import static android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS;
|
||||
import static org.purplei2p.i2pd.DaemonWrapper.State.startedOkay;
|
||||
import static org.purplei2p.i2pd.DaemonWrapper.State.starting;
|
||||
import static org.purplei2p.i2pd.DaemonWrapper.State.stopped;
|
||||
|
||||
public class I2PDActivity extends Activity {
|
||||
private static final String TAG = "i2pdActvt";
|
||||
private static final int MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
|
||||
public static final int GRACEFUL_DELAY_MILLIS = 10 * 60 * 1000;
|
||||
public static final String PACKAGE_URI_SCHEME = "package:";
|
||||
private Button enableButton;
|
||||
private Button disableButton;
|
||||
|
||||
private TextView textView;
|
||||
private CheckBox HTTPProxyState;
|
||||
private CheckBox SOCKSProxyState;
|
||||
private CheckBox BOBState;
|
||||
private CheckBox SAMState;
|
||||
private CheckBox I2CPState;
|
||||
|
||||
|
||||
private static volatile DaemonWrapper daemon;
|
||||
|
||||
@@ -65,15 +66,23 @@ public class I2PDActivity extends Activity {
|
||||
try {
|
||||
if (textView == null)
|
||||
return;
|
||||
|
||||
Throwable tr = daemon.getLastThrowable();
|
||||
if (tr != null) {
|
||||
textView.setText(throwableToString(tr));
|
||||
return;
|
||||
}
|
||||
|
||||
DaemonWrapper.State state = daemon.getState();
|
||||
if(state == startedOkay){
|
||||
disableButton.setVisibility(View.VISIBLE);
|
||||
|
||||
if (daemon.isStartedOkay()) {
|
||||
HTTPProxyState.setChecked(I2PD_JNI.getHTTPProxyState());
|
||||
SOCKSProxyState.setChecked(I2PD_JNI.getSOCKSProxyState());
|
||||
BOBState.setChecked(I2PD_JNI.getBOBState());
|
||||
SAMState.setChecked(I2PD_JNI.getSAMState());
|
||||
I2CPState.setChecked(I2PD_JNI.getI2CPState());
|
||||
}
|
||||
|
||||
String startResultStr = DaemonWrapper.State.startFailed.equals(state) ? String.format(": %s", daemon.getDaemonStartResult()) : "";
|
||||
String graceStr = DaemonWrapper.State.gracefulShutdownInProgress.equals(state) ? String.format(": %s %s", formatGraceTimeRemaining(), getText(R.string.remaining)) : "";
|
||||
textView.setText(String.format("%s%s%s", getText(state.getStatusStringResourceId()), startResultStr, graceStr));
|
||||
@@ -99,12 +108,17 @@ public class I2PDActivity extends Activity {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
Log.i(TAG, "onCreate");
|
||||
Log.d(TAG, "onCreate");
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
enableButton = findViewById(R.id.enableButton);
|
||||
disableButton = findViewById(R.id.disableButton);
|
||||
|
||||
textView = (TextView) findViewById(R.id.appStatusText);
|
||||
HTTPProxyState = (CheckBox) findViewById(R.id.service_httpproxy_box);
|
||||
SOCKSProxyState = (CheckBox) findViewById(R.id.service_socksproxy_box);
|
||||
BOBState = (CheckBox) findViewById(R.id.service_bob_box);
|
||||
SAMState = (CheckBox) findViewById(R.id.service_sam_box);
|
||||
I2CPState = (CheckBox) findViewById(R.id.service_i2cp_box);
|
||||
|
||||
if (daemon == null) {
|
||||
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
daemon = new DaemonWrapper(getAssets(), connectivityManager);
|
||||
@@ -113,30 +127,17 @@ public class I2PDActivity extends Activity {
|
||||
|
||||
daemon.addStateChangeListener(daemonStateUpdatedListener);
|
||||
daemonStateUpdatedListener.daemonStateUpdate(DaemonWrapper.State.uninitialized, daemon.getState());
|
||||
enableButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if( daemon.getState() != startedOkay && daemon.getState() != starting ){
|
||||
daemon.stopDaemon();
|
||||
daemon.startDaemon();
|
||||
disableButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
disableButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if( daemon.getState() != stopped ){
|
||||
daemon.stopDaemon();
|
||||
disableButton.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// request permissions
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
if(!Environment.isExternalStorageManager()) {
|
||||
Log.e(TAG, "MANAGE_EXTERNAL_STORAGE perm declined, stopping i2pd");
|
||||
i2pdStop();
|
||||
}
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(this,
|
||||
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
|
||||
MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
|
||||
}
|
||||
}
|
||||
@@ -179,11 +180,10 @@ public class I2PDActivity extends Activity {
|
||||
{
|
||||
if (requestCode == MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE) {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
||||
Log.e(TAG, "WR_EXT_STORAGE perm granted");
|
||||
Log.w(TAG, "WR_EXT_STORAGE perm granted");
|
||||
else {
|
||||
Log.e(TAG, "WR_EXT_STORAGE perm declined, stopping i2pd");
|
||||
i2pdStop();
|
||||
//TODO must work w/o this perm, ask orignal
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -299,7 +299,7 @@ public class I2PDActivity extends Activity {
|
||||
return true;
|
||||
|
||||
case R.id.action_start_webview:
|
||||
if( daemon.getState() == startedOkay)
|
||||
if(daemon.isStartedOkay())
|
||||
startActivity(new Intent(getApplicationContext(), WebConsoleActivity.class));
|
||||
else
|
||||
Toast.makeText(this,"I2Pd not was started!", Toast.LENGTH_SHORT).show();
|
||||
@@ -324,21 +324,22 @@ public class I2PDActivity extends Activity {
|
||||
}
|
||||
|
||||
private void onReloadTunnelsConfig() {
|
||||
Log.d(TAG, "reloading tunnels");
|
||||
Log.i(TAG, "reloading tunnels");
|
||||
daemon.reloadTunnelsConfigs();
|
||||
Toast.makeText(this, R.string.tunnels_reloading, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
private void i2pdStop() {
|
||||
cancelGracefulStop0();
|
||||
Log.i(TAG, "stopping");
|
||||
textView.setText(getText(R.string.stopping));
|
||||
new Thread(() -> {
|
||||
Log.d(TAG, "stopping");
|
||||
try {
|
||||
daemon.stopDaemon();
|
||||
} catch (Throwable tr) {
|
||||
Log.e(TAG, "", tr);
|
||||
}
|
||||
quit(); //TODO make menu items for starting i2pd. On my Android, I need to reboot the OS to restart i2pd.
|
||||
quit();
|
||||
}, "stop").start();
|
||||
}
|
||||
|
||||
@@ -353,10 +354,10 @@ public class I2PDActivity extends Activity {
|
||||
Toast.makeText(this, R.string.graceful_stop_is_already_in_progress, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
Log.i(TAG, "graceful stopping");
|
||||
Toast.makeText(this, R.string.graceful_stop_is_in_progress, Toast.LENGTH_SHORT).show();
|
||||
new Thread(() -> {
|
||||
try {
|
||||
Log.d(TAG, "graceful stopping");
|
||||
if (daemon.isStartedOkay()) {
|
||||
daemon.stopAcceptingTunnels();
|
||||
long gracefulStopAtMillis;
|
||||
@@ -376,9 +377,9 @@ public class I2PDActivity extends Activity {
|
||||
private void cancelGracefulStop()
|
||||
{
|
||||
cancelGracefulStop0();
|
||||
Log.i(TAG, "canceling graceful stop");
|
||||
new Thread(() -> {
|
||||
try {
|
||||
Log.d(TAG, "canceling graceful stop");
|
||||
if (daemon.isStartedOkay()) {
|
||||
daemon.startAcceptingTunnels();
|
||||
runOnUiThread(() -> Toast.makeText(this, R.string.shutdown_canceled, Toast.LENGTH_SHORT).show());
|
||||
@@ -395,7 +396,7 @@ public class I2PDActivity extends Activity {
|
||||
gracefulQuitTimerOld.cancel();
|
||||
|
||||
if (daemon.getTransitTunnelsCount() <= 0) { // no tunnels left
|
||||
Log.d(TAG, "no transit tunnels left, stopping");
|
||||
Log.i(TAG, "no transit tunnels left, stopping");
|
||||
i2pdStop();
|
||||
return;
|
||||
}
|
||||
@@ -441,7 +442,7 @@ public class I2PDActivity extends Activity {
|
||||
@SuppressLint("BatteryLife")
|
||||
private void openBatteryOptimizationDialogIfNeeded() {
|
||||
boolean questionEnabled = getPreferences().getBoolean(getBatteryOptimizationPreferenceKey(), true);
|
||||
Log.i(TAG, "BATT_OPTIM_questionEnabled==" + questionEnabled);
|
||||
Log.d(TAG, "BATT_OPTIM_questionEnabled==" + questionEnabled);
|
||||
if (!isKnownIgnoringBatteryOptimizations()
|
||||
&& android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M
|
||||
&& questionEnabled) {
|
||||
@@ -471,14 +472,14 @@ public class I2PDActivity extends Activity {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
final PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
|
||||
if (pm == null) {
|
||||
Log.i(TAG, "BATT_OPTIM: POWER_SERVICE==null");
|
||||
Log.d(TAG, "BATT_OPTIM: POWER_SERVICE==null");
|
||||
return false;
|
||||
}
|
||||
boolean ignoring = pm.isIgnoringBatteryOptimizations(getPackageName());
|
||||
Log.i(TAG, "BATT_OPTIM: ignoring==" + ignoring);
|
||||
Log.d(TAG, "BATT_OPTIM: ignoring==" + ignoring);
|
||||
return ignoring;
|
||||
} else {
|
||||
Log.i(TAG, "BATT_OPTIM: old SDK version==" + Build.VERSION.SDK_INT);
|
||||
Log.d(TAG, "BATT_OPTIM: old SDK version==" + Build.VERSION.SDK_INT);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,11 @@ import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.provider.Settings;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
@@ -16,6 +20,7 @@ import java.lang.reflect.Method;
|
||||
public class I2PDPermsAskerActivity extends Activity {
|
||||
|
||||
private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 0;
|
||||
private static final int PERMISSION_MANAGE_EXTERNAL_STORAGE = 0;
|
||||
|
||||
private Button button_request_write_ext_storage_perms;
|
||||
private TextView textview_retry;
|
||||
@@ -24,7 +29,7 @@ public class I2PDPermsAskerActivity extends Activity {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
//if less than Android 6, no runtime perms req system present
|
||||
if (android.os.Build.VERSION.SDK_INT < 23) {
|
||||
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
startMainActivity();
|
||||
return;
|
||||
}
|
||||
@@ -48,57 +53,66 @@ public class I2PDPermsAskerActivity extends Activity {
|
||||
textview_retry.setVisibility(TextView.GONE);
|
||||
button_request_write_ext_storage_perms.setVisibility(Button.GONE);
|
||||
|
||||
Method methodCheckPermission;
|
||||
Method method_shouldShowRequestPermissionRationale;
|
||||
Method method_requestPermissions;
|
||||
try {
|
||||
methodCheckPermission = getClass().getMethod("checkSelfPermission", String.class);
|
||||
method_shouldShowRequestPermissionRationale =
|
||||
getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
|
||||
method_requestPermissions =
|
||||
getClass().getMethod("requestPermissions", String[].class, int.class);
|
||||
} catch (NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
Integer resultObj;
|
||||
try {
|
||||
resultObj = (Integer) methodCheckPermission.invoke(
|
||||
this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
} catch (Throwable e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
if(!Environment.isExternalStorageManager()) {
|
||||
showExplanation();
|
||||
} else {
|
||||
startMainActivity();
|
||||
}
|
||||
} else {
|
||||
Method methodCheckPermission;
|
||||
Method method_shouldShowRequestPermissionRationale;
|
||||
Method method_requestPermissions;
|
||||
|
||||
if (resultObj != PackageManager.PERMISSION_GRANTED) {
|
||||
|
||||
// Should we show an explanation?
|
||||
Boolean aBoolean;
|
||||
try {
|
||||
aBoolean = (Boolean) method_shouldShowRequestPermissionRationale.invoke(this,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
} catch (Exception e) {
|
||||
methodCheckPermission = getClass().getMethod("checkSelfPermission", String.class);
|
||||
method_shouldShowRequestPermissionRationale =
|
||||
getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
|
||||
method_requestPermissions =
|
||||
getClass().getMethod("requestPermissions", String[].class, int.class);
|
||||
} catch (NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
if (aBoolean) {
|
||||
|
||||
// Show an explanation to the user *asynchronously* -- don't block
|
||||
// this thread waiting for the user's response! After the user
|
||||
// sees the explanation, try again to request the permission.
|
||||
Integer resultObj;
|
||||
|
||||
showExplanation();
|
||||
|
||||
} else {
|
||||
|
||||
// No explanation needed, we can request the permission.
|
||||
try {
|
||||
resultObj = (Integer) methodCheckPermission.invoke(
|
||||
this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
} catch (Throwable e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
if (resultObj != PackageManager.PERMISSION_GRANTED) {
|
||||
// Should we show an explanation?
|
||||
Boolean aBoolean;
|
||||
try {
|
||||
method_requestPermissions.invoke(this,
|
||||
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
PERMISSION_WRITE_EXTERNAL_STORAGE);
|
||||
aBoolean = (Boolean) method_shouldShowRequestPermissionRationale.invoke(this,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
} else startMainActivity();
|
||||
|
||||
if (aBoolean) {
|
||||
|
||||
// Show an explanation to the user *asynchronously* -- don't block
|
||||
// this thread waiting for the user's response! After the user
|
||||
// sees the explanation, try again to request the permission.
|
||||
|
||||
showExplanation();
|
||||
|
||||
} else {
|
||||
// No explanation needed, we can request the permission.
|
||||
try {
|
||||
method_requestPermissions.invoke(this,
|
||||
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
PERMISSION_WRITE_EXTERNAL_STORAGE);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
} else startMainActivity();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -136,6 +150,7 @@ public class I2PDPermsAskerActivity extends Activity {
|
||||
}
|
||||
|
||||
private static final int SHOW_EXPLANATION_REQUEST = 1; // The request code
|
||||
private static final int APP_STORAGE_ACCESS_REQUEST_CODE = 2;
|
||||
|
||||
private void showExplanation() {
|
||||
Intent intent = new Intent(this, I2PDPermsExplanationActivity.class);
|
||||
@@ -144,11 +159,14 @@ public class I2PDPermsAskerActivity extends Activity {
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
// Check which request we're responding to
|
||||
if (requestCode == SHOW_EXPLANATION_REQUEST) {
|
||||
// Make sure the request was successful
|
||||
if (resultCode == RESULT_OK) {
|
||||
// Request the permission
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
// Check which request we're responding to and make sure the request was successful
|
||||
if (requestCode == SHOW_EXPLANATION_REQUEST && resultCode == RESULT_OK) {
|
||||
// Request the permission
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
Intent intentManageAccess = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID));
|
||||
startActivityForResult(intentManageAccess, APP_STORAGE_ACCESS_REQUEST_CODE);
|
||||
} else {
|
||||
Method method_requestPermissions;
|
||||
try {
|
||||
method_requestPermissions =
|
||||
@@ -163,9 +181,19 @@ public class I2PDPermsAskerActivity extends Activity {
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
} else {
|
||||
finish(); //close the app
|
||||
}
|
||||
} else if (requestCode == APP_STORAGE_ACCESS_REQUEST_CODE && resultCode == RESULT_OK) {
|
||||
if (Environment.isExternalStorageManager()) {
|
||||
startMainActivity();
|
||||
} else {
|
||||
textview_retry.setText(R.string.permDenied);
|
||||
textview_retry.setVisibility(TextView.VISIBLE);
|
||||
button_request_write_ext_storage_perms.setVisibility(Button.VISIBLE);
|
||||
|
||||
finish();
|
||||
}
|
||||
} else {
|
||||
finish(); // close the app
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,35 +3,33 @@ package org.purplei2p.i2pd;
|
||||
public class I2PD_JNI {
|
||||
public static native String getABICompiledWith();
|
||||
|
||||
public static void loadLibraries() {
|
||||
System.loadLibrary("i2pd");
|
||||
}
|
||||
|
||||
/**
|
||||
* returns error info if failed
|
||||
* returns "ok" if daemon initialized and started okay
|
||||
*/
|
||||
public static native String startDaemon();
|
||||
|
||||
//should only be called after startDaemon() success
|
||||
public static native void stopDaemon();
|
||||
|
||||
public static native void stopAcceptingTunnels();
|
||||
|
||||
public static native void startAcceptingTunnels();
|
||||
|
||||
public static native void stopAcceptingTunnels();
|
||||
public static native void reloadTunnelsConfigs();
|
||||
|
||||
public static native void onNetworkStateChanged(boolean isConnected);
|
||||
|
||||
public static native void setDataDir(String jdataDir);
|
||||
|
||||
public static native int GetTransitTunnelsCount();
|
||||
|
||||
public static native String getWebConsAddr();
|
||||
|
||||
public static native void setLanguage(String jlanguage);
|
||||
|
||||
public static void loadLibraries() {
|
||||
//System.loadLibrary("c++_shared");
|
||||
System.loadLibrary("i2pd");
|
||||
}
|
||||
|
||||
public static native int getTransitTunnelsCount();
|
||||
public static native String getWebConsAddr();
|
||||
public static native String getDataDir();
|
||||
|
||||
public static native boolean getHTTPProxyState();
|
||||
public static native boolean getSOCKSProxyState();
|
||||
public static native boolean getBOBState();
|
||||
public static native boolean getSAMState();
|
||||
public static native boolean getI2CPState();
|
||||
|
||||
public static native void onNetworkStateChanged(boolean isConnected);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ public class NetworkStateChangeReceiver extends BroadcastReceiver {
|
||||
|
||||
I2PD_JNI.onNetworkStateChanged(isConnected);
|
||||
} catch (Throwable tr) {
|
||||
Log.d(TAG, "", tr);
|
||||
Log.e(TAG, "", tr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,23 +10,24 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.Switch;
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
import org.purplei2p.i2pd.iniedotr.IniEditor;
|
||||
//import org.purplei2p.i2pd.iniedotr.IniEditor;
|
||||
|
||||
public class SettingsActivity extends Activity {
|
||||
protected IniEditor iniedit = new IniEditor();
|
||||
private String dataDir = DaemonWrapper.getDataDir();//for inieditor
|
||||
//protected IniEditor iniedit = new IniEditor();
|
||||
private String TAG = "i2pdSrvcSettings";
|
||||
private File cacheDir;
|
||||
public static String onBootFileName="/onBoot"; // just file, empty, if exist the do autostart, if not then no.
|
||||
public static String onBootFileName = "/onBoot"; // just file, empty, if exist the do autostart, if not then no.
|
||||
|
||||
//https://gist.github.com/chandruark/3165a5ee3452f2b9ec7736cf1b4c5ea6
|
||||
private void addAutoStartupswitch() {
|
||||
private void addAutoStartupSwitch() {
|
||||
|
||||
try {
|
||||
Intent intent = new Intent();
|
||||
@@ -62,6 +63,7 @@ public class SettingsActivity extends Activity {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//@Override
|
||||
private void requestPermission() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
@@ -71,17 +73,18 @@ public class SettingsActivity extends Activity {
|
||||
Uri.parse("package:" + getPackageName())
|
||||
);
|
||||
startActivityForResult(intent, 232);
|
||||
} else {
|
||||
//Permission Granted-System will work
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
Log.i(TAG, "onCreate");
|
||||
Log.d(TAG, "onCreate");
|
||||
super.onCreate(savedInstanceState);
|
||||
cacheDir = getApplicationContext().getCacheDir();
|
||||
setContentView(R.layout.activity_settings);
|
||||
Objects.requireNonNull(getActionBar()).setDisplayHomeAsUpEnabled(true);
|
||||
Switch autostart_switch = findViewById(R.id.autostart_enable);
|
||||
|
||||
cacheDir = getApplicationContext().getCacheDir();
|
||||
File onBoot = new File(cacheDir.getAbsolutePath() + onBootFileName);
|
||||
autostart_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
@@ -90,12 +93,13 @@ public class SettingsActivity extends Activity {
|
||||
if (isChecked) {
|
||||
if (!onBoot.exists()) {
|
||||
requestPermission();
|
||||
addAutoStartupswitch();
|
||||
addAutoStartupSwitch();
|
||||
|
||||
try {
|
||||
if (!onBoot.createNewFile())
|
||||
Log.d(TAG, "Cant create new wile on: "+onBoot.getAbsolutePath());
|
||||
} catch (Exception e) {
|
||||
Log.d(TAG, "error: " + e.toString());
|
||||
Log.e(TAG, "error: " + e.toString());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -107,4 +111,14 @@ public class SettingsActivity extends Activity {
|
||||
if(onBoot.exists())
|
||||
autostart_switch.setChecked(true);
|
||||
}
|
||||
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
|
||||
if (id == android.R.id.home) {
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.webkit.WebSettings;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class WebConsoleActivity extends Activity {
|
||||
@@ -22,7 +21,7 @@ public class WebConsoleActivity extends Activity {
|
||||
|
||||
Objects.requireNonNull(getActionBar()).setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
webView = (WebView) findViewById(R.id.webview1);
|
||||
webView = (WebView) findViewById(R.id.webconsole);
|
||||
webView.setWebViewClient(new WebViewClient());
|
||||
|
||||
final WebSettings webSettings = webView.getSettings();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/activity_main"
|
||||
android:layout_width="match_parent"
|
||||
@@ -10,14 +11,17 @@
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/mainLogo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="140dp"
|
||||
android:src="@drawable/ic_logo" />
|
||||
android:contentDescription="@string/app_name"
|
||||
android:src="@drawable/ic_logo"
|
||||
tools:ignore="ImageContrastCheck" />
|
||||
|
||||
<TextView
|
||||
style="@android:style/Widget.Holo.Light.TextView.SpinnerItem"
|
||||
@@ -43,50 +47,108 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/margin_medium" />
|
||||
|
||||
<LinearLayout
|
||||
<TextView
|
||||
android:id="@+id/appStatusText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
android:gravity="center_horizontal"
|
||||
android:textAppearance="@android:style/TextAppearance.Material.Large"
|
||||
android:textColor="#DFDFDF" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_height="wrap_content"
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/margin_medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/services"
|
||||
android:textAppearance="@android:style/TextAppearance.Material.Medium"
|
||||
android:textColor="#DFDFDF" />
|
||||
|
||||
<TableLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal">
|
||||
|
||||
<TableRow
|
||||
android:layout_width="match_parent"
|
||||
android:layout_gravity="center">
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/enableButton"
|
||||
style="@android:style/Widget.Button.Inset"
|
||||
android:layout_width="@dimen/margin_huge"
|
||||
android:layout_height="@dimen/margin_huge"
|
||||
android:layout_centerInParent="true"
|
||||
android:background="@android:drawable/presence_offline"
|
||||
android:longClickable="true" />
|
||||
<CheckBox
|
||||
android:id="@+id/service_httpproxy_box"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:text="@string/services_http_proxy"
|
||||
android:textAppearance="@android:style/TextAppearance.Material.Small"
|
||||
android:textColor="#DFDFDF" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/disableButton"
|
||||
style="@android:style/Widget.Button.Inset"
|
||||
android:layout_width="@dimen/margin_huge"
|
||||
android:layout_height="@dimen/margin_huge"
|
||||
android:layout_centerInParent="true"
|
||||
android:background="@android:drawable/presence_online"
|
||||
android:longClickable="true"
|
||||
android:visibility="invisible" />
|
||||
</TableRow>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<Space
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/margin_medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/appStatusText"
|
||||
<TableRow
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:textColor="#DFDFDF"
|
||||
android:textSize="18sp" />
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal">
|
||||
|
||||
</LinearLayout>
|
||||
<CheckBox
|
||||
android:id="@+id/service_socksproxy_box"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:text="@string/services_socks_proxy"
|
||||
android:textAppearance="@android:style/TextAppearance.Material.Small"
|
||||
android:textColor="#DFDFDF" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/service_bob_box"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:text="@string/services_bob"
|
||||
android:textAppearance="@android:style/TextAppearance.Material.Small"
|
||||
android:textColor="#DFDFDF" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/service_sam_box"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:text="@string/services_sam"
|
||||
android:textAppearance="@android:style/TextAppearance.Material.Small"
|
||||
android:textColor="#DFDFDF" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/service_i2cp_box"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:text="@string/services_i2cp"
|
||||
android:textAppearance="@android:style/TextAppearance.Material.Small"
|
||||
android:textColor="#DFDFDF" />
|
||||
</TableRow>
|
||||
</TableLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="@dimen/margin_medium"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/margin_medium"
|
||||
tools:context=".SettingsActivity">
|
||||
|
||||
<TextView
|
||||
@@ -21,15 +21,14 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="left"
|
||||
android:textOff="@string/disabled"
|
||||
android:textOn="@string/enabled"
|
||||
android:text="@string/autostart_enabled" />
|
||||
android:text="@string/autostart_enabled"
|
||||
tools:ignore="TouchTargetSizeCheck" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?android:attr/listDivider" />
|
||||
<!--
|
||||
<!--
|
||||
<TextView
|
||||
android:id="@+id/settings_section2"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
android:id="@+id/swipe">
|
||||
|
||||
<WebView
|
||||
android:id="@+id/webview1"
|
||||
android:id="@+id/webconsole"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent" />
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
android:title="@string/action_graceful_stop" />
|
||||
<item
|
||||
android:id="@+id/action_settings"
|
||||
android:orderInCategory="95"
|
||||
android:title="@string/action_settings" />
|
||||
<item
|
||||
android:id="@+id/action_stop"
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Síť bez hranic</string>
|
||||
<string name="action_start">Začít</string>
|
||||
<string name="action_stop">Zastavit</string>
|
||||
<string name="action_exit">Odejít</string>
|
||||
<string name="action_graceful_stop">Hladké vypnutí</string>
|
||||
<string name="action_cancel_graceful_stop">Zrušit hladké vypnutí</string>
|
||||
<string name="action_reload_tunnels_config">Znovu načíst tunely</string>
|
||||
<string name="action_start_webview">Otevřít webovou konzoli</string>
|
||||
<string name="action_settings">Nastavení</string>
|
||||
<string name="graceful_stop_is_already_in_progress">Hladké vypnutí již probíhá</string>
|
||||
<string name="graceful_stop_is_in_progress">Hladké vypnutí právě probíhá</string>
|
||||
<string name="gracefulShutdownInProgress">Hladké vypnutí právě probíhá</string>
|
||||
<string name="already_stopped">Již zastaveno</string>
|
||||
<string name="uninitialized">Aplikace se inicializuje...</string>
|
||||
<string name="starting">Aplikace se zapíná...</string>
|
||||
<string name="jniLibraryLoaded">JNI knihovny načteny</string>
|
||||
<string name="startedOkay">Aplikace spuštěna</string>
|
||||
<string name="startFailed">Spuštění se nezdrařilo</string>
|
||||
<string name="stopped">Aplikace zastavena</string>
|
||||
<string name="stopping">Aplikace se vypíná...</string>
|
||||
<string name="remaining">zbývá</string>
|
||||
<string name="services">Vnitřní služby</string>
|
||||
<string name="services_http_proxy">HTTP Proxy</string>
|
||||
<string name="services_socks_proxy">SOCKS5 Proxy</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Výzva</string>
|
||||
<string name="permDenied">Oprávnění k zápisu na SD kartu bylo zamítnuto. Abyste mohli pokračovat, je třeba toto oprávnění povolit</string>
|
||||
<string name="permRequired">Pro zápis klíčů a dalších souborů do I2PD složky na SD kartu je vyžadován přístup k SD kartě.</string>
|
||||
<string name="retryPermRequest">Opakovat žádost o oprávnění k zápisu na SD kartu</string>
|
||||
<string name="menu_item_battery_optimizations_str">Optimalizace baterie</string>
|
||||
<string name="battery_optimizations_enabled">Optimalizace baterie je zapnutá</string>
|
||||
<string name="battery_optimizations_enabled_explained">Váš Android dělá na I2PD náročné optimalizace baterie, což by mohlo vést k uzavření I2PD služby bez jediného důvodu.\nDoporučuje se povolit vypnutí optimalizace baterie.</string>
|
||||
<string name="battery_optimizations_enabled_dialog">Váš Android dělá na I2PD náročné optimalizace baterie, což by mohlo vést k uzavření I2PD služby bez jediného důvodu.\n\nNyní budete požádáni o zakázání této optimalizace.</string>
|
||||
<string name="continue_str">Pokračovat</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">Vaše verze Androidu nepodporuje vypnutí optimalizace baterie</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Vaše verze Android OS nepodporuje zobrazování dialogových oken pro optimalizaci baterie pro aplikace.</string>
|
||||
<string name="shutdown_canceled">Plánované vypnutí zrušeno</string>
|
||||
<string name="tunnels_reloading">Obnovuji konfiguraci tunelů...</string>
|
||||
<string name="settings_section0">Základní nastavení</string>
|
||||
<string name="settings_section_tunnels">Tunely</string>
|
||||
<string name="autostart_enabled">Spustit při spuštění systému</string>
|
||||
<string name="add_tunnel_button">Přidat tunel</string>
|
||||
<string name="add_tunnel">Správa tunelů</string>
|
||||
<string name="del_tunnel_button">Smazat tunel</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Red sin fronteras</string>
|
||||
<string name="action_start">Iniciar</string>
|
||||
<string name="action_stop">Detener</string>
|
||||
<string name="action_exit">Salir</string>
|
||||
<string name="action_graceful_stop">Parar con gracia</string>
|
||||
<string name="action_cancel_graceful_stop">Cancelar parada con gracia</string>
|
||||
<string name="action_reload_tunnels_config">Recargar túneles</string>
|
||||
<string name="action_start_webview">Abrir Consola Web</string>
|
||||
<string name="action_settings">Ajustes</string>
|
||||
<string name="graceful_stop_is_already_in_progress">La parada con gracia ya se ha iniciado</string>
|
||||
<string name="graceful_stop_is_in_progress">La parada con gracia está en proceso</string>
|
||||
<string name="gracefulShutdownInProgress">Apagado con gracia en proceso</string>
|
||||
<string name="already_stopped">Ya se ha parado</string>
|
||||
<string name="uninitialized">Inicializando aplicación...</string>
|
||||
<string name="starting">Iniciando aplicación...</string>
|
||||
<string name="jniLibraryLoaded">Bibliotecas JNI cargadas</string>
|
||||
<string name="startedOkay">Aplicación iniciada</string>
|
||||
<string name="startFailed">Error al iniciar</string>
|
||||
<string name="stopped">Aplicación detenida</string>
|
||||
<string name="stopping">Deteniendo aplicación...</string>
|
||||
<string name="remaining">restantes</string>
|
||||
<string name="services">Servicios internos</string>
|
||||
<string name="services_http_proxy">Proxy HTTP</string>
|
||||
<string name="services_socks_proxy">Proxy SOCKS5</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Permiso</string>
|
||||
<string name="permDenied">Permiso de escribir a la tarjeta SD denegado, necesitas permitirlo para continuar</string>
|
||||
<string name="permRequired">Se requiere acceso de escritura de la tarjeta SD para escribir las claves y otros archivos en la carpeta I2PD de la tarjeta SD.</string>
|
||||
<string name="retryPermRequest">Preguntar permisos de escritura de tarjeta SD de nuevo</string>
|
||||
<string name="menu_item_battery_optimizations_str">Optimizaciones de Batería</string>
|
||||
<string name="battery_optimizations_enabled">Optimizaciones de batería activadas</string>
|
||||
<string name="battery_optimizations_enabled_explained">Tu Android está realizando optimizaciones de batería importantes en I2PD que pueden ocasionar que el servicio se cierre sin razón.\nEs recomendable que desactives esas optimizaciones de batería.</string>
|
||||
<string name="battery_optimizations_enabled_dialog">Tu Android estáTu Android está realizando optimizaciones de batería importantes en I2PD que pueden ocasionar que el servicio se cierre sin razón.\n\nSe te pedirá que las desactives.</string>
|
||||
<string name="continue_str">Continuar</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">Tu versión de Android no soporta desactivar las optimizaciones de batería</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Tu versión de S.O Android no soporta desactivar optimizaciones de batería para ciertas aplicaciones.</string>
|
||||
<string name="shutdown_canceled">Apagado planeado cancelado</string>
|
||||
<string name="tunnels_reloading">Recargando configuración de túneles...</string>
|
||||
<string name="settings_section0">Ajustes comunes</string>
|
||||
<string name="settings_section_tunnels">Túneles</string>
|
||||
<string name="autostart_enabled">Iniciar al arrancar</string>
|
||||
<string name="add_tunnel_button">Añadir túnel</string>
|
||||
<string name="add_tunnel">Gestión de túneles</string>
|
||||
<string name="del_tunnel_button">Borrar túnel</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Réseau sans frontières</string>
|
||||
<string name="action_start">Démarrer</string>
|
||||
<string name="action_stop">Arrêter</string>
|
||||
<string name="action_exit">Quitter</string>
|
||||
<string name="action_graceful_stop">Arrêt gracieux</string>
|
||||
<string name="action_cancel_graceful_stop">Annuler l\'arrêt gracieux</string>
|
||||
<string name="action_reload_tunnels_config">Actualiser les tunnels</string>
|
||||
<string name="action_start_webview">Ouvrir console web</string>
|
||||
<string name="action_settings">Paramètres</string>
|
||||
<string name="graceful_stop_is_already_in_progress">Arrêt gracieux déjà en cours</string>
|
||||
<string name="graceful_stop_is_in_progress">Arrêt gracieux en cours</string>
|
||||
<string name="gracefulShutdownInProgress">Fermeture gracieuse en cours</string>
|
||||
<string name="already_stopped">Déjà arrêté</string>
|
||||
<string name="uninitialized">Initialisation de l\'application...</string>
|
||||
<string name="starting">Démarrage de l\'application...</string>
|
||||
<string name="jniLibraryLoaded">Librairies JNI chargées</string>
|
||||
<string name="startedOkay">Application démarrée</string>
|
||||
<string name="startFailed">Démarrage échoué</string>
|
||||
<string name="stopped">Application arrêtée</string>
|
||||
<string name="stopping">Arrêt de l\'application...</string>
|
||||
<string name="remaining">restant</string>
|
||||
<string name="services">Services internes</string>
|
||||
<string name="services_http_proxy">Proxy HTTP</string>
|
||||
<string name="services_socks_proxy">Proxy SOCKS5</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Message</string>
|
||||
<string name="permDenied">Permission d\'écrire sur la carte SD refusée, vous devez autoriser pour continuer</string>
|
||||
<string name="permRequired">La permission d\'écrire sur la carte SD est requise pour écrire les clés et autres fichiers dans le dossier I2PD sur la carte SD.</string>
|
||||
<string name="retryPermRequest">Réessayer de demander la permission d\'écrire sur la carte SD</string>
|
||||
<string name="menu_item_battery_optimizations_str">Optimisations de la pile</string>
|
||||
<string name="battery_optimizations_enabled">Optimisations de la pile activées</string>
|
||||
<string name="battery_optimizations_enabled_explained">Votre Android fait de l\'optimisation de pile importante pour I2PD et ceci peut mener à l\'arrêt du daemon sans aucune autre raison.\nIl est recommandé d\'autoriser la désactivation de cette optimisation de pile.</string>
|
||||
<string name="battery_optimizations_enabled_dialog">Votre Android fait de l\'optimisation de pile importante pour I2PD et ceci peut mener à l\'arrêt du daemon sans aucune autre raison.\n\nVous allez maintenant vous faire demander d\'autoriser la désactivation de cette optimisation.</string>
|
||||
<string name="continue_str">Continuer</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">Votre version d\'Android ne supporte pas la désactivation de l\'optimisation de pile</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Votre version d\'Android ne supporte pas l\'affichage du dialogue de l\'optimisation de pile pour les applications.</string>
|
||||
<string name="shutdown_canceled">Fermeture planifiée annulée</string>
|
||||
<string name="tunnels_reloading">Actualisation de la configuration des tunnels...</string>
|
||||
<string name="settings_section0">Paramètres généraux</string>
|
||||
<string name="settings_section_tunnels">Tunnels</string>
|
||||
<string name="autostart_enabled">Lancer au démarrage</string>
|
||||
<string name="add_tunnel_button">Ajouter tunnel</string>
|
||||
<string name="add_tunnel">Gestion des tunnels</string>
|
||||
<string name="del_tunnel_button">Supprimer tunnel</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Rete senza confini</string>
|
||||
<string name="action_start">Avvia</string>
|
||||
<string name="action_stop">Arresta</string>
|
||||
<string name="action_exit">Esci</string>
|
||||
<string name="action_graceful_stop">Interruzione controllata</string>
|
||||
<string name="action_cancel_graceful_stop">Annulla interruzione controllata</string>
|
||||
<string name="action_reload_tunnels_config">Ricarica i tunnel</string>
|
||||
<string name="action_start_webview">Apri la console web</string>
|
||||
<string name="action_settings">Impostazioni</string>
|
||||
<string name="graceful_stop_is_already_in_progress">L\'interruzione controllata è già in corso</string>
|
||||
<string name="graceful_stop_is_in_progress">L\'interruzione controllata è in corso</string>
|
||||
<string name="gracefulShutdownInProgress">Interruzione controllata in corso</string>
|
||||
<string name="already_stopped">Già interrotto</string>
|
||||
<string name="uninitialized">Inizializzazione dell\'applicazione...</string>
|
||||
<string name="starting">L\'applicazione si sta avviando...</string>
|
||||
<string name="jniLibraryLoaded">Caricate le librerie JNI</string>
|
||||
<string name="startedOkay">Applicazione avviata</string>
|
||||
<string name="startFailed">Avvio fallito</string>
|
||||
<string name="stopped">Applicazione arrestata</string>
|
||||
<string name="stopping">Applicazione in arresto...</string>
|
||||
<string name="remaining">rimanenti</string>
|
||||
<string name="services">Servizi interni</string>
|
||||
<string name="services_http_proxy">Proxy HTTP</string>
|
||||
<string name="services_socks_proxy">Proxy SOCKS5</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Messaggio</string>
|
||||
<string name="permDenied">Permesso di scrittura scheda SD negato, è necessario consentirlo per continuare</string>
|
||||
<string name="permRequired">L\'accesso in scrittura della scheda SD è richiesto per scrivare le chiavi e gli altri file nella cartella I2PD sulla scheda SD.</string>
|
||||
<string name="retryPermRequest">Riprova a richiedere il permesso di scrittura sulla scheda SD</string>
|
||||
<string name="menu_item_battery_optimizations_str">Ottimizzazione batteria</string>
|
||||
<string name="battery_optimizations_enabled">Ottimizzazione batteria abilitata</string>
|
||||
<string name="battery_optimizations_enabled_explained">Il tuo dispositivo Android sta eseguendo alcune pesanti ottimizzazioni della batteria su I2PD che potrebbero comportare l\'arresto di quest\'ultimo senza alcun motivo.\nSi raccomanda di consentire a I2PD di disabilitare queste ottimizzazioni della batteria.</string>
|
||||
<string name="battery_optimizations_enabled_dialog">Il tuo dispositivo Android sta eseguendo alcune pesanti ottimizzazioni della batteria su I2PD che potrebbero comportare l\'arresto di quest\'ultimo senza alcun motivo.\n\nOra verrà richiesto di disabilitare queste ottimizzazioni della batteria.</string>
|
||||
<string name="continue_str">Continua</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">La versione del tuo dispositivo Android non supporta l\'esclusione delle ottimizzazioni della batteria</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">La versione del tuo dispositivo Android non supporta la visualizzazione della finestra di dialogo per l\'ottimizzazione della batteria per le applicazioni.</string>
|
||||
<string name="shutdown_canceled">Arresto programmato annullato</string>
|
||||
<string name="tunnels_reloading">Ricaricando le configurazioni dei tunnel...</string>
|
||||
<string name="settings_section0">Impostazioni generali</string>
|
||||
<string name="settings_section_tunnels">Tunnel</string>
|
||||
<string name="autostart_enabled">Avvia all\'accensione</string>
|
||||
<string name="add_tunnel_button">Aggiungi tunnel</string>
|
||||
<string name="add_tunnel">Gestione tunnel</string>
|
||||
<string name="del_tunnel_button">Elimina tunnel</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Rede sem fronteiras</string>
|
||||
<string name="action_start">Iniciar</string>
|
||||
<string name="action_stop">Parar</string>
|
||||
<string name="action_exit">Sair</string>
|
||||
<string name="action_graceful_stop">Saída Graciosa</string>
|
||||
<string name="action_cancel_graceful_stop">Cancelar Saída Graciosa</string>
|
||||
<string name="action_reload_tunnels_config">Recarregar túneis</string>
|
||||
<string name="action_start_webview">Abrir o Web Console</string>
|
||||
<string name="action_settings">Configurações</string>
|
||||
<string name="graceful_stop_is_already_in_progress">Saída Graciosa já está em progresso</string>
|
||||
<string name="graceful_stop_is_in_progress">Saída Graciosa em progresso</string>
|
||||
<string name="gracefulShutdownInProgress">Saída Graciosa em progresso</string>
|
||||
<string name="already_stopped">Já parou</string>
|
||||
<string name="uninitialized">Inicializando aplicação...</string>
|
||||
<string name="starting">Iniciando aplicação...</string>
|
||||
<string name="jniLibraryLoaded">Bibliotecas JNI carregadas</string>
|
||||
<string name="startedOkay">Aplicação iniciada</string>
|
||||
<string name="startFailed">Inicialização falhou</string>
|
||||
<string name="stopped">Aplicação parou</string>
|
||||
<string name="stopping">Parando aplicação...</string>
|
||||
<string name="remaining">faltando</string>
|
||||
<string name="services">Serviços internos</string>
|
||||
<string name="services_http_proxy">Proxy HTTP</string>
|
||||
<string name="services_socks_proxy">Proxy SOCKS5</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Permissão</string>
|
||||
<string name="permDenied">Permissões de escrita no cartão SD negadas, você precisa permitir isso para continuar</string>
|
||||
<string name="permRequired">Permissões de escrita no cartão SD são necessárias para gravar as chaves e outros arquivos na pasta do I2PD no cartão SD.</string>
|
||||
<string name="retryPermRequest">Tente novamente solicitar as permissões de escrita ao cartão SD</string>
|
||||
<string name="menu_item_battery_optimizations_str">Otimizações da Bateria</string>
|
||||
<string name="battery_optimizations_enabled">Otimizações da bateria ativadas</string>
|
||||
<string name="battery_optimizations_enabled_explained">O seu sistema está realizando fortes otimizações de uso de bateria pelo I2PD que podem levar a fechamentos inesperados do serviço.\nÉ recomendando desativar estas otimizações de bateria.</string>
|
||||
<string name="battery_optimizations_enabled_dialog">O seu sistema está realizando fortes otimizações de uso de bateria pelo I2PD que podem levar a fechamentos inesperados do serviço.\n\nVocê será solicitado a permitir desativá-las.</string>
|
||||
<string name="continue_str">Continuar</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">A sua versão do Android não suporta definir otimizações de bateria</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">A versão do seu sistema Android não suporta mostrar a caixa de diálogo para otimizações de bateria para aplicativos.</string>
|
||||
<string name="shutdown_canceled">Desligamento planejado cancelado</string>
|
||||
<string name="tunnels_reloading">Recarregando configurações dos túneis...</string>
|
||||
<string name="settings_section0">Configurações usuais</string>
|
||||
<string name="settings_section_tunnels">Túneis</string>
|
||||
<string name="autostart_enabled">Iniciar no boot</string>
|
||||
<string name="add_tunnel_button">Adicionar túnel</string>
|
||||
<string name="add_tunnel">Gerenciamento de túneis</string>
|
||||
<string name="del_tunnel_button">Exclui túnel</string>
|
||||
</resources>
|
||||
@@ -1,8 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_description">Invisible Internet Protocol:</string>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Сеть без границ</string>
|
||||
|
||||
<string name="action_start">Запустить</string>
|
||||
<string name="action_stop">Остановить</string>
|
||||
<string name="action_exit">Выход</string>
|
||||
@@ -11,25 +9,25 @@
|
||||
<string name="action_reload_tunnels_config">Перезагрузить туннели</string>
|
||||
<string name="action_start_webview">Открыть Веб Консоль</string>
|
||||
<string name="action_settings">Настройки</string>
|
||||
|
||||
<string name="graceful_stop_is_already_in_progress">Корректная остановка уже запущена</string>
|
||||
<string name="graceful_stop_is_in_progress">Корректная остановка запущена</string>
|
||||
<string name="gracefulShutdownInProgress">Корректная остановка запущена</string>
|
||||
|
||||
<string name="already_stopped">Уже остановлено</string>
|
||||
<string name="uninitialized">Приложение инициализируется</string>
|
||||
<string name="starting">Приложение запускается</string>
|
||||
<string name="uninitialized">Приложение инициализируется...</string>
|
||||
<string name="starting">Приложение запускается...</string>
|
||||
<string name="jniLibraryLoaded">Загружены JNI библиотеки</string>
|
||||
<string name="startedOkay">Приложение запущено</string>
|
||||
<string name="startFailed">Запуск не удался</string>
|
||||
<string name="stopped">Приложение было остановлено</string>
|
||||
<string name="stopping">Остановка приложения...</string>
|
||||
<string name="remaining">осталось</string>
|
||||
|
||||
<string name="services">Внутренние сервисы</string>
|
||||
<string name="services_http_proxy">HTTP Прокси</string>
|
||||
<string name="services_socks_proxy">SOCKS5 Прокси</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Запрос</string>
|
||||
<string name="permDenied">Права для записи на SD карту отклонены, вам необходимо предоставить их для продолжения</string>
|
||||
<string name="permRequired">Права на запись на SD карту необходимы для записи ключей и других файлов в папку I2PD на внутренней памяти.</string>
|
||||
<string name="retryPermRequest">Повторить запрос прав на запись на SD карту</string>
|
||||
|
||||
<string name="menu_item_battery_optimizations_str">Оптимизации аккумулятора</string>
|
||||
<string name="battery_optimizations_enabled">Оптимизации аккумулятора включены</string>
|
||||
<string name="battery_optimizations_enabled_explained">Ваша операционная система осуществляет оптимизации расхода аккумулятора, которые могут приводить к выгрузке I2PD из памяти и прекращению его работы с целью сэкономить заряд аккумулятора.\nРекомендуется отключить эти оптимизации.</string>
|
||||
@@ -37,20 +35,12 @@
|
||||
<string name="continue_str">Продолжить</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">Ваша версия Андроид не поддерживает отключение оптимизаций аккумулятора</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Ваша версия Андроид не поддерживает показ диалога об оптимизациях аккумулятора для приложений.</string>
|
||||
|
||||
<string name="shutdown_canceled">Плановая остановка отменена</string>
|
||||
|
||||
<string name="tunnels_reloading">Перезагрузка конфигурации туннелей...</string>
|
||||
|
||||
<string name="autostart_enabled">Запуск после загрузки телефона</string>
|
||||
|
||||
<string name="settings_section0">Основные настройки</string>
|
||||
<string name="settings_section_tunnels">Туннели</string>
|
||||
|
||||
<string name="add_tunnel_button">Добавить</string>
|
||||
<string name="autostart_enabled">Запуск после загрузки телефона</string>
|
||||
<string name="add_tunnel_button">Добавить туннель</string>
|
||||
<string name="add_tunnel">Управление туннелями</string>
|
||||
|
||||
<string name="del_tunnel_button">Удалить</string>
|
||||
<string name="enabled">Вкл</string>
|
||||
<string name="disabled">Выкл</string>
|
||||
<string name="del_tunnel_button">Удалить туннель</string>
|
||||
</resources>
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Sınırları olmayan ağ</string>
|
||||
<string name="action_start">Başlat</string>
|
||||
<string name="action_stop">Durdur</string>
|
||||
<string name="action_exit">Çık</string>
|
||||
<string name="action_graceful_stop">Düzgün durdur</string>
|
||||
<string name="action_cancel_graceful_stop">Düzgün durdurmayı İptal Et</string>
|
||||
<string name="action_reload_tunnels_config">Tünelleri yeniden yükle</string>
|
||||
<string name="action_start_webview">Web Konsolunu Aç</string>
|
||||
<string name="action_settings">Ayarlar</string>
|
||||
<string name="graceful_stop_is_already_in_progress">Düzgün durdurma zaten devam ediyor</string>
|
||||
<string name="graceful_stop_is_in_progress">Düzgün durdurma devam ediyor</string>
|
||||
<string name="gracefulShutdownInProgress">Düzgün kapatma devam ediyor</string>
|
||||
<string name="already_stopped">Zaten durduruldu</string>
|
||||
<string name="uninitialized">Uygulama ilk ayarları yapılıyor...</string>
|
||||
<string name="starting">Uygulama başlatılıyor...</string>
|
||||
<string name="jniLibraryLoaded">JNI kütüphaneleri yüklendi</string>
|
||||
<string name="startedOkay">Uygulama başlatıldı</string>
|
||||
<string name="startFailed">Başlatılamadı</string>
|
||||
<string name="stopped">Uygulama durduruldu</string>
|
||||
<string name="stopping">Uygulama durduruluyor...</string>
|
||||
<string name="remaining">kalan</string>
|
||||
<string name="services">İç servisler</string>
|
||||
<string name="services_http_proxy">HTTP Proxy</string>
|
||||
<string name="services_socks_proxy">SOCKS5 Proxy</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Bilgi</string>
|
||||
<string name="permDenied">SD karta yazma izni reddedildi, devam etmek için buna izin vermeniz gerekiyor</string>
|
||||
<string name="permRequired">Anahtarları ve diğer dosyaları SD karttaki I2PD klasörüne yazmak için SD karta yazma erişimi gereklidir.</string>
|
||||
<string name="retryPermRequest">SD karta yazma izinlerini istemeyi yeniden dene</string>
|
||||
<string name="menu_item_battery_optimizations_str">Pil İyileştirmeleri</string>
|
||||
<string name="battery_optimizations_enabled">Pil iyileştirmeleri etkin</string>
|
||||
<string name="battery_optimizations_enabled_explained">Android aygıtınız, I2PD üzerinde başka bir neden olmaksızın arka plan programının kapanmasına neden olabilecek bazı ağır pil iyileştirmeleri yapıyor.\nBu pil iyileştirmelerinin devre dışı bırakılmasına izin verilmesi tavsiye edilir.</string>
|
||||
<string name="battery_optimizations_enabled_dialog">Android aygıtınız, I2PD üzerinde başka bir neden olmaksızın arka plan programının kapanmasına neden olabilecek bazı ağır pil iyileştirmeleri yapıyor.\n\nŞimdi bunları devre dışı bırakmaya izin vermeniz istenecek.</string>
|
||||
<string name="continue_str">Devam et</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">Android sürümünüz pil iyileştirmelerini devre dışı bırakmayı desteklemiyor</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Android işletim sistemi sürümünüz, uygulamalar için pil iyileştirmeleri iletişim kutusunun gösterilmesini desteklemiyor.</string>
|
||||
<string name="shutdown_canceled">Zamanlanan kapatma iptal edildi</string>
|
||||
<string name="tunnels_reloading">Tünel yapılandırması yeniden yükleniyor...</string>
|
||||
<string name="settings_section0">Ortak ayarlar</string>
|
||||
<string name="settings_section_tunnels">Tüneller</string>
|
||||
<string name="autostart_enabled">Önyüklemede başlat</string>
|
||||
<string name="add_tunnel_button">Tünel ekle</string>
|
||||
<string name="add_tunnel">Tünel yönetimi</string>
|
||||
<string name="del_tunnel_button">Tünelis is</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Мережа без кордонів</string>
|
||||
<string name="action_start">Почати</string>
|
||||
<string name="action_stop">Зупинити</string>
|
||||
<string name="action_exit">Вийти</string>
|
||||
<string name="action_graceful_stop">Плавна зупинка</string>
|
||||
<string name="action_cancel_graceful_stop">Скасувати плавну зупинку</string>
|
||||
<string name="action_reload_tunnels_config">Перезавантажити тунелі</string>
|
||||
<string name="action_start_webview">Відкрити веб-консоль</string>
|
||||
<string name="action_settings">Налаштування</string>
|
||||
<string name="graceful_stop_is_already_in_progress">Плавна зупинка вже виконується</string>
|
||||
<string name="graceful_stop_is_in_progress">Плавна зупинка у процесі</string>
|
||||
<string name="gracefulShutdownInProgress">Виконується плавне завершення</string>
|
||||
<string name="already_stopped">Вже зупинено</string>
|
||||
<string name="uninitialized">Додаток запускається...</string>
|
||||
<string name="starting">Додаток запускається...</string>
|
||||
<string name="jniLibraryLoaded">Завантажено бібліотеки JNI</string>
|
||||
<string name="startedOkay">Запуск додатку</string>
|
||||
<string name="startFailed">Не вдалося запустити</string>
|
||||
<string name="stopped">Додаток зупинено</string>
|
||||
<string name="stopping">Додаток зупиняється...</string>
|
||||
<string name="remaining">залишилось</string>
|
||||
<string name="services">Внутрішні служби</string>
|
||||
<string name="services_http_proxy">Проксі HTTP</string>
|
||||
<string name="services_socks_proxy">Проксі SOCKS5</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Запит</string>
|
||||
<string name="permDenied">Дозвіл на запис до SD-карти відхилений, Вам необхідно дозволити для продовження</string>
|
||||
<string name="permRequired">Для запису ключів та інших файлів до теки I2PD на SD-карті потрібен доступ до передачі даних на SD-карті.</string>
|
||||
<string name="retryPermRequest">Повторити запит на запис до SD-карти</string>
|
||||
<string name="menu_item_battery_optimizations_str">Оптимізація батареї</string>
|
||||
<string name="battery_optimizations_enabled">Оптимізацію батареї ввімкнено</string>
|
||||
<string name="battery_optimizations_enabled_explained">Ваш Android виконує деякі складні оптимізації використання заряду на I2PD, які можуть призвести до встановлення демонів без будь-яких інших причин.\nРекомендується дозволити вимкнення цих оптимізації використання акумулятора.</string>
|
||||
<string name="battery_optimizations_enabled_dialog">Ваш Android виконує деякі складні оптимізації використання заряду на I2PD, які можуть призвести до встановлення демонів без будь-яких інших причин.\n\nРекомендується дозволити вимкнення цих оптимізації використання акумулятора.</string>
|
||||
<string name="continue_str">Далі</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">Ваш пристрій не підтримує відключення оптимізації батареї</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Ваша версія ОС Android не підтримує відображення діалогу для оптимізації заряду акумулятора для програм.</string>
|
||||
<string name="shutdown_canceled">Плановане завершення скасоване</string>
|
||||
<string name="tunnels_reloading">Перезавантаження налаштувань тунелів...</string>
|
||||
<string name="settings_section0">Загальні налаштування</string>
|
||||
<string name="settings_section_tunnels">Тунелі</string>
|
||||
<string name="autostart_enabled">Автозапуск</string>
|
||||
<string name="add_tunnel_button">Додайте тунель</string>
|
||||
<string name="add_tunnel">Керування тунелями</string>
|
||||
<string name="del_tunnel_button">Видалити тунель</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">Chegarasiz tarmoq</string>
|
||||
<string name="action_start">Boshlash</string>
|
||||
<string name="action_stop">To\'xtatish</string>
|
||||
<string name="action_exit">Chiqish</string>
|
||||
<string name="action_graceful_stop">Yumshoq to\'xtatish</string>
|
||||
<string name="action_cancel_graceful_stop">Yumshoq to\'xtatish bekor qilish</string>
|
||||
<string name="action_reload_tunnels_config">Tunnellarni qayta yuklash</string>
|
||||
<string name="action_start_webview">Veb-konsolni ochish</string>
|
||||
<string name="action_settings">Sozlamalar</string>
|
||||
<string name="graceful_stop_is_already_in_progress">Yumshoq to\'xtatish allaqachon amalga oshirilmoqda</string>
|
||||
<string name="graceful_stop_is_in_progress">Yumshoq to\'xtatish amalga oshirilmoqda</string>
|
||||
<string name="gracefulShutdownInProgress">Yumshoq to\'xtatish amalga oshirilmoqda</string>
|
||||
<string name="already_stopped">Allaqachon to\'xtatilgan</string>
|
||||
<string name="uninitialized">Ilova ishga tushiriladi...</string>
|
||||
<string name="starting">Ilova ishga tushmoqda...</string>
|
||||
<string name="jniLibraryLoaded">JNI kutubxonalari yuklangan</string>
|
||||
<string name="startedOkay">Ilova ishga tushirildi</string>
|
||||
<string name="startFailed">Ishga tushirish muvaffaqiyatsiz tugadi</string>
|
||||
<string name="stopped">Ilova toʻxtatildi</string>
|
||||
<string name="stopping">Ilova toʻxtatilmoqda...</string>
|
||||
<string name="remaining">qoldi</string>
|
||||
<string name="services">Ichki xizmatlar</string>
|
||||
<string name="services_http_proxy">HTTP proksi</string>
|
||||
<string name="services_socks_proxy">SOCKS5 proksi</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">So\'rov</string>
|
||||
<string name="permDenied">SD kartaga yozish ruxsati rad etildi, buni davom ettirishga ruxsat berishingiz kerak</string>
|
||||
<string name="permRequired">Kalitlarni va boshqa fayllarni SD-kartadagi I2PD jildiga yozish uchun SD kartaga yozish huquqi talab qilinadi.</string>
|
||||
<string name="retryPermRequest">Endi sizdan ularni o\'chirishga ruxsat berish so\'raladi</string>
|
||||
<string name="menu_item_battery_optimizations_str">Batareyani optimallashtirish</string>
|
||||
<string name="battery_optimizations_enabled">Batareya optimallashtirishi yoqilgan</string>
|
||||
<string name="battery_optimizations_enabled_explained">Sizning Androidingiz I2PD-da batareyani kuchli optimallashtirishni amalga oshirmoqda, bu boshqa sababsiz demonning yopilishiga olib kelishi mumkin.\nUshbu batareyani optimallashtirishni o\'chirishga ruxsat berish tavsiya etiladi.</string>
|
||||
<string name="battery_optimizations_enabled_dialog">Sizning Androidingiz I2PD-da batareyani kuchli optimallashtirishni amalga oshirmoqda, bu boshqa sababsiz demonning yopilishiga olib kelishi mumkin.\n\nEndi sizdan ularni o\'chirishga ruxsat berish so\'raladi.</string>
|
||||
<string name="continue_str">Davom etish</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">Sizning Android versiyangiz batareyani optimallashtirishdan voz kechishni qo\'llab-quvvatlamaydi</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Sizning Android OS versiyangiz ilovalar uchun batareyani optimallashtirish dialogini ko\'rsatishni qo\'llab-quvvatlamaydi.</string>
|
||||
<string name="shutdown_canceled">Rejalashtirilgan yumshoq o\'chirish bekor qilindi</string>
|
||||
<string name="tunnels_reloading">Tunnellar konfiguratsiyalari qayta yuklanmoqda...</string>
|
||||
<string name="settings_section0">Umumiy sozlamalar</string>
|
||||
<string name="settings_section_tunnels">Tunnellar</string>
|
||||
<string name="autostart_enabled">Avtomatik ishga tushirish</string>
|
||||
<string name="add_tunnel_button">Tunnelni qo\'shish</string>
|
||||
<string name="add_tunnel">Tunnellarni boshqarish</string>
|
||||
<string name="del_tunnel_button">Tunnelni o\'chirish</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_description2">网络无国界</string>
|
||||
<string name="action_start">开始运行</string>
|
||||
<string name="action_stop">停止运行</string>
|
||||
<string name="action_exit">退出</string>
|
||||
<string name="action_graceful_stop">平滑关闭</string>
|
||||
<string name="action_cancel_graceful_stop">取消平滑关闭</string>
|
||||
<string name="action_reload_tunnels_config">重新加载隧道</string>
|
||||
<string name="action_start_webview">打开网页控制台</string>
|
||||
<string name="action_settings">设置</string>
|
||||
<string name="graceful_stop_is_already_in_progress">已经平滑退出了 I2P 网络</string>
|
||||
<string name="graceful_stop_is_in_progress">正在平滑退出</string>
|
||||
<string name="gracefulShutdownInProgress">正在平滑关闭 剩余时间:</string>
|
||||
<string name="already_stopped">已停止</string>
|
||||
<string name="uninitialized">I2Pd 正在初始化...</string>
|
||||
<string name="starting">I2Pd 正在启动...</string>
|
||||
<string name="jniLibraryLoaded">已加载Java本地接口库</string>
|
||||
<string name="startedOkay">I2Pd 已启动</string>
|
||||
<string name="startFailed">I2Pd 启动失败</string>
|
||||
<string name="stopped">I2Pd 已停止运行</string>
|
||||
<string name="stopping">I2Pd 正在停止运行...</string>
|
||||
<string name="remaining">分钟</string>
|
||||
<string name="services">内部服务</string>
|
||||
<string name="services_http_proxy">HTTP 代理</string>
|
||||
<string name="services_socks_proxy">SOCKS5 代理</string>
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">需要权限</string>
|
||||
<string name="permDenied">无法获得 SD 卡写入权限,你需要允许它以继续</string>
|
||||
<string name="permRequired">需要SD卡写入权限才能将密钥和其他文件写入SD卡上的 I2PD 文件夹中。</string>
|
||||
<string name="retryPermRequest">尝试重新获取储存权限</string>
|
||||
<string name="menu_item_battery_optimizations_str">电池优化</string>
|
||||
<string name="battery_optimizations_enabled">电池优化已启用</string>
|
||||
<string name="battery_optimizations_enabled_explained">您的安卓设备正在对 I2Pd 使用严格的电池优化策略,这可能导致I2Pd无缘无故停止运行。\n建议关闭电池优化。</string>
|
||||
<string name="battery_optimizations_enabled_dialog">您的安卓设备正在对 I2Pd 进行严格的电池优化,这可能导致守护进程无缘无故停止运行。\n\n请点击继续以关闭电池优化。</string>
|
||||
<string name="continue_str">继续</string>
|
||||
<string name="device_does_not_support_disabling_battery_optimizations">您设备的 Android 版本不支持关闭电池优化</string>
|
||||
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">您设备的 Android 版本不支持打开电池优化的界面。</string>
|
||||
<string name="shutdown_canceled">计划关闭已取消</string>
|
||||
<string name="tunnels_reloading">正在重新加载隧道配置...</string>
|
||||
<string name="settings_section0">通用设置</string>
|
||||
<string name="settings_section_tunnels">隧道</string>
|
||||
<string name="autostart_enabled">开机自启</string>
|
||||
<string name="add_tunnel_button">添加隧道</string>
|
||||
<string name="add_tunnel">隧道管理</string>
|
||||
<string name="del_tunnel_button">删除隧道</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="pref_bandwidth_limit_flags">
|
||||
<item>L</item>
|
||||
<item>O</item>
|
||||
<item>P</item>
|
||||
<item>X</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_loglevel">
|
||||
<item>none</item>
|
||||
<item>error</item>
|
||||
<item>warn</item>
|
||||
<item>info</item>
|
||||
<item>debug</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="app_name" translatable="false">i2pd</string>
|
||||
<string name="app_description">Invisible Internet Protocol:</string>
|
||||
<string name="app_description" translatable="false">Invisible Internet Protocol:</string>
|
||||
<string name="app_description2">Network without borders</string>
|
||||
|
||||
<string name="action_start">Start</string>
|
||||
<string name="action_stop">Stop</string>
|
||||
<string name="action_exit">Exit</string>
|
||||
<string name="action_graceful_stop">Graceful Stop</string>
|
||||
<string name="action_cancel_graceful_stop">Cancel Graceful Stop</string>
|
||||
<string name="action_graceful_stop">Graceful stop</string>
|
||||
<string name="action_cancel_graceful_stop">Cancel Graceful stop</string>
|
||||
<string name="action_reload_tunnels_config">Reload tunnels</string>
|
||||
<string name="action_start_webview">Open Web Console</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
@@ -18,15 +18,23 @@
|
||||
<string name="gracefulShutdownInProgress">Graceful shutdown in progress</string>
|
||||
|
||||
<string name="already_stopped">Already stopped</string>
|
||||
<string name="uninitialized">Application initializing</string>
|
||||
<string name="starting">Application starting</string>
|
||||
<string name="uninitialized">Application initializing...</string>
|
||||
<string name="starting">Application starting...</string>
|
||||
<string name="jniLibraryLoaded">Loaded JNI libraries</string>
|
||||
<string name="startedOkay">Application Started</string>
|
||||
<string name="startedOkay">Application started</string>
|
||||
<string name="startFailed">Start failed</string>
|
||||
<string name="stopped">Application stopped</string>
|
||||
<string name="stopping">Application stopping...</string>
|
||||
<string name="remaining">remaining</string>
|
||||
<string name="ok" translatable="false">OK</string>
|
||||
|
||||
<string name="services">Internal services</string>
|
||||
<string name="services_http_proxy">HTTP Proxy</string>
|
||||
<string name="services_socks_proxy">SOCKS5 Proxy</string>
|
||||
<string name="services_bob" translatable="false">BOB</string>
|
||||
<string name="services_sam" translatable="false">SAM</string>
|
||||
<string name="services_i2cp" translatable="false">I2CP</string>
|
||||
|
||||
<string name="title_activity_i2_pdperms_asker_prompt">Prompt</string>
|
||||
<string name="permDenied">SD card write permission denied, you need to allow this to continue</string>
|
||||
<string name="permRequired">SD card write access is required to write the keys and other files to the I2PD folder on SD card.</string>
|
||||
@@ -52,7 +60,5 @@
|
||||
<string name="add_tunnel">Tunnels management</string>
|
||||
|
||||
<string name="del_tunnel_button">Delete tunnel</string>
|
||||
<string name="enabled">On</string>
|
||||
<string name="disabled">Off</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<PreferenceCategory android:title="Main">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="Log" />
|
||||
<ListPreference
|
||||
android:defaultValue="1"
|
||||
android:entries="@array/pref_loglevel"
|
||||
android:entryValues="@array/pref_loglevel"
|
||||
android:key="list_preference_1"
|
||||
android:summary="Logging level to file. Use 'none' to reduce memory usage"
|
||||
android:title="Log level" />
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="IPv4" />
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="IPv6" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="Default value"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Port" />
|
||||
<ListPreference
|
||||
android:entries="@array/pref_bandwidth_limit_flags"
|
||||
android:entryValues="@array/pref_bandwidth_limit_flags"
|
||||
android:key="list_preference_1"
|
||||
android:summary="Bandwidth limit for transit traffic"
|
||||
android:title="Bandwidth" />
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="check_box_preference_1"
|
||||
android:summary="Disable transit"
|
||||
android:title="No transit" />
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="check_box_preference_1"
|
||||
android:summary="Uses more battery"
|
||||
android:title="Floodfill" />
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="SSU" />
|
||||
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="NTCP2">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="Enable" />
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="check_box_preference_1"
|
||||
android:summary="Disable to make unable to connect to your device"
|
||||
android:title="Publish" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="Web Console">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="Enable" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="127.0.0.1"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Address" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="7070"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Port" />
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="check_box_preference_1"
|
||||
android:summary="Use HTTP authorization to access Web Console"
|
||||
android:title="Autorization" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="Default value"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="User" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="Default value"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Password" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/services_http_proxy">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="Enable" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="127.0.0.1"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Address" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="4444"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Port" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="proxy-keys.dat"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Keys" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="SOCKS Proxy">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="Enable" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="127.0.0.1"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Address" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="4447"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Port" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="proxy-keys.dat"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Keys" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="SAM">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="Enable" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="127.0.0.1"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Address" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="7656"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Port" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="UPnP">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="check_box_preference_1"
|
||||
android:title="Enable" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="I2Pd"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:title="Forwarding name" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="Limits">
|
||||
|
||||
<EditTextPreference
|
||||
android:defaultValue="50"
|
||||
android:key="edit_text_preference_1"
|
||||
android:selectAllOnFocus="true"
|
||||
android:singleLine="true"
|
||||
android:summary="Limit possible built transit tunnels"
|
||||
android:title="Transit tunnels" />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
+15
-14
@@ -24,6 +24,7 @@ LOCAL_SRC_FILES := \
|
||||
$(DAEMON_SRC_PATH)/UPnP.cpp \
|
||||
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
|
||||
$(DAEMON_SRC_PATH)/I2PControl.cpp \
|
||||
$(DAEMON_SRC_PATH)/I2PControlHandlers.cpp \
|
||||
$(DAEMON_SRC_PATH)/i2pd.cpp \
|
||||
|
||||
include $(BUILD_EXECUTABLE)
|
||||
@@ -31,49 +32,49 @@ include $(BUILD_EXECUTABLE)
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := boost_system
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_system.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := boost_date_time
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_date_time.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := boost_filesystem
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_filesystem.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := boost_program_options
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/out/$(TARGET_ARCH_ABI)/libboost_program_options.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := crypto
|
||||
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libcrypto.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libcrypto.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := ssl
|
||||
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/libssl.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/include
|
||||
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libssl.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
|
||||
LOCAL_STATIC_LIBRARIES := crypto
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := miniupnpc
|
||||
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/libminiupnpc.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/include
|
||||
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
|
||||
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include
|
||||
include $(PREBUILT_STATIC_LIBRARY)
|
||||
|
||||
+3
-3
@@ -1,17 +1,17 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:4.1.0'
|
||||
classpath 'com.android.tools.build:gradle:7.3.1'
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
archive
|
||||
i2pd_*_android_binary.zip
|
||||
Executable
+53
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2013-2022, The PurpleI2P Project
|
||||
#
|
||||
# This file is part of Purple i2pd project and licensed under BSD3
|
||||
#
|
||||
# See full license text in LICENSE file at top of project tree
|
||||
|
||||
GITDESC=$(git describe --tags)
|
||||
|
||||
declare -A ABILIST=(
|
||||
["armeabi-v7a"]="armv7l"
|
||||
["arm64-v8a"]="aarch64"
|
||||
["x86"]="x86"
|
||||
["x86_64"]="x86_64"
|
||||
)
|
||||
|
||||
# Remove old files and archives
|
||||
if [ -d "archive" ]; then
|
||||
rm -r archive
|
||||
fi
|
||||
|
||||
if [ -f "../i2pd_*_android_binary.zip" ]; then
|
||||
rm i2pd_*_android_binary.zip
|
||||
fi
|
||||
|
||||
# Prepare files for package
|
||||
mkdir archive
|
||||
|
||||
if [ ! -d "../../binary/libs/" ]; then
|
||||
echo "Prebuilt binaries folder is not found. Have you built them?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for ABI in "${!ABILIST[@]}"; do
|
||||
if [ -f "../../binary/libs/${ABI}/i2pd" ]; then
|
||||
cp ../../binary/libs/${ABI}/i2pd archive/i2pd-${ABILIST[$ABI]}
|
||||
fi
|
||||
done
|
||||
|
||||
cp i2pd archive/i2pd
|
||||
cp -rH ../../app/src/main/assets/certificates archive/
|
||||
cp -rH ../../app/src/main/assets/tunnels.d archive/
|
||||
cp -H ../../app/src/main/assets/i2pd.conf archive/
|
||||
cp -H ../../app/src/main/assets/tunnels.conf archive/
|
||||
|
||||
# Compress files
|
||||
cd archive
|
||||
zip -r6 ../i2pd_${GITDESC}_android_binary.zip .
|
||||
|
||||
# Remove temporary folder
|
||||
cd ..
|
||||
rm -r archive
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright (c) 2013-2020, The PurpleI2P Project
|
||||
#
|
||||
# This file is part of Purple i2pd project and licensed under BSD3
|
||||
#
|
||||
# See full license text in LICENSE file at top of project tree
|
||||
#
|
||||
# That script written for use with Termux.
|
||||
|
||||
# https://stackoverflow.com/a/246128
|
||||
SOURCE="${0}"
|
||||
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
|
||||
SOURCE="$(readlink "$SOURCE")"
|
||||
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||
done
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
|
||||
|
||||
arch=$(uname -m)
|
||||
|
||||
screenfind=$(which screen)
|
||||
if [ -z $screenfind ]; then
|
||||
echo "Can't find 'screen' installed. That script needs it!";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
if [ -z i2pd-$arch ]; then
|
||||
echo "Can't find i2pd binary for your architecture.";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
screen -AmdS i2pd ./i2pd-$arch --datadir=$DIR
|
||||
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (Invisible Internet Protocol) je univerzální anonymní síťová vrstva.
|
||||
Veškerá komunikace přes I2P je anonymní a end-to-end šifrována, účastníci neodhalí své skutečné IP adresy.
|
||||
|
||||
<b>I2P klient</b> je software používaný pro vytváření a používání anonymních I2P sítí.
|
||||
Tyto sítě se běžně používají pro anonymní aplikace typu peer-to-peer (sdílení souborů, kryptoměny) a anonymní aplikace typu klient-server (webové stránky, instantní messengery, chat-servery).
|
||||
|
||||
<b>I2P</b> umožňuje lidem z celého světa komunikovat a sdílet informace bez omezení.
|
||||
|
||||
Pro více informací o <b>I2P</b> si můžete přečíst <a href="https://en.m.wikipedia.org/wiki/I2P">článek na Wikipedii</a>.
|
||||
@@ -0,0 +1 @@
|
||||
Kompletní C++ implementace I2P klienta
|
||||
@@ -0,0 +1,12 @@
|
||||
* Updated codebase to 2.41.0-85-g2f10decf
|
||||
* Revert to ndk 21.4.7075529, boost 1.74.0
|
||||
* Switch to androidx.core 1.6.0, gradle 7.1.3, gradlew 7.2
|
||||
* Add internal services (not user-defined tunnels) status on main page
|
||||
* Add return button on settings page
|
||||
* Add turkish translation
|
||||
* Add uzbek translation
|
||||
* Fix datadir and locale detection and passing of them to daemon
|
||||
* Fix getting datadir from daemon
|
||||
* Fix assets overwriting when they already extracted
|
||||
* Removed Start/Stop button on main page
|
||||
* Change application theme to Default (from Holo)
|
||||
@@ -0,0 +1,3 @@
|
||||
* Updated codebase to 2.42.0
|
||||
* Switch to OpenSSL 1.1.1o
|
||||
* Added French translation
|
||||
@@ -0,0 +1 @@
|
||||
* Updated codebase to 2.42.1
|
||||
@@ -0,0 +1,5 @@
|
||||
* Updated codebase to 2.43.0
|
||||
* Remove unused READ_PHONE_STATE permission
|
||||
* Switch to OpenSSL 1.1.1q
|
||||
* Added Simplified Chinese translation
|
||||
* Disable SSU and enable SSU2 for new installations
|
||||
@@ -0,0 +1,4 @@
|
||||
* Updated codebase to 2.44.0
|
||||
* Switch to OpenSSL 1.1.1s
|
||||
* Added Ukrainian, Spain and Italian translations
|
||||
* Disable SSU and enable SSU2 for new installations
|
||||
@@ -0,0 +1,4 @@
|
||||
* Updated codebase to 2.45.0
|
||||
* Buildtools 32, target SDK 32, NDK 23c
|
||||
* Switch to Boost 1.78.0
|
||||
* Added Czech translation
|
||||
@@ -0,0 +1 @@
|
||||
* Fix storage access issue on Android 11+
|
||||
@@ -0,0 +1 @@
|
||||
* Fix installation and start on some Android 11+ devices
|
||||
@@ -0,0 +1 @@
|
||||
* Updated codebase to 2.45.1
|
||||
@@ -0,0 +1 @@
|
||||
* Updated codebase to 2.46.0
|
||||
@@ -0,0 +1,3 @@
|
||||
* Updated codebase to 2.46.1
|
||||
* Switch to OpenSSL 1.1.1t
|
||||
* Update Boost building scripts
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (Invisible Internet Protocol, Protocolo de Internet Invisible) es una capa de red anónima universal.
|
||||
Todas las comunicaciones a través de I2P son anónimas y cifradas de extremo a extremo, los participantes no revelan sus direcciones IP reales.
|
||||
|
||||
Un <b>cliente de I2P</b> es un software utilizado para construir y utilizar redes I2P anónimas.
|
||||
Tales redes son comúnmente utilizadas para aplicaciones de par en par (intercambio de archivos, criptomonedas) y aplicaciones anónimas cliente-servidor (sitios web, mensajería instantánea, servidores de chat).
|
||||
|
||||
<b>I2P</b> le permite a la gente de todo el mundo comunicarse y compartir información sin restricciones.
|
||||
|
||||
Para más información sobre <b>I2P</b>, puedes leer <a href="https://es.m.wikipedia.org/wiki/I2P">este artículo en Wikipedia</a>.
|
||||
@@ -0,0 +1 @@
|
||||
Implementación completa en C++ del cliente I2P
|
||||
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (Invisible Internet Protocol, litt. «Protocole de l'Internet Invisible») est une couche réseau anonyme universelle.
|
||||
Toute communication par I2P est anonyme et chiffrée de bout en bout, les participants ne révèlent pas leur vraie adresse IP.
|
||||
|
||||
Le <b>client I2P</b> est un logiciel qui sert à bâtir et à utiliser les réseaux anonymes I2P.
|
||||
De tels réseaux sont habituellement utilisés pour des applications pair à pair anonymes (partage de fichiers, cryptomonnaies) et des applications client serveur anonymes (sites web, messagerie instantanée, serveurs de chat).
|
||||
|
||||
<b>I2P</b> permet aux gens partout dans le monde de communiquer et de partager de l'information sans restrictions.
|
||||
|
||||
Pour plus d'information sur <b>I2P</b>, vous pouvez lire <a href="https://fr.wikipedia.org/wiki/I2P">l'article sur Wikipédia</a>.
|
||||
@@ -0,0 +1 @@
|
||||
Implémentation complète en C++ du client I2P
|
||||
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (Invisible Internet Protocol) è un livello di rete anonimo universale.
|
||||
Tutte le comunicazioni su I2P sono anonime e crittografate end-to-end, i partecipanti non rivelano i propri indirizzi IP reali.
|
||||
|
||||
<b>Il client I2P</b> è un software utilizzato per costruire e utilizzare reti I2P anonime.
|
||||
Tali reti sono comunemente utilizzate per applicazioni peer-to-peer anonime (trasferimento file, cryptovalute) e applicazioni client-server anonime (siti web, applicazioni di messaggistica istantanea, server di chat).
|
||||
|
||||
<b>I2P</b> permette alle persone di tutto il mondo di comunicare e condividere informazioni senza restrizioni.
|
||||
|
||||
Per ulteriori informazioni riguardo <b>I2P</b>, puoi consultare l'<a href="https://en.m.wikipedia.org/wiki/I2P">articolo su Wikipedia</a>.
|
||||
@@ -0,0 +1 @@
|
||||
Implementazione C++ completa del client I2P
|
||||
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (Invisible Internet Protocol) é uma camada de rede anônima universal.
|
||||
Todas as comunicações pela I2P são anonimas e criptografadas ponto-a-ponto, os participantes não revelam os seus verdadeiros endereços IP.
|
||||
|
||||
<b>Um cliente I2P</b> é um software usado para construir e utilizar redes I2P anonimas.
|
||||
Tais redes são comumente usadas em aplicações P2P anonimas (compartilhamento de arquivos, cripttomoedas) e aplicações cliente-servidor (websites, mensageiros instantâneos, servidores de chat).
|
||||
|
||||
O <b> I2P </b> permite às pessoas de todo o mundo se comunicarem e compartilhar informações sem restrições.
|
||||
|
||||
Para mais informações sobre a <b> I2P </b>, você pode ler o <a href="https://pt.wikipedia.org/wiki/I2P"> artigo na Wikipédia </a>.
|
||||
@@ -0,0 +1 @@
|
||||
Implementação completa do cliente I2P em C++
|
||||
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (Invisible Internet Protocol) evrensel bir anonim ağ katmanıdır.
|
||||
I2P üzerinden yapılan tüm haberleşmeler anonimdir ve uçtan uca şifrelenir, katılımcılar gerçek IP adreslerini ifşa etmez.
|
||||
|
||||
<b>I2P istemcisi</b> anonim I2P ağları oluşturmak ve kullanmak için bir yazılımdır.
|
||||
Bu tür ağlar genellikle anonim eşler arası uygulamalar (dosya paylaşımı, kripto paralar) ve anonim istemci-sunucu uygulamaları (web siteleri, anlık mesajlaşma programları, sohbet sunucuları) için kullanılır.
|
||||
|
||||
<b>I2P</b> dünyanın her yerinden insanların kısıtlama olmaksızın iletişim kurmasına ve bilgi paylaşmasına olanak tanır.
|
||||
|
||||
<b>I2P</b> hakkında daha fazla bilgi için <a href="https://en.m.wikipedia.org/wiki/I2P">Wikipedia makalesini</a> okuyabilirsiniz.
|
||||
@@ -0,0 +1 @@
|
||||
C++ ile yazılan tam özellikli I2P istemcisi
|
||||
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (Невидимий Інтернет Протокол) - це універсальний анонімний шар мережі.
|
||||
Усі повідомлення по I2P є анонімними та наскрізними до кінця зашифрованих, учасники не розкривають їхні реальні IP-адреси.
|
||||
|
||||
<b>I2P клієнт</b> є програмним забезпеченням для будівництва і використання анонімних I2P мереж.
|
||||
Такі мережі зазвичай використовуються для анонімних однорангових додатків (обмін файлами, криптовалютами) та анонімних додатків на сервері клієнта (вебсайт, миттєві повідомлення, чат-сервери).
|
||||
|
||||
<b>I2P</b> дозволяє людям з усього світу обмінюватися інформацією без обмежень.
|
||||
|
||||
Для отримання додаткової інформації про <b>I2P</b>ви можете прочитати <a href="https://en.m.wikipedia.org/wiki/I2P">статтю у Вікіпедії</a>.
|
||||
@@ -0,0 +1 @@
|
||||
Повнофункціональна C++ реалізація I2P клієнта
|
||||
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (Invisible Internet Protocol) universal anonim tarmoq qatlami bo'lib hisoblanadi.
|
||||
I2P orqali barcha aloqalar anonim va oxirigacha shifrlangan, ishtirokchilar haqiqiy IP manzillarini oshkor qilmaydi.
|
||||
|
||||
<b>I2P mijozi</b> anonim I2P tarmoqlarini yaratish va ulardan foydalanish uchun foydalaniladigan dasturdir.
|
||||
Bunday tarmoqlar odatda anonim peer-to-peer ilovalari (fayl almashish, kriptovalyutalar) va anonim mijoz-server ilovalari (veb-saytlar, messenjerlar, chat-serverlar) uchun ishlatiladi.
|
||||
|
||||
<b>I2P</b> butun dunyo bo'ylab odamlarga cheklovlarsiz muloqot qilish va ma'lumot almashish imkonini beradi.
|
||||
|
||||
<b>I2P</b> haqida qoʻshimcha maʼlumot olish uchun <a href="https://en.m.wikipedia.org/wiki/I2P">Vikipediyadagi maqolani</a> oʻqishingiz mumkin.
|
||||
@@ -0,0 +1 @@
|
||||
I2P mijozining to'liq xususiyatli C++ ilovasi
|
||||
@@ -0,0 +1,9 @@
|
||||
<b>I2P</b> (隐形互联网计划) 是一个通用的匿名网络层。
|
||||
所有通过 I2P 进行的通信都是匿名、端到端加密的,用户不会透露他们真实的 IP 地址。
|
||||
|
||||
<b>I2P 客户端</b> 是一个用于构建和使用匿名 I2P 网络的软件。
|
||||
这种网络通常用于匿名的 P2P 应用(如文件共享、加密货币) 以及匿名的客户端-服务器架构的应用(如网站、即时通讯、聊天服务器等) 。
|
||||
|
||||
<b>I2P</b> 允许来自世界各地的人不受限制地交流和分享信息。
|
||||
|
||||
欲了解更多关于 <b>I2P</b>的信息,请参见 <a href="https://en.m.wikipedia.org/wiki/I2P">Wikipedia</a> 。
|
||||
@@ -0,0 +1 @@
|
||||
I2P 客户端的全功能C++ 实现
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.2-bin.zip
|
||||
distributionSha256Sum=8cc27038d5dbd815759851ba53e70cf62e481b87494cc97cfd97982ada5ba634
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
Reference in New Issue
Block a user