The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .gitignore
├── README.md
├── app
    ├── .gitignore
    ├── build.gradle
    ├── google-services.json
    ├── proguard-rules.pro
    └── src
    │   ├── androidTest
    │       └── java
    │       │   └── org
    │       │       └── proxydroid
    │       │           └── ExampleInstrumentedTest.java
    │   ├── main
    │       ├── AndroidManifest.xml
    │       ├── assets
    │       │   ├── armeabi-v7a
    │       │   │   ├── cntlm
    │       │   │   ├── gost
    │       │   │   ├── gost.sh
    │       │   │   ├── proxy.sh
    │       │   │   └── redsocks
    │       │   ├── pages
    │       │   │   └── about.html
    │       │   └── x86
    │       │   │   ├── cntlm
    │       │   │   ├── gost
    │       │   │   ├── gost.sh
    │       │   │   ├── proxy.sh
    │       │   │   └── redsocks
    │       ├── cpp
    │       │   ├── CMakeLists.txt
    │       │   ├── exec
    │       │   │   ├── CMakeLists.txt
    │       │   │   └── termExec.cpp
    │       │   ├── libevent
    │       │   │   ├── CMakeLists.txt
    │       │   │   ├── arc4random.c
    │       │   │   ├── buffer.c
    │       │   │   ├── buffer_iocp.c
    │       │   │   ├── bufferevent-internal.h
    │       │   │   ├── bufferevent.c
    │       │   │   ├── bufferevent_async.c
    │       │   │   ├── bufferevent_filter.c
    │       │   │   ├── bufferevent_openssl.c
    │       │   │   ├── bufferevent_pair.c
    │       │   │   ├── bufferevent_ratelim.c
    │       │   │   ├── bufferevent_sock.c
    │       │   │   ├── changelist-internal.h
    │       │   │   ├── compat
    │       │   │   │   └── sys
    │       │   │   │   │   └── queue.h
    │       │   │   ├── config.h
    │       │   │   ├── defer-internal.h
    │       │   │   ├── devpoll.c
    │       │   │   ├── epoll.c
    │       │   │   ├── epoll_sub.c
    │       │   │   ├── evbuffer-internal.h
    │       │   │   ├── evdns.c
    │       │   │   ├── evdns.h
    │       │   │   ├── event-internal.h
    │       │   │   ├── event.c
    │       │   │   ├── event.h
    │       │   │   ├── event_iocp.c
    │       │   │   ├── event_tagging.c
    │       │   │   ├── evhttp.h
    │       │   │   ├── evmap-internal.h
    │       │   │   ├── evmap.c
    │       │   │   ├── evport.c
    │       │   │   ├── evrpc-internal.h
    │       │   │   ├── evrpc.c
    │       │   │   ├── evrpc.h
    │       │   │   ├── evsignal-internal.h
    │       │   │   ├── evthread-internal.h
    │       │   │   ├── evthread.c
    │       │   │   ├── evthread_pthread.c
    │       │   │   ├── evthread_win32.c
    │       │   │   ├── evutil.c
    │       │   │   ├── evutil.h
    │       │   │   ├── evutil_rand.c
    │       │   │   ├── ht-internal.h
    │       │   │   ├── http-internal.h
    │       │   │   ├── http.c
    │       │   │   ├── include
    │       │   │   │   └── event2
    │       │   │   │   │   ├── buffer.h
    │       │   │   │   │   ├── buffer_compat.h
    │       │   │   │   │   ├── bufferevent.h
    │       │   │   │   │   ├── bufferevent_compat.h
    │       │   │   │   │   ├── bufferevent_ssl.h
    │       │   │   │   │   ├── bufferevent_struct.h
    │       │   │   │   │   ├── dns.h
    │       │   │   │   │   ├── dns_compat.h
    │       │   │   │   │   ├── dns_struct.h
    │       │   │   │   │   ├── event-config.h
    │       │   │   │   │   ├── event.h
    │       │   │   │   │   ├── event_compat.h
    │       │   │   │   │   ├── event_struct.h
    │       │   │   │   │   ├── http.h
    │       │   │   │   │   ├── http_compat.h
    │       │   │   │   │   ├── http_struct.h
    │       │   │   │   │   ├── keyvalq_struct.h
    │       │   │   │   │   ├── listener.h
    │       │   │   │   │   ├── rpc.h
    │       │   │   │   │   ├── rpc_compat.h
    │       │   │   │   │   ├── rpc_struct.h
    │       │   │   │   │   ├── tag.h
    │       │   │   │   │   ├── tag_compat.h
    │       │   │   │   │   ├── thread.h
    │       │   │   │   │   └── util.h
    │       │   │   ├── iocp-internal.h
    │       │   │   ├── ipv6-internal.h
    │       │   │   ├── kqueue.c
    │       │   │   ├── listener.c
    │       │   │   ├── log-internal.h
    │       │   │   ├── log.c
    │       │   │   ├── minheap-internal.h
    │       │   │   ├── mm-internal.h
    │       │   │   ├── poll.c
    │       │   │   ├── ratelim-internal.h
    │       │   │   ├── select.c
    │       │   │   ├── signal.c
    │       │   │   ├── strlcpy-internal.h
    │       │   │   ├── strlcpy.c
    │       │   │   ├── util-internal.h
    │       │   │   └── win32select.c
    │       │   └── redsocks
    │       │   │   ├── CMakeLists.txt
    │       │   │   ├── base.c
    │       │   │   ├── base.h
    │       │   │   ├── base64.c
    │       │   │   ├── base64.h
    │       │   │   ├── config.h
    │       │   │   ├── dnstc.c
    │       │   │   ├── dnstc.h
    │       │   │   ├── http-auth.c
    │       │   │   ├── http-auth.h
    │       │   │   ├── http-connect.c
    │       │   │   ├── http-relay.c
    │       │   │   ├── libc-compat.h
    │       │   │   ├── libevent-compat.h
    │       │   │   ├── list.h
    │       │   │   ├── log.c
    │       │   │   ├── log.h
    │       │   │   ├── main.c
    │       │   │   ├── main.h
    │       │   │   ├── md5.c
    │       │   │   ├── md5.h
    │       │   │   ├── parser.c
    │       │   │   ├── parser.h
    │       │   │   ├── reddns.c
    │       │   │   ├── redsocks.c
    │       │   │   ├── redsocks.h
    │       │   │   ├── redudp.c
    │       │   │   ├── redudp.h
    │       │   │   ├── socks4.c
    │       │   │   ├── socks5.c
    │       │   │   ├── socks5.h
    │       │   │   ├── utils.c
    │       │   │   ├── utils.h
    │       │   │   └── version.h
    │       ├── java
    │       │   ├── com
    │       │   │   ├── btr
    │       │   │   │   └── proxy
    │       │   │   │   │   └── selector
    │       │   │   │   │       └── pac
    │       │   │   │   │           ├── PacProxySelector.java
    │       │   │   │   │           ├── PacScriptMethods.java
    │       │   │   │   │           ├── PacScriptParser.java
    │       │   │   │   │           ├── PacScriptSource.java
    │       │   │   │   │           ├── Proxy.java
    │       │   │   │   │           ├── ProxyEvaluationException.java
    │       │   │   │   │           ├── ProxyException.java
    │       │   │   │   │           ├── RhinoPacScriptParser.java
    │       │   │   │   │           ├── ScriptMethods.java
    │       │   │   │   │           └── UrlPacScriptSource.java
    │       │   │   └── ksmaze
    │       │   │   │   └── android
    │       │   │   │       └── preference
    │       │   │   │           └── ListPreferenceMultiSelect.java
    │       │   └── org
    │       │   │   └── proxydroid
    │       │   │       ├── AppManager.java
    │       │   │       ├── BypassListActivity.java
    │       │   │       ├── ConnectivityBroadcastReceiver.java
    │       │   │       ├── DomainValidator.java
    │       │   │       ├── Exec.java
    │       │   │       ├── FileArrayAdapter.java
    │       │   │       ├── FileChooser.java
    │       │   │       ├── InnerSocketBuilder.java
    │       │   │       ├── Profile.java
    │       │   │       ├── ProxyDroid.java
    │       │   │       ├── ProxyDroidApplication.java
    │       │   │       ├── ProxyDroidReceiver.java
    │       │   │       ├── ProxyDroidService.java
    │       │   │       ├── ProxyDroidWidgetProvider.java
    │       │   │       ├── ProxyedApp.java
    │       │   │       └── utils
    │       │   │           ├── Base64.java
    │       │   │           ├── Constraints.java
    │       │   │           ├── ImageLoader.java
    │       │   │           ├── ImageLoaderFactory.java
    │       │   │           ├── Option.java
    │       │   │           ├── RegexValidator.java
    │       │   │           └── Utils.java
    │       └── res
    │       │   ├── color
    │       │       ├── button_text_selector.xml
    │       │       └── selector.xml
    │       │   ├── drawable-hdpi-v11
    │       │       └── ic_stat_proxydroid.png
    │       │   ├── drawable-hdpi-v9
    │       │       └── ic_stat_proxydroid.png
    │       │   ├── drawable-hdpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_stat_proxydroid.png
    │       │       ├── ing.png
    │       │       ├── off.png
    │       │       └── on.png
    │       │   ├── drawable-ldpi-v11
    │       │       └── ic_stat_proxydroid.png
    │       │   ├── drawable-ldpi-v9
    │       │       └── ic_stat_proxydroid.png
    │       │   ├── drawable-ldpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_stat_proxydroid.png
    │       │       ├── ing.png
    │       │       ├── off.png
    │       │       └── on.png
    │       │   ├── drawable-mdpi-v11
    │       │       └── ic_stat_proxydroid.png
    │       │   ├── drawable-mdpi-v9
    │       │       └── ic_stat_proxydroid.png
    │       │   ├── drawable-mdpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_stat_proxydroid.png
    │       │       ├── ing.png
    │       │       ├── off.png
    │       │       └── on.png
    │       │   ├── drawable-v24
    │       │       └── ic_launcher_foreground.xml
    │       │   ├── drawable-xhdpi-v11
    │       │       └── ic_stat_proxydroid.png
    │       │   ├── drawable-xhdpi-v9
    │       │       └── ic_stat_proxydroid.png
    │       │   ├── drawable-xhdpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_stat_proxydroid.png
    │       │       ├── ing.png
    │       │       ├── off.png
    │       │       └── on.png
    │       │   ├── drawable
    │       │       ├── button_gray.xml
    │       │       ├── button_selector.xml
    │       │       ├── button_white.xml
    │       │       ├── ic_launcher_background.xml
    │       │       └── sym_def_app_icon.png
    │       │   ├── layout
    │       │       ├── alert_dialog_text_entry.xml
    │       │       ├── bypass_list.xml
    │       │       ├── bypass_list_item.xml
    │       │       ├── file_view.xml
    │       │       ├── layout_apps.xml
    │       │       ├── layout_apps_item.xml
    │       │       ├── overlay.xml
    │       │       └── proxydroid_appwidget.xml
    │       │   ├── mipmap-anydpi-v26
    │       │       ├── ic_launcher.xml
    │       │       └── ic_launcher_round.xml
    │       │   ├── mipmap-hdpi
    │       │       ├── ic_launcher.png
    │       │       └── ic_launcher_round.png
    │       │   ├── mipmap-mdpi
    │       │       ├── ic_launcher.png
    │       │       └── ic_launcher_round.png
    │       │   ├── mipmap-xhdpi
    │       │       ├── ic_launcher.png
    │       │       └── ic_launcher_round.png
    │       │   ├── mipmap-xxhdpi
    │       │       ├── ic_launcher.png
    │       │       └── ic_launcher_round.png
    │       │   ├── mipmap-xxxhdpi
    │       │       ├── ic_launcher.png
    │       │       └── ic_launcher_round.png
    │       │   ├── values-fr
    │       │       └── strings.xml
    │       │   ├── values-pt
    │       │       └── strings.xml
    │       │   ├── values-ru
    │       │       └── strings.xml
    │       │   ├── values
    │       │       ├── colors.xml
    │       │       └── strings.xml
    │       │   ├── xml-v14
    │       │       └── proxydroid_preference.xml
    │       │   └── xml
    │       │       ├── proxydroid_appwidget_provider.xml
    │       │       └── proxydroid_preference.xml
    │   └── test
    │       └── java
    │           └── org
    │               └── proxydroid
    │                   └── ExampleUnitTest.java
├── build.gradle
├── gradle.properties
├── gradle
    └── wrapper
    │   ├── gradle-wrapper.jar
    │   └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── privacy_policy.md
└── settings.gradle


/.gitignore:
--------------------------------------------------------------------------------
 1 | bin/
 2 | gen/
 3 | local.properties
 4 | *.iml
 5 | .idea
 6 | .cxx
 7 | target/
 8 | obj/
 9 | libs/armeabi/redsocks
10 | libs/armeabi/shadowsocks
11 | libs/armeabi/shrpx
12 | gen-external-apklibs/
13 | classes/
14 | .gradle
15 | build/
16 | app/release
17 | 


--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
 1 | ## INTRO
 2 | 
 3 | Global Proxy App for Android System
 4 | 
 5 | ProxyDroid is distributed under GPLv3 with many other open source software, 
 6 | here is a list of them:
 7 | 
 8 |  * cntlm - authentication proxy: http://cntlm.sourceforge.net/
 9 |  * redsocks - transparent socks redirector: http://darkk.net.ru/redsocks/
10 |  * netfilter/iptables - NAT module: http://www.netfilter.org/
11 |  * transproxy - transparent proxy for HTTP: http://transproxy.sourceforge.net/
12 |  * stunnel - multiplatform SSL tunneling proxy: http://www.stunnel.org/
13 | 
14 | ## TRAVIS CI STATUS
15 | 
16 | [![Build Status](https://secure.travis-ci.org/madeye/proxydroid.png)](http://travis-ci.org/madeye/proxydroid)
17 | 
18 | [Nightly Builds](http://buildbot.sinaapp.com)
19 | 
20 | ## PREREQUISITES
21 | 
22 | * JDK 1.6+
23 | * Maven 3.0.5
24 | * Android SDK r17+
25 | * Android NDK r8+
26 | 
27 | * Local Maven Dependencies
28 | 
29 |   Use Maven Android SDK Deployer to install all android related dependencies.
30 | 
31 |   ```bash
32 |   git clone https://github.com/mosabua/maven-android-sdk-deployer.git 
33 |   pushd maven-android-sdk-deployer
34 |   export ANDROID_HOME=/path/to/android/sdk
35 |   mvn install -P 4.1
36 |   popd
37 |   ```
38 | 
39 | ## BUILD
40 | 
41 | Invoke the building like this
42 | 
43 | ```bash
44 |   mvn clean install
45 | ```
46 | 


--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | 


--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
 1 | apply plugin: 'com.android.application'
 2 | apply plugin: 'com.google.gms.google-services'
 3 | apply plugin: 'io.fabric'
 4 | 
 5 | android {
 6 |     compileSdkVersion 29
 7 |     buildToolsVersion "29.0.0"
 8 |     defaultConfig {
 9 |         applicationId "org.proxydroid"
10 |         minSdkVersion 16
11 |         targetSdkVersion 29
12 |         versionCode 72
13 |         versionName "3.2.0"
14 | 
15 |         ndk {
16 |             // Specifies the ABI configurations of your native
17 |             // libraries Gradle should build and package with your APK.
18 |             abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
19 |         }
20 |     }
21 |     buildTypes {
22 |         release {
23 |             minifyEnabled false
24 |             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
25 |         }
26 |     }
27 |     compileOptions {
28 |         sourceCompatibility = 1.8
29 |         targetCompatibility = 1.8
30 |     }
31 | 
32 |     externalNativeBuild {
33 |         cmake {
34 |             version '3.10.2'
35 |             path "src/main/cpp/CMakeLists.txt"
36 |         }
37 |     }
38 | }
39 | 
40 | configurations {
41 |     compile.exclude group: "junit", module: "junit"
42 | }
43 | 
44 | dependencies {
45 |     implementation fileTree(dir: 'libs', include: ['*.jar'])
46 |     implementation 'androidx.appcompat:appcompat:1.1.0'
47 |     implementation 'com.google.android.material:material:1.0.0'
48 |     implementation 'com.googlecode.json-simple:json-simple:1.1.1'
49 |     implementation 'org.mozilla:rhino:1.7.11'
50 |     implementation 'com.google.firebase:firebase-core:17.2.1'
51 |     implementation 'com.google.firebase:firebase-ads:18.3.0'
52 |     implementation 'com.google.firebase:firebase-analytics:17.2.1'
53 |     implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
54 | }
55 | 


--------------------------------------------------------------------------------
/app/google-services.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "project_info": {
 3 |     "project_number": "1096038627085",
 4 |     "firebase_url": "https://proxydroid-eebb6.firebaseio.com",
 5 |     "project_id": "proxydroid-eebb6",
 6 |     "storage_bucket": "proxydroid-eebb6.appspot.com"
 7 |   },
 8 |   "client": [
 9 |     {
10 |       "client_info": {
11 |         "mobilesdk_app_id": "1:1096038627085:android:2626ff7369ac1bc788a244",
12 |         "android_client_info": {
13 |           "package_name": "org.proxydroid"
14 |         }
15 |       },
16 |       "oauth_client": [
17 |         {
18 |           "client_id": "1096038627085-rk8st1497vge5t9hlft638b9rcdkpe47.apps.googleusercontent.com",
19 |           "client_type": 1,
20 |           "android_info": {
21 |             "package_name": "org.proxydroid",
22 |             "certificate_hash": "a3568c8b31e1b2d1c2d9edd21b4e37c7c13ce26f"
23 |           }
24 |         },
25 |         {
26 |           "client_id": "1096038627085-de6572k5m9tbsmu2v5hm607vqe313pir.apps.googleusercontent.com",
27 |           "client_type": 3
28 |         }
29 |       ],
30 |       "api_key": [
31 |         {
32 |           "current_key": "AIzaSyAvllRwaStt15XJNQrBRaCOVwJkUsnTbx8"
33 |         }
34 |       ],
35 |       "services": {
36 |         "appinvite_service": {
37 |           "other_platform_oauth_client": [
38 |             {
39 |               "client_id": "1096038627085-de6572k5m9tbsmu2v5hm607vqe313pir.apps.googleusercontent.com",
40 |               "client_type": 3
41 |             }
42 |           ]
43 |         }
44 |       },
45 |       "admob_app_id": "ca-app-pub-9097031975646651~9376680322"
46 |     }
47 |   ],
48 |   "configuration_version": "1"
49 | }


--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # You can control the set of applied configuration files using the
 3 | # proguardFiles setting in build.gradle.
 4 | #
 5 | # For more details, see
 6 | #   http://developer.android.com/guide/developing/tools/proguard.html
 7 | 
 8 | # If your project uses WebView with JS, uncomment the following
 9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | #   public *;
13 | #}
14 | 
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 | 
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | 


--------------------------------------------------------------------------------
/app/src/androidTest/java/org/proxydroid/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
 1 | package org.proxydroid;
 2 | 
 3 | import android.content.Context;
 4 | 
 5 | import androidx.test.ext.junit.runners.AndroidJUnit4;
 6 | import androidx.test.platform.app.InstrumentationRegistry;
 7 | 
 8 | import org.junit.Test;
 9 | import org.junit.runner.RunWith;
10 | 
11 | import static org.junit.Assert.*;
12 | 
13 | /**
14 |  * Instrumented test, which will execute on an Android device.
15 |  *
16 |  * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
17 |  */
18 | @RunWith(AndroidJUnit4.class)
19 | public class ExampleInstrumentedTest {
20 |     @Test
21 |     public void useAppContext() {
22 |         // Context of the app under test.
23 |         Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
24 | 
25 |         assertEquals("org.proxydroid", appContext.getPackageName());
26 |     }
27 | }
28 | 


--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     package="org.proxydroid">
 4 | 
 5 |     <uses-permission android:name="android.permission.INTERNET" />
 6 |     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 7 |     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 8 |     <uses-permission android:name="android.permission.VIBRATE" />
 9 |     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
10 |     <uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
11 |     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
12 | 
13 |     <application
14 |         android:name=".ProxyDroidApplication"
15 |         android:icon="@drawable/ic_launcher"
16 |         android:label="@string/app_name">
17 | 
18 |         <meta-data
19 |             android:name="com.google.android.gms.ads.APPLICATION_ID"
20 |             android:value="ca-app-pub-9097031975646651~9376680322" />
21 | 
22 |         <activity
23 |             android:name="com.google.android.gms.ads.AdActivity"
24 |             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
25 |             android:theme="@android:style/Theme.Translucent" />
26 | 
27 |         <activity
28 |             android:name="ProxyDroid"
29 |             android:label="@string/app_name">
30 |             <intent-filter>
31 |                 <action android:name="android.intent.action.MAIN" />
32 |                 <category android:name="android.intent.category.LAUNCHER" />
33 |             </intent-filter>
34 |         </activity>
35 |         <activity
36 |             android:name=".AppManager"
37 |             android:label="@string/app_name"
38 |             android:theme="@style/Theme.AppCompat.Light" />
39 |         <activity
40 |             android:name=".BypassListActivity"
41 |             android:label="@string/app_name"
42 |             android:theme="@style/Theme.AppCompat.Light" />
43 |         <activity
44 |             android:name=".FileChooser"
45 |             android:label="@string/app_name" />
46 | 
47 |         <service
48 |             android:name=".ProxyDroidService"
49 |             android:enabled="true" />
50 | 
51 |         <receiver android:name=".ConnectivityBroadcastReceiver">
52 |             <intent-filter>
53 |                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
54 |             </intent-filter>
55 |         </receiver>
56 |         <receiver android:name=".ProxyDroidWidgetProvider">
57 |             <intent-filter>
58 |                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
59 |                 <action android:name="org.proxydroid.ProxyDroidWidgetProvider.PROXY_SWITCH_ACTION" />
60 |             </intent-filter>
61 | 
62 |             <meta-data
63 |                 android:name="android.appwidget.provider"
64 |                 android:resource="@xml/proxydroid_appwidget_provider" />
65 |         </receiver>
66 |     </application>
67 | 
68 | </manifest>
69 | 


--------------------------------------------------------------------------------
/app/src/main/assets/armeabi-v7a/cntlm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/assets/armeabi-v7a/cntlm


--------------------------------------------------------------------------------
/app/src/main/assets/armeabi-v7a/gost:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/assets/armeabi-v7a/gost


--------------------------------------------------------------------------------
/app/src/main/assets/armeabi-v7a/gost.sh:
--------------------------------------------------------------------------------
 1 | #!/system/bin/sh
 2 | 
 3 | DIR=$1
 4 | SRC=$2
 5 | DST=$3
 6 | 
 7 | PATH=$DIR:$PATH
 8 | 
 9 | gost $SRC $DST &> $DIR/gost.log &
10 | echo "$!" > $DIR/gost.pid


--------------------------------------------------------------------------------
/app/src/main/assets/armeabi-v7a/proxy.sh:
--------------------------------------------------------------------------------
  1 | #!/system/bin/sh
  2 | 
  3 | DIR=$1
  4 | action=$2
  5 | type=$3
  6 | host=$4
  7 | port=$5
  8 | auth=$6
  9 | user=$7
 10 | pass=$8
 11 | 
 12 | PATH=$DIR:$PATH
 13 | 
 14 | case $action in
 15 |  start)
 16 | 
 17 | echo "
 18 | base {
 19 |  log_debug = off;
 20 |  log_info = off;
 21 |  log = stderr;
 22 |  daemon = on;
 23 |  redirector = iptables;
 24 | }
 25 | " >$DIR/redsocks.conf
 26 | proxy_port=8123
 27 | 
 28 |  case $type in
 29 |   http)
 30 |   proxy_port=8124
 31 |  case $auth in
 32 |   true)
 33 |   echo "
 34 | redsocks {
 35 |  local_ip = 127.0.0.1;
 36 |  local_port = 8123;
 37 |  ip = $host;
 38 |  port = $port;
 39 |  type = http-relay;
 40 |  login = \"$user\";
 41 |  password = \"$pass\";
 42 | }
 43 | redsocks {
 44 |  local_ip = 0.0.0.0;
 45 |  local_port = 8124;
 46 |  ip = $host;
 47 |  port = $port;
 48 |  type = http-connect;
 49 |  login = \"$user\";
 50 |  password = \"$pass\";
 51 | }
 52 | " >>$DIR/redsocks.conf
 53 |    ;;
 54 |    false)
 55 |    echo "
 56 | redsocks {
 57 |  local_ip = 127.0.0.1;
 58 |  local_port = 8123;
 59 |  ip = $host;
 60 |  port = $port;
 61 |  type = http-relay;
 62 | }
 63 | redsocks {
 64 |  local_ip = 0.0.0.0;
 65 |  local_port = 8124;
 66 |  ip = $host;
 67 |  port = $port;
 68 |  type = http-connect;
 69 | }
 70 |  " >>$DIR/redsocks.conf
 71 |    ;;
 72 |  esac
 73 |    ;;
 74 |   socks5)
 75 |    case $auth in
 76 |   true)
 77 |     echo "
 78 | redsocks {
 79 |  local_ip = 0.0.0.0;
 80 |  local_port = 8123;
 81 |  ip = $host;
 82 |  port = $port;
 83 |  type = socks5;
 84 |  login = \"$user\";
 85 |  password = \"$pass\";
 86 |  }
 87 |  " >>$DIR/redsocks.conf
 88 |    ;;
 89 |  false)
 90 |   echo "
 91 | redsocks {
 92 |  local_ip = 0.0.0.0;
 93 |  local_port = 8123;
 94 |  ip = $host;
 95 |  port = $port;
 96 |  type = socks5;
 97 |  }
 98 |  " >>$DIR/redsocks.conf
 99 |    ;;
100 |  esac
101 |  ;;
102 |    socks4)
103 |    case $auth in
104 |   true)
105 |     echo "
106 | redsocks {
107 |  local_ip = 0.0.0.0;
108 |  local_port = 8123;
109 |  ip = $host;
110 |  port = $port;
111 |  type = socks4;
112 |  login = \"$user\";
113 |  password = \"$pass\";
114 |  }
115 |  " >>$DIR/redsocks.conf
116 |    ;;
117 |  false)
118 |   echo "
119 | redsocks {
120 |  local_ip = 0.0.0.0;
121 |  local_port = 8123;
122 |  ip = $host;
123 |  port = $port;
124 |  type = socks4;
125 |  }
126 |  " >>$DIR/redsocks.conf
127 |    ;;
128 |  esac
129 |  ;;
130 |  esac
131 | 
132 |  $DIR/redsocks -p $DIR/redsocks.pid -c $DIR/redsocks.conf
133 |  iptables -A INPUT -i ap+ -p tcp --dport 8123 -j ACCEPT
134 |  iptables -A INPUT -i ap+ -p tcp --dport 8124 -j ACCEPT
135 |  iptables -A INPUT -i wlan1 -p tcp --dport 8123 -j ACCEPT
136 |  iptables -A INPUT -i wlan1 -p tcp --dport 8124 -j ACCEPT
137 |  iptables -A INPUT -i lo -p tcp --dport 8123 -j ACCEPT
138 |  iptables -A INPUT -i lo -p tcp --dport 8124 -j ACCEPT
139 |  iptables -A INPUT -p tcp --dport 8123 -j DROP
140 |  iptables -A INPUT -p tcp --dport 8124 -j DROP
141 |  iptables -t nat -A PREROUTING -i ap+ -p tcp -d 192.168.43.1/24 -j RETURN
142 |  iptables -t nat -A PREROUTING -i ap+ -p tcp -j REDIRECT --to $proxy_port
143 |  iptables -t nat -A PREROUTING -i wlan1 -p tcp -d 192.168.43.1/24 -j RETURN
144 |  iptables -t nat -A PREROUTING -i wlan1 -p tcp -j REDIRECT --to $proxy_port
145 |  ;;
146 | stop)
147 | 
148 |  iptables -t nat -D PREROUTING -i ap+ -p tcp -d 192.168.43.1/24 -j RETURN
149 |  iptables -t nat -D PREROUTING -i ap+ -p tcp -j REDIRECT --to 8123
150 |  iptables -t nat -D PREROUTING -i ap+ -p tcp -j REDIRECT --to 8124
151 |  iptables -D INPUT -i ap+ -p tcp --dport 8123 -j ACCEPT
152 |  iptables -D INPUT -i ap+ -p tcp --dport 8124 -j ACCEPT
153 |  iptables -t nat -D PREROUTING -i wlan1 -p tcp -d 192.168.43.1/24 -j RETURN
154 |  iptables -t nat -D PREROUTING -i wlan1 -p tcp -j REDIRECT --to 8123
155 |  iptables -t nat -D PREROUTING -i wlan1 -p tcp -j REDIRECT --to 8124
156 |  iptables -D INPUT -i wlan1 -p tcp --dport 8123 -j ACCEPT
157 |  iptables -D INPUT -i wlan1 -p tcp --dport 8124 -j ACCEPT
158 |  iptables -D INPUT -i lo -p tcp --dport 8123 -j ACCEPT
159 |  iptables -D INPUT -i lo -p tcp --dport 8124 -j ACCEPT
160 |  iptables -D INPUT -p tcp --dport 8123 -j DROP
161 |  iptables -D INPUT -p tcp --dport 8124 -j DROP
162 | 
163 |   killall -9 redsocks
164 |   killall -9 cntlm
165 |   killall -9 gost
166 | 
167 |   kill -9 `cat $DIR/redsocks.pid`
168 | 
169 |   rm $DIR/redsocks.pid
170 | 
171 |   rm $DIR/redsocks.conf
172 | esac
173 | 


--------------------------------------------------------------------------------
/app/src/main/assets/armeabi-v7a/redsocks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/assets/armeabi-v7a/redsocks


--------------------------------------------------------------------------------
/app/src/main/assets/x86/cntlm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/assets/x86/cntlm


--------------------------------------------------------------------------------
/app/src/main/assets/x86/gost:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/assets/x86/gost


--------------------------------------------------------------------------------
/app/src/main/assets/x86/gost.sh:
--------------------------------------------------------------------------------
 1 | #!/system/bin/sh
 2 | 
 3 | DIR=$1
 4 | SRC=$2
 5 | DST=$3
 6 | 
 7 | PATH=$DIR:$PATH
 8 | 
 9 | gost $SRC $DST &> $DIR/gost.log &
10 | echo "$!" > $DIR/gost.pid


--------------------------------------------------------------------------------
/app/src/main/assets/x86/proxy.sh:
--------------------------------------------------------------------------------
  1 | #!/system/bin/sh
  2 | 
  3 | DIR=$1
  4 | action=$2
  5 | type=$3
  6 | host=$4
  7 | port=$5
  8 | auth=$6
  9 | user=$7
 10 | pass=$8
 11 | 
 12 | PATH=$DIR:$PATH
 13 | 
 14 | case $action in
 15 |  start)
 16 | 
 17 | echo "
 18 | base {
 19 |  log_debug = off;
 20 |  log_info = off;
 21 |  log = stderr;
 22 |  daemon = on;
 23 |  redirector = iptables;
 24 | }
 25 | " >$DIR/redsocks.conf
 26 | proxy_port=8123
 27 | 
 28 |  case $type in
 29 |   http)
 30 |   proxy_port=8124
 31 |  case $auth in
 32 |   true)
 33 |   echo "
 34 | redsocks {
 35 |  local_ip = 127.0.0.1;
 36 |  local_port = 8123;
 37 |  ip = $host;
 38 |  port = $port;
 39 |  type = http-relay;
 40 |  login = \"$user\";
 41 |  password = \"$pass\";
 42 | }
 43 | redsocks {
 44 |  local_ip = 0.0.0.0;
 45 |  local_port = 8124;
 46 |  ip = $host;
 47 |  port = $port;
 48 |  type = http-connect;
 49 |  login = \"$user\";
 50 |  password = \"$pass\";
 51 | }
 52 | " >>$DIR/redsocks.conf
 53 |    ;;
 54 |    false)
 55 |    echo "
 56 | redsocks {
 57 |  local_ip = 127.0.0.1;
 58 |  local_port = 8123;
 59 |  ip = $host;
 60 |  port = $port;
 61 |  type = http-relay;
 62 | }
 63 | redsocks {
 64 |  local_ip = 0.0.0.0;
 65 |  local_port = 8124;
 66 |  ip = $host;
 67 |  port = $port;
 68 |  type = http-connect;
 69 | }
 70 |  " >>$DIR/redsocks.conf
 71 |    ;;
 72 |  esac
 73 |    ;;
 74 |   socks5)
 75 |    case $auth in
 76 |   true)
 77 |     echo "
 78 | redsocks {
 79 |  local_ip = 0.0.0.0;
 80 |  local_port = 8123;
 81 |  ip = $host;
 82 |  port = $port;
 83 |  type = socks5;
 84 |  login = \"$user\";
 85 |  password = \"$pass\";
 86 |  }
 87 |  " >>$DIR/redsocks.conf
 88 |    ;;
 89 |  false)
 90 |   echo "
 91 | redsocks {
 92 |  local_ip = 0.0.0.0;
 93 |  local_port = 8123;
 94 |  ip = $host;
 95 |  port = $port;
 96 |  type = socks5;
 97 |  }
 98 |  " >>$DIR/redsocks.conf
 99 |    ;;
100 |  esac
101 |  ;;
102 |    socks4)
103 |    case $auth in
104 |   true)
105 |     echo "
106 | redsocks {
107 |  local_ip = 0.0.0.0;
108 |  local_port = 8123;
109 |  ip = $host;
110 |  port = $port;
111 |  type = socks4;
112 |  login = \"$user\";
113 |  password = \"$pass\";
114 |  }
115 |  " >>$DIR/redsocks.conf
116 |    ;;
117 |  false)
118 |   echo "
119 | redsocks {
120 |  local_ip = 0.0.0.0;
121 |  local_port = 8123;
122 |  ip = $host;
123 |  port = $port;
124 |  type = socks4;
125 |  }
126 |  " >>$DIR/redsocks.conf
127 |    ;;
128 |  esac
129 |  ;;
130 |  esac
131 | 
132 |  $DIR/redsocks -p $DIR/redsocks.pid -c $DIR/redsocks.conf
133 |  iptables -A INPUT -i ap+ -p tcp --dport 8123 -j ACCEPT
134 |  iptables -A INPUT -i ap+ -p tcp --dport 8124 -j ACCEPT
135 |  iptables -A INPUT -i wlan1 -p tcp --dport 8123 -j ACCEPT
136 |  iptables -A INPUT -i wlan1 -p tcp --dport 8124 -j ACCEPT
137 |  iptables -A INPUT -i lo -p tcp --dport 8123 -j ACCEPT
138 |  iptables -A INPUT -i lo -p tcp --dport 8124 -j ACCEPT
139 |  iptables -A INPUT -p tcp --dport 8123 -j DROP
140 |  iptables -A INPUT -p tcp --dport 8124 -j DROP
141 |  iptables -t nat -A PREROUTING -i ap+ -p tcp -d 192.168.43.1/24 -j RETURN
142 |  iptables -t nat -A PREROUTING -i ap+ -p tcp -j REDIRECT --to $proxy_port
143 |  iptables -t nat -A PREROUTING -i wlan1 -p tcp -d 192.168.43.1/24 -j RETURN
144 |  iptables -t nat -A PREROUTING -i wlan1 -p tcp -j REDIRECT --to $proxy_port
145 |  ;;
146 | stop)
147 | 
148 |  iptables -t nat -D PREROUTING -i ap+ -p tcp -d 192.168.43.1/24 -j RETURN
149 |  iptables -t nat -D PREROUTING -i ap+ -p tcp -j REDIRECT --to 8123
150 |  iptables -t nat -D PREROUTING -i ap+ -p tcp -j REDIRECT --to 8124
151 |  iptables -D INPUT -i ap+ -p tcp --dport 8123 -j ACCEPT
152 |  iptables -D INPUT -i ap+ -p tcp --dport 8124 -j ACCEPT
153 |  iptables -t nat -D PREROUTING -i wlan1 -p tcp -d 192.168.43.1/24 -j RETURN
154 |  iptables -t nat -D PREROUTING -i wlan1 -p tcp -j REDIRECT --to 8123
155 |  iptables -t nat -D PREROUTING -i wlan1 -p tcp -j REDIRECT --to 8124
156 |  iptables -D INPUT -i wlan1 -p tcp --dport 8123 -j ACCEPT
157 |  iptables -D INPUT -i wlan1 -p tcp --dport 8124 -j ACCEPT
158 |  iptables -D INPUT -i lo -p tcp --dport 8123 -j ACCEPT
159 |  iptables -D INPUT -i lo -p tcp --dport 8124 -j ACCEPT
160 |  iptables -D INPUT -p tcp --dport 8123 -j DROP
161 |  iptables -D INPUT -p tcp --dport 8124 -j DROP
162 | 
163 |   killall -9 redsocks
164 |   killall -9 cntlm
165 |   killall -9 gost
166 | 
167 |   kill -9 `cat $DIR/redsocks.pid`
168 | 
169 |   rm $DIR/redsocks.pid
170 | 
171 |   rm $DIR/redsocks.conf
172 | esac
173 | 


--------------------------------------------------------------------------------
/app/src/main/assets/x86/redsocks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/assets/x86/redsocks


--------------------------------------------------------------------------------
/app/src/main/cpp/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.4.1)
2 | 
3 | add_subdirectory(exec)
4 | add_subdirectory(libevent)
5 | add_subdirectory(redsocks)
6 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/exec/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | add_library(exec SHARED
2 | 	    termExec.cpp)
3 | 
4 | # Include libraries needed for exec lib
5 | target_link_libraries(exec
6 |                       android
7 | 		      dl
8 |                       log)
9 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | add_library(event STATIC
 2 |         buffer.c
 3 |         bufferevent.c
 4 |         bufferevent_filter.c
 5 |         bufferevent_pair.c
 6 |         bufferevent_ratelim.c
 7 |         bufferevent_sock.c
 8 |         epoll.c
 9 |         epoll_sub.c
10 |         evdns.c
11 |         event.c
12 |         event_tagging.c
13 |         evmap.c
14 |         evrpc.c
15 |         evthread.c
16 |         evthread_pthread.c
17 |         evutil.c
18 |         evutil_rand.c
19 |         http.c
20 |         listener.c
21 |         log.c
22 |         poll.c
23 |         select.c
24 |         signal.c
25 |         strlcpy.c
26 |         )
27 | 
28 | target_include_directories(event
29 |         PUBLIC
30 |         ${CMAKE_CURRENT_SOURCE_DIR}
31 |         ${CMAKE_CURRENT_SOURCE_DIR}/include
32 |         )
33 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/changelist-internal.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson
  3 |  *
  4 |  * Redistribution and use in source and binary forms, with or without
  5 |  * modification, are permitted provided that the following conditions
  6 |  * are met:
  7 |  * 1. Redistributions of source code must retain the above copyright
  8 |  *    notice, this list of conditions and the following disclaimer.
  9 |  * 2. Redistributions in binary form must reproduce the above copyright
 10 |  *    notice, this list of conditions and the following disclaimer in the
 11 |  *    documentation and/or other materials provided with the distribution.
 12 |  * 3. The name of the author may not be used to endorse or promote products
 13 |  *    derived from this software without specific prior written permission.
 14 |  *
 15 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 16 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 17 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 18 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 19 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 20 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 21 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 22 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 23 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 24 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 25 |  */
 26 | #ifndef _CHANGELIST_H_
 27 | #define _CHANGELIST_H_
 28 | 
 29 | /*
 30 |   A "changelist" is a list of all the fd status changes that should be made
 31 |   between calls to the backend's dispatch function.  There are a few reasons
 32 |   that a backend would want to queue changes like this rather than processing
 33 |   them immediately.
 34 | 
 35 |     1) Sometimes applications will add and delete the same event more than
 36 |        once between calls to dispatch.  Processing these changes immediately
 37 |        is needless, and potentially expensive (especially if we're on a system
 38 |        that makes one syscall per changed event).
 39 | 
 40 |     2) Sometimes we can coalesce multiple changes on the same fd into a single
 41 |        syscall if we know about them in advance.  For example, epoll can do an
 42 |        add and a delete at the same time, but only if we have found out about
 43 |        both of them before we tell epoll.
 44 | 
 45 |     3) Sometimes adding an event that we immediately delete can cause
 46 |        unintended consequences: in kqueue, this makes pending events get
 47 |        reported spuriously.
 48 |  */
 49 | 
 50 | #include "event2/util.h"
 51 | 
 52 | /** Represents a */
 53 | struct event_change {
 54 | 	/** The fd or signal whose events are to be changed */
 55 | 	evutil_socket_t fd;
 56 | 	/* The events that were enabled on the fd before any of these changes
 57 | 	   were made.  May include EV_READ or EV_WRITE. */
 58 | 	short old_events;
 59 | 
 60 | 	/* The changes that we want to make in reading and writing on this fd.
 61 | 	 * If this is a signal, then read_change has EV_CHANGE_SIGNAL set,
 62 | 	 * and write_change is unused. */
 63 | 	ev_uint8_t read_change;
 64 | 	ev_uint8_t write_change;
 65 | };
 66 | 
 67 | /* Flags for read_change and write_change. */
 68 | 
 69 | /* If set, add the event. */
 70 | #define EV_CHANGE_ADD     0x01
 71 | /* If set, delete the event.  Exclusive with EV_CHANGE_ADD */
 72 | #define EV_CHANGE_DEL     0x02
 73 | /* If set, this event refers a signal, not an fd. */
 74 | #define EV_CHANGE_SIGNAL  EV_SIGNAL
 75 | /* Set for persistent events.  Currently not used. */
 76 | #define EV_CHANGE_PERSIST EV_PERSIST
 77 | /* Set for adding edge-triggered events. */
 78 | #define EV_CHANGE_ET      EV_ET
 79 | 
 80 | /* The value of fdinfo_size that a backend should use if it is letting
 81 |  * changelist handle its add and delete functions. */
 82 | #define EVENT_CHANGELIST_FDINFO_SIZE sizeof(int)
 83 | 
 84 | /** Set up the data fields in a changelist. */
 85 | void event_changelist_init(struct event_changelist *changelist);
 86 | /** Remove every change in the changelist, and make corresponding changes
 87 |  * in the event maps in the base.  This function is generally used right
 88 |  * after making all the changes in the changelist. */
 89 | void event_changelist_remove_all(struct event_changelist *changelist,
 90 |     struct event_base *base);
 91 | /** Free all memory held in a changelist. */
 92 | void event_changelist_freemem(struct event_changelist *changelist);
 93 | 
 94 | /** Implementation of eventop_add that queues the event in a changelist. */
 95 | int event_changelist_add(struct event_base *base, evutil_socket_t fd, short old, short events,
 96 |     void *p);
 97 | /** Implementation of eventop_del that queues the event in a changelist. */
 98 | int event_changelist_del(struct event_base *base, evutil_socket_t fd, short old, short events,
 99 |     void *p);
100 | 
101 | #endif
102 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/defer-internal.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson
  3 |  *
  4 |  * Redistribution and use in source and binary forms, with or without
  5 |  * modification, are permitted provided that the following conditions
  6 |  * are met:
  7 |  * 1. Redistributions of source code must retain the above copyright
  8 |  *    notice, this list of conditions and the following disclaimer.
  9 |  * 2. Redistributions in binary form must reproduce the above copyright
 10 |  *    notice, this list of conditions and the following disclaimer in the
 11 |  *    documentation and/or other materials provided with the distribution.
 12 |  * 3. The name of the author may not be used to endorse or promote products
 13 |  *    derived from this software without specific prior written permission.
 14 |  *
 15 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 16 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 17 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 18 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 19 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 20 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 21 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 22 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 23 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 24 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 25 |  */
 26 | #ifndef _DEFER_INTERNAL_H_
 27 | #define _DEFER_INTERNAL_H_
 28 | 
 29 | #ifdef __cplusplus
 30 | extern "C" {
 31 | #endif
 32 | 
 33 | #include "event2/event-config.h"
 34 | #include <sys/queue.h>
 35 | 
 36 | struct deferred_cb;
 37 | 
 38 | typedef void (*deferred_cb_fn)(struct deferred_cb *, void *);
 39 | 
 40 | /** A deferred_cb is a callback that can be scheduled to run as part of
 41 |  * an event_base's event_loop, rather than running immediately. */
 42 | struct deferred_cb {
 43 | 	/** Links to the adjacent active (pending) deferred_cb objects. */
 44 | 	TAILQ_ENTRY (deferred_cb) cb_next;
 45 | 	/** True iff this deferred_cb is pending in an event_base. */
 46 | 	unsigned queued : 1;
 47 | 	/** The function to execute when the callback runs. */
 48 | 	deferred_cb_fn cb;
 49 | 	/** The function's second argument. */
 50 | 	void *arg;
 51 | };
 52 | 
 53 | /** A deferred_cb_queue is a list of deferred_cb that we can add to and run. */
 54 | struct deferred_cb_queue {
 55 | 	/** Lock used to protect the queue. */
 56 | 	void *lock;
 57 | 
 58 | 	/** How many entries are in the queue? */
 59 | 	int active_count;
 60 | 
 61 | 	/** Function called when adding to the queue from another thread. */
 62 | 	void (*notify_fn)(struct deferred_cb_queue *, void *);
 63 | 	void *notify_arg;
 64 | 
 65 | 	/** Deferred callback management: a list of deferred callbacks to
 66 | 	 * run active the active events. */
 67 | 	TAILQ_HEAD (deferred_cb_list, deferred_cb) deferred_cb_list;
 68 | };
 69 | 
 70 | /**
 71 |    Initialize an empty, non-pending deferred_cb.
 72 | 
 73 |    @param deferred The deferred_cb structure to initialize.
 74 |    @param cb The function to run when the deferred_cb executes.
 75 |    @param arg The function's second argument.
 76 |  */
 77 | void event_deferred_cb_init(struct deferred_cb *, deferred_cb_fn, void *);
 78 | /**
 79 |    Cancel a deferred_cb if it is currently scheduled in an event_base.
 80 |  */
 81 | void event_deferred_cb_cancel(struct deferred_cb_queue *, struct deferred_cb *);
 82 | /**
 83 |    Activate a deferred_cb if it is not currently scheduled in an event_base.
 84 |  */
 85 | void event_deferred_cb_schedule(struct deferred_cb_queue *, struct deferred_cb *);
 86 | 
 87 | #define LOCK_DEFERRED_QUEUE(q)						\
 88 | 	EVLOCK_LOCK((q)->lock, 0)
 89 | #define UNLOCK_DEFERRED_QUEUE(q)					\
 90 | 	EVLOCK_UNLOCK((q)->lock, 0)
 91 | 
 92 | #ifdef __cplusplus
 93 | }
 94 | #endif
 95 | 
 96 | void event_deferred_cb_queue_init(struct deferred_cb_queue *);
 97 | struct deferred_cb_queue *event_base_get_deferred_cb_queue(struct event_base *);
 98 | 
 99 | #endif /* _EVENT_INTERNAL_H_ */
100 | 
101 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/epoll_sub.c:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2003-2009 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright 2009-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #include <stdint.h>
28 | 
29 | #include <sys/param.h>
30 | #include <sys/types.h>
31 | #include <sys/syscall.h>
32 | #include <sys/epoll.h>
33 | #include <unistd.h>
34 | #include <errno.h>
35 | 
36 | int
37 | epoll_create(int size)
38 | {
39 | #if !defined(__NR_epoll_create) && defined(__NR_epoll_create1)
40 | 	if (size <= 0) {
41 | 		errno = EINVAL;
42 | 		return -1;
43 | 	}
44 | 	return (syscall(__NR_epoll_create1, 0));
45 | #else
46 | 	return (syscall(__NR_epoll_create, size));
47 | #endif
48 | }
49 | 
50 | int
51 | epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
52 | {
53 | 
54 | 	return (syscall(__NR_epoll_ctl, epfd, op, fd, event));
55 | }
56 | 
57 | int
58 | epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
59 | {
60 | #if !defined(__NR_epoll_wait) && defined(__NR_epoll_pwait)
61 | 	return (syscall(__NR_epoll_pwait, epfd, events, maxevents, timeout, NULL, 0));
62 | #else
63 | 	return (syscall(__NR_epoll_wait, epfd, events, maxevents, timeout));
64 | #endif
65 | }


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/evdns.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVDNS_H_
28 | #define _EVDNS_H_
29 | 
30 | /** @file evdns.h
31 | 
32 |   A dns subsystem for Libevent.
33 | 
34 |   The <evdns.h> header is deprecated in Libevent 2.0 and later; please
35 |   use <event2/evdns.h> instead.  Depending on what functionality you
36 |   need, you may also want to include more of the other <event2/...>
37 |   headers.
38 |  */
39 | 
40 | #include <event.h>
41 | #include <event2/dns.h>
42 | #include <event2/dns_compat.h>
43 | #include <event2/dns_struct.h>
44 | 
45 | #endif /* _EVDNS_H_ */
46 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/event.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVENT_H_
28 | #define _EVENT_H_
29 | 
30 | /** @file event.h
31 | 
32 |   A library for writing event-driven network servers.
33 | 
34 |   The <event.h> header is deprecated in Libevent 2.0 and later; please
35 |   use <event2/event.h> instead.  Depending on what functionality you
36 |   need, you may also want to include more of the other event2/
37 |   headers.
38 |  */
39 | 
40 | #ifdef __cplusplus
41 | extern "C" {
42 | #endif
43 | 
44 | #include <event2/event-config.h>
45 | #ifdef _EVENT_HAVE_SYS_TYPES_H
46 | #include <sys/types.h>
47 | #endif
48 | #ifdef _EVENT_HAVE_SYS_TIME_H
49 | #include <sys/time.h>
50 | #endif
51 | #ifdef _EVENT_HAVE_STDINT_H
52 | #include <stdint.h>
53 | #endif
54 | #include <stdarg.h>
55 | 
56 | /* For int types. */
57 | #include <evutil.h>
58 | 
59 | #ifdef WIN32
60 | #ifndef WIN32_LEAN_AND_MEAN
61 | #define WIN32_LEAN_AND_MEAN
62 | #endif
63 | #include <winsock2.h>
64 | #include <windows.h>
65 | #undef WIN32_LEAN_AND_MEAN
66 | typedef unsigned char u_char;
67 | typedef unsigned short u_short;
68 | #endif
69 | 
70 | #include <event2/event_struct.h>
71 | #include <event2/event.h>
72 | #include <event2/event_compat.h>
73 | #include <event2/buffer.h>
74 | #include <event2/buffer_compat.h>
75 | #include <event2/bufferevent.h>
76 | #include <event2/bufferevent_struct.h>
77 | #include <event2/bufferevent_compat.h>
78 | #include <event2/tag.h>
79 | #include <event2/tag_compat.h>
80 | 
81 | #ifdef __cplusplus
82 | }
83 | #endif
84 | 
85 | #endif /* _EVENT_H_ */
86 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/evhttp.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVHTTP_H_
28 | #define _EVHTTP_H_
29 | 
30 | /** @file evhttp.h
31 | 
32 |   An http implementation subsystem for Libevent.
33 | 
34 |   The <evhttp.h> header is deprecated in Libevent 2.0 and later; please
35 |   use <event2/http.h> instead.  Depending on what functionality you
36 |   need, you may also want to include more of the other <event2/...>
37 |   headers.
38 |  */
39 | 
40 | #include <event.h>
41 | #include <event2/http.h>
42 | #include <event2/http_struct.h>
43 | #include <event2/http_compat.h>
44 | 
45 | #endif /* _EVHTTP_H_ */
46 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/evmap-internal.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 3 |  *
 4 |  * Redistribution and use in source and binary forms, with or without
 5 |  * modification, are permitted provided that the following conditions
 6 |  * are met:
 7 |  * 1. Redistributions of source code must retain the above copyright
 8 |  *    notice, this list of conditions and the following disclaimer.
 9 |  * 2. Redistributions in binary form must reproduce the above copyright
10 |  *    notice, this list of conditions and the following disclaimer in the
11 |  *    documentation and/or other materials provided with the distribution.
12 |  * 3. The name of the author may not be used to endorse or promote products
13 |  *    derived from this software without specific prior written permission.
14 |  *
15 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 |  */
26 | #ifndef _EVMAP_H_
27 | #define _EVMAP_H_
28 | 
29 | /** @file evmap-internal.h
30 |  *
31 |  * An event_map is a utility structure to map each fd or signal to zero or
32 |  * more events.  Functions to manipulate event_maps should only be used from
33 |  * inside libevent.  They generally need to hold the lock on the corresponding
34 |  * event_base.
35 |  **/
36 | 
37 | struct event_base;
38 | struct event;
39 | 
40 | /** Initialize an event_map for use.
41 |  */
42 | void evmap_io_initmap(struct event_io_map* ctx);
43 | void evmap_signal_initmap(struct event_signal_map* ctx);
44 | 
45 | /** Remove all entries from an event_map.
46 | 
47 | 	@param ctx the map to clear.
48 |  */
49 | void evmap_io_clear(struct event_io_map* ctx);
50 | void evmap_signal_clear(struct event_signal_map* ctx);
51 | 
52 | /** Add an IO event (some combination of EV_READ or EV_WRITE) to an
53 |     event_base's list of events on a given file descriptor, and tell the
54 |     underlying eventops about the fd if its state has changed.
55 | 
56 |     Requires that ev is not already added.
57 | 
58 |     @param base the event_base to operate on.
59 |     @param fd the file descriptor corresponding to ev.
60 |     @param ev the event to add.
61 | */
62 | int evmap_io_add(struct event_base *base, evutil_socket_t fd, struct event *ev);
63 | /** Remove an IO event (some combination of EV_READ or EV_WRITE) to an
64 |     event_base's list of events on a given file descriptor, and tell the
65 |     underlying eventops about the fd if its state has changed.
66 | 
67 |     @param base the event_base to operate on.
68 |     @param fd the file descriptor corresponding to ev.
69 |     @param ev the event to remove.
70 |  */
71 | int evmap_io_del(struct event_base *base, evutil_socket_t fd, struct event *ev);
72 | /** Active the set of events waiting on an event_base for a given fd.
73 | 
74 |     @param base the event_base to operate on.
75 |     @param fd the file descriptor that has become active.
76 |     @param events a bitmask of EV_READ|EV_WRITE|EV_ET.
77 | */
78 | void evmap_io_active(struct event_base *base, evutil_socket_t fd, short events);
79 | 
80 | 
81 | /* These functions behave in the same way as evmap_io_*, except they work on
82 |  * signals rather than fds.  signals use a linear map everywhere; fds use
83 |  * either a linear map or a hashtable. */
84 | int evmap_signal_add(struct event_base *base, int signum, struct event *ev);
85 | int evmap_signal_del(struct event_base *base, int signum, struct event *ev);
86 | void evmap_signal_active(struct event_base *base, evutil_socket_t signum, int ncalls);
87 | 
88 | void *evmap_io_get_fdinfo(struct event_io_map *ctx, evutil_socket_t fd);
89 | 
90 | void evmap_check_integrity(struct event_base *base);
91 | 
92 | #endif /* _EVMAP_H_ */
93 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/evrpc.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVRPC_H_
28 | #define _EVRPC_H_
29 | 
30 | /** @file evrpc.h
31 | 
32 |   An RPC system for Libevent.
33 | 
34 |   The <evrpc.h> header is deprecated in Libevent 2.0 and later; please
35 |   use <event2/rpc.h> instead.  Depending on what functionality you
36 |   need, you may also want to include more of the other <event2/...>
37 |   headers.
38 |  */
39 | 
40 | #include <event.h>
41 | #include <event2/rpc.h>
42 | #include <event2/rpc_struct.h>
43 | #include <event2/rpc_compat.h>
44 | 
45 | #endif /* _EVRPC_H_ */
46 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/evsignal-internal.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVSIGNAL_H_
28 | #define _EVSIGNAL_H_
29 | 
30 | #ifndef evutil_socket_t
31 | #include "event2/util.h"
32 | #endif
33 | #include <signal.h>
34 | 
35 | typedef void (*ev_sighandler_t)(int);
36 | 
37 | /* Data structure for the default signal-handling implementation in signal.c
38 |  */
39 | struct evsig_info {
40 | 	/* Event watching ev_signal_pair[1] */
41 | 	struct event ev_signal;
42 | 	/* Socketpair used to send notifications from the signal handler */
43 | 	evutil_socket_t ev_signal_pair[2];
44 | 	/* True iff we've added the ev_signal event yet. */
45 | 	int ev_signal_added;
46 | 	/* Count of the number of signals we're currently watching. */
47 | 	int ev_n_signals_added;
48 | 
49 | 	/* Array of previous signal handler objects before Libevent started
50 | 	 * messing with them.  Used to restore old signal handlers. */
51 | #ifdef _EVENT_HAVE_SIGACTION
52 | 	struct sigaction **sh_old;
53 | #else
54 | 	ev_sighandler_t **sh_old;
55 | #endif
56 | 	/* Size of sh_old. */
57 | 	int sh_old_max;
58 | };
59 | int evsig_init(struct event_base *);
60 | void evsig_dealloc(struct event_base *);
61 | 
62 | void evsig_set_base(struct event_base *base);
63 | 
64 | #endif /* _EVSIGNAL_H_ */
65 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/evutil.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 3 |  *
 4 |  * Redistribution and use in source and binary forms, with or without
 5 |  * modification, are permitted provided that the following conditions
 6 |  * are met:
 7 |  * 1. Redistributions of source code must retain the above copyright
 8 |  *    notice, this list of conditions and the following disclaimer.
 9 |  * 2. Redistributions in binary form must reproduce the above copyright
10 |  *    notice, this list of conditions and the following disclaimer in the
11 |  *    documentation and/or other materials provided with the distribution.
12 |  * 3. The name of the author may not be used to endorse or promote products
13 |  *    derived from this software without specific prior written permission.
14 |  *
15 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 |  */
26 | #ifndef _EVUTIL_H_
27 | #define _EVUTIL_H_
28 | 
29 | /** @file evutil.h
30 | 
31 |   Utility and compatibility functions for Libevent.
32 | 
33 |   The <evutil.h> header is deprecated in Libevent 2.0 and later; please
34 |   use <event2/util.h> instead.
35 | */
36 | 
37 | #include <event2/util.h>
38 | 
39 | #endif /* _EVUTIL_H_ */
40 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/bufferevent_compat.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2007-2012 Niels Provos, Nick Mathewson
  3 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
  4 |  * All rights reserved.
  5 |  *
  6 |  * Redistribution and use in source and binary forms, with or without
  7 |  * modification, are permitted provided that the following conditions
  8 |  * are met:
  9 |  * 1. Redistributions of source code must retain the above copyright
 10 |  *    notice, this list of conditions and the following disclaimer.
 11 |  * 2. Redistributions in binary form must reproduce the above copyright
 12 |  *    notice, this list of conditions and the following disclaimer in the
 13 |  *    documentation and/or other materials provided with the distribution.
 14 |  * 3. The name of the author may not be used to endorse or promote products
 15 |  *    derived from this software without specific prior written permission.
 16 |  *
 17 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 18 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 19 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 20 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 21 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 22 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 23 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 24 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 25 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 26 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 27 |  */
 28 | #ifndef _EVENT2_BUFFEREVENT_COMPAT_H_
 29 | #define _EVENT2_BUFFEREVENT_COMPAT_H_
 30 | 
 31 | #define evbuffercb bufferevent_data_cb
 32 | #define everrorcb bufferevent_event_cb
 33 | 
 34 | /**
 35 |   Create a new bufferevent for an fd.
 36 | 
 37 |   This function is deprecated.  Use bufferevent_socket_new and
 38 |   bufferevent_set_callbacks instead.
 39 | 
 40 |   Libevent provides an abstraction on top of the regular event callbacks.
 41 |   This abstraction is called a buffered event.  A buffered event provides
 42 |   input and output buffers that get filled and drained automatically.  The
 43 |   user of a buffered event no longer deals directly with the I/O, but
 44 |   instead is reading from input and writing to output buffers.
 45 | 
 46 |   Once initialized, the bufferevent structure can be used repeatedly with
 47 |   bufferevent_enable() and bufferevent_disable().
 48 | 
 49 |   When read enabled the bufferevent will try to read from the file descriptor
 50 |   and call the read callback.  The write callback is executed whenever the
 51 |   output buffer is drained below the write low watermark, which is 0 by
 52 |   default.
 53 | 
 54 |   If multiple bases are in use, bufferevent_base_set() must be called before
 55 |   enabling the bufferevent for the first time.
 56 | 
 57 |   @deprecated This function is deprecated because it uses the current
 58 |     event base, and as such can be error prone for multithreaded programs.
 59 |     Use bufferevent_socket_new() instead.
 60 | 
 61 |   @param fd the file descriptor from which data is read and written to.
 62 | 	 This file descriptor is not allowed to be a pipe(2).
 63 |   @param readcb callback to invoke when there is data to be read, or NULL if
 64 | 	 no callback is desired
 65 |   @param writecb callback to invoke when the file descriptor is ready for
 66 | 	 writing, or NULL if no callback is desired
 67 |   @param errorcb callback to invoke when there is an error on the file
 68 | 	 descriptor
 69 |   @param cbarg an argument that will be supplied to each of the callbacks
 70 | 	 (readcb, writecb, and errorcb)
 71 |   @return a pointer to a newly allocated bufferevent struct, or NULL if an
 72 | 	  error occurred
 73 |   @see bufferevent_base_set(), bufferevent_free()
 74 |   */
 75 | struct bufferevent *bufferevent_new(evutil_socket_t fd,
 76 |     evbuffercb readcb, evbuffercb writecb, everrorcb errorcb, void *cbarg);
 77 | 
 78 | 
 79 | /**
 80 |   Set the read and write timeout for a buffered event.
 81 | 
 82 |   @param bufev the bufferevent to be modified
 83 |   @param timeout_read the read timeout
 84 |   @param timeout_write the write timeout
 85 |  */
 86 | void bufferevent_settimeout(struct bufferevent *bufev,
 87 |     int timeout_read, int timeout_write);
 88 | 
 89 | #define EVBUFFER_READ		BEV_EVENT_READING
 90 | #define EVBUFFER_WRITE		BEV_EVENT_WRITING
 91 | #define EVBUFFER_EOF		BEV_EVENT_EOF
 92 | #define EVBUFFER_ERROR		BEV_EVENT_ERROR
 93 | #define EVBUFFER_TIMEOUT	BEV_EVENT_TIMEOUT
 94 | 
 95 | /** macro for getting access to the input buffer of a bufferevent */
 96 | #define EVBUFFER_INPUT(x)	bufferevent_get_input(x)
 97 | /** macro for getting access to the output buffer of a bufferevent */
 98 | #define EVBUFFER_OUTPUT(x)	bufferevent_get_output(x)
 99 | 
100 | #endif
101 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/bufferevent_ssl.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson
  3 |  *
  4 |  * Redistribution and use in source and binary forms, with or without
  5 |  * modification, are permitted provided that the following conditions
  6 |  * are met:
  7 |  * 1. Redistributions of source code must retain the above copyright
  8 |  *    notice, this list of conditions and the following disclaimer.
  9 |  * 2. Redistributions in binary form must reproduce the above copyright
 10 |  *    notice, this list of conditions and the following disclaimer in the
 11 |  *    documentation and/or other materials provided with the distribution.
 12 |  * 3. The name of the author may not be used to endorse or promote products
 13 |  *    derived from this software without specific prior written permission.
 14 |  *
 15 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 16 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 17 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 18 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 19 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 20 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 21 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 22 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 23 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 24 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 25 |  */
 26 | #ifndef _EVENT2_BUFFEREVENT_SSL_H_
 27 | #define _EVENT2_BUFFEREVENT_SSL_H_
 28 | 
 29 | /** @file event2/bufferevent_ssl.h
 30 | 
 31 |     OpenSSL support for bufferevents.
 32 |  */
 33 | 
 34 | #include <event2/event-config.h>
 35 | #include <event2/bufferevent.h>
 36 | #include <event2/util.h>
 37 | 
 38 | #ifdef __cplusplus
 39 | extern "C" {
 40 | #endif
 41 | 
 42 | /* This is what openssl's SSL objects are underneath. */
 43 | struct ssl_st;
 44 | 
 45 | /**
 46 |    The state of an SSL object to be used when creating a new
 47 |    SSL bufferevent.
 48 |  */
 49 | enum bufferevent_ssl_state {
 50 | 	BUFFEREVENT_SSL_OPEN = 0,
 51 | 	BUFFEREVENT_SSL_CONNECTING = 1,
 52 | 	BUFFEREVENT_SSL_ACCEPTING = 2
 53 | };
 54 | 
 55 | #if defined(_EVENT_HAVE_OPENSSL) || defined(_EVENT_IN_DOXYGEN)
 56 | /**
 57 |    Create a new SSL bufferevent to send its data over another bufferevent.
 58 | 
 59 |    @param base An event_base to use to detect reading and writing.  It
 60 |       must also be the base for the underlying bufferevent.
 61 |    @param underlying A socket to use for this SSL
 62 |    @param ssl A SSL* object from openssl.
 63 |    @param state The current state of the SSL connection
 64 |    @param options One or more bufferevent_options
 65 |    @return A new bufferevent on success, or NULL on failure
 66 | */
 67 | struct bufferevent *
 68 | bufferevent_openssl_filter_new(struct event_base *base,
 69 |     struct bufferevent *underlying,
 70 |     struct ssl_st *ssl,
 71 |     enum bufferevent_ssl_state state,
 72 |     int options);
 73 | 
 74 | /**
 75 |    Create a new SSL bufferevent to send its data over an SSL * on a socket.
 76 | 
 77 |    @param base An event_base to use to detect reading and writing
 78 |    @param fd A socket to use for this SSL
 79 |    @param ssl A SSL* object from openssl.
 80 |    @param state The current state of the SSL connection
 81 |    @param options One or more bufferevent_options
 82 |    @return A new bufferevent on success, or NULL on failure.
 83 | */
 84 | struct bufferevent *
 85 | bufferevent_openssl_socket_new(struct event_base *base,
 86 |     evutil_socket_t fd,
 87 |     struct ssl_st *ssl,
 88 |     enum bufferevent_ssl_state state,
 89 |     int options);
 90 | 
 91 | /** Return the underlying openssl SSL * object for an SSL bufferevent. */
 92 | struct ssl_st *
 93 | bufferevent_openssl_get_ssl(struct bufferevent *bufev);
 94 | 
 95 | /** Tells a bufferevent to begin SSL renegotiation. */
 96 | int bufferevent_ssl_renegotiate(struct bufferevent *bev);
 97 | 
 98 | /** Return the most recent OpenSSL error reported on an SSL bufferevent. */
 99 | unsigned long bufferevent_get_openssl_error(struct bufferevent *bev);
100 | 
101 | #endif
102 | 
103 | #ifdef __cplusplus
104 | }
105 | #endif
106 | 
107 | #endif /* _EVENT2_BUFFEREVENT_SSL_H_ */
108 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/bufferevent_struct.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
  3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
  4 |  *
  5 |  * Redistribution and use in source and binary forms, with or without
  6 |  * modification, are permitted provided that the following conditions
  7 |  * are met:
  8 |  * 1. Redistributions of source code must retain the above copyright
  9 |  *    notice, this list of conditions and the following disclaimer.
 10 |  * 2. Redistributions in binary form must reproduce the above copyright
 11 |  *    notice, this list of conditions and the following disclaimer in the
 12 |  *    documentation and/or other materials provided with the distribution.
 13 |  * 3. The name of the author may not be used to endorse or promote products
 14 |  *    derived from this software without specific prior written permission.
 15 |  *
 16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 26 |  */
 27 | #ifndef _EVENT2_BUFFEREVENT_STRUCT_H_
 28 | #define _EVENT2_BUFFEREVENT_STRUCT_H_
 29 | 
 30 | /** @file event2/bufferevent_struct.h
 31 | 
 32 |   Data structures for bufferevents.  Using these structures may hurt forward
 33 |   compatibility with later versions of Libevent: be careful!
 34 | 
 35 |   @deprecated Use of bufferevent_struct.h is completely deprecated; these
 36 |     structures are only exposed for backward compatibility with programs
 37 |     written before Libevent 2.0 that used them.
 38 |  */
 39 | 
 40 | #ifdef __cplusplus
 41 | extern "C" {
 42 | #endif
 43 | 
 44 | #include <event2/event-config.h>
 45 | #ifdef _EVENT_HAVE_SYS_TYPES_H
 46 | #include <sys/types.h>
 47 | #endif
 48 | #ifdef _EVENT_HAVE_SYS_TIME_H
 49 | #include <sys/time.h>
 50 | #endif
 51 | 
 52 | /* For int types. */
 53 | #include <event2/util.h>
 54 | /* For struct event */
 55 | #include <event2/event_struct.h>
 56 | 
 57 | struct event_watermark {
 58 | 	size_t low;
 59 | 	size_t high;
 60 | };
 61 | 
 62 | /**
 63 |   Shared implementation of a bufferevent.
 64 | 
 65 |   This type is exposed only because it was exposed in previous versions,
 66 |   and some people's code may rely on manipulating it.  Otherwise, you
 67 |   should really not rely on the layout, size, or contents of this structure:
 68 |   it is fairly volatile, and WILL change in future versions of the code.
 69 | **/
 70 | struct bufferevent {
 71 | 	/** Event base for which this bufferevent was created. */
 72 | 	struct event_base *ev_base;
 73 | 	/** Pointer to a table of function pointers to set up how this
 74 | 	    bufferevent behaves. */
 75 | 	const struct bufferevent_ops *be_ops;
 76 | 
 77 | 	/** A read event that triggers when a timeout has happened or a socket
 78 | 	    is ready to read data.  Only used by some subtypes of
 79 | 	    bufferevent. */
 80 | 	struct event ev_read;
 81 | 	/** A write event that triggers when a timeout has happened or a socket
 82 | 	    is ready to write data.  Only used by some subtypes of
 83 | 	    bufferevent. */
 84 | 	struct event ev_write;
 85 | 
 86 | 	/** An input buffer. Only the bufferevent is allowed to add data to
 87 | 	    this buffer, though the user is allowed to drain it. */
 88 | 	struct evbuffer *input;
 89 | 
 90 | 	/** An input buffer. Only the bufferevent is allowed to drain data
 91 | 	    from this buffer, though the user is allowed to add it. */
 92 | 	struct evbuffer *output;
 93 | 
 94 | 	struct event_watermark wm_read;
 95 | 	struct event_watermark wm_write;
 96 | 
 97 | 	bufferevent_data_cb readcb;
 98 | 	bufferevent_data_cb writecb;
 99 | 	/* This should be called 'eventcb', but renaming it would break
100 | 	 * backward compatibility */
101 | 	bufferevent_event_cb errorcb;
102 | 	void *cbarg;
103 | 
104 | 	struct timeval timeout_read;
105 | 	struct timeval timeout_write;
106 | 
107 | 	/** Events that are currently enabled: currently EV_READ and EV_WRITE
108 | 	    are supported. */
109 | 	short enabled;
110 | };
111 | 
112 | #ifdef __cplusplus
113 | }
114 | #endif
115 | 
116 | #endif /* _EVENT2_BUFFEREVENT_STRUCT_H_ */
117 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/dns_struct.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVENT2_DNS_STRUCT_H_
28 | #define _EVENT2_DNS_STRUCT_H_
29 | 
30 | /** @file event2/dns_struct.h
31 | 
32 |   Data structures for dns.  Using these structures may hurt forward
33 |   compatibility with later versions of Libevent: be careful!
34 | 
35 |  */
36 | 
37 | #ifdef __cplusplus
38 | extern "C" {
39 | #endif
40 | 
41 | #include <event2/event-config.h>
42 | #ifdef _EVENT_HAVE_SYS_TYPES_H
43 | #include <sys/types.h>
44 | #endif
45 | #ifdef _EVENT_HAVE_SYS_TIME_H
46 | #include <sys/time.h>
47 | #endif
48 | 
49 | /* For int types. */
50 | #include <event2/util.h>
51 | 
52 | /*
53 |  * Structures used to implement a DNS server.
54 |  */
55 | 
56 | struct evdns_server_request {
57 | 	int flags;
58 | 	int nquestions;
59 | 	struct evdns_server_question **questions;
60 | };
61 | struct evdns_server_question {
62 | 	int type;
63 | #ifdef __cplusplus
64 | 	int dns_question_class;
65 | #else
66 | 	/* You should refer to this field as "dns_question_class".  The
67 | 	 * name "class" works in C for backward compatibility, and will be
68 | 	 * removed in a future version. (1.5 or later). */
69 | 	int class;
70 | #define dns_question_class class
71 | #endif
72 | 	char name[1];
73 | };
74 | 
75 | #ifdef __cplusplus
76 | }
77 | #endif
78 | 
79 | #endif /* _EVENT2_DNS_STRUCT_H_ */
80 | 
81 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/event_struct.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
  3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
  4 |  *
  5 |  * Redistribution and use in source and binary forms, with or without
  6 |  * modification, are permitted provided that the following conditions
  7 |  * are met:
  8 |  * 1. Redistributions of source code must retain the above copyright
  9 |  *    notice, this list of conditions and the following disclaimer.
 10 |  * 2. Redistributions in binary form must reproduce the above copyright
 11 |  *    notice, this list of conditions and the following disclaimer in the
 12 |  *    documentation and/or other materials provided with the distribution.
 13 |  * 3. The name of the author may not be used to endorse or promote products
 14 |  *    derived from this software without specific prior written permission.
 15 |  *
 16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 26 |  */
 27 | #ifndef _EVENT2_EVENT_STRUCT_H_
 28 | #define _EVENT2_EVENT_STRUCT_H_
 29 | 
 30 | /** @file event2/event_struct.h
 31 | 
 32 |   Structures used by event.h.  Using these structures directly WILL harm
 33 |   forward compatibility: be careful.
 34 | 
 35 |   No field declared in this file should be used directly in user code.  Except
 36 |   for historical reasons, these fields would not be exposed at all.
 37 |  */
 38 | 
 39 | #ifdef __cplusplus
 40 | extern "C" {
 41 | #endif
 42 | 
 43 | #include <event2/event-config.h>
 44 | #ifdef _EVENT_HAVE_SYS_TYPES_H
 45 | #include <sys/types.h>
 46 | #endif
 47 | #ifdef _EVENT_HAVE_SYS_TIME_H
 48 | #include <sys/time.h>
 49 | #endif
 50 | 
 51 | /* For int types. */
 52 | #include <event2/util.h>
 53 | 
 54 | /* For evkeyvalq */
 55 | #include <event2/keyvalq_struct.h>
 56 | 
 57 | #define EVLIST_TIMEOUT	0x01
 58 | #define EVLIST_INSERTED	0x02
 59 | #define EVLIST_SIGNAL	0x04
 60 | #define EVLIST_ACTIVE	0x08
 61 | #define EVLIST_INTERNAL	0x10
 62 | #define EVLIST_INIT	0x80
 63 | 
 64 | /* EVLIST_X_ Private space: 0x1000-0xf000 */
 65 | #define EVLIST_ALL	(0xf000 | 0x9f)
 66 | 
 67 | /* Fix so that people don't have to run with <sys/queue.h> */
 68 | #ifndef TAILQ_ENTRY
 69 | #define _EVENT_DEFINED_TQENTRY
 70 | #define TAILQ_ENTRY(type)						\
 71 | struct {								\
 72 | 	struct type *tqe_next;	/* next element */			\
 73 | 	struct type **tqe_prev;	/* address of previous next element */	\
 74 | }
 75 | #endif /* !TAILQ_ENTRY */
 76 | 
 77 | #ifndef TAILQ_HEAD
 78 | #define _EVENT_DEFINED_TQHEAD
 79 | #define TAILQ_HEAD(name, type)			\
 80 | struct name {					\
 81 | 	struct type *tqh_first;			\
 82 | 	struct type **tqh_last;			\
 83 | }
 84 | #endif
 85 | 
 86 | struct event_base;
 87 | struct event {
 88 | 	TAILQ_ENTRY(event) ev_active_next;
 89 | 	TAILQ_ENTRY(event) ev_next;
 90 | 	/* for managing timeouts */
 91 | 	union {
 92 | 		TAILQ_ENTRY(event) ev_next_with_common_timeout;
 93 | 		int min_heap_idx;
 94 | 	} ev_timeout_pos;
 95 | 	evutil_socket_t ev_fd;
 96 | 
 97 | 	struct event_base *ev_base;
 98 | 
 99 | 	union {
100 | 		/* used for io events */
101 | 		struct {
102 | 			TAILQ_ENTRY(event) ev_io_next;
103 | 			struct timeval ev_timeout;
104 | 		} ev_io;
105 | 
106 | 		/* used by signal events */
107 | 		struct {
108 | 			TAILQ_ENTRY(event) ev_signal_next;
109 | 			short ev_ncalls;
110 | 			/* Allows deletes in callback */
111 | 			short *ev_pncalls;
112 | 		} ev_signal;
113 | 	} _ev;
114 | 
115 | 	short ev_events;
116 | 	short ev_res;		/* result passed to event callback */
117 | 	short ev_flags;
118 | 	ev_uint8_t ev_pri;	/* smaller numbers are higher priority */
119 | 	ev_uint8_t ev_closure;
120 | 	struct timeval ev_timeout;
121 | 
122 | 	/* allows us to adopt for different types of events */
123 | 	void (*ev_callback)(evutil_socket_t, short, void *arg);
124 | 	void *ev_arg;
125 | };
126 | 
127 | TAILQ_HEAD (event_list, event);
128 | 
129 | #ifdef _EVENT_DEFINED_TQENTRY
130 | #undef TAILQ_ENTRY
131 | #endif
132 | 
133 | #ifdef _EVENT_DEFINED_TQHEAD
134 | #undef TAILQ_HEAD
135 | #endif
136 | 
137 | #ifdef __cplusplus
138 | }
139 | #endif
140 | 
141 | #endif /* _EVENT2_EVENT_STRUCT_H_ */
142 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/http_compat.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVENT2_HTTP_COMPAT_H_
28 | #define _EVENT2_HTTP_COMPAT_H_
29 | 
30 | /** @file event2/http_compat.h
31 | 
32 |   Potentially non-threadsafe versions of the functions in http.h: provided
33 |   only for backwards compatibility.
34 | 
35 |  */
36 | 
37 | #ifdef __cplusplus
38 | extern "C" {
39 | #endif
40 | 
41 | #include <event2/event-config.h>
42 | #ifdef _EVENT_HAVE_SYS_TYPES_H
43 | #include <sys/types.h>
44 | #endif
45 | #ifdef _EVENT_HAVE_SYS_TIME_H
46 | #include <sys/time.h>
47 | #endif
48 | 
49 | /* For int types. */
50 | #include <event2/util.h>
51 | 
52 | /**
53 |  * Start an HTTP server on the specified address and port
54 |  *
55 |  * @deprecated It does not allow an event base to be specified
56 |  *
57 |  * @param address the address to which the HTTP server should be bound
58 |  * @param port the port number on which the HTTP server should listen
59 |  * @return an struct evhttp object
60 |  */
61 | struct evhttp *evhttp_start(const char *address, unsigned short port);
62 | 
63 | /**
64 |  * A connection object that can be used to for making HTTP requests.  The
65 |  * connection object tries to establish the connection when it is given an
66 |  * http request object.
67 |  *
68 |  * @deprecated It does not allow an event base to be specified
69 |  */
70 | struct evhttp_connection *evhttp_connection_new(
71 | 	const char *address, unsigned short port);
72 | 
73 | /**
74 |  * Associates an event base with the connection - can only be called
75 |  * on a freshly created connection object that has not been used yet.
76 |  *
77 |  * @deprecated XXXX Why?
78 |  */
79 | void evhttp_connection_set_base(struct evhttp_connection *evcon,
80 |     struct event_base *base);
81 | 
82 | 
83 | /** Returns the request URI */
84 | #define evhttp_request_uri evhttp_request_get_uri
85 | 
86 | #ifdef __cplusplus
87 | }
88 | #endif
89 | 
90 | #endif /* _EVENT2_EVENT_COMPAT_H_ */
91 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/http_struct.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
  3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
  4 |  *
  5 |  * Redistribution and use in source and binary forms, with or without
  6 |  * modification, are permitted provided that the following conditions
  7 |  * are met:
  8 |  * 1. Redistributions of source code must retain the above copyright
  9 |  *    notice, this list of conditions and the following disclaimer.
 10 |  * 2. Redistributions in binary form must reproduce the above copyright
 11 |  *    notice, this list of conditions and the following disclaimer in the
 12 |  *    documentation and/or other materials provided with the distribution.
 13 |  * 3. The name of the author may not be used to endorse or promote products
 14 |  *    derived from this software without specific prior written permission.
 15 |  *
 16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 26 |  */
 27 | #ifndef _EVENT2_HTTP_STRUCT_H_
 28 | #define _EVENT2_HTTP_STRUCT_H_
 29 | 
 30 | /** @file event2/http_struct.h
 31 | 
 32 |   Data structures for http.  Using these structures may hurt forward
 33 |   compatibility with later versions of Libevent: be careful!
 34 | 
 35 |  */
 36 | 
 37 | #ifdef __cplusplus
 38 | extern "C" {
 39 | #endif
 40 | 
 41 | #include <event2/event-config.h>
 42 | #ifdef _EVENT_HAVE_SYS_TYPES_H
 43 | #include <sys/types.h>
 44 | #endif
 45 | #ifdef _EVENT_HAVE_SYS_TIME_H
 46 | #include <sys/time.h>
 47 | #endif
 48 | 
 49 | /* For int types. */
 50 | #include <event2/util.h>
 51 | 
 52 | /**
 53 |  * the request structure that a server receives.
 54 |  * WARNING: expect this structure to change.  I will try to provide
 55 |  * reasonable accessors.
 56 |  */
 57 | struct evhttp_request {
 58 | #if defined(TAILQ_ENTRY)
 59 | 	TAILQ_ENTRY(evhttp_request) next;
 60 | #else
 61 | struct {
 62 | 	struct evhttp_request *tqe_next;
 63 | 	struct evhttp_request **tqe_prev;
 64 | }       next;
 65 | #endif
 66 | 
 67 | 	/* the connection object that this request belongs to */
 68 | 	struct evhttp_connection *evcon;
 69 | 	int flags;
 70 | /** The request obj owns the evhttp connection and needs to free it */
 71 | #define EVHTTP_REQ_OWN_CONNECTION	0x0001
 72 | /** Request was made via a proxy */
 73 | #define EVHTTP_PROXY_REQUEST		0x0002
 74 | /** The request object is owned by the user; the user must free it */
 75 | #define EVHTTP_USER_OWNED		0x0004
 76 | /** The request will be used again upstack; freeing must be deferred */
 77 | #define EVHTTP_REQ_DEFER_FREE		0x0008
 78 | /** The request should be freed upstack */
 79 | #define EVHTTP_REQ_NEEDS_FREE		0x0010
 80 | 
 81 | 	struct evkeyvalq *input_headers;
 82 | 	struct evkeyvalq *output_headers;
 83 | 
 84 | 	/* address of the remote host and the port connection came from */
 85 | 	char *remote_host;
 86 | 	ev_uint16_t remote_port;
 87 | 
 88 | 	/* cache of the hostname for evhttp_request_get_host */
 89 | 	char *host_cache;
 90 | 
 91 | 	enum evhttp_request_kind kind;
 92 | 	enum evhttp_cmd_type type;
 93 | 
 94 | 	size_t headers_size;
 95 | 	size_t body_size;
 96 | 
 97 | 	char *uri;			/* uri after HTTP request was parsed */
 98 | 	struct evhttp_uri *uri_elems;	/* uri elements */
 99 | 
100 | 	char major;			/* HTTP Major number */
101 | 	char minor;			/* HTTP Minor number */
102 | 
103 | 	int response_code;		/* HTTP Response code */
104 | 	char *response_code_line;	/* Readable response */
105 | 
106 | 	struct evbuffer *input_buffer;	/* read data */
107 | 	ev_int64_t ntoread;
108 | 	unsigned chunked:1,		/* a chunked request */
109 | 	    userdone:1;			/* the user has sent all data */
110 | 
111 | 	struct evbuffer *output_buffer;	/* outgoing post or data */
112 | 
113 | 	/* Callback */
114 | 	void (*cb)(struct evhttp_request *, void *);
115 | 	void *cb_arg;
116 | 
117 | 	/*
118 | 	 * Chunked data callback - call for each completed chunk if
119 | 	 * specified.  If not specified, all the data is delivered via
120 | 	 * the regular callback.
121 | 	 */
122 | 	void (*chunk_cb)(struct evhttp_request *, void *);
123 | };
124 | 
125 | #ifdef __cplusplus
126 | }
127 | #endif
128 | 
129 | #endif /* _EVENT2_HTTP_STRUCT_H_ */
130 | 
131 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/keyvalq_struct.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVENT2_EVENT_KEYVALQ_STRUCT_H_
28 | #define _EVENT2_EVENT_KEYVALQ_STRUCT_H_
29 | 
30 | #ifdef __cplusplus
31 | extern "C" {
32 | #endif
33 | 
34 | /* Fix so that people don't have to run with <sys/queue.h> */
35 | /* XXXX This code is duplicated with event_struct.h */
36 | #ifndef TAILQ_ENTRY
37 | #define _EVENT_DEFINED_TQENTRY
38 | #define TAILQ_ENTRY(type)						\
39 | struct {								\
40 | 	struct type *tqe_next;	/* next element */			\
41 | 	struct type **tqe_prev;	/* address of previous next element */	\
42 | }
43 | #endif /* !TAILQ_ENTRY */
44 | 
45 | #ifndef TAILQ_HEAD
46 | #define _EVENT_DEFINED_TQHEAD
47 | #define TAILQ_HEAD(name, type)			\
48 | struct name {					\
49 | 	struct type *tqh_first;			\
50 | 	struct type **tqh_last;			\
51 | }
52 | #endif
53 | 
54 | /*
55 |  * Key-Value pairs.  Can be used for HTTP headers but also for
56 |  * query argument parsing.
57 |  */
58 | struct evkeyval {
59 | 	TAILQ_ENTRY(evkeyval) next;
60 | 
61 | 	char *key;
62 | 	char *value;
63 | };
64 | 
65 | TAILQ_HEAD (evkeyvalq, evkeyval);
66 | 
67 | /* XXXX This code is duplicated with event_struct.h */
68 | #ifdef _EVENT_DEFINED_TQENTRY
69 | #undef TAILQ_ENTRY
70 | #endif
71 | 
72 | #ifdef _EVENT_DEFINED_TQHEAD
73 | #undef TAILQ_HEAD
74 | #endif
75 | 
76 | #ifdef __cplusplus
77 | }
78 | #endif
79 | 
80 | #endif
81 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/rpc_compat.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2006-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVENT2_RPC_COMPAT_H_
28 | #define _EVENT2_RPC_COMPAT_H_
29 | 
30 | /** @file event2/rpc_compat.h
31 | 
32 |   Deprecated versions of the functions in rpc.h: provided only for
33 |   backwards compatibility.
34 | 
35 |  */
36 | 
37 | #ifdef __cplusplus
38 | extern "C" {
39 | #endif
40 | 
41 | /** backwards compatible accessors that work only with gcc */
42 | #if defined(__GNUC__) && !defined(__STRICT_ANSI__)
43 | 
44 | #undef EVTAG_ASSIGN
45 | #undef EVTAG_GET
46 | #undef EVTAG_ADD
47 | 
48 | #define EVTAG_ASSIGN(msg, member, args...) \
49 | 	(*(msg)->base->member##_assign)(msg, ## args)
50 | #define EVTAG_GET(msg, member, args...) \
51 | 	(*(msg)->base->member##_get)(msg, ## args)
52 | #define EVTAG_ADD(msg, member, args...) \
53 | 	(*(msg)->base->member##_add)(msg, ## args)
54 | #endif
55 | #define EVTAG_LEN(msg, member) ((msg)->member##_length)
56 | 
57 | #ifdef __cplusplus
58 | }
59 | #endif
60 | 
61 | #endif /* _EVENT2_EVENT_COMPAT_H_ */
62 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/rpc_struct.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2006-2007 Niels Provos <provos@citi.umich.edu>
  3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
  4 |  *
  5 |  * Redistribution and use in source and binary forms, with or without
  6 |  * modification, are permitted provided that the following conditions
  7 |  * are met:
  8 |  * 1. Redistributions of source code must retain the above copyright
  9 |  *    notice, this list of conditions and the following disclaimer.
 10 |  * 2. Redistributions in binary form must reproduce the above copyright
 11 |  *    notice, this list of conditions and the following disclaimer in the
 12 |  *    documentation and/or other materials provided with the distribution.
 13 |  * 3. The name of the author may not be used to endorse or promote products
 14 |  *    derived from this software without specific prior written permission.
 15 |  *
 16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 26 |  */
 27 | #ifndef _EVENT2_RPC_STRUCT_H_
 28 | #define _EVENT2_RPC_STRUCT_H_
 29 | 
 30 | #ifdef __cplusplus
 31 | extern "C" {
 32 | #endif
 33 | 
 34 | /** @file event2/rpc_struct.h
 35 | 
 36 |   Structures used by rpc.h.  Using these structures directly may harm
 37 |   forward compatibility: be careful!
 38 | 
 39 |  */
 40 | 
 41 | /**
 42 |  * provides information about the completed RPC request.
 43 |  */
 44 | struct evrpc_status {
 45 | #define EVRPC_STATUS_ERR_NONE		0
 46 | #define EVRPC_STATUS_ERR_TIMEOUT	1
 47 | #define EVRPC_STATUS_ERR_BADPAYLOAD	2
 48 | #define EVRPC_STATUS_ERR_UNSTARTED	3
 49 | #define EVRPC_STATUS_ERR_HOOKABORTED	4
 50 | 	int error;
 51 | 
 52 | 	/* for looking at headers or other information */
 53 | 	struct evhttp_request *http_req;
 54 | };
 55 | 
 56 | /* the structure below needs to be synchronized with evrpc_req_generic */
 57 | 
 58 | /* Encapsulates a request */
 59 | struct evrpc {
 60 | 	TAILQ_ENTRY(evrpc) next;
 61 | 
 62 | 	/* the URI at which the request handler lives */
 63 | 	const char* uri;
 64 | 
 65 | 	/* creates a new request structure */
 66 | 	void *(*request_new)(void *);
 67 | 	void *request_new_arg;
 68 | 
 69 | 	/* frees the request structure */
 70 | 	void (*request_free)(void *);
 71 | 
 72 | 	/* unmarshals the buffer into the proper request structure */
 73 | 	int (*request_unmarshal)(void *, struct evbuffer *);
 74 | 
 75 | 	/* creates a new reply structure */
 76 | 	void *(*reply_new)(void *);
 77 | 	void *reply_new_arg;
 78 | 
 79 | 	/* frees the reply structure */
 80 | 	void (*reply_free)(void *);
 81 | 
 82 | 	/* verifies that the reply is valid */
 83 | 	int (*reply_complete)(void *);
 84 | 
 85 | 	/* marshals the reply into a buffer */
 86 | 	void (*reply_marshal)(struct evbuffer*, void *);
 87 | 
 88 | 	/* the callback invoked for each received rpc */
 89 | 	void (*cb)(struct evrpc_req_generic *, void *);
 90 | 	void *cb_arg;
 91 | 
 92 | 	/* reference for further configuration */
 93 | 	struct evrpc_base *base;
 94 | };
 95 | 
 96 | #ifdef __cplusplus
 97 | }
 98 | #endif
 99 | 
100 | #endif /* _EVENT2_RPC_STRUCT_H_ */
101 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/include/event2/tag_compat.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _EVENT2_TAG_COMPAT_H_
28 | #define _EVENT2_TAG_COMPAT_H_
29 | 
30 | /** @file event2/tag_compat.h
31 | 
32 |     Obsolete/deprecated functions from tag.h; provided only for backwards
33 |     compatibility.
34 |  */
35 | 
36 | /**
37 |    @name Misnamed functions
38 | 
39 |    @deprecated These macros are deprecated because their names don't follow
40 |      Libevent's naming conventions.  Use evtag_encode_int and
41 |      evtag_encode_int64 instead.
42 | 
43 |    @{
44 | */
45 | #define encode_int(evbuf, number) evtag_encode_int((evbuf), (number))
46 | #define encode_int64(evbuf, number) evtag_encode_int64((evbuf), (number))
47 | /**@}*/
48 | 
49 | #endif /* _EVENT2_TAG_H_ */
50 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/ipv6-internal.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson
 3 |  *
 4 |  * Redistribution and use in source and binary forms, with or without
 5 |  * modification, are permitted provided that the following conditions
 6 |  * are met:
 7 |  * 1. Redistributions of source code must retain the above copyright
 8 |  *    notice, this list of conditions and the following disclaimer.
 9 |  * 2. Redistributions in binary form must reproduce the above copyright
10 |  *    notice, this list of conditions and the following disclaimer in the
11 |  *    documentation and/or other materials provided with the distribution.
12 |  * 3. The name of the author may not be used to endorse or promote products
13 |  *    derived from this software without specific prior written permission.
14 |  *
15 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 |  */
26 | 
27 | /* Internal use only: Fake IPv6 structures and values on platforms that
28 |  * do not have them */
29 | 
30 | #ifndef _EVENT_IPV6_INTERNAL_H
31 | #define _EVENT_IPV6_INTERNAL_H
32 | 
33 | #include <sys/types.h>
34 | #ifdef _EVENT_HAVE_SYS_SOCKET_H
35 | #include <sys/socket.h>
36 | #endif
37 | #include "event2/event-config.h"
38 | #include "event2/util.h"
39 | 
40 | #ifdef __cplusplus
41 | extern "C" {
42 | #endif
43 | 
44 | /** @file ipv6-internal.h
45 |  *
46 |  * Replacement types and functions for platforms that don't support ipv6
47 |  * properly.
48 |  */
49 | 
50 | #ifndef _EVENT_HAVE_STRUCT_IN6_ADDR
51 | struct in6_addr {
52 | 	ev_uint8_t s6_addr[16];
53 | };
54 | #endif
55 | 
56 | #ifndef _EVENT_HAVE_SA_FAMILY_T
57 | typedef int sa_family_t;
58 | #endif
59 | 
60 | #ifndef _EVENT_HAVE_STRUCT_SOCKADDR_IN6
61 | struct sockaddr_in6 {
62 | 	/* This will fail if we find a struct sockaddr that doesn't have
63 | 	 * sa_family as the first element. */
64 | 	sa_family_t sin6_family;
65 | 	ev_uint16_t sin6_port;
66 | 	struct in6_addr sin6_addr;
67 | };
68 | #endif
69 | 
70 | #ifndef AF_INET6
71 | #define AF_INET6 3333
72 | #endif
73 | #ifndef PF_INET6
74 | #define PF_INET6 AF_INET6
75 | #endif
76 | 
77 | #ifdef __cplusplus
78 | }
79 | #endif
80 | 
81 | #endif
82 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/log-internal.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
 3 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 4 |  *
 5 |  * Redistribution and use in source and binary forms, with or without
 6 |  * modification, are permitted provided that the following conditions
 7 |  * are met:
 8 |  * 1. Redistributions of source code must retain the above copyright
 9 |  *    notice, this list of conditions and the following disclaimer.
10 |  * 2. Redistributions in binary form must reproduce the above copyright
11 |  *    notice, this list of conditions and the following disclaimer in the
12 |  *    documentation and/or other materials provided with the distribution.
13 |  * 3. The name of the author may not be used to endorse or promote products
14 |  *    derived from this software without specific prior written permission.
15 |  *
16 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |  */
27 | #ifndef _LOG_H_
28 | #define _LOG_H_
29 | 
30 | #include "event2/util.h"
31 | 
32 | #ifdef __GNUC__
33 | #define EV_CHECK_FMT(a,b) __attribute__((format(printf, a, b)))
34 | #define EV_NORETURN __attribute__((noreturn))
35 | #else
36 | #define EV_CHECK_FMT(a,b)
37 | #define EV_NORETURN
38 | #endif
39 | 
40 | #define _EVENT_ERR_ABORT ((int)0xdeaddead)
41 | 
42 | void event_err(int eval, const char *fmt, ...) EV_CHECK_FMT(2,3) EV_NORETURN;
43 | void event_warn(const char *fmt, ...) EV_CHECK_FMT(1,2);
44 | void event_sock_err(int eval, evutil_socket_t sock, const char *fmt, ...) EV_CHECK_FMT(3,4) EV_NORETURN;
45 | void event_sock_warn(evutil_socket_t sock, const char *fmt, ...) EV_CHECK_FMT(2,3);
46 | void event_errx(int eval, const char *fmt, ...) EV_CHECK_FMT(2,3) EV_NORETURN;
47 | void event_warnx(const char *fmt, ...) EV_CHECK_FMT(1,2);
48 | void event_msgx(const char *fmt, ...) EV_CHECK_FMT(1,2);
49 | void _event_debugx(const char *fmt, ...) EV_CHECK_FMT(1,2);
50 | 
51 | #ifdef USE_DEBUG
52 | #define event_debug(x) _event_debugx x
53 | #else
54 | #define event_debug(x) do {;} while (0)
55 | #endif
56 | 
57 | #undef EV_CHECK_FMT
58 | 
59 | #endif
60 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/mm-internal.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
 3 |  *
 4 |  * Redistribution and use in source and binary forms, with or without
 5 |  * modification, are permitted provided that the following conditions
 6 |  * are met:
 7 |  * 1. Redistributions of source code must retain the above copyright
 8 |  *    notice, this list of conditions and the following disclaimer.
 9 |  * 2. Redistributions in binary form must reproduce the above copyright
10 |  *    notice, this list of conditions and the following disclaimer in the
11 |  *    documentation and/or other materials provided with the distribution.
12 |  * 3. The name of the author may not be used to endorse or promote products
13 |  *    derived from this software without specific prior written permission.
14 |  *
15 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 |  */
26 | #ifndef _EVENT_MM_INTERNAL_H
27 | #define _EVENT_MM_INTERNAL_H
28 | 
29 | #include <sys/types.h>
30 | 
31 | #ifdef __cplusplus
32 | extern "C" {
33 | #endif
34 | 
35 | #ifndef _EVENT_DISABLE_MM_REPLACEMENT
36 | /* Internal use only: Memory allocation functions. We give them nice short
37 |  * mm_names for our own use, but make sure that the symbols have longer names
38 |  * so they don't conflict with other libraries (like, say, libmm). */
39 | void *event_mm_malloc_(size_t sz);
40 | void *event_mm_calloc_(size_t count, size_t size);
41 | char *event_mm_strdup_(const char *s);
42 | void *event_mm_realloc_(void *p, size_t sz);
43 | void event_mm_free_(void *p);
44 | #define mm_malloc(sz) event_mm_malloc_(sz)
45 | #define mm_calloc(count, size) event_mm_calloc_((count), (size))
46 | #define mm_strdup(s) event_mm_strdup_(s)
47 | #define mm_realloc(p, sz) event_mm_realloc_((p), (sz))
48 | #define mm_free(p) event_mm_free_(p)
49 | #else
50 | #define mm_malloc(sz) malloc(sz)
51 | #define mm_calloc(n, sz) calloc((n), (sz))
52 | #define mm_strdup(s) strdup(s)
53 | #define mm_realloc(p, sz) realloc((p), (sz))
54 | #define mm_free(p) free(p)
55 | #endif
56 | 
57 | #ifdef __cplusplus
58 | }
59 | #endif
60 | 
61 | #endif
62 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/ratelim-internal.h:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson
  3 |  *
  4 |  * Redistribution and use in source and binary forms, with or without
  5 |  * modification, are permitted provided that the following conditions
  6 |  * are met:
  7 |  * 1. Redistributions of source code must retain the above copyright
  8 |  *    notice, this list of conditions and the following disclaimer.
  9 |  * 2. Redistributions in binary form must reproduce the above copyright
 10 |  *    notice, this list of conditions and the following disclaimer in the
 11 |  *    documentation and/or other materials provided with the distribution.
 12 |  * 3. The name of the author may not be used to endorse or promote products
 13 |  *    derived from this software without specific prior written permission.
 14 |  *
 15 |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 16 |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 17 |  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 18 |  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 19 |  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 20 |  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 21 |  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 22 |  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 23 |  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 24 |  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 25 |  */
 26 | #ifndef _RATELIM_INTERNAL_H_
 27 | #define _RATELIM_INTERNAL_H_
 28 | 
 29 | #ifdef __cplusplus
 30 | extern "C" {
 31 | #endif
 32 | 
 33 | #include "event2/util.h"
 34 | 
 35 | /** A token bucket is an internal structure that tracks how many bytes we are
 36 |  * currently willing to read or write on a given bufferevent or group of
 37 |  * bufferevents */
 38 | struct ev_token_bucket {
 39 | 	/** How many bytes are we willing to read or write right now? These
 40 | 	 * values are signed so that we can do "defecit spending" */
 41 | 	ev_ssize_t read_limit, write_limit;
 42 | 	/** When was this bucket last updated?  Measured in abstract 'ticks'
 43 | 	 * relative to the token bucket configuration. */
 44 | 	ev_uint32_t last_updated;
 45 | };
 46 | 
 47 | /** Configuration info for a token bucket or set of token buckets. */
 48 | struct ev_token_bucket_cfg {
 49 | 	/** How many bytes are we willing to read on average per tick? */
 50 | 	size_t read_rate;
 51 | 	/** How many bytes are we willing to read at most in any one tick? */
 52 | 	size_t read_maximum;
 53 | 	/** How many bytes are we willing to write on average per tick? */
 54 | 	size_t write_rate;
 55 | 	/** How many bytes are we willing to write at most in any one tick? */
 56 | 	size_t write_maximum;
 57 | 
 58 | 	/* How long is a tick?  Note that fractions of a millisecond are
 59 | 	 * ignored. */
 60 | 	struct timeval tick_timeout;
 61 | 
 62 | 	/* How long is a tick, in milliseconds?  Derived from tick_timeout. */
 63 | 	unsigned msec_per_tick;
 64 | };
 65 | 
 66 | /** The current tick is 'current_tick': add bytes to 'bucket' as specified in
 67 |  * 'cfg'. */
 68 | int ev_token_bucket_update(struct ev_token_bucket *bucket,
 69 |     const struct ev_token_bucket_cfg *cfg,
 70 |     ev_uint32_t current_tick);
 71 | 
 72 | /** In which tick does 'tv' fall according to 'cfg'?  Note that ticks can
 73 |  * overflow easily; your code needs to handle this. */
 74 | ev_uint32_t ev_token_bucket_get_tick(const struct timeval *tv,
 75 |     const struct ev_token_bucket_cfg *cfg);
 76 | 
 77 | /** Adjust 'bucket' to respect 'cfg', and note that it was last updated in
 78 |  * 'current_tick'.  If 'reinitialize' is true, we are changing the
 79 |  * configuration of 'bucket'; otherwise, we are setting it up for the first
 80 |  * time.
 81 |  */
 82 | int ev_token_bucket_init(struct ev_token_bucket *bucket,
 83 |     const struct ev_token_bucket_cfg *cfg,
 84 |     ev_uint32_t current_tick,
 85 |     int reinitialize);
 86 | 
 87 | int bufferevent_remove_from_rate_limit_group_internal(struct bufferevent *bev,
 88 |     int unsuspend);
 89 | 
 90 | /** Decrease the read limit of 'b' by 'n' bytes */
 91 | #define ev_token_bucket_decrement_read(b,n)	\
 92 | 	do {					\
 93 | 		(b)->read_limit -= (n);		\
 94 | 	} while (0)
 95 | /** Decrease the write limit of 'b' by 'n' bytes */
 96 | #define ev_token_bucket_decrement_write(b,n)	\
 97 | 	do {					\
 98 | 		(b)->write_limit -= (n);	\
 99 | 	} while (0)
100 | 
101 | #ifdef __cplusplus
102 | }
103 | #endif
104 | 
105 | #endif
106 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/strlcpy-internal.h:
--------------------------------------------------------------------------------
 1 | #ifndef _STRLCPY_INTERNAL_H_
 2 | #define _STRLCPY_INTERNAL_H_
 3 | 
 4 | #ifdef __cplusplus
 5 | extern "C" {
 6 | #endif
 7 | 
 8 | #include "event2/event-config.h"
 9 | 
10 | #ifndef _EVENT_HAVE_STRLCPY
11 | #include <string.h>
12 | size_t _event_strlcpy(char *dst, const char *src, size_t siz);
13 | #define strlcpy _event_strlcpy
14 | #endif
15 | 
16 | #ifdef __cplusplus
17 | }
18 | #endif
19 | 
20 | #endif
21 | 
22 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/libevent/strlcpy.c:
--------------------------------------------------------------------------------
 1 | /*	$OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $	*/
 2 | 
 3 | /*
 4 |  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
 5 |  * All rights reserved.
 6 |  *
 7 |  * Redistribution and use in source and binary forms, with or without
 8 |  * modification, are permitted provided that the following conditions
 9 |  * are met:
10 |  * 1. Redistributions of source code must retain the above copyright
11 |  *    notice, this list of conditions and the following disclaimer.
12 |  * 2. Redistributions in binary form must reproduce the above copyright
13 |  *    notice, this list of conditions and the following disclaimer in the
14 |  *    documentation and/or other materials provided with the distribution.
15 |  * 3. The name of the author may not be used to endorse or promote products
16 |  *    derived from this software without specific prior written permission.
17 |  *
18 |  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19 |  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
20 |  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
21 |  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 |  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 |  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24 |  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 |  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26 |  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27 |  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 |  */
29 | 
30 | #if defined(LIBC_SCCS) && !defined(lint)
31 | static char *rcsid = "$OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp 
quot;;
32 | #endif /* LIBC_SCCS and not lint */
33 | 
34 | #include <sys/types.h>
35 | 
36 | #include "event2/event-config.h"
37 | 
38 | #ifndef _EVENT_HAVE_STRLCPY
39 | #include "strlcpy-internal.h"
40 | 
41 | /*
42 |  * Copy src to string dst of size siz.  At most siz-1 characters
43 |  * will be copied.  Always NUL terminates (unless siz == 0).
44 |  * Returns strlen(src); if retval >= siz, truncation occurred.
45 |  */
46 | size_t
47 | _event_strlcpy(dst, src, siz)
48 | 	char *dst;
49 | 	const char *src;
50 | 	size_t siz;
51 | {
52 | 	register char *d = dst;
53 | 	register const char *s = src;
54 | 	register size_t n = siz;
55 | 
56 | 	/* Copy as many bytes as will fit */
57 | 	if (n != 0 && --n != 0) {
58 | 		do {
59 | 			if ((*d++ = *s++) == 0)
60 | 				break;
61 | 		} while (--n != 0);
62 | 	}
63 | 
64 | 	/* Not enough room in dst, add NUL and traverse rest of src */
65 | 	if (n == 0) {
66 | 		if (siz != 0)
67 | 			*d = '\0';		/* NUL-terminate dst */
68 | 		while (*s++)
69 | 			;
70 | 	}
71 | 
72 | 	return (s - src - 1);	/* count does not include NUL */
73 | }
74 | #endif
75 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | add_executable(redsocks
 2 |         base.c dnstc.c http-connect.c
 3 |         log.c md5.c socks5.c
 4 |         base64.c http-auth.c http-relay.c main.c
 5 |         parser.c redsocks.c socks4.c utils.c
 6 |         )
 7 | 
 8 | target_include_directories(redsocks
 9 |         PUBLIC
10 |         ${CMAKE_SOURCE_DIR}/libevent
11 |         ${CMAKE_SOURCE_DIR}/libevent/include
12 |         )
13 | 
14 | # Include libraries needed for exec lib
15 | target_link_libraries(redsocks
16 |         event
17 |         android
18 |         dl
19 |         log)
20 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/base.h:
--------------------------------------------------------------------------------
1 | #ifndef BASE_H_SUN_JUN__3_20_15_57_2007
2 | #define BASE_H_SUN_JUN__3_20_15_57_2007
3 | 
4 | int getdestaddr(int fd, const struct sockaddr_in *client, const struct sockaddr_in *bindaddr, struct sockaddr_in *destaddr);
5 | 
6 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
7 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
8 | #endif /* BASE_H_SUN_JUN__3_20_15_57_2007 */
9 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/base64.c:
--------------------------------------------------------------------------------
  1 | /*
  2 |  * Copyright (c) 2006 Ryan Martell. (rdm4@martellventures.com)
  3 |  *
  4 |  * This file is part of FFmpeg.
  5 |  *
  6 |  * FFmpeg is free software; you can redistribute it and/or
  7 |  * modify it under the terms of the GNU Lesser General Public
  8 |  * License as published by the Free Software Foundation; either
  9 |  * version 2.1 of the License, or (at your option) any later version.
 10 |  *
 11 |  * FFmpeg is distributed in the hope that it will be useful,
 12 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14 |  * Lesser General Public License for more details.
 15 |  *
 16 |  * You should have received a copy of the GNU Lesser General Public
 17 |  * License along with FFmpeg; if not, write to the Free Software
 18 |  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 19 |  */
 20 | 
 21 | /**
 22 |  * @file
 23 |  * @brief Base64 encode/decode
 24 |  * @author Ryan Martell <rdm4@martellventures.com> (with lots of Michael)
 25 |  */
 26 | 
 27 | #include <limits.h>
 28 | #include "utils.h"
 29 | #include "base64.h"
 30 | 
 31 | /* ---------------- private code */
 32 | static const uint8_t map2[] =
 33 | {
 34 |     0x3e, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x35, 0x36,
 35 |     0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xff,
 36 |     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01,
 37 |     0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
 38 |     0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11,
 39 |     0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
 40 |     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x1b,
 41 |     0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
 42 |     0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
 43 |     0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33
 44 | };
 45 | 
 46 | int base64_decode(uint8_t *out, const char *in, int out_size)
 47 | {
 48 |     int i, v;
 49 |     uint8_t *dst = out;
 50 | 
 51 |     v = 0;
 52 |     for (i = 0; in[i] && in[i] != '='; i++) {
 53 |         unsigned int index= in[i]-43;
 54 |         if (index>=SIZEOF_ARRAY(map2) || map2[index] == 0xff)
 55 |             return -1;
 56 |         v = (v << 6) + map2[index];
 57 |         if (i & 3) {
 58 |             if (dst - out < out_size) {
 59 |                 *dst++ = v >> (6 - 2 * (i & 3));
 60 |             }
 61 |         }
 62 |     }
 63 | 
 64 |     return dst - out;
 65 | }
 66 | 
 67 | /*****************************************************************************
 68 | * b64_encode: Stolen from VLC's http.c.
 69 | * Simplified by Michael.
 70 | * Fixed edge cases and made it work from data (vs. strings) by Ryan.
 71 | *****************************************************************************/
 72 | 
 73 | char *base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
 74 | {
 75 |     static const char b64[] =
 76 |         "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 77 |     char *ret, *dst;
 78 |     unsigned i_bits = 0;
 79 |     int i_shift = 0;
 80 |     int bytes_remaining = in_size;
 81 | 
 82 |     if (in_size >= UINT_MAX / 4 ||
 83 |         out_size < BASE64_SIZE(in_size))
 84 |         return NULL;
 85 |     ret = dst = out;
 86 |     while (bytes_remaining) {
 87 |         i_bits = (i_bits << 8) + *in++;
 88 |         bytes_remaining--;
 89 |         i_shift += 8;
 90 | 
 91 |         do {
 92 |             *dst++ = b64[(i_bits << 6 >> i_shift) & 0x3f];
 93 |             i_shift -= 6;
 94 |         } while (i_shift > 6 || (bytes_remaining == 0 && i_shift > 0));
 95 |     }
 96 |     while ((dst - ret) & 3)
 97 |         *dst++ = '=';
 98 |     *dst = '\0';
 99 | 
100 |     return ret;
101 | }
102 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/base64.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2006 Ryan Martell. (rdm4@martellventures.com)
 3 |  *
 4 |  * This file is part of FFmpeg.
 5 |  *
 6 |  * FFmpeg is free software; you can redistribute it and/or
 7 |  * modify it under the terms of the GNU Lesser General Public
 8 |  * License as published by the Free Software Foundation; either
 9 |  * version 2.1 of the License, or (at your option) any later version.
10 |  *
11 |  * FFmpeg is distributed in the hope that it will be useful,
12 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 |  * Lesser General Public License for more details.
15 |  *
16 |  * You should have received a copy of the GNU Lesser General Public
17 |  * License along with FFmpeg; if not, write to the Free Software
18 |  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 |  */
20 | 
21 | #ifndef BASE64_H
22 | #define BASE64_H
23 | 
24 | #include <stdint.h>
25 | 
26 | /**
27 |  * Decode a base64-encoded string.
28 |  *
29 |  * @param out      buffer for decoded data
30 |  * @param in       null-terminated input string
31 |  * @param out_size size in bytes of the out buffer, must be at
32 |  *                 least 3/4 of the length of in
33 |  * @return         number of bytes written, or a negative value in case of
34 |  *                 invalid input
35 |  */
36 | int base64_decode(uint8_t *out, const char *in, int out_size);
37 | 
38 | /**
39 |  * Encode data to base64 and null-terminate.
40 |  *
41 |  * @param out      buffer for encoded data
42 |  * @param out_size size in bytes of the output buffer, must be at
43 |  *                 least BASE64_SIZE(in_size)
44 |  * @param in_size  size in bytes of the 'in' buffer
45 |  * @return         'out' or NULL in case of error
46 |  */
47 | char *base64_encode(char *out, int out_size, const uint8_t *in, int in_size);
48 | 
49 | /**
50 |  * Calculate the output size needed to base64-encode x bytes.
51 |  */
52 | #define BASE64_SIZE(x)  (((x)+2) / 3 * 4 + 1)
53 | 
54 | #endif /* BASE64_H */
55 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/config.h:
--------------------------------------------------------------------------------
1 | #define USE_IPTABLES
2 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/dnstc.h:
--------------------------------------------------------------------------------
 1 | #ifndef DNSTC_H
 2 | #define DNSTC_H
 3 | 
 4 | typedef struct dnstc_config_t {
 5 | 	struct sockaddr_in bindaddr;
 6 | } dnstc_config;
 7 | 
 8 | typedef struct dnstc_instance_t {
 9 | 	list_head       list;
10 | 	dnstc_config    config;
11 | 	struct event    listener;
12 | } dnstc_instance;
13 | 
14 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
15 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
16 | #endif /* REDUDP_H */
17 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/http-auth.h:
--------------------------------------------------------------------------------
 1 | #ifndef HTTP_AUTH_H
 2 | #define HTTP_AUTH_H
 3 | 
 4 | typedef struct http_auth_t {
 5 | 	char *last_auth_query;
 6 | 	int last_auth_count;
 7 | } http_auth;
 8 | 
 9 | /*
10 |  * Create the authentication header contents for the `Basic' scheme.
11 |  * This is done by encoding the string "USER:PASS" to base64 and
12 |  * prepending the string "Basic " in front of it.
13 |  *
14 |  */
15 | 
16 | char* basic_authentication_encode(const char *user, const char *passwd);
17 | 
18 | /*
19 |  * Create the authentication header contents for the 'Digest' scheme.
20 |  * only md5 method is available, see RFC 2617 for detail.
21 |  *
22 |  */
23 | char* digest_authentication_encode(const char *line, const char *user, const char *passwd, 
24 | 		const char *method, const char *path, int count, const char *cnonce);
25 | 
26 | #endif /* HTTP_AUTH_H */
27 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/libc-compat.h:
--------------------------------------------------------------------------------
 1 | #ifndef UUID_67C91670_FCCB_4855_BDF7_609F1EECB8B4
 2 | #define UUID_67C91670_FCCB_4855_BDF7_609F1EECB8B4
 3 | 
 4 | /* all these definitions, are included into bits/in.h from libc6-dev 2.15-0ubuntu10
 5 |  * from Ubuntu 12.04 and is not included into libc6-dev 2.11.1-0ubuntu7.10 from
 6 |  * Ubuntu 10.04.
 7 |  * linux/in.h is not included directly because of lots of redefinitions,
 8 |  * extracting single value from linux/in.h is not done because it looks like
 9 |  * autotools reinvention */
10 | #ifndef IP_ORIGDSTADDR
11 | #   warning Using hardcoded value for IP_ORIGDSTADDR as libc headers do not define it.
12 | #   define IP_ORIGDSTADDR 20
13 | #endif
14 | 
15 | #ifndef IP_RECVORIGDSTADDR
16 | #   warning Using hardcoded value for IP_RECVORIGDSTADDR as libc headers do not define it.
17 | #   define IP_RECVORIGDSTADDR IP_ORIGDSTADDR
18 | #endif
19 | 
20 | #ifndef IP_TRANSPARENT
21 | #   warning Using hardcoded value for IP_TRANSPARENT as libc headers do not define it.
22 | #   define IP_TRANSPARENT 19
23 | #endif
24 | 
25 | #endif // 67C91670_FCCB_4855_BDF7_609F1EECB8B4
26 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/libevent-compat.h:
--------------------------------------------------------------------------------
 1 | #ifndef UUID_FC148CFA_5ECC_488E_8A62_CD39406C9F1E
 2 | #define UUID_FC148CFA_5ECC_488E_8A62_CD39406C9F1E
 3 | 
 4 | /* evutil_socket_t is macros in libevent-2.0, not typedef, libevent-1.4 is
 5 |  * still supported because of Ubuntu 10.04 LTS */
 6 | #ifndef evutil_socket_t
 7 | #   warning Using hardcoded value for evutil_socket_t as libevent headers do not define it.
 8 | #   define evutil_socket_t int
 9 | #endif
10 | 
11 | #endif // FC148CFA_5ECC_488E_8A62_CD39406C9F1E
12 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/log.h:
--------------------------------------------------------------------------------
 1 | #ifndef LOG_H_WED_JAN_24_18_21_27_2007
 2 | #define LOG_H_WED_JAN_24_18_21_27_2007
 3 | 
 4 | #include <stdarg.h>
 5 | #include <stdbool.h>
 6 | #include <syslog.h>
 7 | 
 8 | #define log_errno(prio, msg...) _log_write(__FILE__, __LINE__, __func__, 1, prio, ## msg)
 9 | #define log_error(prio, msg...) _log_write(__FILE__, __LINE__, __func__, 0, prio, ## msg)
10 | 
11 | int log_preopen(const char *dst, bool log_debug, bool log_info);
12 | void log_open();
13 | 
14 | void _log_vwrite(const char *file, int line, const char *func, int do_errno, int priority, const char *fmt, va_list ap);
15 | 
16 | void _log_write(const char *file, int line, const char *func, int do_errno, int priority, const char *fmt, ...)
17 | #if defined(__GNUC__)
18 | 	__attribute__ (( format (printf, 6, 7) ))
19 | #endif
20 | ;
21 | 
22 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
23 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
24 | #endif /* LOG_H_WED_JAN_24_18_21_27_2007 */
25 | 
26 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/main.h:
--------------------------------------------------------------------------------
 1 | #ifndef MAIN_H_TUE_JAN_23_15_38_25_2007
 2 | #define MAIN_H_TUE_JAN_23_15_38_25_2007
 3 | 
 4 | #include "parser.h"
 5 | 
 6 | typedef struct app_subsys_t {
 7 | 	int (*init)();
 8 | 	int (*fini)();
 9 | 	parser_section* conf_section;
10 | } app_subsys;
11 | 
12 | #define SIZEOF_ARRAY(arr)        (sizeof(arr) / sizeof(arr[0]))
13 | #define FOREACH(ptr, array)      for (ptr = array; ptr < array + SIZEOF_ARRAY(array); ptr++)
14 | #define FOREACH_REV(ptr, array)  for (ptr = array + SIZEOF_ARRAY(array) - 1; ptr >= array; ptr--)
15 | 
16 | 
17 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
18 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
19 | #endif /* MAIN_H_TUE_JAN_23_15_38_25_2007 */
20 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/md5.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |   Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.
 3 | 
 4 |   This software is provided 'as-is', without any express or implied
 5 |   warranty.  In no event will the authors be held liable for any damages
 6 |   arising from the use of this software.
 7 | 
 8 |   Permission is granted to anyone to use this software for any purpose,
 9 |   including commercial applications, and to alter it and redistribute it
10 |   freely, subject to the following restrictions:
11 | 
12 |   1. The origin of this software must not be misrepresented; you must not
13 |      claim that you wrote the original software. If you use this software
14 |      in a product, an acknowledgment in the product documentation would be
15 |      appreciated but is not required.
16 |   2. Altered source versions must be plainly marked as such, and must not be
17 |      misrepresented as being the original software.
18 |   3. This notice may not be removed or altered from any source distribution.
19 | 
20 |   L. Peter Deutsch
21 |   ghost@aladdin.com
22 | 
23 |  */
24 | /* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */
25 | /*
26 |   Independent implementation of MD5 (RFC 1321).
27 | 
28 |   This code implements the MD5 Algorithm defined in RFC 1321, whose
29 |   text is available at
30 | 	http://www.ietf.org/rfc/rfc1321.txt
31 |   The code is derived from the text of the RFC, including the test suite
32 |   (section A.5) but excluding the rest of Appendix A.  It does not include
33 |   any code or documentation that is identified in the RFC as being
34 |   copyrighted.
35 | 
36 |   The original and principal author of md5.h is L. Peter Deutsch
37 |   <ghost@aladdin.com>.  Other authors are noted in the change history
38 |   that follows (in reverse chronological order):
39 | 
40 |   2002-04-13 lpd Removed support for non-ANSI compilers; removed
41 | 	references to Ghostscript; clarified derivation from RFC 1321;
42 | 	now handles byte order either statically or dynamically.
43 |   1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
44 |   1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
45 | 	added conditionalization for C++ compilation from Martin
46 | 	Purschke <purschke@bnl.gov>.
47 |   1999-05-03 lpd Original version.
48 |  */
49 | 
50 | #ifndef md5_INCLUDED
51 | #  define md5_INCLUDED
52 | 
53 | /*
54 |  * This package supports both compile-time and run-time determination of CPU
55 |  * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
56 |  * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
57 |  * defined as non-zero, the code will be compiled to run only on big-endian
58 |  * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
59 |  * run on either big- or little-endian CPUs, but will run slightly less
60 |  * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
61 |  */
62 | 
63 | typedef unsigned char md5_byte_t; /* 8-bit byte */
64 | typedef unsigned int md5_word_t; /* 32-bit word */
65 | 
66 | /* Define the state of the MD5 Algorithm. */
67 | typedef struct md5_state_s {
68 |     md5_word_t count[2];	/* message length in bits, lsw first */
69 |     md5_word_t abcd[4];		/* digest buffer */
70 |     md5_byte_t buf[64];		/* accumulate block */
71 | } md5_state_t;
72 | 
73 | #ifdef __cplusplus
74 | extern "C" 
75 | {
76 | #endif
77 | 
78 | /* Initialize the algorithm. */
79 | void md5_init(md5_state_t *pms);
80 | 
81 | /* Append a string to the message. */
82 | void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
83 | 
84 | /* Finish the message and return the digest. */
85 | void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
86 | 
87 | #ifdef __cplusplus
88 | }  /* end extern "C" */
89 | #endif
90 | 
91 | #endif /* md5_INCLUDED */
92 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/parser.h:
--------------------------------------------------------------------------------
 1 | #ifndef PARSER_H_THU_JAN_11_04_49_38_2007
 2 | #define PARSER_H_THU_JAN_11_04_49_38_2007
 3 | 
 4 | #include <stdio.h>
 5 | #include <stdbool.h>
 6 | 
 7 | typedef enum {
 8 | 	pt_bool,      // "bool" from stdbool.h, not "_Bool" or anything else
 9 | 	pt_pchar,
10 | 	pt_uint16,
11 | 	pt_in_addr,
12 | 	pt_in_addr2,  // inaddr[0] = net, inaddr[1] = netmask
13 | } parser_type;
14 | 
15 | typedef struct parser_entry_t {
16 | 	const char    *key;
17 | 	parser_type    type;
18 | 	void          *addr;
19 | } parser_entry;
20 | 
21 | 
22 | typedef struct parser_context_t parser_context;
23 | 
24 | 
25 | typedef struct parser_section_t parser_section;
26 | typedef int  (*parser_section_onenter)(parser_section *section);
27 | typedef int  (*parser_section_onexit)(parser_section *section);
28 | 
29 | struct parser_section_t {
30 | 	parser_section         *next;
31 | 	parser_context         *context;
32 | 	const char             *name;
33 | 	parser_section_onenter  onenter; // is called on entry to section
34 | 	parser_section_onexit   onexit;  // is called on exit from section
35 | 	parser_entry           *entries;
36 | 	void                   *data;
37 | };
38 | 
39 | 
40 | 
41 | typedef void (*parser_errhandler)(const char *errmsg, int line);
42 | 
43 | parser_context* parser_start(FILE *fd, parser_errhandler errhandler);
44 | void parser_add_section(parser_context *context, parser_section *section);
45 | int parser_run(parser_context *context);
46 | void parser_error(parser_context *context, const char *msg);
47 | void parser_stop(parser_context *context);
48 | 
49 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
50 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
51 | #endif /* PARSER_H_THU_JAN_11_04_49_38_2007 */
52 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/reddns.c:
--------------------------------------------------------------------------------
 1 | /* redsocks - transparent TCP-to-proxy redirector
 2 |  * Copyright (C) 2007-2011 Leonid Evdokimov <leon@darkk.net.ru>
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 5 |  * use this file except in compliance with the License.  You may obtain a copy
 6 |  * of the License at
 7 |  *
 8 |  *     http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 |  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
13 |  * License for the specific language governing permissions and limitations
14 |  * under the License.
15 |  */
16 | 
17 | #include <arpa/inet.h>
18 | #include <stdlib.h>
19 | #include <string.h>
20 | #include "parser.h"
21 | #include "main.h"
22 | 
23 | typedef struct reddns_config_t reddns_config;
24 | struct reddns_config_t {
25 | 	struct sockaddr_in bindaddr;
26 | 	struct sockaddr_in relayaddr;
27 | 	struct in_addr     fakenet;
28 | 	struct in_addr     fakenetmask;
29 | };
30 | 
31 | int reddns_onenter(parser_section *section)
32 | {
33 | 	reddns_config *conf = calloc(1, sizeof(reddns_config));
34 | 	section->data = conf;
35 | 	section->entries[0].addr = &conf->bindaddr.sin_port;
36 | 	section->entries[1].addr = &conf->fakenet;
37 | 	section->entries[2].addr = &conf->fakenetmask;
38 | 	section->entries[3].addr = &conf->relayaddr.sin_addr;
39 | 	section->entries[4].addr = &conf->relayaddr.sin_port;
40 | 	fprintf(stderr, "%s\n", __FUNCTION__);
41 | 	return 0;
42 | }
43 | 
44 | int reddns_onexit(parser_section *section)
45 | {
46 | 	reddns_config *conf = section->data;
47 | 	fprintf(stderr,
48 | 			"%s {\n"
49 | 			"local_port = %u;\n"
50 | 			"fakeip_net = %s/%s;\n"
51 | 			"ip = %s;\n"
52 | 			"port = %u;\n"
53 | 			"}\n",
54 | 			__FUNCTION__,
55 | 			conf->bindaddr.sin_port,
56 | 			strdup(inet_ntoa(conf->fakenet)),
57 | 			strdup(inet_ntoa(conf->fakenetmask)),
58 | 			strdup(inet_ntoa(conf->relayaddr.sin_addr)),
59 | 			conf->relayaddr.sin_port
60 | 			);
61 | 	return 0;
62 | }
63 | 
64 | parser_entry reddns_entries[] = {
65 | 	{ .key = "local_port",     .type = pt_uint16 },
66 | 	{ .key = "fakeip_net",     .type = pt_in_addr2 },
67 | 	{ .key = "fakeip_netmask", .type = pt_in_addr },
68 | 	{ .key = "ip",             .type = pt_in_addr },
69 | 	{ .key = "port",           .type = pt_uint16 },
70 | 	{ }
71 | };
72 | 
73 | parser_section reddns_conf_section = {
74 | 	.name    = "reddns",
75 | 	.entries = reddns_entries,
76 | 	.onenter = reddns_onenter,
77 | 	.onexit  = reddns_onexit
78 | };
79 | 
80 | int reddns_init() {
81 | #error It's non-working stub at the moment.
82 | 	return 0;
83 | }
84 | 
85 | int reddns_fini() {
86 | 	return 0;
87 | }
88 | 
89 | app_subsys reddns_subsys = {
90 | 	.init = reddns_init,
91 | 	.fini = reddns_fini,
92 | 	.conf_section = &reddns_conf_section,
93 | };
94 | 
95 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
96 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
97 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/redsocks.h:
--------------------------------------------------------------------------------
  1 | #ifndef REDSOCKS_H_WED_JAN_24_22_17_11_2007
  2 | #define REDSOCKS_H_WED_JAN_24_22_17_11_2007
  3 | #include <sys/time.h>
  4 | #include <sys/types.h>
  5 | #include <netinet/in.h>
  6 | #include <event.h>
  7 | #include "list.h"
  8 | 
  9 | 
 10 | struct redsocks_client_t;
 11 | struct redsocks_instance_t;
 12 | 
 13 | typedef struct relay_subsys_t {
 14 | 	char   *name;
 15 | 	size_t  payload_len; // size of relay-specific data in client section
 16 | 	size_t  instance_payload_len; // size of relay-specify data in instance section
 17 | 	evbuffercb readcb;
 18 | 	evbuffercb writecb;
 19 | 	void       (*init)(struct redsocks_client_t *client);
 20 | 	void       (*fini)(struct redsocks_client_t *client);
 21 | 	void       (*instance_fini)(struct redsocks_instance_t *instance);
 22 | 	// connect_relay (if any) is called instead of redsocks_connect_relay after client connection acceptance
 23 | 	void       (*connect_relay)(struct redsocks_client_t *client);
 24 | } relay_subsys;
 25 | 
 26 | typedef struct redsocks_config_t {
 27 | 	struct sockaddr_in bindaddr;
 28 | 	struct sockaddr_in relayaddr;
 29 | 	char *type;
 30 | 	char *login;
 31 | 	char *password;
 32 | 	uint16_t min_backoff_ms;
 33 | 	uint16_t max_backoff_ms; // backoff capped by 65 seconds is enough :)
 34 | 	uint16_t listenq;
 35 | } redsocks_config;
 36 | 
 37 | struct tracked_event {
 38 | 	struct event ev;
 39 | 	struct timeval inserted;
 40 | };
 41 | 
 42 | typedef struct redsocks_instance_t {
 43 | 	list_head       list;
 44 | 	redsocks_config config;
 45 | 	struct tracked_event listener;
 46 | 	struct tracked_event accept_backoff;
 47 | 	uint16_t        accept_backoff_ms;
 48 | 	list_head       clients;
 49 | 	relay_subsys   *relay_ss;
 50 | } redsocks_instance;
 51 | 
 52 | typedef struct redsocks_client_t {
 53 | 	list_head           list;
 54 | 	redsocks_instance  *instance;
 55 | 	struct bufferevent *client;
 56 | 	struct bufferevent *relay;
 57 | 	struct sockaddr_in  clientaddr;
 58 | 	struct sockaddr_in  destaddr;
 59 | 	int                 state;         // it's used by bottom layer
 60 | 	unsigned short      client_evshut;
 61 | 	unsigned short      relay_evshut;
 62 | 	time_t              first_event;
 63 | 	time_t              last_event;
 64 | } redsocks_client;
 65 | 
 66 | 
 67 | void redsocks_drop_client(redsocks_client *client);
 68 | void redsocks_touch_client(redsocks_client *client);
 69 | void redsocks_connect_relay(redsocks_client *client);
 70 | void redsocks_start_relay(redsocks_client *client);
 71 | 
 72 | typedef int (*size_comparator)(size_t a, size_t b);
 73 | int sizes_equal(size_t a, size_t b);
 74 | int sizes_greater_equal(size_t a, size_t b);
 75 | /** helper for functions when we expect ONLY reply of some size and anything else is error
 76 |  */
 77 | int redsocks_read_expected(redsocks_client *client, struct evbuffer *input, void *data, size_comparator comparator, size_t expected);
 78 | 
 79 | typedef struct evbuffer* (*redsocks_message_maker)(redsocks_client *client);
 80 | typedef struct evbuffer* (*redsocks_message_maker_plain)(void *p);
 81 | struct evbuffer *mkevbuffer(void *data, size_t len);
 82 | /* Yahoo! This code is ex-plain! :-D */
 83 | int redsocks_write_helper_ex_plain(
 84 | 	struct bufferevent *buffev, redsocks_client *client,
 85 | 	redsocks_message_maker_plain mkmessage, void *p, int state, size_t wm_low, size_t wm_high);
 86 | int redsocks_write_helper_ex(
 87 | 	struct bufferevent *buffev, redsocks_client *client,
 88 | 	redsocks_message_maker mkmessage, int state, size_t wm_low, size_t wm_high);
 89 | int redsocks_write_helper(
 90 | 	struct bufferevent *buffev, redsocks_client *client,
 91 | 	redsocks_message_maker mkmessage, int state, size_t wm_only);
 92 | 
 93 | 
 94 | #define redsocks_close(fd) redsocks_close_internal((fd), __FILE__, __LINE__, __func__)
 95 | void redsocks_close_internal(int fd, const char* file, int line, const char *func);
 96 | 
 97 | #define redsocks_log_error(client, prio, msg...) \
 98 | 	redsocks_log_write_plain(__FILE__, __LINE__, __func__, 0, &(client)->clientaddr, &(client)->destaddr, prio, ## msg)
 99 | #define redsocks_log_errno(client, prio, msg...) \
100 | 	redsocks_log_write_plain(__FILE__, __LINE__, __func__, 1, &(client)->clientaddr, &(client)->destaddr, prio, ## msg)
101 | void redsocks_log_write_plain(
102 | 		const char *file, int line, const char *func, int do_errno,
103 | 		const struct sockaddr_in *clientaddr, const struct sockaddr_in *destaddr,
104 | 		int priority, const char *fmt, ...)
105 | #if defined(__GNUC__)
106 | 	__attribute__ (( format (printf, 8, 9) ))
107 | #endif
108 | ;
109 | 
110 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
111 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
112 | #endif /* REDSOCKS_H_WED_JAN_24_22_17_11_2007 */
113 | 
114 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/redudp.h:
--------------------------------------------------------------------------------
 1 | #ifndef REDUDP_H
 2 | #define REDUDP_H
 3 | 
 4 | typedef struct redudp_config_t {
 5 | 	struct sockaddr_in bindaddr;
 6 | 	struct sockaddr_in relayaddr;
 7 | 	// TODO:           outgoingaddr;
 8 | 	struct sockaddr_in destaddr;
 9 | 	char *login;
10 | 	char *password;
11 | 	uint16_t max_pktqueue;
12 | 	uint16_t udp_timeout;
13 | 	uint16_t udp_timeout_stream;
14 | } redudp_config;
15 | 
16 | typedef struct redudp_instance_t {
17 | 	list_head       list;
18 | 	redudp_config   config;
19 | 	struct event    listener;
20 | 	list_head       clients;
21 | } redudp_instance;
22 | 
23 | typedef struct redudp_client_t {
24 | 	list_head           list;
25 | 	redudp_instance    *instance;
26 | 	struct sockaddr_in  clientaddr;
27 | 	struct sockaddr_in  destaddr;
28 | 	int                 sender_fd; // shared between several clients socket (bound to `destaddr`)
29 | 	struct event        timeout;
30 | 	struct bufferevent *relay;
31 | 	struct event        udprelay;
32 | 	struct sockaddr_in  udprelayaddr;
33 | 	int                 state;         // it's used by bottom layer
34 | 	time_t              first_event;
35 | 	time_t              last_client_event;
36 | 	time_t              last_relay_event;
37 | 	unsigned int        queue_len;
38 | 	list_head           queue;
39 | } redudp_client;
40 | 
41 | typedef struct enqueued_packet_t {
42 | 	list_head  list;
43 | 	size_t     len;
44 | 	char       data[1];
45 | } enqueued_packet;
46 | 
47 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
48 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
49 | #endif /* REDUDP_H */
50 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/socks4.c:
--------------------------------------------------------------------------------
  1 | /* redsocks - transparent TCP-to-proxy redirector
  2 |  * Copyright (C) 2007-2011 Leonid Evdokimov <leon@darkk.net.ru>
  3 |  *
  4 |  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5 |  * use this file except in compliance with the License.  You may obtain a copy
  6 |  * of the License at
  7 |  *
  8 |  *     http://www.apache.org/licenses/LICENSE-2.0
  9 |  *
 10 |  * Unless required by applicable law or agreed to in writing, software
 11 |  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 12 |  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 13 |  * License for the specific language governing permissions and limitations
 14 |  * under the License.
 15 |  */
 16 | 
 17 | #include <stdlib.h>
 18 | #include <string.h>
 19 | #include <assert.h>
 20 | #include "log.h"
 21 | #include "redsocks.h"
 22 | 
 23 | typedef enum socks4_state_t {
 24 | 	socks4_new,
 25 | 	socks4_request_sent,
 26 | 	socks4_reply_came,
 27 | 	socks4_MAX,
 28 | } socks4_state;
 29 | 
 30 | typedef struct socks4_req_t {
 31 | 	uint8_t ver;
 32 | 	uint8_t cmd;
 33 | 	uint16_t port;
 34 | 	uint32_t addr;
 35 | 	char login[1]; // we need at least zero-byte
 36 | } PACKED socks4_req;
 37 | 
 38 | const int socks4_ver = 4;
 39 | const int socks4_cmd_connect = 1;
 40 | const int socks4_cmd_bind = 2;
 41 | 
 42 | typedef struct socks4_reply_t {
 43 | 	uint8_t ver;
 44 | 	uint8_t status;
 45 | 	uint16_t port;
 46 | 	uint32_t addr;
 47 | } PACKED socks4_reply;
 48 | 
 49 | const int socks4_status_ok = 90;
 50 | const int socks4_status_fail = 91;
 51 | const int socks4_status_no_ident = 92;
 52 | const int socks4_status_fake_ident = 93;
 53 | 
 54 | 
 55 | void socks4_client_init(redsocks_client *client)
 56 | {
 57 | 	if (client->instance->config.password)
 58 | 		redsocks_log_error(client, LOG_WARNING, "password is ignored for socks4 connections");
 59 | 
 60 | 	client->state = socks4_new;
 61 | }
 62 | 
 63 | 
 64 | static void socks4_read_cb(struct bufferevent *buffev, void *_arg)
 65 | {
 66 | 	redsocks_client *client = _arg;
 67 | 
 68 | 	assert(client->state >= socks4_request_sent);
 69 | 
 70 | 	redsocks_touch_client(client);
 71 | 
 72 | 	if (client->state == socks4_request_sent) {
 73 | 		socks4_reply reply;
 74 | 
 75 | 		if (redsocks_read_expected(client, buffev->input, &reply, sizes_greater_equal, sizeof(reply)) < 0)
 76 | 			return;
 77 | 
 78 | 		client->state = socks4_reply_came;
 79 | 		if (reply.ver != 0) {
 80 | 			redsocks_log_error(client, LOG_NOTICE, "Socks4 server reported unexpected reply version...");
 81 | 			redsocks_drop_client(client);
 82 | 		}
 83 | 		else if (reply.status == socks4_status_ok)
 84 | 			redsocks_start_relay(client);
 85 | 		else {
 86 | 			redsocks_log_error(client, LOG_NOTICE, "Socks4 server status: %s (%i)",
 87 | 				reply.status == socks4_status_fail ? "fail" :
 88 | 				reply.status == socks4_status_no_ident ? "no ident" :
 89 | 				reply.status == socks4_status_fake_ident ? "fake ident" : "?",
 90 | 				reply.status);
 91 | 			redsocks_drop_client(client);
 92 | 		}
 93 | 	}
 94 | }
 95 | 
 96 | static struct evbuffer *socks4_mkconnect(redsocks_client *client)
 97 | {
 98 | 	const redsocks_config *config = &client->instance->config;
 99 | 	const char *username = config->login ? config->login : "";
100 | 	// space for \0 comes from socks4_req->login
101 | 	size_t username_len = strlen(username);
102 | 	size_t len = sizeof(socks4_req) + username_len;
103 | 	socks4_req *req = calloc(1, len);
104 | 
105 | 	req->ver = socks4_ver;
106 | 	req->cmd = socks4_cmd_connect;
107 | 	req->port = client->destaddr.sin_port;
108 | 	req->addr = client->destaddr.sin_addr.s_addr;
109 | 	memcpy(req->login, username, username_len + 1);
110 | 
111 | 	struct evbuffer *ret = mkevbuffer(req, len);
112 | 	free(req);
113 | 	return ret;
114 | }
115 | 
116 | static void socks4_write_cb(struct bufferevent *buffev, void *_arg)
117 | {
118 | 	redsocks_client *client = _arg;
119 | 
120 | 	redsocks_touch_client(client);
121 | 
122 | 	if (client->state == socks4_new) {
123 | 		redsocks_write_helper(
124 | 			buffev, client,
125 | 			socks4_mkconnect, socks4_request_sent, sizeof(socks4_reply)
126 | 			);
127 | 	}
128 | 	else if (client->state >= socks4_request_sent) {
129 | 		bufferevent_disable(buffev, EV_WRITE);
130 | 	}
131 | }
132 | 
133 | 
134 | relay_subsys socks4_subsys =
135 | {
136 | 	.name                 = "socks4",
137 | 	.payload_len          = 0,
138 | 	.instance_payload_len = 0,
139 | 	.readcb               = socks4_read_cb,
140 | 	.writecb              = socks4_write_cb,
141 | 	.init                 = socks4_client_init,
142 | };
143 | 
144 | 
145 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
146 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
147 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/socks5.h:
--------------------------------------------------------------------------------
  1 | #ifndef SOCKS5_H
  2 | #define SOCKS5_H
  3 | 
  4 | #include <stdint.h>
  5 | #include "utils.h"
  6 | 
  7 | typedef struct socks5_method_req_t {
  8 | 	uint8_t ver;
  9 | 	uint8_t num_methods;
 10 | 	uint8_t methods[1]; // at least one
 11 | } PACKED socks5_method_req;
 12 | 
 13 | typedef struct socks5_method_reply_t {
 14 | 	uint8_t ver;
 15 | 	uint8_t method;
 16 | } PACKED socks5_method_reply;
 17 | 
 18 | static const int socks5_ver = 5;
 19 | 
 20 | static const int socks5_auth_none = 0x00;
 21 | static const int socks5_auth_gssapi = 0x01;
 22 | static const int socks5_auth_password = 0x02;
 23 | static const int socks5_auth_invalid = 0xFF;
 24 | 
 25 | typedef struct socks5_auth_reply_t {
 26 | 	uint8_t ver;
 27 | 	uint8_t status;
 28 | } PACKED socks5_auth_reply;
 29 | 
 30 | static const int socks5_password_ver = 0x01;
 31 | static const int socks5_password_passed = 0x00;
 32 | 
 33 | 
 34 | typedef struct socks5_addr_ipv4_t {
 35 | 	uint32_t addr;
 36 | 	uint16_t port;
 37 | } PACKED socks5_addr_ipv4;
 38 | 
 39 | typedef struct socks5_addr_domain_t {
 40 | 	uint8_t size;
 41 | 	uint8_t more[1];
 42 | 	/* uint16_t port; */
 43 | } PACKED socks5_addr_domain;
 44 | 
 45 | typedef struct socks5_addr_ipv6_t {
 46 | 	uint8_t addr[16];
 47 | 	uint16_t port;
 48 | } PACKED socks5_addr_ipv6;
 49 | 
 50 | typedef struct socks5_req_t {
 51 | 	uint8_t ver;
 52 | 	uint8_t cmd;
 53 | 	uint8_t reserved;
 54 | 	uint8_t addrtype;
 55 | 	/* socks5_addr_* */
 56 | } PACKED socks5_req;
 57 | 
 58 | typedef struct socks5_reply_t {
 59 | 	uint8_t ver;
 60 | 	uint8_t status;
 61 | 	uint8_t reserved;
 62 | 	uint8_t addrtype;
 63 | 	/* socks5_addr_* */
 64 | } PACKED socks5_reply;
 65 | 
 66 | typedef struct socks5_udp_preabmle_t {
 67 | 	uint16_t reserved;
 68 | 	uint8_t  frag_no;
 69 | 	uint8_t  addrtype;   /* 0x01 for IPv4 */
 70 | 	/* socks5_addr_* */
 71 | 	socks5_addr_ipv4 ip; /* I support only IPv4 at the moment */
 72 | } PACKED socks5_udp_preabmle;
 73 | 
 74 | static const int socks5_reply_maxlen = 512; // as domain name can't be longer than 256 bytes
 75 | static const int socks5_addrtype_ipv4 = 1;
 76 | static const int socks5_addrtype_domain = 3;
 77 | static const int socks5_addrtype_ipv6 = 4;
 78 | static const int socks5_status_succeeded = 0;
 79 | static const int socks5_status_server_failure = 1;
 80 | static const int socks5_status_connection_not_allowed_by_ruleset = 2;
 81 | static const int socks5_status_Network_unreachable = 3;
 82 | static const int socks5_status_Host_unreachable = 4;
 83 | static const int socks5_status_Connection_refused = 5;
 84 | static const int socks5_status_TTL_expired = 6;
 85 | static const int socks5_status_Command_not_supported = 7;
 86 | static const int socks5_status_Address_type_not_supported = 8;
 87 | 
 88 | 
 89 | const char* socks5_status_to_str(int socks5_status);
 90 | int socks5_is_valid_cred(const char *login, const char *password);
 91 | 
 92 | struct evbuffer *socks5_mkmethods_plain(int do_password);
 93 | struct evbuffer *socks5_mkpassword_plain(const char *login, const char *password);
 94 | const char* socks5_is_known_auth_method(socks5_method_reply *reply, int do_password);
 95 | 
 96 | static const int socks5_cmd_connect = 1;
 97 | static const int socks5_cmd_bind = 2;
 98 | static const int socks5_cmd_udp_associate = 3;
 99 | struct evbuffer *socks5_mkcommand_plain(int socks5_cmd, const struct sockaddr_in *destaddr);
100 | 
101 | 
102 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
103 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
104 | #endif /* SOCKS5_H */
105 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/utils.h:
--------------------------------------------------------------------------------
 1 | #ifndef UTILS_H_SAT_FEB__2_02_24_05_2008
 2 | #define UTILS_H_SAT_FEB__2_02_24_05_2008
 3 | 
 4 | #include <stddef.h>
 5 | #include <time.h>
 6 | #include <event.h>
 7 | 
 8 | struct sockaddr_in;
 9 | 
10 | #define SIZEOF_ARRAY(arr)        (sizeof(arr) / sizeof(arr[0]))
11 | #define FOREACH(ptr, array)      for (ptr = array; ptr < array + SIZEOF_ARRAY(array); ptr++)
12 | #define FOREACH_REV(ptr, array)  for (ptr = array + SIZEOF_ARRAY(array) - 1; ptr >= array; ptr--)
13 | 
14 | #define UNUSED(x)                ((void)(x))
15 | 
16 | #if defined __GNUC__
17 | #define PACKED __attribute__((packed))
18 | #else
19 | #error Unknown compiler, modify utils.h for it
20 | #endif
21 | 
22 | 
23 | /**
24 |  * container_of - cast a member of a structure out to the containing structure
25 |  * @ptr:	the pointer to the member.
26 |  * @type:	the type of the container struct this is embedded in.
27 |  * @member:	the name of the member within the struct.
28 |  *
29 |  */
30 | #define container_of(ptr, type, member) ({			\
31 | 	const typeof( ((type *)0)->member ) *__mptr = (ptr);	\
32 | 	(type *)( (char *)__mptr - offsetof(type,member) );})
33 | 
34 | #define clamp_value(value, min_val, max_val) do { \
35 |        if (value < min_val) \
36 |                value = min_val; \
37 |        if (value > max_val) \
38 |                value = max_val; \
39 | } while (0)
40 | 
41 | 
42 | time_t redsocks_time(time_t *t);
43 | char *redsocks_evbuffer_readline(struct evbuffer *buf);
44 | struct bufferevent* red_connect_relay(struct sockaddr_in *addr, evbuffercb writecb, everrorcb errorcb, void *cbarg);
45 | int red_socket_geterrno(struct bufferevent *buffev);
46 | int red_is_socket_connected_ok(struct bufferevent *buffev);
47 | int red_recv_udp_pkt(int fd, char *buf, size_t buflen, struct sockaddr_in *fromaddr, struct sockaddr_in *toaddr);
48 | 
49 | int fcntl_nonblock(int fd);
50 | 
51 | #define event_fmt_str "%s|%s|%s|%s|%s|0x%x"
52 | #define event_fmt(what) \
53 | 				(what) & EVBUFFER_READ ? "EVBUFFER_READ" : "0", \
54 | 				(what) & EVBUFFER_WRITE ? "EVBUFFER_WRITE" : "0", \
55 | 				(what) & EVBUFFER_EOF ? "EVBUFFER_EOF" : "0", \
56 | 				(what) & EVBUFFER_ERROR ? "EVBUFFER_ERROR" : "0", \
57 | 				(what) & EVBUFFER_TIMEOUT ? "EVBUFFER_TIMEOUT" : "0", \
58 | 				(what) & ~(EVBUFFER_READ|EVBUFFER_WRITE|EVBUFFER_EOF|EVBUFFER_ERROR|EVBUFFER_TIMEOUT)
59 | 
60 | #if INET6_ADDRSTRLEN < INET_ADDRSTRLEN
61 | #	error Impossible happens: INET6_ADDRSTRLEN < INET_ADDRSTRLEN
62 | #else
63 | #	define RED_INET_ADDRSTRLEN (INET6_ADDRSTRLEN + 1 + 5 + 1) // addr + : + port + \0
64 | #endif
65 | char *red_inet_ntop(const struct sockaddr_in* sa, char* buffer, size_t buffer_size);
66 | 
67 | /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
68 | /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
69 | #endif /* UTILS_H_SAT_FEB__2_02_24_05_2008 */
70 | 


--------------------------------------------------------------------------------
/app/src/main/cpp/redsocks/version.h:
--------------------------------------------------------------------------------
1 | #ifndef VERSION_H_SUN_NOV_27_03_22_30_2011
2 | #define VERSION_H_SUN_NOV_27_03_22_30_2011
3 | 
4 | const char* redsocks_version = "0.4";
5 | 
6 | #endif // VERSION_H_SUN_NOV_27_03_22_30_2011
7 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/btr/proxy/selector/pac/PacScriptParser.java:
--------------------------------------------------------------------------------
 1 | package com.btr.proxy.selector.pac;
 2 | 
 3 | /***************************************************************************
 4 |  * Common interface for PAC script parsers.
 5 |  * 
 6 |  * @author Bernd Rosstauscher (proxyvole@rosstauscher.de) Copyright 2009
 7 |  ***************************************************************************/
 8 | public interface PacScriptParser {
 9 | 
10 | 	/***************************************************************************
11 | 	 * Gets the source of the PAC script used by this parser.
12 | 	 * 
13 | 	 * @return a PacScriptSource.
14 | 	 **************************************************************************/
15 | 	public PacScriptSource getScriptSource();
16 | 
17 | 	/*************************************************************************
18 | 	 * Evaluates the given URL and host against the PAC script.
19 | 	 * 
20 | 	 * @param url
21 | 	 *            the URL to evaluate.
22 | 	 * @param host
23 | 	 *            the host name part of the URL.
24 | 	 * @return the script result.
25 | 	 * @throws ProxyEvaluationException
26 | 	 *             on execution error.
27 | 	 ************************************************************************/
28 | 	public String evaluate(String url, String host)
29 | 			throws ProxyEvaluationException;
30 | }
31 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/btr/proxy/selector/pac/PacScriptSource.java:
--------------------------------------------------------------------------------
 1 | package com.btr.proxy.selector.pac;
 2 | 
 3 | import java.io.IOException;
 4 | 
 5 | /*****************************************************************************
 6 |  * An source to fetch the PAC script from.
 7 |  * 
 8 |  * @author Bernd Rosstauscher (proxyvole@rosstauscher.de) Copyright 2009
 9 |  ****************************************************************************/
10 | 
11 | public interface PacScriptSource {
12 | 
13 | 	/*************************************************************************
14 | 	 * Gets the PAC script content as String.
15 | 	 * 
16 | 	 * @return a script.
17 | 	 * @throws IOException
18 | 	 *             on read error.
19 | 	 ************************************************************************/
20 | 
21 | 	public String getScriptContent() throws IOException;
22 | 
23 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/btr/proxy/selector/pac/Proxy.java:
--------------------------------------------------------------------------------
 1 | package com.btr.proxy.selector.pac;
 2 | 
 3 | public class Proxy {
 4 | 
 5 | 	public final static Proxy NO_PROXY = new Proxy(null, 0, null);
 6 | 
 7 | 	public final static String TYPE_HTTP = "http";
 8 | 	public final static String TYPE_HTTPS = "https";
 9 | 	public final static String TYPE_SOCKS4 = "socks4";
10 | 	public final static String TYPE_SOCKS5 = "socks5";
11 | 
12 | 	public String type = "http";
13 | 	public String host = "";
14 | 	public int port = 3128;
15 | 
16 | 	public Proxy(String host, int port, String type) {
17 | 		this.host = host;
18 | 		this.port = port;
19 | 		this.type = type;
20 | 	}
21 | 
22 | }
23 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/btr/proxy/selector/pac/ProxyEvaluationException.java:
--------------------------------------------------------------------------------
 1 | package com.btr.proxy.selector.pac;
 2 | 
 3 | /*****************************************************************************
 4 |  * Exception for PAC script errors.
 5 |  * 
 6 |  * @author Bernd Rosstauscher (proxyvole@rosstauscher.de) Copyright 2009
 7 |  ****************************************************************************/
 8 | 
 9 | public class ProxyEvaluationException extends ProxyException {
10 | 
11 | 	private static final long serialVersionUID = 1L;
12 | 
13 | 	/*************************************************************************
14 | 	 * Constructor
15 | 	 ************************************************************************/
16 | 
17 | 	public ProxyEvaluationException() {
18 | 		super();
19 | 	}
20 | 
21 | 	/*************************************************************************
22 | 	 * Constructor
23 | 	 * 
24 | 	 * @param message
25 | 	 *            the error message.
26 | 	 * @param cause
27 | 	 *            the causing exception for exception chaining.
28 | 	 ************************************************************************/
29 | 
30 | 	public ProxyEvaluationException(String message, Throwable cause) {
31 | 		super(message, cause);
32 | 	}
33 | 
34 | 	/*************************************************************************
35 | 	 * Constructor
36 | 	 * 
37 | 	 * @param message
38 | 	 *            the error message.
39 | 	 ************************************************************************/
40 | 
41 | 	public ProxyEvaluationException(String message) {
42 | 		super(message);
43 | 	}
44 | 
45 | 	/*************************************************************************
46 | 	 * Constructor
47 | 	 * 
48 | 	 * @param cause
49 | 	 *            the causing exception for exception chaining.
50 | 	 ************************************************************************/
51 | 
52 | 	public ProxyEvaluationException(Throwable cause) {
53 | 		super(cause);
54 | 	}
55 | 
56 | }
57 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/btr/proxy/selector/pac/ProxyException.java:
--------------------------------------------------------------------------------
 1 | package com.btr.proxy.selector.pac;
 2 | 
 3 | /*****************************************************************************
 4 |  * Indicates an exception in the proxy framework.
 5 |  * 
 6 |  * @author Bernd Rosstauscher (proxyvole@rosstauscher.de) Copyright 2009
 7 |  ****************************************************************************/
 8 | 
 9 | public class ProxyException extends Exception {
10 | 
11 | 	private static final long serialVersionUID = 1L;
12 | 
13 | 	/*************************************************************************
14 | 	 * Constructor
15 | 	 ************************************************************************/
16 | 
17 | 	public ProxyException() {
18 | 		super();
19 | 	}
20 | 
21 | 	/*************************************************************************
22 | 	 * Constructor
23 | 	 * 
24 | 	 * @param message
25 | 	 *            the error message
26 | 	 * @param cause
27 | 	 *            the causing exception for chaining exceptions.
28 | 	 ************************************************************************/
29 | 
30 | 	public ProxyException(String message, Throwable cause) {
31 | 		super(message, cause);
32 | 	}
33 | 
34 | 	/*************************************************************************
35 | 	 * Constructor
36 | 	 * 
37 | 	 * @param message
38 | 	 *            the error message
39 | 	 ************************************************************************/
40 | 
41 | 	public ProxyException(String message) {
42 | 		super(message);
43 | 	}
44 | 
45 | 	/*************************************************************************
46 | 	 * Constructor
47 | 	 * 
48 | 	 * @param cause
49 | 	 *            the causing exception for chaining exceptions.
50 | 	 ************************************************************************/
51 | 
52 | 	public ProxyException(Throwable cause) {
53 | 		super(cause);
54 | 	}
55 | 
56 | }
57 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/ksmaze/android/preference/ListPreferenceMultiSelect.java:
--------------------------------------------------------------------------------
  1 | /* proxydroid - Global / Individual Proxy App for Android
  2 |  * Copyright (C) 2011 K's Maze <kafkasmaze@gmail.com>
  3 |  *
  4 |  * This program is free software: you can redistribute it and/or modify
  5 |  * it under the terms of the GNU General Public License as published by
  6 |  * the Free Software Foundation, either version 3 of the License, or
  7 |  * (at your option) any later version.
  8 |  *
  9 |  * This program is distributed in the hope that it will be useful,
 10 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 11 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 12 |  * GNU General Public License for more details.
 13 |  *
 14 |  * You should have received a copy of the GNU General Public License
 15 |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 16 |  *
 17 |  */
 18 | 
 19 | package com.ksmaze.android.preference;
 20 | 
 21 | import android.app.AlertDialog.Builder;
 22 | import android.content.Context;
 23 | import android.content.DialogInterface;
 24 | import android.preference.ListPreference;
 25 | import android.preference.Preference;
 26 | import android.util.AttributeSet;
 27 | 
 28 | /**
 29 |  * A {@link Preference} that displays a list of entries as a dialog and allows
 30 |  * multiple selections
 31 |  * <p>
 32 |  * This preference will store a string into the SharedPreferences. This string
 33 |  * will be the values selected from the {@link #setEntryValues(CharSequence[])}
 34 |  * array.
 35 |  * </p>
 36 |  */
 37 | public class ListPreferenceMultiSelect extends ListPreference {
 38 |   // Need to make sure the SEPARATOR is unique and weird enough that it
 39 |   // doesn't match one of the entries.
 40 |   // Not using any fancy symbols because this is interpreted as a regex for
 41 |   // splitting strings.
 42 |   private static final String SEPARATOR = " , ";
 43 | 
 44 |   private boolean[] mClickedDialogEntryIndices;
 45 | 
 46 |   public ListPreferenceMultiSelect(Context context, AttributeSet attrs) {
 47 |     super(context, attrs);
 48 | 
 49 |     mClickedDialogEntryIndices = new boolean[getEntries().length];
 50 |   }
 51 | 
 52 |   @Override
 53 |   public void setEntries(CharSequence[] entries) {
 54 |     super.setEntries(entries);
 55 |     mClickedDialogEntryIndices = new boolean[entries.length];
 56 |   }
 57 | 
 58 |   public ListPreferenceMultiSelect(Context context) {
 59 |     this(context, null);
 60 |   }
 61 | 
 62 |   @Override
 63 |   protected void onPrepareDialogBuilder(Builder builder) {
 64 |     CharSequence[] entries = getEntries();
 65 |     CharSequence[] entryValues = getEntryValues();
 66 | 
 67 |     if (entries == null || entryValues == null
 68 |         || entries.length != entryValues.length) {
 69 |       throw new IllegalStateException(
 70 |           "ListPreference requires an entries array and an entryValues array which are both the same length");
 71 |     }
 72 | 
 73 |     restoreCheckedEntries();
 74 |     builder.setMultiChoiceItems(entries, mClickedDialogEntryIndices,
 75 |         new DialogInterface.OnMultiChoiceClickListener() {
 76 |           @Override
 77 |           public void onClick(DialogInterface dialog, int which,
 78 |                               boolean val) {
 79 |             mClickedDialogEntryIndices[which] = val;
 80 |           }
 81 |         });
 82 |   }
 83 | 
 84 |   public static String[] parseStoredValue(CharSequence val) {
 85 |     if (val == null)
 86 |       return null;
 87 |     if ("".equals(val))
 88 |       return null;
 89 |     else
 90 |       return ((String) val).split(SEPARATOR);
 91 |   }
 92 | 
 93 |   private void restoreCheckedEntries() {
 94 |     CharSequence[] entryValues = getEntryValues();
 95 | 
 96 |     String[] vals = parseStoredValue(getValue());
 97 |     if (vals != null) {
 98 |       for (String val1 : vals) {
 99 |         String val = val1.trim();
100 |         for (int i = 0; i < entryValues.length; i++) {
101 |           CharSequence entry = entryValues[i];
102 |           if (entry.equals(val)) {
103 |             mClickedDialogEntryIndices[i] = true;
104 |             break;
105 |           }
106 |         }
107 |       }
108 |     }
109 |   }
110 | 
111 |   @Override
112 |   protected void onDialogClosed(boolean positiveResult) {
113 |     // super.onDialogClosed(positiveResult);
114 | 
115 |     CharSequence[] entryValues = getEntryValues();
116 |     if (positiveResult && entryValues != null) {
117 |       StringBuffer value = new StringBuffer();
118 |       for (int i = 0; i < entryValues.length; i++) {
119 |         if (mClickedDialogEntryIndices[i]) {
120 |           value.append(entryValues[i]).append(SEPARATOR);
121 |         }
122 |       }
123 | 
124 |       if (callChangeListener(value)) {
125 |         String val = value.toString();
126 |         if (val.length() > 0)
127 |           val = val.substring(0, val.length() - SEPARATOR.length());
128 |         setValue(val);
129 |       }
130 |     }
131 |   }
132 | }
133 | 


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/Exec.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (C) 2007 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package org.proxydroid;
18 | 
19 | import java.io.FileDescriptor;
20 | 
21 | /**
22 |  * Utility methods for creating and managing a subprocess.
23 |  * <p/>
24 |  * Note: The native methods access a package-private java.io.FileDescriptor
25 |  * field to get and set the raw Linux file descriptor. This might break if the
26 |  * implementation of java.io.FileDescriptor is changed.
27 |  */
28 | 
29 | public class Exec {
30 |   static {
31 |     java.lang.System.loadLibrary("exec");
32 |   }
33 | 
34 |   /**
35 |    * Close a given file descriptor.
36 |    */
37 |   public static native void close(FileDescriptor fd);
38 | 
39 |   /**
40 |    * Create a subprocess. Differs from java.lang.ProcessBuilder in that a pty
41 |    * is used to communicate with the subprocess.
42 |    * <p/>
43 |    * Callers are responsible for calling Exec.close() on the returned file
44 |    * descriptor.
45 |    *
46 |    * @param rdt       Whether redirect stdout and stderr
47 |    * @param cmd       The command to execute.
48 |    * @param args      An array of arguments to the command.
49 |    * @param envVars   An array of strings of the form "VAR=value" to be added to the
50 |    *                  environment of the process.
51 |    * @param scripts   The scripts to execute.
52 |    * @param processId A one-element array to which the process ID of the started
53 |    *                  process will be written.
54 |    * @return File descriptor
55 |    */
56 |   public static native FileDescriptor createSubprocess(int rdt, String cmd,
57 |                                                        String[] args, String[] envVars,
58 |                                                        String scripts, int[] processId);
59 | 
60 |   /**
61 |    * Send SIGHUP to a process group.
62 |    */
63 |   public static native void hangupProcessGroup(int processId);
64 | 
65 |   /**
66 |    * Causes the calling thread to wait for the process associated with the
67 |    * receiver to finish executing.
68 |    *
69 |    * @return The exit value of the Process being waited on
70 |    */
71 |   public static native int waitFor(int processId);
72 | }
73 | 


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/FileArrayAdapter.java:
--------------------------------------------------------------------------------
 1 | package org.proxydroid;
 2 | 
 3 | import android.content.Context;
 4 | import android.view.LayoutInflater;
 5 | import android.view.View;
 6 | import android.view.ViewGroup;
 7 | import android.widget.ArrayAdapter;
 8 | import android.widget.TextView;
 9 | 
10 | import org.proxydroid.utils.Option;
11 | 
12 | import java.util.List;
13 | 
14 | public class FileArrayAdapter extends ArrayAdapter<Option> {
15 | 
16 | 	private Context c;
17 | 	private int id;
18 | 	private List<Option> items;
19 | 
20 | 	public FileArrayAdapter(Context context, int textViewResourceId,
21 | 			List<Option> objects) {
22 | 		super(context, textViewResourceId, objects);
23 | 		c = context;
24 | 		id = textViewResourceId;
25 | 		items = objects;
26 | 	}
27 | 
28 | 	@Override
29 | 	public Option getItem(int i) {
30 | 		return items.get(i);
31 | 	}
32 | 
33 | 	@Override
34 | 	public View getView(int position, View convertView, ViewGroup parent) {
35 | 		View v = convertView;
36 | 		if (v == null) {
37 | 			LayoutInflater vi = (LayoutInflater) c
38 | 					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
39 | 			v = vi.inflate(id, null);
40 | 		}
41 | 		final Option o = items.get(position);
42 | 		if (o != null) {
43 | 			TextView t1 = (TextView) v.findViewById(R.id.TextView01);
44 | 			TextView t2 = (TextView) v.findViewById(R.id.TextView02);
45 | 
46 | 			if (t1 != null)
47 | 				t1.setText(o.getName());
48 | 			if (t2 != null)
49 | 				t2.setText(o.getData());
50 | 
51 | 		}
52 | 		return v;
53 | 	}
54 | 
55 | }
56 | 


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/FileChooser.java:
--------------------------------------------------------------------------------
 1 | package org.proxydroid;
 2 | 
 3 | import android.app.ListActivity;
 4 | import android.content.Intent;
 5 | import android.os.Bundle;
 6 | import android.view.View;
 7 | import android.widget.ListView;
 8 | import android.widget.Toast;
 9 | 
10 | import org.proxydroid.utils.Constraints;
11 | import org.proxydroid.utils.Option;
12 | import org.proxydroid.utils.Utils;
13 | 
14 | import java.io.File;
15 | import java.util.ArrayList;
16 | import java.util.Collections;
17 | import java.util.List;
18 | 
19 | public class FileChooser extends ListActivity {
20 | 
21 | 	private File currentDir;
22 | 	private FileArrayAdapter adapter;
23 | 
24 | 	private void fill(File f) {
25 | 		File[] dirs = f.listFiles();
26 | 		this.setTitle(getString(R.string.current_dir) + ": " + f.getName());
27 | 		List<Option> dir = new ArrayList<Option>();
28 | 		List<Option> fls = new ArrayList<Option>();
29 | 		try {
30 | 			for (File ff : dirs) {
31 | 				if (ff.isDirectory())
32 | 					dir.add(new Option(ff.getName(),
33 | 							getString(R.string.folder), ff.getAbsolutePath()));
34 | 				else {
35 | 					fls.add(new Option(ff.getName(),
36 | 							getString(R.string.file_size) + ff.length(), ff
37 | 									.getAbsolutePath()));
38 | 				}
39 | 			}
40 | 		} catch (Exception e) {
41 | 
42 | 		}
43 | 		Collections.sort(dir);
44 | 		Collections.sort(fls);
45 | 		dir.addAll(fls);
46 | 		if (!f.getName().equalsIgnoreCase("sdcard"))
47 | 			dir.add(0,
48 | 					new Option("..", getString(R.string.parent_dir), f
49 | 							.getParent()));
50 | 		adapter = new FileArrayAdapter(FileChooser.this, R.layout.file_view,
51 | 				dir);
52 | 		this.setListAdapter(adapter);
53 | 	}
54 | 
55 | 	@Override
56 | 	public void onCreate(Bundle savedInstanceState) {
57 | 		super.onCreate(savedInstanceState);
58 | 		((ProxyDroidApplication)getApplication())
59 | 				.firebaseAnalytics.setCurrentScreen(this, "file_chooser", null);
60 | 		currentDir = new File(Utils.getDataPath(this));
61 | 		fill(currentDir);
62 | 	}
63 | 
64 | 	private void onFileClick(Option o) {
65 | 		File inputFile = new File(o.getPath());
66 | 		if (inputFile.exists() && inputFile.length() < 32 * 1024) {
67 | 			Toast.makeText(this, getString(R.string.file_toast) + o.getPath(),
68 | 					Toast.LENGTH_SHORT).show();
69 | 			Intent i = new Intent();
70 | 			i.putExtra(Constraints.FILE_PATH, o.getPath());
71 | 			setResult(RESULT_OK, i);
72 | 		} else {
73 | 			Toast.makeText(this, getString(R.string.file_error) + o.getPath(),
74 | 					Toast.LENGTH_SHORT).show();
75 | 			setResult(RESULT_CANCELED);
76 | 		}
77 | 
78 | 		finish();
79 | 	}
80 | 
81 | 	@Override
82 | 	protected void onListItemClick(ListView l, View v, int position, long id) {
83 | 		super.onListItemClick(l, v, position, id);
84 | 		Option o = adapter.getItem(position);
85 | 		if (o == null || o.getPath() == null) return;
86 | 		if (o.getData().equalsIgnoreCase(getString(R.string.folder))
87 | 				|| o.getData().equalsIgnoreCase(getString(R.string.parent_dir))) {
88 | 			currentDir = new File(o.getPath());
89 | 			fill(currentDir);
90 | 		} else {
91 | 			onFileClick(o);
92 | 		}
93 | 	}
94 | }


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/InnerSocketBuilder.java:
--------------------------------------------------------------------------------
 1 | package org.proxydroid;
 2 | 
 3 | import android.util.Log;
 4 | 
 5 | import java.io.IOException;
 6 | import java.net.Socket;
 7 | 
 8 | public class InnerSocketBuilder {
 9 | 
10 | 	private String proxyHost = "127.0.0.1";
11 | 	private int proxyPort = 1053;
12 | 
13 | 	private Socket innerSocket = null;
14 | 
15 | 	private boolean isConnected = false;
16 | 
17 | 	private final String TAG = "CMWRAP->InnerSocketBuilder";
18 | 
19 | 	/**
20 | 	 * 建立经由代理服务器至目标服务器的连接
21 | 	 * 
22 | 	 * @param proxyHost
23 | 	 *            代理服务器地址
24 | 	 * @param proxyPort
25 | 	 *            代理服务器端口
26 | 	 * @param target
27 | 	 *            目标服务器
28 | 	 */
29 | 	public InnerSocketBuilder(String proxyHost, int proxyPort, String target) {
30 | 		this.proxyHost = proxyHost;
31 | 		this.proxyPort = proxyPort;
32 | 
33 | 		connect();
34 | 	}
35 | 
36 | 	private void connect() {
37 | 
38 | 		// starTime = System.currentTimeMillis();
39 | 		Log.v(TAG, "建立通道");
40 | 
41 | 		try {
42 | 			innerSocket = new Socket(proxyHost, proxyPort);
43 | 			innerSocket.setKeepAlive(true);
44 | 			innerSocket.setSoTimeout(60 * 1000);
45 | 			isConnected = true;
46 | 
47 | 		} catch (IOException e) {
48 | 			Log.e(TAG, "建立隧道失败:" + e.getLocalizedMessage());
49 | 		}
50 | 	}
51 | 
52 | 	public Socket getSocket() {
53 | 		return innerSocket;
54 | 	}
55 | 
56 | 	public boolean isConnected() {
57 | 		return this.isConnected;
58 | 	}
59 | 
60 | }
61 | 


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/ProxyDroidApplication.java:
--------------------------------------------------------------------------------
 1 | /* proxydroid - Global / Individual Proxy App for Android
 2 |  * Copyright (C) 2016 Max Lv <max.c.lv@gmail.com>
 3 |  *
 4 |  * This program is free software: you can redistribute it and/or modify
 5 |  * it under the terms of the GNU General Public License as published by
 6 |  * the Free Software Foundation, either version 3 of the License, or
 7 |  * (at your option) any later version.
 8 |  *
 9 |  * This program is distributed in the hope that it will be useful,
10 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 |  * GNU General Public License for more details.
13 |  *
14 |  * You should have received a copy of the GNU General Public License
15 |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 |  * 
17 |  * 
18 |  *                            ___====-_  _-====___
19 |  *                      _--^^^#####//      \\#####^^^--_
20 |  *                   _-^##########// (    ) \\##########^-_
21 |  *                  -############//  |\^^/|  \\############-
22 |  *                _/############//   (@::@)   \\############\_
23 |  *               /#############((     \\//     ))#############\
24 |  *              -###############\\    (oo)    //###############-
25 |  *             -#################\\  / VV \  //#################-
26 |  *            -###################\\/      \//###################-
27 |  *           _#/|##########/\######(   /\   )######/\##########|\#_
28 |  *           |/ |#/\#/\#/\/  \#/\##\  |  |  /##/\#/  \/\#/\#/\#| \|
29 |  *           `  |/  V  V  `   V  \#\| |  | |/#/  V   '  V  V  \|  '
30 |  *              `   `  `      `   / | |  | | \   '      '  '   '
31 |  *                               (  | |  | |  )
32 |  *                              __\ | |  | | /__
33 |  *                             (vvv(VVV)(VVV)vvv)
34 |  *
35 |  *                              HERE BE DRAGONS
36 |  *
37 |  */
38 | 
39 | package org.proxydroid;
40 | 
41 | import android.app.Application;
42 | 
43 | import com.google.firebase.analytics.FirebaseAnalytics;
44 | 
45 | public class ProxyDroidApplication extends Application {
46 | 
47 |     public FirebaseAnalytics firebaseAnalytics;
48 | 
49 |     @Override
50 |     public void onCreate() {
51 |         // Obtain the FirebaseAnalytics instance.
52 |         firebaseAnalytics = FirebaseAnalytics.getInstance(this);
53 |         super.onCreate();
54 |     }
55 | }
56 | 


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/ProxyDroidReceiver.java:
--------------------------------------------------------------------------------
 1 | /* proxydroid - Global / Individual Proxy App for Android
 2 |  * Copyright (C) 2011 Max Lv <max.c.lv@gmail.com>
 3 |  *
 4 |  * This program is free software: you can redistribute it and/or modify
 5 |  * it under the terms of the GNU General Public License as published by
 6 |  * the Free Software Foundation, either version 3 of the License, or
 7 |  * (at your option) any later version.
 8 |  *
 9 |  * This program is distributed in the hope that it will be useful,
10 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 |  * GNU General Public License for more details.
13 |  *
14 |  * You should have received a copy of the GNU General Public License
15 |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 |  * 
17 |  * 
18 |  *                            ___====-_  _-====___
19 |  *                      _--^^^#####//      \\#####^^^--_
20 |  *                   _-^##########// (    ) \\##########^-_
21 |  *                  -############//  |\^^/|  \\############-
22 |  *                _/############//   (@::@)   \\############\_
23 |  *               /#############((     \\//     ))#############\
24 |  *              -###############\\    (oo)    //###############-
25 |  *             -#################\\  / VV \  //#################-
26 |  *            -###################\\/      \//###################-
27 |  *           _#/|##########/\######(   /\   )######/\##########|\#_
28 |  *           |/ |#/\#/\#/\/  \#/\##\  |  |  /##/\#/  \/\#/\#/\#| \|
29 |  *           `  |/  V  V  `   V  \#\| |  | |/#/  V   '  V  V  \|  '
30 |  *              `   `  `      `   / | |  | | \   '      '  '   '
31 |  *                               (  | |  | |  )
32 |  *                              __\ | |  | | /__
33 |  *                             (vvv(VVV)(VVV)vvv)
34 |  *
35 |  *                              HERE BE DRAGONS
36 |  *
37 |  */
38 | 
39 | package org.proxydroid;
40 | 
41 | import android.content.BroadcastReceiver;
42 | import android.content.Context;
43 | import android.content.Intent;
44 | import android.content.SharedPreferences;
45 | import android.os.Bundle;
46 | import android.preference.PreferenceManager;
47 | 
48 | public class ProxyDroidReceiver extends BroadcastReceiver {
49 | 
50 | 	@Override
51 | 	public void onReceive(Context context, Intent intent) {
52 | 
53 | 		SharedPreferences settings = PreferenceManager
54 | 				.getDefaultSharedPreferences(context);
55 | 		Profile mProfile = new Profile();
56 | 		mProfile.getProfile(settings);
57 | 
58 | 		if (mProfile.isAutoConnect()) {
59 | 
60 | 			Intent it = new Intent(context, ProxyDroidService.class);
61 | 			Bundle bundle = new Bundle();
62 | 			bundle.putString("host", mProfile.getHost());
63 | 			bundle.putString("user", mProfile.getUser());
64 | 			bundle.putString("bypassAddrs", mProfile.getBypassAddrs());
65 | 			bundle.putString("password", mProfile.getPassword());
66 | 			bundle.putString("domain", mProfile.getDomain());
67 | 
68 | 			bundle.putString("proxyType", mProfile.getProxyType());
69 | 			bundle.putBoolean("isAutoSetProxy", mProfile.isAutoSetProxy());
70 | 			bundle.putBoolean("isBypassApps", mProfile.isBypassApps());
71 | 			bundle.putBoolean("isAuth", mProfile.isAuth());
72 | 			bundle.putBoolean("isNTLM", mProfile.isNTLM());
73 | 			bundle.putBoolean("isDNSProxy", mProfile.isDNSProxy());
74 | 			bundle.putBoolean("isPAC", mProfile.isPAC());
75 | 
76 | 			bundle.putInt("port", mProfile.getPort());
77 | 
78 | 			it.putExtras(bundle);
79 | 			context.startService(it);
80 | 		}
81 | 	}
82 | 
83 | }
84 | 


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/ProxyedApp.java:
--------------------------------------------------------------------------------
  1 | package org.proxydroid;
  2 | 
  3 | 
  4 | public class ProxyedApp {
  5 | 
  6 | 	private boolean enabled;
  7 | 	private int uid;
  8 | 	private String username;
  9 | 	private String procname;
 10 | 	private String name;
 11 | 
 12 | 	private boolean proxyed = false;
 13 | 
 14 | 	/**
 15 | 	 * @return the proxyed
 16 | 	 */
 17 | 	public boolean isProxyed() {
 18 | 		return proxyed;
 19 | 	}
 20 | 
 21 | 	/**
 22 | 	 * @param proxyed
 23 | 	 *            the proxyed to set
 24 | 	 */
 25 | 	public void setProxyed(boolean proxyed) {
 26 | 		this.proxyed = proxyed;
 27 | 	}
 28 | 
 29 | 	/**
 30 | 	 * @return the enabled
 31 | 	 */
 32 | 	public boolean isEnabled() {
 33 | 		return enabled;
 34 | 	}
 35 | 
 36 | 	/**
 37 | 	 * @param enabled
 38 | 	 *            the enabled to set
 39 | 	 */
 40 | 	public void setEnabled(boolean enabled) {
 41 | 		this.enabled = enabled;
 42 | 	}
 43 | 
 44 | 	/**
 45 | 	 * @return the uid
 46 | 	 */
 47 | 	public int getUid() {
 48 | 		return uid;
 49 | 	}
 50 | 
 51 | 	/**
 52 | 	 * @param uid
 53 | 	 *            the uid to set
 54 | 	 */
 55 | 	public void setUid(int uid) {
 56 | 		this.uid = uid;
 57 | 	}
 58 | 
 59 | 	/**
 60 | 	 * @return the username
 61 | 	 */
 62 | 	public String getUsername() {
 63 | 		return username;
 64 | 	}
 65 | 
 66 | 	/**
 67 | 	 * @param username
 68 | 	 *            the username to set
 69 | 	 */
 70 | 	public void setUsername(String username) {
 71 | 		this.username = username;
 72 | 	}
 73 | 
 74 | 	/**
 75 | 	 * @return the procname
 76 | 	 */
 77 | 	public String getProcname() {
 78 | 		return procname;
 79 | 	}
 80 | 
 81 | 	/**
 82 | 	 * @param procname
 83 | 	 *            the procname to set
 84 | 	 */
 85 | 	public void setProcname(String procname) {
 86 | 		this.procname = procname;
 87 | 	}
 88 | 
 89 | 	/**
 90 | 	 * @return the name
 91 | 	 */
 92 | 	public String getName() {
 93 | 		return name;
 94 | 	}
 95 | 
 96 | 	/**
 97 | 	 * @param name
 98 | 	 *            the name to set
 99 | 	 */
100 | 	public void setName(String name) {
101 | 		this.name = name;
102 | 	}
103 | 
104 | }


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/utils/ImageLoaderFactory.java:
--------------------------------------------------------------------------------
 1 | // dbartists - Douban artists client for Android
 2 | // Copyright (C) 2011 Max Lv <max.c.lv@gmail.com>
 3 | //
 4 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not
 5 | // use this file except in compliance with the License.  You may obtain a copy
 6 | // of the License at
 7 | //
 8 | //      http://www.apache.org/licenses/LICENSE-2.0
 9 | //
10 | // Unless required by applicable law or agreed to in writing, software
11 | // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
13 | // License for the specific language governing permissions and limitations
14 | // under the License.
15 | //
16 | //
17 | //                           ___====-_  _-====___
18 | //                     _--^^^#####//      \\#####^^^--_
19 | //                  _-^##########// (    ) \\##########^-_
20 | //                 -############//  |\^^/|  \\############-
21 | //               _/############//   (@::@)   \\############\_
22 | //              /#############((     \\//     ))#############\
23 | //             -###############\\    (oo)    //###############-
24 | //            -#################\\  / VV \  //#################-
25 | //           -###################\\/      \//###################-
26 | //          _#/|##########/\######(   /\   )######/\##########|\#_
27 | //          |/ |#/\#/\#/\/  \#/\##\  |  |  /##/\#/  \/\#/\#/\#| \|
28 | //          `  |/  V  V  `   V  \#\| |  | |/#/  V   '  V  V  \|  '
29 | //             `   `  `      `   / | |  | | \   '      '  '   '
30 | //                              (  | |  | |  )
31 | //                             __\ | |  | | /__
32 | //                            (vvv(VVV)(VVV)vvv)
33 | //
34 | //                             HERE BE DRAGONS
35 | 
36 | package org.proxydroid.utils;
37 | 
38 | import android.content.Context;
39 | 
40 | public class ImageLoaderFactory {
41 | 
42 | 	private static ImageLoader il = null;
43 | 
44 | 	public static ImageLoader getImageLoader(Context context) {
45 | 		if (il == null) {
46 | 			il = new ImageLoader(context);
47 | 		}
48 | 		return il;
49 | 	}
50 | }
51 | 


--------------------------------------------------------------------------------
/app/src/main/java/org/proxydroid/utils/Option.java:
--------------------------------------------------------------------------------
 1 | package org.proxydroid.utils;
 2 | 
 3 | public class Option implements Comparable<Option> {
 4 | 	private String name;
 5 | 	private String data;
 6 | 	private String path;
 7 | 
 8 | 	public Option(String n, String d, String p) {
 9 | 		name = n;
10 | 		data = d;
11 | 		path = p;
12 | 	}
13 | 
14 | 	@Override
15 | 	public int compareTo(Option o) {
16 | 		if (this.name != null)
17 | 			return this.name.toLowerCase().compareTo(o.getName().toLowerCase());
18 | 		else
19 | 			throw new IllegalArgumentException();
20 | 	}
21 | 
22 | 	public String getData() {
23 | 		return data;
24 | 	}
25 | 
26 | 	public String getName() {
27 | 		return name;
28 | 	}
29 | 
30 | 	public String getPath() {
31 | 		return path;
32 | 	}
33 | }


--------------------------------------------------------------------------------
/app/src/main/res/color/button_text_selector.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 	<item android:state_focused="true" android:color="@color/white" /> <!-- focused -->
4 | 	<item android:state_focused="true" android:state_pressed="true"
5 | 		android:color="@color/white" /> <!-- focused and pressed -->
6 | 	<item android:state_pressed="true" android:color="@color/white" /> <!-- pressed -->
7 | 	<item android:color="@color/black" /> <!-- default -->
8 | </selector> 


--------------------------------------------------------------------------------
/app/src/main/res/color/selector.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 	<item android:state_focused="true" android:drawable="@color/light_grey" /> <!-- focused -->
4 | 	<item android:state_focused="true" android:state_pressed="true"
5 | 		android:drawable="@color/light_grey" /> <!-- focused and pressed -->
6 | 	<item android:state_pressed="true" android:drawable="@color/light_grey" /> <!-- pressed -->
7 | 	<item android:drawable="@color/white" /> <!-- default -->
8 | </selector> 


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi-v11/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-hdpi-v11/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi-v9/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-hdpi-v9/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-hdpi/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-hdpi/ing.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-hdpi/off.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-hdpi/on.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-ldpi-v11/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-ldpi-v11/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-ldpi-v9/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-ldpi-v9/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-ldpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-ldpi/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-ldpi/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-ldpi/ing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-ldpi/ing.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-ldpi/off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-ldpi/off.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-ldpi/on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-ldpi/on.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi-v11/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-mdpi-v11/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi-v9/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-mdpi-v9/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-mdpi/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-mdpi/ing.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-mdpi/off.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-mdpi/on.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:aapt="http://schemas.android.com/aapt"
 3 |     android:width="108dp"
 4 |     android:height="108dp"
 5 |     android:viewportWidth="108"
 6 |     android:viewportHeight="108">
 7 |     <path
 8 |         android:fillType="evenOdd"
 9 |         android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
10 |         android:strokeWidth="1"
11 |         android:strokeColor="#00000000">
12 |         <aapt:attr name="android:fillColor">
13 |             <gradient
14 |                 android:endX="78.5885"
15 |                 android:endY="90.9159"
16 |                 android:startX="48.7653"
17 |                 android:startY="61.0927"
18 |                 android:type="linear">
19 |                 <item
20 |                     android:color="#44000000"
21 |                     android:offset="0.0" />
22 |                 <item
23 |                     android:color="#00000000"
24 |                     android:offset="1.0" />
25 |             </gradient>
26 |         </aapt:attr>
27 |     </path>
28 |     <path
29 |         android:fillColor="#FFFFFF"
30 |         android:fillType="nonZero"
31 |         android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
32 |         android:strokeWidth="1"
33 |         android:strokeColor="#00000000" />
34 | </vector>
35 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi-v11/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-xhdpi-v11/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi-v9/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-xhdpi-v9/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_stat_proxydroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-xhdpi/ic_stat_proxydroid.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-xhdpi/ing.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-xhdpi/off.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable-xhdpi/on.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_gray.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="UTF-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 | 	android:shape="rectangle">
 4 | 
 5 | 	<solid android:color="@color/dark_grey" />
 6 | 
 7 | 	<corners android:bottomLeftRadius="4dip"
 8 | 		android:topRightRadius="4dip" android:topLeftRadius="4dip"
 9 | 		android:bottomRightRadius="4dip" />
10 | </shape>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_selector.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 	<item android:state_focused="true" android:drawable="@drawable/button_gray" /> <!-- focused -->
4 | 	<item android:state_focused="true" android:state_pressed="true"
5 | 		android:drawable="@drawable/button_gray" /> <!-- focused and pressed -->
6 | 	<item android:state_pressed="true" android:drawable="@drawable/button_gray" /> <!-- pressed -->
7 | 	<item android:drawable="@drawable/button_white" /> <!-- default -->
8 | </selector> 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_white.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="UTF-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 | 	android:shape="rectangle">
 4 | 
 5 | 	<solid android:color="#fff" />
 6 | 
 7 | 	<corners android:bottomLeftRadius="4dip"
 8 | 		android:topRightRadius="4dip" android:topLeftRadius="4dip"
 9 | 		android:bottomRightRadius="4dip" />
10 | </shape>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/sym_def_app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/drawable/sym_def_app_icon.png


--------------------------------------------------------------------------------
/app/src/main/res/layout/alert_dialog_text_entry.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Copyright (C) 2008 The Android Open Source Project
 3 | 
 4 |      Licensed under the Apache License, Version 2.0 (the "License");
 5 |      you may not use this file except in compliance with the License.
 6 |      You may obtain a copy of the License at
 7 | 
 8 |           http://www.apache.org/licenses/LICENSE-2.0
 9 | 
10 |      Unless required by applicable law or agreed to in writing, software
11 |      distributed under the License is distributed on an "AS IS" BASIS,
12 |      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |      See the License for the specific language governing permissions and
14 |      limitations under the License.
15 | -->
16 | 
17 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
18 |     android:layout_width="fill_parent"
19 |     android:layout_height="wrap_content"
20 |     android:orientation="vertical">
21 | 
22 |     <EditText
23 |         android:id="@+id/text_edit"
24 |         android:layout_height="wrap_content"
25 |         android:layout_width="fill_parent"
26 |         android:layout_marginLeft="20dip"
27 |         android:layout_marginRight="20dip"
28 |         android:scrollHorizontally="true"
29 |         android:autoText="false"
30 |         android:capitalize="none"
31 |         android:gravity="fill_horizontal"
32 |         android:textAppearance="?android:attr/textAppearanceMedium" />
33 | 
34 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/bypass_list.xml:
--------------------------------------------------------------------------------
  1 | <?xml version="1.0" encoding="utf-8"?>
  2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 |     android:layout_width="fill_parent"
  4 |     android:layout_height="fill_parent"
  5 |     android:background="@color/white"
  6 |     android:orientation="vertical" >
  7 | 
  8 |     <ListView
  9 |         android:id="@+id/BypassListView"
 10 |         android:layout_width="fill_parent"
 11 |         android:layout_height="0dip"
 12 |         android:layout_weight="1.0"
 13 |         android:background="@color/white"
 14 |         android:dividerHeight="1dip" >
 15 |     </ListView>
 16 | 
 17 |     <RelativeLayout
 18 |         android:layout_width="fill_parent"
 19 |         android:layout_height="wrap_content"
 20 |         android:layout_alignParentBottom="true"
 21 |         android:layout_margin="10dp"
 22 |         android:orientation="horizontal" >
 23 | 
 24 |         <LinearLayout
 25 |             android:id="@+id/BottomLayout"
 26 |             android:layout_width="wrap_content"
 27 |             android:layout_height="wrap_content"
 28 |             android:layout_centerInParent="true"
 29 |             android:orientation="vertical"
 30 |             android:color="@android:color/transparent" >
 31 | 
 32 |             <LinearLayout
 33 |                 android:layout_width="wrap_content"
 34 |                 android:layout_height="wrap_content"
 35 |                 android:orientation="horizontal"
 36 |                 android:color="@android:color/transparent" >
 37 | 
 38 |                 <TextView
 39 |                     android:id="@+id/addBypassAddr"
 40 |                     android:layout_width="65dp"
 41 |                     android:layout_height="wrap_content"
 42 |                     android:layout_margin="5dp"
 43 |                     android:background="@drawable/button_selector"
 44 |                     android:paddingBottom="5dp"
 45 |                     android:paddingLeft="5dp"
 46 |                     android:paddingRight="5dp"
 47 |                     android:paddingTop="5dp"
 48 |                     android:text="@string/add_button"
 49 |                     android:textColor="@color/button_text_selector"
 50 |                     android:gravity="center"
 51 |                     android:textSize="13sp" >
 52 |                 </TextView>
 53 | 
 54 |                 <TextView
 55 |                     android:id="@+id/presetBypassAddr"
 56 |                     android:layout_width="65dp"
 57 |                     android:layout_height="wrap_content"
 58 |                     android:layout_margin="5dp"
 59 |                     android:background="@drawable/button_selector"
 60 |                     android:paddingBottom="5dp"
 61 |                     android:paddingLeft="5dp"
 62 |                     android:paddingRight="5dp"
 63 |                     android:paddingTop="5dp"
 64 |                     android:text="@string/preset_button"
 65 |                     android:textColor="@color/button_text_selector"
 66 |                     android:gravity="center"
 67 |                     android:textSize="13sp" >
 68 |                 </TextView>
 69 | 
 70 |                 <TextView
 71 |                     android:id="@+id/importBypassAddr"
 72 |                     android:layout_width="65dp"
 73 |                     android:layout_height="wrap_content"
 74 |                     android:layout_margin="5dp"
 75 |                     android:background="@drawable/button_selector"
 76 |                     android:paddingBottom="5dp"
 77 |                     android:paddingLeft="5dp"
 78 |                     android:paddingRight="5dp"
 79 |                     android:paddingTop="5dp"
 80 |                     android:text="@string/import_button"
 81 |                     android:textColor="@color/button_text_selector"
 82 |                     android:gravity="center"
 83 |                     android:textSize="13sp" >
 84 |                 </TextView>
 85 | 
 86 |                 <TextView
 87 |                     android:id="@+id/exportBypassAddr"
 88 |                     android:layout_width="65dp"
 89 |                     android:layout_height="wrap_content"
 90 |                     android:layout_margin="5dp"
 91 |                     android:background="@drawable/button_selector"
 92 |                     android:paddingBottom="5dp"
 93 |                     android:paddingLeft="5dp"
 94 |                     android:paddingRight="5dp"
 95 |                     android:paddingTop="5dp"
 96 |                     android:text="@string/export_button"
 97 |                     android:textColor="@color/button_text_selector"
 98 |                     android:gravity="center"
 99 |                     android:textSize="13sp" >
100 |                 </TextView>
101 |             </LinearLayout>
102 |         </LinearLayout>
103 |     </RelativeLayout>
104 | 
105 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/bypass_list_item.xml:
--------------------------------------------------------------------------------
 1 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     android:layout_width="fill_parent"
 3 |     android:layout_height="fill_parent"
 4 |     android:background="@android:color/transparent"
 5 |     android:gravity="center_vertical">
 6 | 
 7 |     <TextView
 8 |         android:id="@+id/bypasslistItemText"
 9 |         android:layout_width="fill_parent"
10 |         android:layout_height="wrap_content"
11 |         android:layout_gravity="center_vertical"
12 |         android:paddingLeft="5dip"
13 |         android:textAppearance="?android:attr/textAppearanceSmall"
14 |         android:textColor="@color/button_text_selector"></TextView>
15 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/file_view.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <LinearLayout
3 |   xmlns:android="http://schemas.android.com/apk/res/android"
4 |   android:layout_height="wrap_content" android:orientation="vertical" android:layout_width="fill_parent">
5 | <TextView android:text="@+id/TextView01" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textStyle="bold" android:layout_marginTop="5dip" android:layout_marginLeft="5dip"></TextView>
6 | <TextView android:text="@+id/TextView02" android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip"></TextView>
7 | </LinearLayout>
8 | 


--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_apps.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout android:layout_width="fill_parent"
 3 | 	android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
 4 | 	android:orientation="vertical" android:duplicateParentState="false">
 5 | 	<TextView android:text="@string/proxyed_help"
 6 | 		android:layout_width="fill_parent" android:layout_height="wrap_content"
 7 | 		android:textSize="16sp" android:padding="3px" />
 8 | 	<ListView android:layout_width="fill_parent"
 9 | 		android:layout_height="wrap_content" android:id="@+id/applistview"></ListView>
10 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_apps_item.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | 
 3 | <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4 | 	android:layout_width="fill_parent" android:layout_height="fill_parent"
 5 | 	android:stretchColumns="1">
 6 | 	<TableRow>
 7 | 		<ImageView android:id="@+id/itemicon" android:layout_width="48sp"
 8 | 			android:layout_height="48sp" android:scaleType="fitCenter"
 9 | 			android:padding="3dip"></ImageView>
10 | 
11 | 		<TextView android:layout_height="wrap_content" android:id="@+id/itemtext"
12 | 			android:text="uid:packages" android:maxLength="20" android:textSize="18sp" android:padding="3dip"></TextView>
13 | 
14 | 		<CheckBox android:layout_width="wrap_content"
15 | 			android:layout_height="wrap_content" android:id="@+id/itemcheck"></CheckBox>
16 | 
17 | 	</TableRow>
18 | </TableLayout>
19 | 


--------------------------------------------------------------------------------
/app/src/main/res/layout/overlay.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <TextView xmlns:android="http://schemas.android.com/apk/res/android"
3 | 	android:minWidth="80dp" android:maxWidth="80dp" android:gravity="center"
4 | 	android:textSize="70sp" android:textColor="#ffffffff"
5 | 	android:background="#99000088" android:padding="10dp"
6 | 	android:visibility="invisible" />


--------------------------------------------------------------------------------
/app/src/main/res/layout/proxydroid_appwidget.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 | 	android:layout_width="fill_parent" android:layout_height="fill_parent"
4 | 	android:gravity="center">
5 | 	<ImageView android:layout_height="wrap_content"
6 | 		android:layout_width="wrap_content" android:id="@+id/serviceToggle"
7 | 		android:src="@drawable/off" android:layout_gravity="center"></ImageView>
8 | </LinearLayout>
9 | 


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <resources>
 3 | 	<color name="white">#ffff</color>
 4 | 	<color name="light_grey">#feee</color>
 5 | 	<color name="dark_grey">#f888</color>
 6 | 	<color name="black">#666</color>
 7 | 	<color name="green">#86C4AB</color>
 8 | 	<color name="green_new">#20BB67</color>
 9 | 	<color name="yellow">#ffff00</color>
10 | </resources>
11 | 


--------------------------------------------------------------------------------
/app/src/main/res/xml/proxydroid_appwidget_provider.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
3 | 	android:minWidth="48dp" android:minHeight="48dp"
4 | 	android:updatePeriodMillis="600000" android:initialLayout="@layout/proxydroid_appwidget">
5 | </appwidget-provider>


--------------------------------------------------------------------------------
/app/src/test/java/org/proxydroid/ExampleUnitTest.java:
--------------------------------------------------------------------------------
 1 | package org.proxydroid;
 2 | 
 3 | import org.junit.Test;
 4 | 
 5 | import static org.junit.Assert.*;
 6 | 
 7 | /**
 8 |  * Example local unit test, which will execute on the development machine (host).
 9 |  *
10 |  * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
11 |  */
12 | public class ExampleUnitTest {
13 |     @Test
14 |     public void addition_isCorrect() {
15 |         assertEquals(4, 2 + 2);
16 |     }
17 | }


--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
 2 | 
 3 | buildscript {
 4 |     repositories {
 5 |         google()
 6 |         jcenter()
 7 |         maven {
 8 |             url 'https://maven.fabric.io/public'
 9 |         }
10 | 
11 |     }
12 |     dependencies {
13 |         classpath 'com.android.tools.build:gradle:3.5.3'
14 |         classpath 'com.google.gms:google-services:4.2.0'
15 |         classpath 'io.fabric.tools:gradle:1.31.2'
16 | 
17 |         // NOTE: Do not place your application dependencies here; they belong
18 |         // in the individual module build.gradle files
19 |     }
20 | }
21 | 
22 | allprojects {
23 |     repositories {
24 |         google()
25 |         jcenter()
26 | 
27 |     }
28 | }
29 | 
30 | task clean(type: Delete) {
31 |     delete rootProject.buildDir
32 | }
33 | 


--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
 1 | # Project-wide Gradle settings.
 2 | # IDE (e.g. Android Studio) users:
 3 | # Gradle settings configured through the IDE *will override*
 4 | # any settings specified in this file.
 5 | # For more details on how to configure your build environment visit
 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
 7 | # Specifies the JVM arguments used for the daemon process.
 8 | # The setting is particularly useful for tweaking memory settings.
 9 | org.gradle.jvmargs=-Xmx1536m
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app's APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Automatically convert third-party libraries to use AndroidX
19 | android.enableJetifier=true
20 | 


--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madeye/proxydroid/3de979eb8ef70e12ab5f23ff343c6778f339c956/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Dec 25 09:17:58 CST 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
7 | 


--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
 1 | @if "%DEBUG%" == "" @echo off
 2 | @rem ##########################################################################
 3 | @rem
 4 | @rem  Gradle startup script for Windows
 5 | @rem
 6 | @rem ##########################################################################
 7 | 
 8 | @rem Set local scope for the variables with windows NT shell
 9 | if "%OS%"=="Windows_NT" setlocal
10 | 
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 | 
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 | 
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 | 
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 | 
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 | 
32 | goto fail
33 | 
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 | 
38 | if exist "%JAVA_EXE%" goto init
39 | 
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 | 
46 | goto fail
47 | 
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 | 
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | 
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 | 
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 | 
61 | set CMD_LINE_ARGS=%*
62 | 
63 | :execute
64 | @rem Setup the command line
65 | 
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 | 
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 | 
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 | 
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 | 
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 | 
84 | :omega
85 | 


--------------------------------------------------------------------------------
/privacy_policy.md:
--------------------------------------------------------------------------------
 1 | ## Privacy Policy
 2 | 
 3 | The ProxyDroid is built as an Open Source software. This app is provided by Max Lv at no cost and is intended for use as is.
 4 | 
 5 | This page is used to inform visitors regarding our policies with the collection, use, and disclosure of Personal Information if anyone decided to use our app.
 6 | 
 7 | If you choose to use our app, then you agree to the collection and use of information in relation to this policy. The Personal Information that we collect is used for providing and improving the app. We will not use or share your information with anyone except as described in this Privacy Policy.
 8 | 
 9 | The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which is accessible at Shadowsocks-android unless otherwise defined in this Privacy Policy.
10 | 
11 | **Information Collection and Use**
12 | 
13 | For a better experience, while using our app, we may require you to provide us with certain personally identifiable information. The information that we request will be retained by us and used as described in this privacy policy.
14 | 
15 | The app does use third party services that may collect information used to identify you.
16 | 
17 | Link to privacy policy of third party service providers used by the app
18 | 
19 | *   [Google Play Services](https://www.google.com/policies/privacy/)
20 | *   [AdMob](https://support.google.com/admob/answer/6128543?hl=en)
21 | *   [Firebase Analytics](https://firebase.google.com/policies/analytics)
22 | 
23 | **Log Data**
24 | 
25 | We want to inform you that whenever you use our app, in a case of an error in the app we collect data and information (through third party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing our App, the time and date of your use of the app, and other statistics.
26 | 
27 | **Cookies**
28 | 
29 | Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory.
30 | 
31 | This app does not use these “cookies” explicitly. However, the app may use third party code and libraries that use “cookies” to collect information and improve their services. You have the option to either accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to refuse our cookies, you may not be able to use some portions of this app.
32 | 
33 | **Security**
34 | 
35 | We value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and we cannot guarantee its absolute security.
36 | 
37 | **Links to Other Sites**
38 | 
39 | This app may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by us. Therefore, we strongly advise you to review the Privacy Policy of these websites. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services.
40 | 
41 | **Children’s Privacy**
42 | 
43 | These Services do not address anyone under the age of 13\. We do not knowingly collect personally identifiable information from children under 13\. In the case we discover that a child under 13 has provided us with personal information, we immediately delete this from our servers. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact us so that we will be able to do necessary actions.
44 | 
45 | **Changes to This Privacy Policy**
46 | 
47 | We may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. We will notify you of any changes by posting the new Privacy Policy on this page. These changes are effective immediately after they are posted on this page.
48 | 
49 | **Contact Us**
50 | 
51 | If you have any questions or suggestions about our Privacy Policy, do not hesitate to contact us.
52 | 


--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 | rootProject.name='proxydroid'
3 | 


--------------------------------------------------------------------------------