diff --git a/app/build.gradle b/app/build.gradle
index c8a3676..abe7905 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,5 +1,5 @@
apply plugin: 'com.android.application'
-apply plugin: 'org.greenrobot.greendao' // 应用插件
+apply plugin: 'org.greenrobot.greendao' // apply plugin
greendao {
// 指定数据库schema版本号,迁移等操作会用到
schemaVersion 2
@@ -10,12 +10,11 @@ greendao {
}
android {
- compileSdkVersion 29
- buildToolsVersion "29.0.3"
+ compileSdkVersion 30
defaultConfig {
applicationId "com.good.vpn"
minSdkVersion 21
- targetSdkVersion 29
+ targetSdkVersion 30
versionCode 1
versionName "1.0"
}
@@ -53,13 +52,12 @@ tasks.withType(Javadoc) {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'me.weishu:free_reflection:1.2.0'
+ implementation 'me.weishu:free_reflection:3.0.1'
implementation 'com.amitshekhar.android:debug-db:1.0.6'
// NetBare libraries
- implementation project(':netbare-core')
- implementation project(':netbare-injector')
+ implementation project(':netbare')
implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'org.greenrobot:greendao:3.2.2'
+ implementation 'org.greenrobot:greendao:3.3.0'
implementation 'com.blankj:utilcode:1.29.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index f1b4245..2af70b0 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -19,3 +19,15 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
+-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
+public static java.lang.String TABLENAME;
+}
+-keep class **$Properties { *; }
+
+# If you DO use SQLCipher:
+-keep class org.greenrobot.greendao.database.SqlCipherEncryptedHelper { *; }
+
+# If you do NOT use SQLCipher:
+-dontwarn net.sqlcipher.database.**
+# If you do NOT use RxJava:
+-dontwarn rx.**
\ No newline at end of file
diff --git a/app/src/main/java/cn/demo/appq/App.java b/app/src/main/java/cn/demo/appq/App.java
index cefb474..598e23c 100644
--- a/app/src/main/java/cn/demo/appq/App.java
+++ b/app/src/main/java/cn/demo/appq/App.java
@@ -4,7 +4,6 @@
import android.content.Context;
import com.github.megatronking.netbare.NetBare;
-import com.github.megatronking.netbare.NetBareUtils;
import com.github.megatronking.netbare.ssl.JKS;
import me.weishu.reflection.Reflection;
@@ -37,10 +36,7 @@ public static JKS getJKS() {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
- // On android Q, we can't access Java8EngineWrapper with reflect.
- if (NetBareUtils.isAndroidQ()) {
- Reflection.unseal(base);
- }
+ Reflection.unseal(base);
}
public static String getProcessNameByUid(int uid) {
diff --git a/app/src/main/java/cn/demo/appq/Interceptor/NetHttpInject.java b/app/src/main/java/cn/demo/appq/Interceptor/NetHttpInject.java
index 4e28550..5c5bf22 100644
--- a/app/src/main/java/cn/demo/appq/Interceptor/NetHttpInject.java
+++ b/app/src/main/java/cn/demo/appq/Interceptor/NetHttpInject.java
@@ -55,6 +55,15 @@ public void onRequestInject(@NonNull HttpRequest request, @NonNull HttpBody body
.queryBuilder()
.where(ReqEntityDao.Properties.SessionId.eq(request.id()))
.list();
+ String pkg = App.getProcessNameByUid(request.uid());
+ Log.i("sanbo.url","pkg:"+pkg
+ +"\r\n\t URL:"+request.url()
+ +"\r\n\t protocol:"+request.protocol().toString()
+ +"\r\n\t httpProtocol:"+request.httpProtocol().toString()
+ +"\r\n\t method:"+request.method().name()
+ +"\r\n\t isHttps:"+request.isHttps()
+ +"\r\n\t Header:"+GsonUtils.toJson(request.requestHeaders())
+ );
if (reqEntities != null && reqEntities.size() > 0) {
ReqEntity entity = reqEntities.get(0);
if (RECORD_REQUEST_BODY){
diff --git a/app/src/main/java/cn/demo/appq/presenter/NetBarePresenter.java b/app/src/main/java/cn/demo/appq/presenter/NetBarePresenter.java
index 2aee011..e7b9ce4 100644
--- a/app/src/main/java/cn/demo/appq/presenter/NetBarePresenter.java
+++ b/app/src/main/java/cn/demo/appq/presenter/NetBarePresenter.java
@@ -7,11 +7,11 @@
import com.github.megatronking.netbare.NetBare;
import com.github.megatronking.netbare.NetBareConfig;
import com.github.megatronking.netbare.NetBareListener;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.http.HttpInjectInterceptor;
import com.github.megatronking.netbare.http.HttpInterceptorFactory;
import com.github.megatronking.netbare.ssl.JKS;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -46,8 +46,8 @@ public void prepareJks() {
try {
JKS.install(activity.getApplicationContext(),
App.JSK_ALIAS, App.JSK_ALIAS);
- } catch (IOException e) {
- // 安装失败
+ } catch (Throwable e) {
+ EL.e(e);
}
}
}
diff --git a/build.gradle b/build.gradle
index 12bc87b..2f49378 100644
--- a/build.gradle
+++ b/build.gradle
@@ -10,15 +10,13 @@ buildscript {
jcenter { url 'http://maven.aliyun.com/repository/jcenter' }
jcenter { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/repository/gradle-plugin' }
+ mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
// classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.11"
// 添加插件
- classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
+ classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // add plugin
}
}
diff --git a/clean.sh b/clean.sh
new file mode 100644
index 0000000..8ad9812
--- /dev/null
+++ b/clean.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+source_common() {
+ pwd=$(
+ cd $(dirname $0)
+ pwd
+ )
+ source $pwd/common.sh
+}
+
+clean_task() {
+ logw "[$filename]>>>>clean project<<<<"
+ dir=("app" "netbare-core" "netbare-injector")
+ for element in "${dir[@]}"; do
+ #clean task
+ rm -rf $element/build/
+ rm -rf $element/bin/
+ rm -rf $element/gen/
+ rm -rf $element/.externalNativeBuild
+ logd "[$filename]clean $element over."
+ done
+
+ rm -rf build/
+ rm -rf release/
+ rm -rf releasebak/
+ rm -rf sh.exe.stackdump
+ rm -rf classes.dex
+ rm -rf .vs/
+ rm -rf .vscode/
+
+ if [ $# == 0 ]; then
+ logi "[$filename]clean project success. "
+ else
+ loge "[$filename]clean project Failed!"
+ fi
+
+}
+
+main() {
+ source_common
+ clean_task
+}
+
+main
diff --git a/cleanCache.sh b/cleanCache.sh
new file mode 100644
index 0000000..db95ebd
--- /dev/null
+++ b/cleanCache.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env bash
+
+source_common() {
+ pwd=$(
+ cd $(dirname $0)
+ pwd
+ )
+ source $pwd/common.sh
+}
+
+clean_caches() {
+
+ logw "[$filename]clean android studio cache!"
+ dir=("app" "netbare-core" "netbare-injector")
+
+ for element in "${dir[@]}"; do
+ #clean task
+ rm -rf $element/build/
+ rm -rf $element/bin/
+ rm -rf $element/gen/
+ rm -rf $element/.settings/
+ rm -rf $element/.externalNativeBuild
+ rm -rf $element/$element.iml
+ rm -rf $element/.gradle
+ logd "[$filename]clean $element over."
+ done
+
+ rm -rf build/
+ rm -rf release/
+ rm -rf releasebak/
+ rm -rf *.iml
+ rm -rf .gradle/
+ rm -rf .idea/
+ rm -rf sh.exe.stackdump
+ rm -rf classes.dex
+ rm -rf local.properties
+ rm -rf .vs/
+ rm -rf .vscode/
+
+ if [ $# == 0 ]; then
+ logw "[$filename]clean project success."
+ loge "[$filename]>>>>you must close android studio<<<<"
+ else
+ loge "[$filename]>>clean project Failed!<<"
+ fi
+
+}
+
+main() {
+ source_common
+ clean_caches
+}
+
+main
diff --git a/common.sh b/common.sh
new file mode 100644
index 0000000..a11e495
--- /dev/null
+++ b/common.sh
@@ -0,0 +1,202 @@
+#!/usr/bin/env bash
+# define global variable
+# file name
+filename=$(basename $0)
+# define adb
+iadb="adb"
+
+ipwd=$(
+ cd $(dirname $0)
+ pwd
+)
+readonly winadb="adb.exe"
+readonly macadb="adb"
+readonly linuxadb="adb"
+mdout="mdout"
+sed="sed"
+
+checkEnvArgs() {
+ unames=$(uname -s)
+ local cygwin="CYGWIN"
+ local mingw="MINGW"
+ local msys_nt="MSYS_NT"
+ local macos="Darwin"
+ local linux="Linux"
+ support_printf_os=""
+ if [ "$(echo $unames | grep "$cygwin")" != "" ]; then
+ echo "[$filename] your platform is win . cygwin"
+ red='\e[0;31m'
+ green='\e[0;32m'
+ yellow='\e[0;33m'
+ blue='\e[0;34m'
+ endColor='\e[0m'
+ ecs="echo -e"
+ dx="dx.bat"
+ gw="./gradlew.bat"
+ support_printf_os=""
+ mdout="${ipwd}\\tools\\windows\\mdout.exe"
+ sed="${ipwd}\\tools\\windows\\sed.exe"
+ if [ -z $ANDROID_HOME ]; then
+ iadb=$winadb
+ else
+ iadb="$ANDROID_HOME\\platform-tools\\adb.exe"
+ fi
+ elif [ "$(echo $unames | grep "$mingw")" != "" ]; then
+ echo "[$filename] your platform is win . mingw"
+ red='\033[31m'
+ green='\033[32m'
+ yellow='\033[33m'
+ blue='\033[34m'
+ endColor='\033[0m'
+ ecs="echo -e"
+ dx="dx.bat"
+ gw="./gradlew.bat"
+ support_printf_os=""
+ mdout="${ipwd}\\tools\\windows\\mdout.exe"
+ sed="${ipwd}\\tools\\windows\\sed.exe"
+ if [ -z $ANDROID_HOME ]; then
+ iadb=$winadb
+ else
+ iadb="$ANDROID_HOME\\platform-tools\\adb.exe"
+ fi
+ elif [ "$(echo $unames | grep "$msys_nt")" != "" ]; then
+ echo "[$filename] your platform is win10 . mingw"
+ red='\e[0;31m'
+ green='\e[0;32m'
+ yellow='\e[0;33m'
+ blue='\e[0;34m'
+ endColor='\e[0m'
+ ecs="echo -e"
+ dx="dx.bat"
+ gw="./gradlew.bat"
+ support_printf_os=""
+ mdout="${ipwd}\\tools\\windows\\mdout.exe"
+ sed="${ipwd}\\tools\\windows\\sed.exe"
+ if [ -z $ANDROID_HOME ]; then
+ iadb=$winadb
+ else
+ iadb="$ANDROID_HOME\\platform-tools\\adb.exe"
+ fi
+ elif [ "$(echo $unames | grep "$macos")" != "" ]; then
+ echo "[$filename] your platform is macos"
+ red='\033[31m'
+ green='\033[32m'
+ yellow='\033[33m'
+ blue='\033[34m'
+ endColor='\033[0m'
+ ecs="printf"
+ dx="dx"
+ gw="./gradlew"
+ support_printf_os="macos"
+ mdout="${ipwd}/tools/macos/mdout"
+ sed="${ipwd}/tools/macos/sed"
+ if [ -z $ANDROID_HOME ]; then
+ iadb=$macadb
+ else
+ iadb="$ANDROID_HOME/platform-tools/adb"
+ fi
+ elif [ "$(echo $unames | grep "$linux")" != "" ]; then
+ echo "[$filename] your platform is $linux"
+ red='\033[31m'
+ green='\033[32m'
+ yellow='\033[33m'
+ blue='\033[34m'
+ endColor='\033[0m'
+ ecs="printf"
+ dx="dx"
+ gw="./gradlew"
+ mdout="${ipwd}/tools/linux/mdout"
+ sed="${ipwd}/tools/linux/sed"
+ support_printf_os="$linux"
+ if [ -z $ANDROID_HOME ]; then
+ iadb=$linuxadb
+ else
+ iadb="$ANDROID_HOME/platform-tools/adb"
+ fi
+ else
+ echo "[$filename]your platform is $unames"
+ red='\033[31m'
+ green='\033[32m'
+ yellow='\033[33m'
+ endColor='\033[0m'
+ ecs="echo"
+ dx="dx"
+ gw="./gradlew"
+ support_printf_os=""
+ mdout="${ipwd}/tools/linux/mdout"
+ sed="${ipwd}/tools/linux/sed"
+ if [ -z $ANDROID_HOME ]; then
+ iadb=$macadb
+ else
+ iadb="$ANDROID_HOME/platform-tools/adb"
+ fi
+ fi
+ curtime=$(date "+%Y-%m-%d %H:%M:%S")
+}
+
+mdout_init() {
+ $mdout install
+}
+
+# make sure env
+makesureEnv() {
+ if [ "$curtime" = "" ]; then
+ checkEnvArgs
+ fi
+}
+logd() {
+ makesureEnv
+ if [ "$1" ] && [ ! "$support_printf_os" ]; then
+ $ecs "${blue}$1${endColor}"
+ else
+ $ecs "${blue}$1${endColor}\n"
+ fi
+}
+logi() {
+ makesureEnv
+ if [ "$1" ] && [ ! "$support_printf_os" ]; then
+ $ecs "${green}$1${endColor}"
+ else
+ $ecs "${green}$1${endColor}\n"
+ fi
+}
+loge() {
+ makesureEnv
+ if [ "$1" ] && [ ! "$support_printf_os" ]; then
+ $ecs "${red}$1${endColor}"
+ else
+ $ecs "${red}$1${endColor}\n"
+ fi
+}
+logw() {
+ makesureEnv
+ if [ "$1" ] && [ ! "$support_printf_os" ]; then
+ $ecs "${yellow}$1${endColor}"
+ else
+ $ecs "${yellow}$1${endColor}\n"
+ fi
+}
+test() {
+ logd "test log"
+ logi "test log"
+ loge "test log"
+ logw "test log"
+}
+#main() {
+# makesureEnv
+# mdout_init
+# test
+# logi $mdout
+#}
+#
+### call method
+#main
+
+#logd $0
+#logd $1
+if [ -n "$1" ]; then
+ logi "has one args"
+ chmod -R 777 tools/
+ $mdout install
+ git config core.filemode false
+fi
diff --git a/netbare-core/.gitignore b/netbare-core/.gitignore
deleted file mode 100644
index 796b96d..0000000
--- a/netbare-core/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareLog.java b/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareLog.java
deleted file mode 100644
index d9aff21..0000000
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareLog.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/* NetBare - An android network capture and injection library.
- * Copyright (C) 2018-2019 Megatron King
- * Copyright (C) 2018-2019 GuoShi
- *
- * NetBare is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * NetBare is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with NetBare.
- * If not, see
* Start and stop the NetBare service: *
*
@@ -67,17 +68,21 @@ private NetBare() {
mListeners = new LinkedHashSet<>();
}
+ public NetBare attachApplication(@NonNull Application application) {
+ return attachApplication(application, false);
+ }
+
/**
* Attach an application instance to NetBare. We recommend you to call this method in your
* {@link Application} class.
*
* @param application The application instance.
- * @param debug Should print logs in console.
+ * @param debug Should print logs in console.
* @return The single instance of NetBare.
*/
public NetBare attachApplication(@NonNull Application application, boolean debug) {
mApp = application;
- NetBareLog.setDebug(debug);
+ EL.getInstance().setDebug(debug);
return this;
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareConfig.java b/netbare/src/main/java/com/github/megatronking/netbare/NetBareConfig.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/NetBareConfig.java
rename to netbare/src/main/java/com/github/megatronking/netbare/NetBareConfig.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareListener.java b/netbare/src/main/java/com/github/megatronking/netbare/NetBareListener.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/NetBareListener.java
rename to netbare/src/main/java/com/github/megatronking/netbare/NetBareListener.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareService.java b/netbare/src/main/java/com/github/megatronking/netbare/NetBareService.java
similarity index 95%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/NetBareService.java
rename to netbare/src/main/java/com/github/megatronking/netbare/NetBareService.java
index 26ee735..4f178f1 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareService.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/NetBareService.java
@@ -22,6 +22,7 @@
import android.support.annotation.NonNull;
import com.github.megatronking.netbare.ssl.SSLEngineFactory;
+import com.sanbo.utils.EL;
/**
* Base class for NetBare services.
@@ -30,7 +31,7 @@
* route incoming and outgoing net packets. The NetBare service are forced to display a notification
* due to intercepting packets raises huge security concerns.
*
- *
+ *
* The NetBare service is managed by {@link NetBare}, and you can use {@link NetBareListener} to
* observe the state.
*
@@ -102,11 +103,10 @@ private void startNetBare() {
NetBareConfig config = NetBare.get().getConfig();
if (config == null) {
- throw new IllegalArgumentException("Must start NetBareService with a " +
- "NetBareConfig");
+ throw new IllegalArgumentException("Must start NetBareService with a NetBareConfig");
}
- NetBareLog.i("Start NetBare service!");
+ EL.i("Start NetBare service!");
SSLEngineFactory.updateProviders(config.keyManagerProvider, config.trustManagerProvider);
mNetBareThread = new NetBareThread(this, config);
mNetBareThread.start();
@@ -116,7 +116,7 @@ private void stopNetBare() {
if (mNetBareThread == null) {
return;
}
- NetBareLog.i("Stop NetBare service!");
+ EL.i("Stop NetBare service!");
mNetBareThread.interrupt();
mNetBareThread = null;
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareThread.java b/netbare/src/main/java/com/github/megatronking/netbare/NetBareThread.java
similarity index 96%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/NetBareThread.java
rename to netbare/src/main/java/com/github/megatronking/netbare/NetBareThread.java
index 14f1355..d301736 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareThread.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/NetBareThread.java
@@ -18,7 +18,6 @@
import android.content.pm.PackageManager;
import android.net.VpnService;
import android.os.ParcelFileDescriptor;
-import android.os.SystemClock;
import com.github.megatronking.netbare.ip.IpAddress;
import com.github.megatronking.netbare.ip.IpHeader;
@@ -28,6 +27,7 @@
import com.github.megatronking.netbare.proxy.ProxyServerForwarder;
import com.github.megatronking.netbare.proxy.TcpProxyServerForwarder;
import com.github.megatronking.netbare.proxy.UdpProxyServerForwarder;
+import com.sanbo.utils.EL;
import java.io.FileDescriptor;
import java.io.FileInputStream;
@@ -82,7 +82,7 @@ public void run() {
try {
packetsTransfer = new PacketsTransfer(mVpnService, mConfig);
} catch (IOException e) {
- NetBareLog.wtf(e);
+ EL.wtf(e);
}
if (packetsTransfer != null) {
// Establish VPN, it runs a while loop unless failed.
@@ -123,7 +123,7 @@ private void establishVpn(PacketsTransfer packetsTransfer) {
builder.addAllowedApplication(mVpnService.getPackageName());
}
} catch (PackageManager.NameNotFoundException e) {
- NetBareLog.wtf(e);
+ EL.wtf(e);
}
vpnDescriptor = builder.establish();
if (vpnDescriptor == null) {
@@ -147,7 +147,7 @@ private void establishVpn(PacketsTransfer packetsTransfer) {
}
} catch (IOException e) {
if (!isInterrupted()) {
- NetBareLog.wtf(e);
+ EL.wtf(e);
}
}
}
@@ -196,7 +196,7 @@ private void transfer(InputStream input, OutputStream output) throws IOException
private void transfer(byte[] packet, int len, OutputStream output) {
if (len < IpHeader.MIN_HEADER_LENGTH) {
- NetBareLog.w("Ip header length < " + IpHeader.MIN_HEADER_LENGTH);
+ EL.w("Ip header length < " + IpHeader.MIN_HEADER_LENGTH);
return;
}
IpHeader ipHeader = new IpHeader(packet, 0);
@@ -205,7 +205,7 @@ private void transfer(byte[] packet, int len, OutputStream output) {
if (forwarder != null) {
forwarder.forward(packet, len, output);
} else {
- NetBareLog.w("Unknown ip protocol: " + ipHeader.getProtocol());
+ EL.w("Unknown ip protocol: " + ipHeader.getProtocol());
}
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareUtils.java b/netbare/src/main/java/com/github/megatronking/netbare/NetBareUtils.java
similarity index 94%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/NetBareUtils.java
rename to netbare/src/main/java/com/github/megatronking/netbare/NetBareUtils.java
index 9bcfd32..e71a4fe 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareUtils.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/NetBareUtils.java
@@ -15,9 +15,10 @@
*/
package com.github.megatronking.netbare;
-import android.os.Build;
import android.text.TextUtils;
+import com.sanbo.utils.EL;
+
import java.io.Closeable;
import java.io.IOException;
@@ -99,7 +100,7 @@ public static void closeQuietly(Closeable closeable) {
try {
closeable.close();
} catch (IOException e) {
- NetBareLog.wtf(e);
+ EL.wtf(e);
}
}
}
@@ -151,13 +152,5 @@ public static int parseInt(String string, int radix, int defaultValue) {
return result;
}
- /**
- * Whether the OS build version is Android Q.
- *
- * @return True means the build android Q.
- */
- public static boolean isAndroidQ() {
- return "Q".equals(Build.VERSION.RELEASE);
- }
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareVirtualGateway.java b/netbare/src/main/java/com/github/megatronking/netbare/NetBareVirtualGateway.java
similarity index 99%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/NetBareVirtualGateway.java
rename to netbare/src/main/java/com/github/megatronking/netbare/NetBareVirtualGateway.java
index d49f1b7..f9c441a 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareVirtualGateway.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/NetBareVirtualGateway.java
@@ -54,7 +54,7 @@ public final class NetBareVirtualGateway extends VirtualGateway {
private final VirtualGateway mGateway;
private final Session mSession;
- private final NetBareXLog mLog;
+ private final XLog mLog;
private int mPolicy;
@@ -65,7 +65,7 @@ public NetBareVirtualGateway(Session session, Request request, Response response
super(session, request, response);
mGateway = NetBare.get().getGatewayFactory().create(session, request, response);
mSession = session;
- mLog = new NetBareXLog(session);
+ mLog = new XLog(session);
NetBareConfig config = NetBare.get().getConfig();
if (config == null || (config.excludeSelf && session.uid == Process.myUid())) {
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareXLog.java b/netbare/src/main/java/com/github/megatronking/netbare/XLog.java
similarity index 86%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/NetBareXLog.java
rename to netbare/src/main/java/com/github/megatronking/netbare/XLog.java
index 882ac79..977a8c0 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/NetBareXLog.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/XLog.java
@@ -17,6 +17,7 @@
import com.github.megatronking.netbare.net.Session;
import com.github.megatronking.netbare.ip.Protocol;
+import com.sanbo.utils.EL;
/**
* A log util using in NetBare, it uses the protocol, ip and port as the prefix.
@@ -24,7 +25,7 @@
* @author Megatron King
* @since 2018-10-14 10:25
*/
-public final class NetBareXLog {
+public final class XLog {
private final String mPrefix;
@@ -35,7 +36,7 @@ public final class NetBareXLog {
* @param ip The ip address, a string value.
* @param port The port, a short value.
*/
- public NetBareXLog(Protocol protocol, String ip, short port) {
+ public XLog(Protocol protocol, String ip, short port) {
this(protocol, ip, NetBareUtils.convertPort(port));
}
@@ -46,7 +47,7 @@ public NetBareXLog(Protocol protocol, String ip, short port) {
* @param ip The ip address, a int value.
* @param port The port, a short value.
*/
- public NetBareXLog(Protocol protocol, int ip, short port) {
+ public XLog(Protocol protocol, int ip, short port) {
this(protocol, NetBareUtils.convertIp(ip), port);
}
@@ -57,7 +58,7 @@ public NetBareXLog(Protocol protocol, int ip, short port) {
* @param ip The ip address, a int value.
* @param port The port, a int value.
*/
- public NetBareXLog(Protocol protocol, int ip, int port) {
+ public XLog(Protocol protocol, int ip, int port) {
this(protocol, NetBareUtils.convertIp(ip), port);
}
@@ -66,7 +67,7 @@ public NetBareXLog(Protocol protocol, int ip, int port) {
*
* @param session The session contains net information.
*/
- public NetBareXLog(Session session) {
+ public XLog(Session session) {
this(session.protocol, session.remoteIp, session.remotePort);
}
@@ -77,7 +78,7 @@ public NetBareXLog(Session session) {
* @param ip The ip address, a string value.
* @param port The port, a int value.
*/
- public NetBareXLog(Protocol protocol, String ip, int port) {
+ public XLog(Protocol protocol, String ip, int port) {
this.mPrefix = "[" + protocol.name() + "][" + ip + ":" + port + "]";
}
@@ -87,12 +88,12 @@ public NetBareXLog(Protocol protocol, String ip, int port) {
* @param msg The message you would like logged.
*/
public void v(String msg) {
- NetBareLog.v(mPrefix + msg);
+ EL.v(mPrefix + msg);
}
public void v(String msg, Object... args) {
- NetBareLog.v(mPrefix + msg, args);
+ EL.v(mPrefix + msg, args);
}
/**
@@ -101,7 +102,7 @@ public void v(String msg, Object... args) {
* @param msg The message you would like logged.
*/
public void d(String msg) {
- NetBareLog.d(mPrefix + msg);
+ EL.d(mPrefix + msg);
}
/**
@@ -111,7 +112,7 @@ public void d(String msg) {
* @param args Arguments referenced by the format specifiers in the format string.
*/
public void d(String msg, Object... args) {
- NetBareLog.d(mPrefix + msg, args);
+ EL.d(mPrefix + msg, args);
}
/**
@@ -120,7 +121,7 @@ public void d(String msg, Object... args) {
* @param msg The message you would like logged.
*/
public void i(String msg) {
- NetBareLog.i(mPrefix + msg);
+ EL.i(mPrefix + msg);
}
/**
@@ -130,7 +131,7 @@ public void i(String msg) {
* @param args Arguments referenced by the format specifiers in the format string.
*/
public void i(String msg, Object... args) {
- NetBareLog.i(mPrefix + msg, args);
+ EL.i(mPrefix + msg, args);
}
/**
@@ -139,7 +140,7 @@ public void i(String msg, Object... args) {
* @param msg The message you would like logged.
*/
public void e(String msg) {
- NetBareLog.e(mPrefix + msg);
+ EL.e(mPrefix + msg);
}
/**
@@ -149,7 +150,7 @@ public void e(String msg) {
* @param args Arguments referenced by the format specifiers in the format string.
*/
public void e(String msg, Object... args) {
- NetBareLog.e(mPrefix + msg, args);
+ EL.e(mPrefix + msg, args);
}
/**
@@ -158,7 +159,7 @@ public void e(String msg, Object... args) {
* @param msg The message you would like logged.
*/
public void w(String msg) {
- NetBareLog.w(mPrefix + msg);
+ EL.w(mPrefix + msg);
}
/**
@@ -168,7 +169,7 @@ public void w(String msg) {
* @param args Arguments referenced by the format specifiers in the format string.
*/
public void w(String msg, Object... args) {
- NetBareLog.w(mPrefix + msg, args);
+ EL.w(mPrefix + msg, args);
}
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/AbstractRequestChain.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/AbstractRequestChain.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/AbstractRequestChain.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/AbstractRequestChain.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/AbstractResponseChain.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/AbstractResponseChain.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/AbstractResponseChain.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/AbstractResponseChain.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/DefaultVirtualGateway.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/DefaultVirtualGateway.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/DefaultVirtualGateway.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/DefaultVirtualGateway.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/DefaultVirtualGatewayFactory.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/DefaultVirtualGatewayFactory.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/DefaultVirtualGatewayFactory.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/DefaultVirtualGatewayFactory.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/IndexedInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/IndexedInterceptor.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/IndexedInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/IndexedInterceptor.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/Interceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/Interceptor.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/Interceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/Interceptor.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/InterceptorChain.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/InterceptorChain.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/InterceptorChain.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/InterceptorChain.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/InterceptorFactory.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/InterceptorFactory.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/InterceptorFactory.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/InterceptorFactory.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/PendingIndexedInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/PendingIndexedInterceptor.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/PendingIndexedInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/PendingIndexedInterceptor.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/Request.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/Request.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/Request.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/Request.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/RequestChain.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/RequestChain.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/RequestChain.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/RequestChain.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/Response.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/Response.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/Response.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/Response.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/ResponseChain.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/ResponseChain.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/ResponseChain.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/ResponseChain.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/SSLCodecInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/gateway/SSLCodecInterceptor.java
similarity index 97%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/gateway/SSLCodecInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/gateway/SSLCodecInterceptor.java
index 262a9c9..bae0c03 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/gateway/SSLCodecInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/gateway/SSLCodecInterceptor.java
@@ -17,7 +17,7 @@
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.ssl.SSLCodec;
import com.github.megatronking.netbare.ssl.SSLEngineFactory;
import com.github.megatronking.netbare.ssl.SSLRefluxCallback;
@@ -45,7 +45,7 @@ public abstract class SSLCodecInterceptor mCallback;
- private NetBareXLog mLog;
+ private XLog mLog;
/* package */ Http2SniffInterceptor(SSLRefluxCallback callback) {
this.mCallback = callback;
@@ -46,7 +46,7 @@ protected void intercept(@NonNull HttpRequestChain chain, @NonNull ByteBuffer bu
if (index == 0) {
HttpRequest request = chain.request();
if (mLog == null) {
- mLog = new NetBareXLog(request.protocol(), request.ip(), request.port());
+ mLog = new XLog(request.protocol(), request.ip(), request.port());
}
// HTTP2 is forces to use SSL connection.
if (request.isHttps()) {
@@ -80,7 +80,7 @@ protected void intercept(@NonNull HttpResponseChain chain, @NonNull ByteBuffer b
if (index == 0) {
HttpResponse response = chain.response();
if (mLog == null) {
- mLog = new NetBareXLog(response.protocol(), response.ip(), response.port());
+ mLog = new XLog(response.protocol(), response.ip(), response.port());
}
// HTTP2 is forces to use SSL connection.
if (response.isHttps()) {
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpBody.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpBody.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpBody.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpBody.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderParseInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderParseInterceptor.java
similarity index 96%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderParseInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderParseInterceptor.java
index 510ac7f..4619dfe 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderParseInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderParseInterceptor.java
@@ -18,7 +18,7 @@
import android.support.annotation.NonNull;
import com.github.megatronking.netbare.NetBareUtils;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.ip.Protocol;
import java.io.IOException;
@@ -35,7 +35,7 @@
*/
/* package */ final class HttpHeaderParseInterceptor extends HttpIndexedInterceptor {
- private NetBareXLog mLog;
+ private XLog mLog;
@Override
protected void intercept(@NonNull HttpRequestChain chain, @NonNull ByteBuffer buffer,
@@ -45,7 +45,7 @@ protected void intercept(@NonNull HttpRequestChain chain, @NonNull ByteBuffer bu
return;
}
if (mLog == null) {
- mLog = new NetBareXLog(Protocol.TCP, chain.request().ip(), chain.request().port());
+ mLog = new XLog(Protocol.TCP, chain.request().ip(), chain.request().port());
}
parseRequestHeader(chain.request().session(), buffer);
chain.process(buffer);
@@ -59,7 +59,7 @@ protected void intercept(@NonNull HttpResponseChain chain, @NonNull ByteBuffer b
return;
}
if (mLog == null) {
- mLog = new NetBareXLog(Protocol.TCP, chain.response().ip(), chain.response().port());
+ mLog = new XLog(Protocol.TCP, chain.response().ip(), chain.response().port());
}
parseResponseHeader(chain.response().session(), buffer);
chain.process(buffer);
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpHeaderPart.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderPart.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpHeaderPart.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderPart.java
index c67c740..72971e3 100644
--- a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpHeaderPart.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderPart.java
@@ -19,8 +19,8 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import com.github.megatronking.netbare.utils.CaseInsensitiveLinkedMap;
import com.github.megatronking.netbare.stream.Stream;
+import com.github.megatronking.netbare.utils.CaseInsensitiveLinkedMap;
import java.util.ArrayList;
import java.util.List;
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSeparateInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSeparateInterceptor.java
similarity index 95%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSeparateInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSeparateInterceptor.java
index fe5df96..b62a9f9 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSeparateInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSeparateInterceptor.java
@@ -17,7 +17,7 @@
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.NetBareUtils;
import com.github.megatronking.netbare.ip.Protocol;
import com.google.common.primitives.Bytes;
@@ -36,13 +36,13 @@
private boolean mRequestHeaderHandled;
private boolean mResponseHeaderHandled;
- private NetBareXLog mLog;
+ private XLog mLog;
@Override
protected void intercept(@NonNull HttpRequestChain chain, @NonNull ByteBuffer buffer, int index)
throws IOException {
if (mLog == null) {
- mLog = new NetBareXLog(Protocol.TCP, chain.request().ip(), chain.request().port());
+ mLog = new XLog(Protocol.TCP, chain.request().ip(), chain.request().port());
}
if (mRequestHeaderHandled) {
chain.process(buffer);
@@ -84,7 +84,7 @@ protected void intercept(@NonNull HttpRequestChain chain, @NonNull ByteBuffer bu
protected void intercept(@NonNull HttpResponseChain chain, @NonNull ByteBuffer buffer, int index)
throws IOException {
if (mLog == null) {
- mLog = new NetBareXLog(Protocol.TCP, chain.response().ip(), chain.response().port());
+ mLog = new XLog(Protocol.TCP, chain.response().ip(), chain.response().port());
}
if (mResponseHeaderHandled) {
chain.process(buffer);
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSniffInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSniffInterceptor.java
similarity index 94%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSniffInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSniffInterceptor.java
index 2826e38..47a11ca 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSniffInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpHeaderSniffInterceptor.java
@@ -17,7 +17,7 @@
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.ssl.SSLRefluxCallback;
import java.io.IOException;
@@ -120,7 +120,7 @@ private boolean requestHeaderFirstByteNotPassed(byte first) {
return false;
default:
// Unknown first byte data.
- NetBareLog.w("Unknown first request header byte : " + first);
+ EL.w("Unknown first request header byte : " + first);
break;
}
return true;
@@ -137,7 +137,7 @@ private boolean requestHeaderMethodNotPassed(ByteBuffer buffer) {
return false;
}
}
- NetBareLog.w("Unknown request header method : " + headerMethod);
+ EL.w("Unknown request header method : " + headerMethod);
return true;
}
@@ -150,7 +150,7 @@ private boolean responseHeaderFirstByteNotPassed(byte first) {
return false;
default:
// Unknown first byte data.
- NetBareLog.w("Unknown first response header byte : " + first);
+ EL.w("Unknown first response header byte : " + first);
break;
}
return true;
@@ -168,7 +168,7 @@ private boolean responseHeaderProtocolNotPassed(ByteBuffer buffer) {
return false;
}
}
- NetBareLog.w("Unknown response header protocol : " + headerProtocol);
+ EL.w("Unknown response header protocol : " + headerProtocol);
return true;
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpId.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpId.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpId.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpId.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpIndexedInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpIndexedInterceptor.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpIndexedInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpIndexedInterceptor.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpInjectInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpInjectInterceptor.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpInjectInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpInjectInterceptor.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpInterceptor.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpInterceptor.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpInterceptorFactory.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpInterceptorFactory.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpInterceptorFactory.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpInterceptorFactory.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpInterceptorsFactory.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpInterceptorsFactory.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpInterceptorsFactory.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpInterceptorsFactory.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpMethod.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpMethod.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpMethod.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpMethod.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpMultiplexInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpMultiplexInterceptor.java
similarity index 94%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpMultiplexInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpMultiplexInterceptor.java
index 0c4e11c..4a92c7c 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpMultiplexInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpMultiplexInterceptor.java
@@ -17,7 +17,7 @@
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.ip.Protocol;
import java.io.IOException;
@@ -38,7 +38,7 @@
private final HttpZygoteResponse mZygoteResponse;
private int mResponseIndex;
- private NetBareXLog mLog;
+ private XLog mLog;
private boolean mWebSocket;
@@ -61,7 +61,7 @@ protected void intercept(@NonNull HttpRequestChain chain, @NonNull ByteBuffer bu
}
if (mResponseIndex > 0 && !mWebSocket) {
if (mLog == null) {
- mLog = new NetBareXLog(Protocol.TCP, chain.request().ip(), chain.request().port());
+ mLog = new XLog(Protocol.TCP, chain.request().ip(), chain.request().port());
}
mResponseIndex = 0;
mLog.w("Multiplex is found in one connection.");
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpPendingIndexedInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpPendingIndexedInterceptor.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpPendingIndexedInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpPendingIndexedInterceptor.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpProtocol.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpProtocol.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpProtocol.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpProtocol.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpRawBody.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpRawBody.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpRawBody.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpRawBody.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpRequest.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequest.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpRequest.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequest.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpRequestChain.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequestChain.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpRequestChain.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequestChain.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpRequestHeaderPart.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequestHeaderPart.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpRequestHeaderPart.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequestHeaderPart.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpRequestInjectorCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequestInjectorCallback.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpRequestInjectorCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequestInjectorCallback.java
index acec681..d79f507 100644
--- a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpRequestInjectorCallback.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpRequestInjectorCallback.java
@@ -15,8 +15,8 @@
*/
package com.github.megatronking.netbare.http;
-import com.github.megatronking.netbare.stream.Stream;
import com.github.megatronking.netbare.injector.InjectorCallback;
+import com.github.megatronking.netbare.stream.Stream;
import java.io.IOException;
import java.nio.ByteBuffer;
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpResponse.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponse.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpResponse.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponse.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpResponseChain.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponseChain.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpResponseChain.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponseChain.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpResponseHeaderPart.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponseHeaderPart.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpResponseHeaderPart.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponseHeaderPart.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpResponseInjectorCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponseInjectorCallback.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpResponseInjectorCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponseInjectorCallback.java
index 7001a65..b574cb5 100644
--- a/netbare-injector/src/main/java/com/github/megatronking/netbare/http/HttpResponseInjectorCallback.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpResponseInjectorCallback.java
@@ -15,8 +15,8 @@
*/
package com.github.megatronking.netbare.http;
-import com.github.megatronking.netbare.stream.Stream;
import com.github.megatronking.netbare.injector.InjectorCallback;
+import com.github.megatronking.netbare.stream.Stream;
import java.io.IOException;
import java.nio.ByteBuffer;
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLCodecInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLCodecInterceptor.java
similarity index 98%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLCodecInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLCodecInterceptor.java
index 80ce0df..1522099 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLCodecInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLCodecInterceptor.java
@@ -17,7 +17,7 @@
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.gateway.Request;
import com.github.megatronking.netbare.gateway.Response;
import com.github.megatronking.netbare.ip.Protocol;
@@ -45,7 +45,7 @@
private HttpSSLRequestCodec mRequestCodec;
private HttpSSLResponseCodec mResponseCodec;
- private NetBareXLog mLog;
+ private XLog mLog;
private boolean mClientAlpnResolved;
@@ -56,7 +56,7 @@
mRequestCodec = new HttpSSLRequestCodec(engineFactory);
mResponseCodec = new HttpSSLResponseCodec(engineFactory);
- mLog = new NetBareXLog(Protocol.TCP, request.ip(), request.port());
+ mLog = new XLog(Protocol.TCP, request.ip(), request.port());
}
@Override
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLRefluxInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLRefluxInterceptor.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLRefluxInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLRefluxInterceptor.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLRequestCodec.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLRequestCodec.java
similarity index 98%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLRequestCodec.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLRequestCodec.java
index 9294011..f643d79 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLRequestCodec.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLRequestCodec.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.http;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.ssl.SSLEngineFactory;
import com.github.megatronking.netbare.ssl.SSLRequestCodec;
@@ -85,7 +85,7 @@ private SSLEngine enableALPN(SSLEngine sslEngine) {
}
} catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException |
InvocationTargetException e) {
- NetBareLog.wtf(e);
+ EL.wtf(e);
}
return sslEngine;
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLResponseCodec.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLResponseCodec.java
similarity index 98%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLResponseCodec.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLResponseCodec.java
index 4ad55a8..522a2ba 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSSLResponseCodec.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSSLResponseCodec.java
@@ -18,7 +18,7 @@
import android.annotation.SuppressLint;
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.ssl.SSLEngineFactory;
import com.github.megatronking.netbare.ssl.SSLResponseCodec;
@@ -100,7 +100,7 @@ private void enableAlpn() {
mAlpnEnabled = true;
} catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException |
InvocationTargetException e) {
- NetBareLog.wtf(e);
+ EL.wtf(e);
}
}
@@ -184,7 +184,7 @@ private String getAlpnSelectedProtocol() {
}
} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException
| IllegalAccessException | InvocationTargetException e) {
- NetBareLog.e(e.getMessage());
+ EL.e(e.getMessage());
}
return alpnResult;
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSession.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSession.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSession.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpSession.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSessionFactory.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSessionFactory.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSessionFactory.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpSessionFactory.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSniffInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSniffInterceptor.java
similarity index 95%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSniffInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpSniffInterceptor.java
index 165c77a..b46989d 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpSniffInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpSniffInterceptor.java
@@ -17,7 +17,7 @@
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.ssl.SSLCodec;
import com.github.megatronking.netbare.ssl.SSLWhiteList;
@@ -53,7 +53,7 @@ protected void intercept(@NonNull HttpRequestChain chain, @NonNull ByteBuffer bu
if (index == 0) {
if (SSLWhiteList.contains(chain.request().ip())) {
mType = TYPE_WHITELIST;
- NetBareLog.i("detect whitelist ip " + chain.request().ip());
+ EL.i("detect whitelist ip " + chain.request().ip());
} else {
mType = chain.request().host() == null ? TYPE_INVALID : verifyHttpType(buffer);
}
@@ -108,7 +108,7 @@ private int verifyHttpType(ByteBuffer buffer) {
return TYPE_HTTPS;
default:
// Unknown first byte data.
- NetBareLog.e("Unknown first request byte : " + first);
+ EL.e("Unknown first request byte : " + first);
break;
}
return TYPE_INVALID;
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpVirtualGateway.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpVirtualGateway.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpVirtualGateway.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpVirtualGateway.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpVirtualGatewayFactory.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpVirtualGatewayFactory.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpVirtualGatewayFactory.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpVirtualGatewayFactory.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpZygoteRequest.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpZygoteRequest.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpZygoteRequest.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpZygoteRequest.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpZygoteResponse.java b/netbare/src/main/java/com/github/megatronking/netbare/http/HttpZygoteResponse.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http/HttpZygoteResponse.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http/HttpZygoteResponse.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/DecodeCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/DecodeCallback.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/DecodeCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/DecodeCallback.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/EncodeCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/EncodeCallback.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/EncodeCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/EncodeCallback.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/ErrorCode.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/ErrorCode.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/ErrorCode.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/ErrorCode.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/FrameType.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/FrameType.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/FrameType.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/FrameType.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Hpack.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/Hpack.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/Hpack.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/Hpack.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/Http2.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/Http2.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2DecodeInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/Http2DecodeInterceptor.java
similarity index 98%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2DecodeInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/Http2DecodeInterceptor.java
index 96863fa..498274c 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2DecodeInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http2/Http2DecodeInterceptor.java
@@ -17,7 +17,7 @@
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.http.HttpId;
import com.github.megatronking.netbare.http.HttpPendingIndexedInterceptor;
import com.github.megatronking.netbare.http.HttpProtocol;
@@ -56,7 +56,7 @@ public final class Http2DecodeInterceptor extends HttpPendingIndexedInterceptor
private Hpack.Reader mHpackRequestReader;
private Hpack.Reader mHpackResponseReader;
- private NetBareXLog mLog;
+ private XLog mLog;
public Http2DecodeInterceptor(SSLRefluxCallback refluxCallback,
HttpZygoteRequest zygoteRequest,
@@ -81,7 +81,7 @@ protected void intercept(@NonNull final HttpRequestChain chain, @NonNull ByteBuf
}
if (mLog == null) {
HttpRequest request = chain.request();
- mLog = new NetBareXLog(request.protocol(), request.ip(), request.port());
+ mLog = new XLog(request.protocol(), request.ip(), request.port());
}
if (mHpackRequestReader == null) {
mHpackRequestReader = new Hpack.Reader();
@@ -151,7 +151,7 @@ protected void intercept(@NonNull final HttpResponseChain chain, @NonNull ByteBu
}
if (mLog == null) {
HttpResponse response = chain.response();
- mLog = new NetBareXLog(response.protocol(), response.ip(), response.port());
+ mLog = new XLog(response.protocol(), response.ip(), response.port());
}
if (mHpackResponseReader == null) {
mHpackResponseReader = new Hpack.Reader();
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2EncodeInterceptor.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/Http2EncodeInterceptor.java
similarity index 97%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2EncodeInterceptor.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/Http2EncodeInterceptor.java
index 019584e..4aab305 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2EncodeInterceptor.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/http2/Http2EncodeInterceptor.java
@@ -17,7 +17,7 @@
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.gateway.InterceptorChain;
import com.github.megatronking.netbare.http.HttpInterceptor;
import com.github.megatronking.netbare.http.HttpProtocol;
@@ -44,7 +44,7 @@ public final class Http2EncodeInterceptor implements HttpInterceptor {
private final Map mStreamRequestIndexes;
private final Map mStreamResponseIndexes;
- private NetBareXLog mLog;
+ private XLog mLog;
private Hpack.Writer mHpackRequestWriter;
private Hpack.Writer mHpackResponseWriter;
@@ -60,7 +60,7 @@ public void intercept(@NonNull HttpRequestChain chain, @NonNull ByteBuffer buffe
if (chain.request().httpProtocol() == HttpProtocol.HTTP_2) {
if (mLog == null) {
HttpRequest request = chain.request();
- mLog = new NetBareXLog(request.protocol(), request.ip(), request.port());
+ mLog = new XLog(request.protocol(), request.ip(), request.port());
}
if (mHpackRequestWriter == null) {
mHpackRequestWriter = new Hpack.Writer();
@@ -91,7 +91,7 @@ public void intercept(@NonNull HttpResponseChain chain, @NonNull ByteBuffer buff
if (chain.response().httpProtocol() == HttpProtocol.HTTP_2) {
if (mLog == null) {
HttpResponse response = chain.response();
- mLog = new NetBareXLog(response.protocol(), response.ip(), response.port());
+ mLog = new XLog(response.protocol(), response.ip(), response.port());
}
if (mHpackResponseWriter == null) {
mHpackResponseWriter = new Hpack.Writer();
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2Settings.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/Http2Settings.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2Settings.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/Http2Settings.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2Stream.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/Http2Stream.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2Stream.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/Http2Stream.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2Updater.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/Http2Updater.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/Http2Updater.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/Http2Updater.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/http2/Huffman.java b/netbare/src/main/java/com/github/megatronking/netbare/http2/Huffman.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/http2/Huffman.java
rename to netbare/src/main/java/com/github/megatronking/netbare/http2/Huffman.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/injector/BlockedHttpInjector.java b/netbare/src/main/java/com/github/megatronking/netbare/injector/BlockedHttpInjector.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/injector/BlockedHttpInjector.java
rename to netbare/src/main/java/com/github/megatronking/netbare/injector/BlockedHttpInjector.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/injector/HttpInjector.java b/netbare/src/main/java/com/github/megatronking/netbare/injector/HttpInjector.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/injector/HttpInjector.java
rename to netbare/src/main/java/com/github/megatronking/netbare/injector/HttpInjector.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/injector/InjectorCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/injector/InjectorCallback.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/injector/InjectorCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/injector/InjectorCallback.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/injector/SimpleHttpInjector.java b/netbare/src/main/java/com/github/megatronking/netbare/injector/SimpleHttpInjector.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/injector/SimpleHttpInjector.java
rename to netbare/src/main/java/com/github/megatronking/netbare/injector/SimpleHttpInjector.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/io/ByteBufferInputStream.java b/netbare/src/main/java/com/github/megatronking/netbare/io/ByteBufferInputStream.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/io/ByteBufferInputStream.java
rename to netbare/src/main/java/com/github/megatronking/netbare/io/ByteBufferInputStream.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/io/HttpBodyInputStream.java b/netbare/src/main/java/com/github/megatronking/netbare/io/HttpBodyInputStream.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/io/HttpBodyInputStream.java
rename to netbare/src/main/java/com/github/megatronking/netbare/io/HttpBodyInputStream.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ip/Header.java b/netbare/src/main/java/com/github/megatronking/netbare/ip/Header.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ip/Header.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ip/Header.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ip/IcmpHeader.java b/netbare/src/main/java/com/github/megatronking/netbare/ip/IcmpHeader.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ip/IcmpHeader.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ip/IcmpHeader.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ip/IpAddress.java b/netbare/src/main/java/com/github/megatronking/netbare/ip/IpAddress.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ip/IpAddress.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ip/IpAddress.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ip/IpHeader.java b/netbare/src/main/java/com/github/megatronking/netbare/ip/IpHeader.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ip/IpHeader.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ip/IpHeader.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ip/Protocol.java b/netbare/src/main/java/com/github/megatronking/netbare/ip/Protocol.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ip/Protocol.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ip/Protocol.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ip/TcpHeader.java b/netbare/src/main/java/com/github/megatronking/netbare/ip/TcpHeader.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ip/TcpHeader.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ip/TcpHeader.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ip/UdpHeader.java b/netbare/src/main/java/com/github/megatronking/netbare/ip/UdpHeader.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ip/UdpHeader.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ip/UdpHeader.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/net/DumpCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/net/DumpCallback.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/net/DumpCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/net/DumpCallback.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/net/Net.java b/netbare/src/main/java/com/github/megatronking/netbare/net/Net.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/net/Net.java
rename to netbare/src/main/java/com/github/megatronking/netbare/net/Net.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/net/Session.java b/netbare/src/main/java/com/github/megatronking/netbare/net/Session.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/net/Session.java
rename to netbare/src/main/java/com/github/megatronking/netbare/net/Session.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/net/SessionProvider.java b/netbare/src/main/java/com/github/megatronking/netbare/net/SessionProvider.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/net/SessionProvider.java
rename to netbare/src/main/java/com/github/megatronking/netbare/net/SessionProvider.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/net/UidDumper.java b/netbare/src/main/java/com/github/megatronking/netbare/net/UidDumper.java
similarity index 94%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/net/UidDumper.java
rename to netbare/src/main/java/com/github/megatronking/netbare/net/UidDumper.java
index c24cff5..4a5f849 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/net/UidDumper.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/net/UidDumper.java
@@ -73,9 +73,13 @@ public UidDumper(String localIp, UidProvider provider) {
this.mDumpers.put(Protocol.TCP, new NetDumper[]{
new NetDumper("/proc/net/tcp6", localIp, IPV6_PATTERN),
new NetDumper("/proc/net/tcp", localIp, IPV4_PATTERN)});
- this.mDumpers.put(Protocol.UDP, new NetDumper[] {
- new NetDumper("/proc/net/udp6", localIp, IPV6_PATTERN),
- new NetDumper("/proc/net/udp", localIp, IPV4_PATTERN)});
+ this.mDumpers.put(Protocol.UDP, new NetDumper[]{
+ new NetDumper("/proc/net/udp6", localIp, IPV6_PATTERN),
+ new NetDumper("/proc/net/udp", localIp, IPV4_PATTERN),
+ new NetDumper("/proc/net/raw6", localIp, IPV6_PATTERN),
+ new NetDumper("/proc/net/raw", localIp, IPV4_PATTERN)
+ }
+ );
}
public void request(final Session session) {
@@ -86,10 +90,6 @@ public void request(final Session session) {
return;
}
}
- // Android Q abandons the access permission.
- if (NetBareUtils.isAndroidQ()) {
- return;
- }
final int port = NetBareUtils.convertPort(session.localPort);
try {
Net net = mNetCaches.get(session.remoteIp, new Callable() {
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/net/UidProvider.java b/netbare/src/main/java/com/github/megatronking/netbare/net/UidProvider.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/net/UidProvider.java
rename to netbare/src/main/java/com/github/megatronking/netbare/net/UidProvider.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/BaseProxyServer.java b/netbare/src/main/java/com/github/megatronking/netbare/proxy/BaseProxyServer.java
similarity index 95%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/proxy/BaseProxyServer.java
rename to netbare/src/main/java/com/github/megatronking/netbare/proxy/BaseProxyServer.java
index 2035986..d3b7d7c 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/BaseProxyServer.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/proxy/BaseProxyServer.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.proxy;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import java.io.IOException;
@@ -61,7 +61,7 @@ public void run() {
try {
process();
} catch (IOException e) {
- NetBareLog.e(e.getMessage());
+ EL.e(e.getMessage());
}
}
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/IcmpProxyServerForwarder.java b/netbare/src/main/java/com/github/megatronking/netbare/proxy/IcmpProxyServerForwarder.java
similarity index 90%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/proxy/IcmpProxyServerForwarder.java
rename to netbare/src/main/java/com/github/megatronking/netbare/proxy/IcmpProxyServerForwarder.java
index 5bf31b1..67d080e 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/IcmpProxyServerForwarder.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/proxy/IcmpProxyServerForwarder.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.proxy;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.ip.IcmpHeader;
import com.github.megatronking.netbare.ip.IpHeader;
@@ -38,8 +38,8 @@ public void prepare() {
public void forward(byte[] packet, int len, OutputStream output) {
IpHeader ipHeader = new IpHeader(packet, 0);
IcmpHeader icmpHeader = new IcmpHeader(ipHeader, packet, ipHeader.getHeaderLength());
- NetBareLog.v("ICMP type: " + icmpHeader.getType());
- NetBareLog.v("ICMP code: " + icmpHeader.getCode());
+ EL.v("ICMP type: " + icmpHeader.getType());
+ EL.v("ICMP code: " + icmpHeader.getCode());
// TODO transfer to proxy server
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/ProxyServer.java b/netbare/src/main/java/com/github/megatronking/netbare/proxy/ProxyServer.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/proxy/ProxyServer.java
rename to netbare/src/main/java/com/github/megatronking/netbare/proxy/ProxyServer.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/ProxyServerForwarder.java b/netbare/src/main/java/com/github/megatronking/netbare/proxy/ProxyServerForwarder.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/proxy/ProxyServerForwarder.java
rename to netbare/src/main/java/com/github/megatronking/netbare/proxy/ProxyServerForwarder.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServer.java b/netbare/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServer.java
similarity index 93%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServer.java
rename to netbare/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServer.java
index b5faa9c..af36920 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServer.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServer.java
@@ -17,7 +17,7 @@
import android.net.VpnService;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.NetBareUtils;
import com.github.megatronking.netbare.gateway.VirtualGateway;
import com.github.megatronking.netbare.net.Session;
@@ -86,7 +86,7 @@
this.mPort = (short) mServerSocketChannel.socket().getLocalPort();
this.mMtu = mtu;
- NetBareLog.v("[TCP]proxy server: %s:%d", ip, NetBareUtils.convertPort(mPort));
+ EL.v("[TCP]proxy server: %s:%d", ip, NetBareUtils.convertPort(mPort));
}
void setSessionProvider(SessionProvider sessionProvider) {
@@ -106,11 +106,11 @@ short getPort() {
@Override
public void run() {
- NetBareLog.i("[TCP]Server starts running.");
+ EL.i("[TCP]Server starts running.");
super.run();
NetBareUtils.closeQuietly(mSelector);
NetBareUtils.closeQuietly(mServerSocketChannel);
- NetBareLog.i("[TCP]Server stops running.");
+ EL.i("[TCP]Server stops running.");
}
@Override
@@ -205,24 +205,24 @@ private void handleException(IOException e, String ip) {
}
if (e instanceof SSLHandshakeException) {
// Client doesn't accept the MITM CA certificate.
- NetBareLog.e(e.getMessage());
+ EL.e(e.getMessage());
if (ip != null) {
- NetBareLog.i("add %s to whitelist", ip);
+ EL.i("add %s to whitelist", ip);
SSLWhiteList.add(ip);
}
} else if (e instanceof ConnectionShutdownException) {
// Connection exception, do not mind this.
- NetBareLog.e(e.getMessage());
+ EL.e(e.getMessage());
} else if (e instanceof ConnectException) {
// Connection timeout
- NetBareLog.e(e.getMessage());
+ EL.e(e.getMessage());
} else if (e instanceof SSLException && (e.getCause() instanceof EOFException)) {
// Connection shutdown manually
- NetBareLog.e(e.getMessage());
+ EL.e(e.getMessage());
} else {
- NetBareLog.wtf(e);
+ EL.wtf(e);
if (ip != null) {
- NetBareLog.i("add %s to whitelist", ip);
+ EL.i("add %s to whitelist", ip);
SSLWhiteList.add(ip);
}
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServerForwarder.java b/netbare/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServerForwarder.java
similarity index 93%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServerForwarder.java
rename to netbare/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServerForwarder.java
index d90f047..d40f71c 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServerForwarder.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/proxy/TcpProxyServerForwarder.java
@@ -17,7 +17,7 @@
import android.net.VpnService;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.NetBareUtils;
import com.github.megatronking.netbare.ip.IpHeader;
import com.github.megatronking.netbare.ip.Protocol;
@@ -68,10 +68,10 @@ public void forward(byte[] packet, int len, OutputStream output) {
// TCP data size
int tcpDataSize = ipHeader.getDataLength() - tcpHeader.getHeaderLength();
- NetBareLog.v("ip: %s:%d -> %s:%d", NetBareUtils.convertIp(localIp),
+ EL.v("ip: %s:%d -> %s:%d", NetBareUtils.convertIp(localIp),
NetBareUtils.convertPort(localPort), NetBareUtils.convertIp(remoteIp),
NetBareUtils.convertPort(remotePort));
- NetBareLog.v("tcp: %s, size: %d", tcpHeader.toString(), tcpDataSize);
+ EL.v("tcp: %s, size: %d", tcpHeader.toString(), tcpDataSize);
// Tcp handshakes and proxy forward flow.
@@ -106,7 +106,7 @@ public void forward(byte[] packet, int len, OutputStream output) {
// Proxy server responses forward client request.
Session session = mSessionProvider.query(remotePort);
if (session == null) {
- NetBareLog.w("No session saved with key: " + remotePort);
+ EL.w("No session saved with key: " + remotePort);
return;
}
// Forward proxy server response to client.
@@ -123,7 +123,7 @@ public void forward(byte[] packet, int len, OutputStream output) {
try {
output.write(packet, 0, len);
} catch (IOException e) {
- NetBareLog.e(e.getMessage());
+ EL.e(e.getMessage());
}
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServer.java b/netbare/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServer.java
similarity index 97%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServer.java
rename to netbare/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServer.java
index faddeb4..784474b 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServer.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServer.java
@@ -18,7 +18,7 @@
import android.net.VpnService;
import android.os.SystemClock;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.NetBareUtils;
import com.github.megatronking.netbare.gateway.VirtualGateway;
import com.github.megatronking.netbare.ip.IpHeader;
@@ -117,10 +117,10 @@ void send(UdpHeader header, OutputStream output) throws IOException {
@Override
public void run() {
- NetBareLog.i("[UDP]Server starts running.");
+ EL.i("[UDP]Server starts running.");
super.run();
NetBareUtils.closeQuietly(mSelector);
- NetBareLog.i("[UDP]Server stops running.");
+ EL.i("[UDP]Server stops running.");
}
@Override
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServerForwarder.java b/netbare/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServerForwarder.java
similarity index 92%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServerForwarder.java
rename to netbare/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServerForwarder.java
index d482ebb..e734ce9 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServerForwarder.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/proxy/UdpProxyServerForwarder.java
@@ -17,7 +17,7 @@
import android.net.VpnService;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.NetBareUtils;
import com.github.megatronking.netbare.ip.IpHeader;
import com.github.megatronking.netbare.ip.Protocol;
@@ -68,10 +68,10 @@ public void forward(byte[] packet, int len, OutputStream output) {
// UDP data size
int udpDataSize = ipHeader.getDataLength() - udpHeader.getHeaderLength();
- NetBareLog.v("ip: %s:%d -> %s:%d", NetBareUtils.convertIp(localIp),
+ EL.v("ip: %s:%d -> %s:%d", NetBareUtils.convertIp(localIp),
NetBareUtils.convertPort(localPort), NetBareUtils.convertIp(remoteIp),
NetBareUtils.convertPort(remotePort));
- NetBareLog.v("udp: %s, size: %d", udpHeader.toString(), udpDataSize);
+ EL.v("udp: %s, size: %d", udpHeader.toString(), udpDataSize);
Session session = mSessionProvider.ensureQuery(Protocol.UDP, localPort, remotePort, remoteIp);
session.packetIndex++;
@@ -80,7 +80,7 @@ public void forward(byte[] packet, int len, OutputStream output) {
mProxyServer.send(udpHeader, output);
session.sendDataSize += udpDataSize;
} catch (IOException e) {
- NetBareLog.e(e.getMessage());
+ EL.e(e.getMessage());
}
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/CertificateGenerator.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/CertificateGenerator.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/CertificateGenerator.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/CertificateGenerator.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/CertificateInstallActivity.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/CertificateInstallActivity.java
similarity index 87%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/CertificateInstallActivity.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/CertificateInstallActivity.java
index ad262d9..e2c9fb1 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/CertificateInstallActivity.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/ssl/CertificateInstallActivity.java
@@ -22,7 +22,7 @@
import android.security.KeyChain;
import android.support.annotation.Nullable;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import java.io.File;
import java.io.IOException;
@@ -51,7 +51,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
try {
startActivityForResult(intent, REQUEST_CODE_INSTALL);
} catch (ActivityNotFoundException e) {
- NetBareLog.e("Unable to start certificate installer.");
+ EL.e("Unable to start certificate installer.");
finish();
}
}
@@ -59,15 +59,19 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
+ EL.i("inside CertificateInstallActivity.onActivityResult requestCode: " + requestCode);
if (requestCode == REQUEST_CODE_INSTALL && resultCode == RESULT_OK) {
File jsk = new File(getCacheDir(),
getIntent().getStringExtra(EXTRA_ALIAS) + JKS.KEY_JKS_FILE_EXTENSION);
+
+ EL.i("inside CertificateInstallActivity.onActivityResult jsk file: " + jsk.getAbsolutePath());
+
try {
- if(!jsk.exists() && !jsk.createNewFile()) {
+ if (!jsk.exists() && !jsk.createNewFile()) {
throw new IOException("Create jks file failed.");
}
- } catch (IOException e) {
- NetBareLog.wtf(e);
+ } catch (Throwable e) {
+ EL.wtf(e);
}
}
finish();
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/JKS.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/JKS.java
similarity index 84%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/JKS.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/JKS.java
index 9cdd262..cb2d7ee 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/JKS.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/ssl/JKS.java
@@ -21,7 +21,7 @@
import android.security.KeyChain;
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.NetBareUtils;
import org.bouncycastle.openssl.jcajce.JcaPEMWriter;
@@ -100,19 +100,22 @@ String certOrganizationalUnitName() {
return certOrganizationalUnitName;
}
- public boolean isInstalled() {
- return aliasFile(KEY_STORE_FILE_EXTENSION).exists() &&
- aliasFile(KEY_PEM_FILE_EXTENSION).exists() &&
- aliasFile(KEY_JKS_FILE_EXTENSION).exists();
- }
+// public boolean isInstalled() {
+// return aliasFile(KEY_STORE_FILE_EXTENSION).exists() &&
+// aliasFile(KEY_PEM_FILE_EXTENSION).exists() &&
+// aliasFile(KEY_JKS_FILE_EXTENSION).exists();
+// }
public File aliasFile(String fileExtension) {
return new File(keystoreDir, alias + fileExtension);
}
private void createKeystore() {
- if (aliasFile(KEY_STORE_FILE_EXTENSION).exists() &&
- aliasFile(KEY_PEM_FILE_EXTENSION).exists()) {
+ final File p12 = aliasFile(KEY_STORE_FILE_EXTENSION);
+ final File pem = aliasFile(KEY_PEM_FILE_EXTENSION);
+ EL.i("inside JKS.createKeystore ");
+ if (p12.exists() &&
+ pem.exists()) {
return;
}
@@ -127,17 +130,19 @@ public void run() {
JcaPEMWriter pw = null;
try {
keystore = generator.generateRoot(JKS.this);
- os = new FileOutputStream(aliasFile(KEY_STORE_FILE_EXTENSION));
+ os = new FileOutputStream(p12);
keystore.store(os, password());
Certificate cert = keystore.getCertificate(alias());
- sw = new FileWriter(aliasFile(KEY_PEM_FILE_EXTENSION));
+ sw = new FileWriter(pem);
pw = new JcaPEMWriter(sw);
pw.writeObject(cert);
pw.flush();
- NetBareLog.i("Generate keystore succeed.");
- } catch (Exception e) {
- NetBareLog.e(e.getMessage());
+ EL.i("Generate keystore succeed.");
+ EL.i("inside JKS.createKeystore ");
+
+ } catch (Throwable e) {
+ EL.e(e);
} finally {
NetBareUtils.closeQuietly(os);
NetBareUtils.closeQuietly(sw);
@@ -151,20 +156,22 @@ public void run() {
* Whether the certificate with given alias has been installed.
*
* @param context Any context.
- * @param alias Key store alias.
+ * @param alias Key store alias.
* @return True if the certificate has been installed.
*/
public static boolean isInstalled(Context context, String alias) {
- return new File(context.getCacheDir(),
- alias + KEY_JKS_FILE_EXTENSION).exists();
+ File f = new File(context.getCacheDir(),
+ alias + KEY_JKS_FILE_EXTENSION);
+ EL.i("inside JKS.isInstalled(), alias file:" + f.getAbsolutePath());
+ return f.exists();
}
/**
* Install the self-signed root certificate.
*
* @param context Any context.
- * @param name Key chain name.
- * @param alias Key store alias.
+ * @param name Key chain name.
+ * @param alias Key store alias.
* @throws IOException If an IO error has occurred.
*/
public static void install(Context context, String name, String alias)
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLCodec.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLCodec.java
similarity index 99%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLCodec.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLCodec.java
index 925ef2e..f74e060 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLCodec.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLCodec.java
@@ -18,7 +18,7 @@
import android.os.Build;
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import java.io.EOFException;
import java.io.IOException;
@@ -214,7 +214,7 @@ private void startDecode(SSLEngine engine, ByteBuffer input, CodecCallback callb
throw new IOException("Handshake failed: Invalid handshake status: " + status);
} else if (status == SSLEngineResult.HandshakeStatus.FINISHED) {
mHandshakeFinished = true;
- NetBareLog.i("SSL handshake finished!");
+ EL.i("SSL handshake finished!");
if (input.hasRemaining()) {
decode(engine, input, callback);
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLEngineFactory.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLEngineFactory.java
similarity index 99%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLEngineFactory.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLEngineFactory.java
index cd232b7..3d65def 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLEngineFactory.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLEngineFactory.java
@@ -18,7 +18,7 @@
import android.os.Build;
import android.support.annotation.NonNull;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.NetBareUtils;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
@@ -285,7 +285,7 @@ private TrustManager[] getClientTrustManager() {
}
return trustManagers;
} catch (NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {
- NetBareLog.wtf(e);
+ EL.wtf(e);
}
return null;
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLKeyManagerProvider.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLKeyManagerProvider.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLKeyManagerProvider.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLKeyManagerProvider.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLRefluxCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLRefluxCallback.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLRefluxCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLRefluxCallback.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLRequestCodec.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLRequestCodec.java
similarity index 92%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLRequestCodec.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLRequestCodec.java
index 1d42931..5f5e7a1 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLRequestCodec.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLRequestCodec.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.ssl;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.gateway.Request;
import java.util.concurrent.ExecutionException;
@@ -58,7 +58,7 @@ protected SSLEngine createEngine(SSLEngineFactory factory) {
String host = mRequest.host();
if (host == null) {
// Unable to get host.
- NetBareLog.e("Failed to get SSL host.");
+ EL.e("Failed to get SSL host.");
return null;
}
try {
@@ -66,7 +66,7 @@ protected SSLEngine createEngine(SSLEngineFactory factory) {
mEngine.setUseClientMode(false);
mEngine.setNeedClientAuth(false);
} catch (ExecutionException e) {
- NetBareLog.e("Failed to create server SSLEngine: " + e.getMessage());
+ EL.e("Failed to create server SSLEngine: " + e.getMessage());
}
}
return mEngine;
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLResponseCodec.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLResponseCodec.java
similarity index 96%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLResponseCodec.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLResponseCodec.java
index 8c450fa..c039489 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLResponseCodec.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLResponseCodec.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.ssl;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.gateway.Request;
import java.io.IOException;
@@ -67,7 +67,7 @@ protected SSLEngine createEngine(SSLEngineFactory factory) {
mEngine = factory.createClientEngine(host, mRequest.port());
mEngine.setUseClientMode(true);
} catch (ExecutionException e) {
- NetBareLog.e("Failed to create client SSLEngine: " + e.getMessage());
+ EL.e("Failed to create client SSLEngine: " + e.getMessage());
}
}
return mEngine;
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLTrustManagerProvider.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLTrustManagerProvider.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLTrustManagerProvider.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLTrustManagerProvider.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLUtils.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLUtils.java
similarity index 96%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLUtils.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLUtils.java
index 31d839d..3dbc494 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLUtils.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLUtils.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.ssl;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import com.github.megatronking.netbare.http.HttpProtocol;
import java.nio.ByteBuffer;
@@ -86,7 +86,7 @@ public static int verifyPacket(ByteBuffer buffer) {
final int position = buffer.position();
// Get the packet length and wait until we get a packets worth of data to unwrap.
if (buffer.remaining() < SSL_RECORD_HEADER_LENGTH) {
- NetBareLog.w("No enough ssl/tls packet length: " + buffer.remaining());
+ EL.w("No enough ssl/tls packet length: " + buffer.remaining());
return PACKET_NOT_ENOUGH;
}
int packetLength = 0;
@@ -128,7 +128,7 @@ public static int verifyPacket(ByteBuffer buffer) {
packetLength = headerLength == 2 ?
(buffer.getShort(position) & 0x7FFF) + 2 : (buffer.getShort(position) & 0x3FFF) + 3;
if (packetLength <= headerLength) {
- NetBareLog.w("No enough ssl/tls packet length, packet: " + packetLength +
+ EL.w("No enough ssl/tls packet length, packet: " + packetLength +
" header: " + headerLength);
// No enough data.
return PACKET_NOT_ENOUGH;
@@ -140,7 +140,7 @@ public static int verifyPacket(ByteBuffer buffer) {
}
// Decode SSL data.
if (packetLength > buffer.remaining()) {
- NetBareLog.w("No enough ssl/tls packet length, packet: " + packetLength +
+ EL.w("No enough ssl/tls packet length, packet: " + packetLength +
" actual: " + buffer.remaining());
// Wait until the whole packet can be read.
return PACKET_NOT_ENOUGH;
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLWhiteList.java b/netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLWhiteList.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ssl/SSLWhiteList.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ssl/SSLWhiteList.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/stream/BufferStream.java b/netbare/src/main/java/com/github/megatronking/netbare/stream/BufferStream.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/stream/BufferStream.java
rename to netbare/src/main/java/com/github/megatronking/netbare/stream/BufferStream.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/stream/ByteStream.java b/netbare/src/main/java/com/github/megatronking/netbare/stream/ByteStream.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/stream/ByteStream.java
rename to netbare/src/main/java/com/github/megatronking/netbare/stream/ByteStream.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/stream/Stream.java b/netbare/src/main/java/com/github/megatronking/netbare/stream/Stream.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/stream/Stream.java
rename to netbare/src/main/java/com/github/megatronking/netbare/stream/Stream.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/stream/StringStream.java b/netbare/src/main/java/com/github/megatronking/netbare/stream/StringStream.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/stream/StringStream.java
rename to netbare/src/main/java/com/github/megatronking/netbare/stream/StringStream.java
diff --git a/netbare-injector/src/main/java/com/github/megatronking/netbare/stream/TinyFileStream.java b/netbare/src/main/java/com/github/megatronking/netbare/stream/TinyFileStream.java
similarity index 100%
rename from netbare-injector/src/main/java/com/github/megatronking/netbare/stream/TinyFileStream.java
rename to netbare/src/main/java/com/github/megatronking/netbare/stream/TinyFileStream.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tcp/TcpVirtualGateway.java b/netbare/src/main/java/com/github/megatronking/netbare/tcp/TcpVirtualGateway.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tcp/TcpVirtualGateway.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tcp/TcpVirtualGateway.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/ConnectionShutdownException.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/ConnectionShutdownException.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/ConnectionShutdownException.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/ConnectionShutdownException.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/NioCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/NioCallback.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/NioCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/NioCallback.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/NioTunnel.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/NioTunnel.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/NioTunnel.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/NioTunnel.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpProxyTunnel.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpProxyTunnel.java
similarity index 92%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpProxyTunnel.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpProxyTunnel.java
index 978f6dd..0beb8d5 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpProxyTunnel.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpProxyTunnel.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.tunnel;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.ip.Protocol;
import java.io.IOException;
@@ -33,12 +33,12 @@
*/
public class TcpProxyTunnel extends TcpTunnel {
- private NetBareXLog mLog;
+ private XLog mLog;
public TcpProxyTunnel(SocketChannel socketChannel, Selector selector, int remotePort) {
super(socketChannel, selector);
Socket socket = socketChannel.socket();
- this.mLog = new NetBareXLog(Protocol.TCP, socket.getInetAddress().getHostAddress(),
+ this.mLog = new XLog(Protocol.TCP, socket.getInetAddress().getHostAddress(),
remotePort);
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpRemoteTunnel.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpRemoteTunnel.java
similarity index 94%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpRemoteTunnel.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpRemoteTunnel.java
index 5eb660f..69814fd 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpRemoteTunnel.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpRemoteTunnel.java
@@ -17,7 +17,7 @@
import android.net.VpnService;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.ip.Protocol;
import java.io.IOException;
@@ -36,13 +36,13 @@ public class TcpRemoteTunnel extends TcpTunnel {
private final VpnService mVpnService;
- private NetBareXLog mLog;
+ private XLog mLog;
public TcpRemoteTunnel(VpnService vpnService, SocketChannel channel, Selector selector,
String remoteIp, int remotePort) {
super(channel, selector);
this.mVpnService = vpnService;
- this.mLog = new NetBareXLog(Protocol.TCP, remoteIp, remotePort);
+ this.mLog = new XLog(Protocol.TCP, remoteIp, remotePort);
}
@Override
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpTunnel.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpTunnel.java
similarity index 96%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpTunnel.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpTunnel.java
index 84c38aa..6eb25d3 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpTunnel.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpTunnel.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.tunnel;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import java.io.IOException;
import java.net.InetSocketAddress;
@@ -44,7 +44,7 @@ public abstract class TcpTunnel extends NioTunnel {
@Override
public void connect(InetSocketAddress address) throws IOException {
- NetBareLog.i("TCP connects to: %s:%s",
+ EL.i("TCP connects to: %s:%s",
address.getAddress().getHostAddress(), address.getPort());
if (mSocketChannel.isBlocking()) {
mSocketChannel.configureBlocking(false);
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpVATunnel.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpVATunnel.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/TcpVATunnel.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/TcpVATunnel.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/Tunnel.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/Tunnel.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/Tunnel.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/Tunnel.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/UdpRemoteTunnel.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/UdpRemoteTunnel.java
similarity index 93%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/UdpRemoteTunnel.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/UdpRemoteTunnel.java
index 47359ac..9c38b15 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/UdpRemoteTunnel.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/UdpRemoteTunnel.java
@@ -17,7 +17,7 @@
import android.net.VpnService;
-import com.github.megatronking.netbare.NetBareXLog;
+import com.github.megatronking.netbare.XLog;
import com.github.megatronking.netbare.ip.Protocol;
import java.io.IOException;
@@ -35,13 +35,13 @@
public class UdpRemoteTunnel extends UdpTunnel {
private final VpnService mVpnService;
- private NetBareXLog mLog;
+ private XLog mLog;
public UdpRemoteTunnel(VpnService vpnService, DatagramChannel channel, Selector selector,
String remoteIp, short remotePort) {
super(channel, selector);
this.mVpnService = vpnService;
- this.mLog = new NetBareXLog(Protocol.UDP, remoteIp, remotePort);
+ this.mLog = new XLog(Protocol.UDP, remoteIp, remotePort);
}
@Override
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/UdpTunnel.java b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/UdpTunnel.java
similarity index 95%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/UdpTunnel.java
rename to netbare/src/main/java/com/github/megatronking/netbare/tunnel/UdpTunnel.java
index 9d6fc81..fe51a5a 100644
--- a/netbare-core/src/main/java/com/github/megatronking/netbare/tunnel/UdpTunnel.java
+++ b/netbare/src/main/java/com/github/megatronking/netbare/tunnel/UdpTunnel.java
@@ -15,7 +15,7 @@
*/
package com.github.megatronking.netbare.tunnel;
-import com.github.megatronking.netbare.NetBareLog;
+import com.sanbo.utils.EL;
import java.io.IOException;
import java.net.DatagramSocket;
@@ -41,7 +41,7 @@ public abstract class UdpTunnel extends NioTunnel extends AbstractSet> {
private static final class MapEntry implements Entry {
- private final Entry entry;
+ private final Entry entry;
- private MapEntry(Entry entry) {
+ private MapEntry(Entry entry) {
this.entry = entry;
}
@@ -139,7 +139,7 @@ public V setValue(V value) {
return this.entry.setValue(value);
}
- private Entry getEntry() {
+ private Entry getEntry() {
return this.entry;
}
}
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ws/WebSocketCallback.java b/netbare/src/main/java/com/github/megatronking/netbare/ws/WebSocketCallback.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ws/WebSocketCallback.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ws/WebSocketCallback.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ws/WebSocketProtocol.java b/netbare/src/main/java/com/github/megatronking/netbare/ws/WebSocketProtocol.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ws/WebSocketProtocol.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ws/WebSocketProtocol.java
diff --git a/netbare-core/src/main/java/com/github/megatronking/netbare/ws/WebSocketReader.java b/netbare/src/main/java/com/github/megatronking/netbare/ws/WebSocketReader.java
similarity index 100%
rename from netbare-core/src/main/java/com/github/megatronking/netbare/ws/WebSocketReader.java
rename to netbare/src/main/java/com/github/megatronking/netbare/ws/WebSocketReader.java
diff --git a/netbare/src/main/java/com/sanbo/utils/EL.java b/netbare/src/main/java/com/sanbo/utils/EL.java
new file mode 100644
index 0000000..042045b
--- /dev/null
+++ b/netbare/src/main/java/com/sanbo/utils/EL.java
@@ -0,0 +1,1519 @@
+/* NetBare - An android network capture and injection library.
+ * Copyright (C) 2018-2019 Megatron King
+ * Copyright (C) 2018-2019 GuoShi
+ *
+ * NetBare is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * NetBare is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with NetBare.
+ * If not, see .
+ */
+package com.sanbo.utils;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.BaseBundle;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Message;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.github.megatronking.netbare.XLog;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.lang.ref.Reference;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+
+/**
+ * @Copyright © 2015 Sanbo Inc. All rights reserved.
+ * @Description
+ * Log统一管理类,提供功能:
+ * 1.log工具类支持全部打印 「支持Log的所有功能.」
+ * 2.支持类似C的格式化输出或Java的String.format「%个数和参数个数需要一直才能格式化」
+ * 3.支持Java堆栈打印
+ * 4.支持键入和不键入TAG 「不键入tag,tag是sanbo,默认第一个参数String为tag」
+ * 5.支持shell控制log是否打印.
+ * tag为sanbo的控制命令:setprop log.tag.sanbo log等级.
+ * log等级:VERBOSE/DEBUG/INFO/WARN/ERROR/ASSERT
+ * 6.格式化输出.
+ * 7.支持XML/JSON/Map/Array等更多对象打印
+ * 8.支持打印跳过堆栈
+ *
+ * @Version: 7.0
+ * @Create: 2019-04-30 11:28
+ * @Author: sanbo
+ */
+public final class EL {
+
+ //是否使用
+ private static final boolean INTERNAL_CONTROL_ENABLE = true;
+ // 是否打印bug.建议在application中调用init接口初始化
+ public static boolean USER_DEBUG;
+ // 解析属性最大层级
+ private static int MAX_CHILD_LEVEL;
+ // 换行符
+ private static String BR;
+ private static int JSON_INDENT;
+ // 是否接受shell控制打印
+ private static boolean isShellControl;
+ // 是否打印详细log,详细打印调用的堆栈
+ private static boolean isNeedCallstackInfo;
+ // 是否按照条形框输出,有包裹域的输出
+ private static boolean isNeedWrapper;
+ // 是否格式化展示,主要针对JSON
+ private static boolean isFormat;
+ private static Pattern mPattern;
+ // 默认tag
+ private static String DEFAULT_TAG;
+ // 临时tag.用法:调用log中大于1个参数,且第一个参数为字符串,且不是format用法,字符串长度没超过协议值,此时启用临时tag
+ private static String TEMP_TAG;
+ // 规定每段显示的长度.每行最大日志长度 (Android Studio3.1最多2902字符)
+ private static int LOG_MAXLENGTH;
+ // 类名(getClassName).方法名(getMethodName)[行号(getLineNumber)]
+ private static String content_simple_callstack;
+ // 格式化时,行首封闭符
+ private static String CONTENT_LINE;
+ // 空格
+ private static String CONTENT_SPACE;
+ private static String CONTENT_LOG_INFO;
+ private static String CONTENT_LOG_EMPTY;
+ private static String content_title_begin;
+ private static String content_title_info_callstack;
+ private static String content_title_info_log;
+ private static String content_title_info_error;
+ private static String content_title_info_type;
+ private static String content_title_end;
+ /**
+ * 行首为该符号时,不增加行首封闭符
+ */
+ private static String CONTENT_A;
+ private static String CONTENT_B;
+ private static String CONTENT_C;
+ private static String CONTENT_D;
+ private static String CONTENT_E;
+ private static String CONTENT_WARNNING_SHELL;
+ private static Character FORMATER;
+
+
+ static {
+ if (INTERNAL_CONTROL_ENABLE) {
+ // 解析属性最大层级
+ MAX_CHILD_LEVEL = 3;
+ // 换行符
+ BR = System.getProperty("line.separator");
+ JSON_INDENT = 2;
+ // 是否打印bug.建议在application中调用init接口初始化
+ USER_DEBUG = true;
+ // 是否接受shell控制打印
+ isShellControl = true;
+ // 是否打印详细log,详细打印调用的堆栈
+ isNeedCallstackInfo = false;
+ // 是否按照条形框输出,有包裹域的输出
+ isNeedWrapper = false;
+ // 是否格式化展示,主要针对JSON+简化堆栈
+ isFormat = true;
+ mPattern = Pattern.compile("%", Pattern.CASE_INSENSITIVE);
+ // 默认tag
+ DEFAULT_TAG = "sanbo";
+ // 临时tag.用法:调用log中大于1个参数,且第一个参数为字符串,且不是format用法,字符串长度没超过协议值,此时启用临时tag
+ TEMP_TAG = "";
+ // 规定每段显示的长度.每行最大日志长度 (Android Studio3.1最多2902字符)
+ LOG_MAXLENGTH = 2900;
+ // 类名(getClassName).方法名(getMethodName)[行号(getLineNumber)]
+ content_simple_callstack = "简易调用堆栈: %s.%s[%d]";
+ // 格式化时,行首封闭符
+ CONTENT_LINE = "║ ";
+ // 空格
+ CONTENT_SPACE = " ";
+ CONTENT_LOG_INFO = "log info:";
+ CONTENT_LOG_EMPTY = "打印的日志信息为空!";
+ content_title_begin =
+ "╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════";
+ content_title_info_callstack =
+ "╔══════════════════════════════════════════════════════════════调用详情══════════════════════════════════════════════════════════════";
+ content_title_info_log =
+ "╔══════════════════════════════════════════════════════════════日志详情══════════════════════════════════════════════════════════════";
+ content_title_info_error =
+ "╔══════════════════════════════════════════════════════════════异常详情══════════════════════════════════════════════════════════════";
+ content_title_info_type =
+ "╔════════════════════════════════════════════════════「%s」════════════════════════════════════════════════════";
+ content_title_end =
+ "╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════";
+ /**
+ * 行首为该符号时,不增加行首封闭符
+ */
+ CONTENT_A = CONTENT_LINE;
+ CONTENT_B = "╔";
+ CONTENT_C = "╚";
+ CONTENT_D = " ╔";
+ CONTENT_E = " ╚";
+ CONTENT_WARNNING_SHELL =
+ "Wranning....不够打印级别,请在命令行设置指令后重新尝试打印,命令行指令: adb shell setprop log.tag." + DEFAULT_TAG + " ";
+ Character FORMATER = '%';
+ }
+ }
+
+
+ /**
+ * 初始化接口
+ *
+ * @param showLog 是否展示log,默认展示
+ * @param shellControl 是否使用shell控制log动态打印.默认不使用. shell设置方式:setprop log.tag.sanbo INFO
+ * 最后一个参数为log等级,可选项目:VERBOSE/DEBUG/INFO/WARN/ERROR/ASSERT
+ * @param needWarpper 是否需要格式化输出
+ * @param needCallStackInfo 是否需要打印详细的堆栈调用信息.
+ * @param format 是否需要格式化.
+ * @param defaultTag android logcat的tag一个意义,不设置默认的tag为"sanbo"
+ */
+ public static void init(boolean showLog, boolean shellControl, boolean needWarpper, boolean needCallStackInfo,
+ boolean format, String defaultTag) {
+ USER_DEBUG = showLog;
+ isShellControl = shellControl;
+ isNeedWrapper = needWarpper;
+ isNeedCallstackInfo = needCallStackInfo;
+ isFormat = format;
+ if (!TextUtils.isEmpty(defaultTag)) {
+ DEFAULT_TAG = defaultTag;
+ }
+ }
+
+ /*********************************************************************************************************/
+ public static void v(Object... args) {
+ if (isShellControl) {
+ if (!Log.isLoggable(DEFAULT_TAG, Log.VERBOSE)) {
+ Log.v(DEFAULT_TAG, CONTENT_WARNNING_SHELL + "VERBOSE");
+ return;
+ }
+ }
+ parserArgsMain(MLEVEL.VERBOSE, args);
+ }
+
+ public static void d(Object... args) {
+ if (isShellControl) {
+ if (!Log.isLoggable(DEFAULT_TAG, Log.DEBUG)) {
+ Log.d(DEFAULT_TAG, CONTENT_WARNNING_SHELL + "DEBUG");
+ return;
+ }
+ }
+ parserArgsMain(MLEVEL.DEBUG, args);
+ }
+
+ public static void i(Object... args) {
+ if (isShellControl) {
+ if (!Log.isLoggable(DEFAULT_TAG, Log.INFO)) {
+ Log.i(DEFAULT_TAG, CONTENT_WARNNING_SHELL + "INFO");
+ return;
+ }
+ }
+ parserArgsMain(MLEVEL.INFO, args);
+ }
+
+ /*********************************************************************************************************/
+ /**
+ * 支持可变参数打印,根据不同的结构支持. 可以统一成一个接口
+ */
+
+ public static void w(Object... args) {
+ if (isShellControl) {
+ if (!Log.isLoggable(DEFAULT_TAG, Log.WARN)) {
+ Log.w(DEFAULT_TAG, CONTENT_WARNNING_SHELL + "WARN");
+ return;
+ }
+ }
+ parserArgsMain(MLEVEL.WARN, args);
+ }
+
+ public static void e(Object... args) {
+ if (isShellControl) {
+ if (!Log.isLoggable(DEFAULT_TAG, Log.ERROR)) {
+ Log.e(DEFAULT_TAG, CONTENT_WARNNING_SHELL + "ERROR");
+ return;
+ }
+ }
+ parserArgsMain(MLEVEL.ERROR, args);
+ }
+
+ public static void wtf(Object... args) {
+ if (isShellControl) {
+ if (!Log.isLoggable(DEFAULT_TAG, Log.ASSERT)) {
+ Log.wtf(DEFAULT_TAG, CONTENT_WARNNING_SHELL + "ASSERT");
+ return;
+ }
+ }
+ parserArgsMain(MLEVEL.WTF, args);
+ }
+
+ /**
+ * 解析参数入口.这步骤开始忽略类型.解析所有参数,参数检查逻辑: 1.是否为String,若为String,则先判断是否格式化输出,不是再进行字符串转换格式尝试 2.对象其他类型判断:
+ * StringBuffer>StringBuild>Throwable>Intent>List>Map
+ *
+ * @param level
+ * @param args
+ */
+ private static void parserArgsMain(int level, Object[] args) {
+
+ /*
+ * 确认打印
+ */
+ if (!USER_DEBUG || !INTERNAL_CONTROL_ENABLE) {
+ return;
+ }
+
+ StringBuilder sb = new StringBuilder();
+ // 开始
+// if (isFormat) {
+// sb.append(CONTENT_LOG_INFO).append("\n");
+// }
+ String stackinfo = getCallStaceInfo();
+ if (!TextUtils.isEmpty(stackinfo)) {
+ sb.append(stackinfo).append("\n");
+ }
+
+ if (args[0] instanceof String) {
+ // if (isNeedWrapper) {
+ // sb.append(content_title_info_log).append("\n");
+ // }
+ String one = (String) args[0];
+ // 解析fromat
+ if (one.contains(String.valueOf(FORMATER)) && args.length > 1) {
+
+ /*
+ * 参数解析
+ */
+ Object[] temp = new Object[args.length - 1];
+ for (int i = 1; i < args.length; i++) {
+ temp[i - 1] = args[i];
+ }
+
+ // 查找%个数
+ Matcher m = mPattern.matcher(one);
+ int count = 0;
+ while (m.find()) {
+ count++;
+ }
+
+ /**
+ * %和后面参数一样,则格式化,否则不进行格式化
+ */
+ if (count == temp.length) {
+ // 格式化操作
+ String log = String.format(Locale.getDefault(), one, temp);
+ if (isNeedWrapper) {
+ sb.append(content_title_info_log).append("\n");
+ }
+ sb.append(wrapperString(log)).append("\n");
+ } else {
+ if (isNeedWrapper) {
+ sb.append(content_title_info_log).append("\n");
+ }
+ StringBuilder tempSB = new StringBuilder();
+ for (Object obj : args) {
+ // 解析成字符串,添加
+ String tempStr = objectToString(obj);
+ // Log.i(DEFAULT_TAG, "tempStr:" + tempStr);
+ if (!TextUtils.isEmpty(tempStr)) {
+ // sb.append(nativeWrapperString(temp)).append("\n");
+ tempSB.append(tempStr).append("\t");
+ }
+ }
+ sb.append(wrapperString(tempSB.toString())).append("\n");
+ }
+ } else {
+ // 不符合format规则数据
+ if (args.length > 1) {
+ // 大于一次参数,第一个参数是字符串,默认是tag
+ String log = processTagCase(args);
+ if (!TextUtils.isEmpty(log)) {
+ sb.append(wrapperString(log)).append("\n");
+ } else {
+ // 需要支持打印""或者null
+ sb.append(wrapperString("")).append("\n");
+ }
+ } else {
+ if (isNeedWrapper) {
+ sb.append(content_title_info_log).append("\n");
+ }
+ sb.append(wrapperString(one)).append("\n");
+ }
+ }
+ } else {
+
+ for (Object obj : args) {
+ // 解析成字符串,添加
+ String temp = processObjectCase(obj);
+ // Log.i(DEFAULT_TAG, "temp:" + temp);
+ if (!TextUtils.isEmpty(temp)) {
+ // sb.append(nativeWrapperString(temp)).append("\n");
+ sb.append(temp).append("\n");
+ }
+ }
+ }
+ // 结束,标记结束符
+ if (isNeedWrapper) {
+ sb.append(content_title_end);
+ }
+ // 打印字符
+ preparePrint(level, sb.toString());
+
+ }
+
+ /**
+ * 处理对象
+ *
+ * @param obj
+ * @return
+ */
+ private static String processObjectCase(Object obj) {
+
+ StringBuilder sb = new StringBuilder();
+ try {
+ // 1.解析对象
+ String result = objectToString(obj);
+ if (!TextUtils.isEmpty(result)) {
+ // 2.打印行头
+ header(obj, sb);
+ // 3.打印内容
+ sb.append(wrapperString(result));// .append("\n");
+ } else {
+ // 需要支持""或null
+ if (isNeedWrapper) {
+ sb.append(content_title_info_log).append("\n");
+ }
+ sb.append(wrapperString(""));// .append("\n");
+ }
+ } catch (Throwable e) {
+ }
+ return sb.toString();
+ }
+
+ /**
+ *
+ * 只有第一个参数为字符串且不是格式化的情况下才会进入该方法.
+ * 该方法是负责处理tag或者message的情况. 主要要支持多重格式:
+ * 1.L.x(TAG,Object);
+ * 2.L.x(msg,Object);
+ * 默认第一个参数为字符串且参数大于2个,第一个参数就为tag
+ *
+ *
+ * @param args
+ * @return
+ */
+ private static String processTagCase(Object[] args) {
+ String one = (String) args[0];
+ StringBuilder sb = new StringBuilder();
+ TEMP_TAG = one;
+ for (int i = 1; i < args.length; i++) {
+ sb.append(processObjectCase(args[i])).append("\n");
+ }
+ return sb.toString();
+ }
+
+ /**
+ * 打印行头
+ *
+ * @param obj
+ * @param sb
+ */
+ private static void header(Object obj, StringBuilder sb) {
+ if (isNeedWrapper) {
+ if (obj instanceof String) {
+ sb.append(content_title_info_log).append("\n");
+ } else if (obj instanceof Throwable) {
+ sb.append(content_title_info_error).append("\n");
+ } else {
+ sb.append(String.format(content_title_info_type, obj.getClass().getName())).append("\n");
+ }
+ }
+ }
+
+ /**
+ * 处理堆栈信息
+ *
+ * @return
+ */
+ private static String getCallStaceInfo() {
+ Exception callStack = new Exception("debug_info call stack.");
+ StringBuilder sb = new StringBuilder();
+ StackTraceElement stackElement[] = Thread.currentThread().getStackTrace();
+ // 现在文件
+ boolean currentFile = false;
+ // 现在文件多重调用
+ boolean isKeeping = false;
+ for (StackTraceElement ste : stackElement) {
+ if (currentFile && !isKeeping) {
+ break;
+ }
+ // 跳过忽略的类
+ if (mIgnoreClasses.contains(ste.getClassName())) {
+ if (!currentFile) {
+ currentFile = true;
+ }
+ isKeeping = true;
+ continue;
+ } else {
+ if (currentFile) {
+
+ // 堆栈的错误第一行可以不要
+ String cc = null;
+ if (isNeedCallstackInfo) {
+ cc = parseString(callStack);
+ String[] tempArray = cc.split("\n");
+ StringBuilder tempSB = new StringBuilder();
+ for (int i = 1; i < tempArray.length; i++) {
+ tempSB.append(CONTENT_SPACE).append(CONTENT_SPACE).append(CONTENT_SPACE)
+ .append(tempArray[i]);
+ if (i != tempArray.length - 1) {
+ tempSB.append("\n");
+ }
+ }
+ cc = tempSB.toString();
+ }
+
+ if (isNeedWrapper) {
+ if (isNeedCallstackInfo) {
+
+ sb.append("\n").append(content_title_info_callstack).append("\n").append(CONTENT_LINE)
+ .append(CONTENT_SPACE).append("文件名: " + ste.getFileName()).append("\n")
+ .append(CONTENT_LINE).append(CONTENT_SPACE).append("类名: " + ste.getClassName())
+ .append("\n").append(CONTENT_LINE).append(CONTENT_SPACE)
+ .append("方法名: " + ste.getMethodName()).append("\n").append(CONTENT_LINE)
+ .append(CONTENT_SPACE).append("行号: " + ste.getLineNumber()).append("\n")
+ .append(CONTENT_LINE).append(CONTENT_SPACE)
+ .append("Native方法:" + (!ste.isNativeMethod() ? "不是" : "是")).append("\n")
+ .append(CONTENT_LINE).append(CONTENT_SPACE).append("调用堆栈详情:").append("\n")
+ .append(wrapperString(cc));
+ } else {
+ sb.append("\n").append(content_title_begin).append("\n").append(CONTENT_LINE)
+ .append(String.format(content_simple_callstack, ste.getClassName(), ste.getMethodName(),
+ ste.getLineNumber()));
+ // 上一层会处理
+ // .append("\n");
+ }
+ } else {
+ if (isNeedCallstackInfo) {
+ sb.append("文件名: " + ste.getFileName()).append("\n")
+ .append("类名: " + ste.getClassName()).append("\n")
+ .append("方法名: " + ste.getMethodName()).append("\n")
+ .append("行号: " + ste.getLineNumber()).append("\n")
+ .append("Native方法:" + (!ste.isNativeMethod() ? "不是" : "是")).append("\n")
+ .append("调用堆栈详情:").append("\n").append(wrapperString(cc));
+ } else {
+ if (isFormat) {
+ sb.append(String.format(content_simple_callstack, ste.getClassName(),
+ ste.getMethodName(), ste.getLineNumber()));
+ }
+ }
+ }
+
+ isKeeping = false;
+ break;
+ }
+ }
+ }
+ currentFile = false;
+ isKeeping = false;
+ callStack = null;
+ stackElement = null;
+ return sb.toString();
+ }
+
+ /*********************************************************************************************************/
+ /**
+ * 基础工具方法
+ */
+ /*********************************************************************************************************/
+
+ /*********************************************************************************************************/
+ private static String objectToString(Object object) {
+ return objectToString(object, 0);
+ }
+
+ /**
+ * 是否为静态内部类
+ *
+ * @param cla
+ * @return
+ */
+ private static boolean isStaticInnerClass(Class> cla) {
+ if (cla != null && cla.isMemberClass()) {
+ int modifiers = cla.getModifiers();
+ return (modifiers & Modifier.STATIC) == Modifier.STATIC;
+ }
+ return false;
+ }
+
+ /**
+ * 根据类型匹配
+ *
+ * @param object
+ * @param childLevel
+ * @return
+ */
+ private static String objectToString(Object object, int childLevel) {
+ if (object == null) {
+ return null;
+ }
+ if (childLevel > MAX_CHILD_LEVEL) {
+ return object.toString();
+ }
+ // 支持的类型.单独处理
+ Class> czz = object.getClass();
+
+ if (Build.VERSION.SDK_INT > 20) {
+ if (BaseBundle.class.isAssignableFrom(czz)) {
+ BaseBundle bundle = (BaseBundle) object;
+ return parseString(bundle);
+ }
+ } else {
+ if (Bundle.class.isAssignableFrom(czz)) {
+ Bundle bundle = (Bundle) object;
+ return parseString(bundle);
+ }
+ }
+ if (String.class.isAssignableFrom(czz)) {
+ String obj = (String) object;
+ return parseString(obj);
+ } else if (Number.class.isAssignableFrom(czz)) {
+ Number obj = (Number) object;
+ return String.valueOf(obj);
+ } else if (Intent.class.isAssignableFrom(czz)) {
+ Intent obj = (Intent) object;
+ return parseString(obj);
+ } else if (Collection.class.isAssignableFrom(czz)) {
+ Collection> obj = (Collection>) object;
+ return parseString(obj);
+ } else if (Map.class.isAssignableFrom(czz)) {
+ Map, ?> obj = (Map, ?>) object;
+ return parseString(obj);
+ } else if (Throwable.class.isAssignableFrom(czz)) {
+ Throwable obj = (Throwable) object;
+ return parseString(obj);
+ } else if (Reference.class.isAssignableFrom(czz)) {
+ Reference> obj = (Reference>) object;
+ return parseString(obj);
+ } else if (Message.class.isAssignableFrom(czz)) {
+ Message obj = (Message) object;
+ return parseString(obj);
+ // } else if (isSubClass(czz, Activity.class)) {
+ } else if (Activity.class.isAssignableFrom(czz)) {
+ Activity obj = (Activity) object;
+ return parseString(obj);
+ } else if (JSONArray.class.isAssignableFrom(czz)) {
+ JSONArray obj = (JSONArray) object;
+ return format(obj);
+ } else if (JSONObject.class.isAssignableFrom(czz)) {
+ JSONObject obj = (JSONObject) object;
+ return format(obj);
+ } else if (StringBuilder.class.isAssignableFrom(czz)) {
+ StringBuilder obj = (StringBuilder) object;
+ return obj.toString();
+ } else if (StringBuffer.class.isAssignableFrom(czz)) {
+ StringBuffer obj = (StringBuffer) object;
+ return obj.toString();
+ } else if (Class.class.isAssignableFrom(czz)) {
+ return parseStringByObject(object, childLevel);
+ } else if (isArray(object)) {
+ StringBuilder result = new StringBuilder();
+ traverseArray(result, object);
+ return result.toString();
+ } else {
+ if (object.toString().startsWith(object.getClass().getName() + "@")) {
+ return parseStringByObject(object, childLevel);
+ } else {
+ // 若对象重写toString()方法默认走toString()
+ return object.toString();
+ }
+ }
+ }
+
+ /**
+ * 拼接class的字段和值
+ *
+ * @param cla
+ * @param obj
+ * @param o 对象
+ * @param childOffset 递归解析属性的层级
+ */
+ private static void getClassFields(Class> cla, JSONObject obj, Object o, int childOffset) {
+ try {
+ if (cla.equals(Object.class)) {
+ return;
+ }
+ // if (isSubClass) {
+ // builder.append(BR + BR + "=> ");
+ // }
+ Field[] fields = cla.getDeclaredFields();
+ for (int i = 0; i < fields.length; ++i) {
+ Field field = fields[i];
+ field.setAccessible(true);
+ if (cla.isMemberClass() && !isStaticInnerClass(cla) && i == 0) {
+ continue;
+ }
+
+ if (field.getName().equals("$change")) {
+ continue;
+ }
+ // 解决Instant Run情况下内部类死循环的问题
+ // System.out.println(field.getName()+ "***" +subObject.getClass() + "啊啊啊啊啊啊" +
+ // cla);
+ if (!isStaticInnerClass(cla)
+ && (field.getName().equals("$change") || field.getName().equalsIgnoreCase("this$0"))) {
+ continue;
+ }
+ Object subObject = null;
+ try {
+ subObject = field.get(o);
+ } catch (IllegalAccessException e) {
+ subObject = e;
+ } finally {
+ if (subObject != null) {
+
+ if (childOffset < MAX_CHILD_LEVEL) {
+ if (!Number.class.isAssignableFrom(subObject.getClass())) {
+ subObject = objectToString(subObject, childOffset + 1);
+ String s = (String) subObject;
+ s = s.replaceAll("\n", "").replaceAll("\r", "").replaceAll("\r\n", "");
+ try {
+ JSONObject temp = new JSONObject(s);
+ obj.put(field.getName(), temp);
+ } catch (Throwable e) {
+ try {
+ JSONArray arr = new JSONArray(s);
+ obj.put(field.getName(), arr);
+ } catch (Throwable e2) {
+ obj.put(field.getName(), s);
+ }
+ }
+ } else {
+ obj.put(field.getName(), subObject);
+ }
+ } else {
+ obj.put(field.getName(), subObject.toString());
+ }
+ } else {
+ obj.put(field.getName(), "null");
+ }
+ }
+ }
+ } catch (Throwable e) {
+ }
+ }
+
+ /*********************************************************************************************************/
+ /**
+ * 解析对象成字符串
+ */
+
+ /**
+ * 获取数组的纬度
+ *
+ * @param object
+ * @return
+ */
+ private static int getArrayDimension(Object object) {
+ int dim = 0;
+ for (int i = 0; i < object.toString().length(); ++i) {
+ if (object.toString().charAt(i) == '[') {
+ ++dim;
+ } else {
+ break;
+ }
+ }
+ return dim;
+ }
+
+ /**
+ * 是否为数组
+ *
+ * @param object
+ * @return
+ */
+ private static boolean isArray(Object object) {
+ return object.getClass().isArray();
+ }
+
+ /**
+ * 获取数组类型
+ *
+ * @param object 如L为int型
+ * @return
+ */
+ private static char getType(Object object) {
+ if (isArray(object)) {
+ String str = object.toString();
+ return str.substring(str.lastIndexOf("[") + 1, str.lastIndexOf("[") + 2).charAt(0);
+ }
+ return 0;
+ }
+
+ /**
+ * 遍历数组
+ *
+ * @param result
+ * @param array
+ */
+ private static void traverseArray(StringBuilder result, Object array) {
+ if (isArray(array)) {
+ if (getArrayDimension(array) == 1) {
+ switch (getType(array)) {
+ case 'I':
+ result.append(Arrays.toString((int[]) array));
+ break;
+ case 'D':
+ result.append(Arrays.toString((double[]) array));
+ break;
+ case 'Z':
+ result.append(Arrays.toString((boolean[]) array));
+ break;
+ case 'B':
+ result.append(Arrays.toString((byte[]) array));
+ break;
+ case 'S':
+ result.append(Arrays.toString((short[]) array));
+ break;
+ case 'J':
+ result.append(Arrays.toString((long[]) array));
+ break;
+ case 'F':
+ result.append(Arrays.toString((float[]) array));
+ break;
+ case 'C':
+ result.append(Arrays.toString((char[]) array));
+ break;
+ case 'L':
+ Object[] objects = (Object[]) array;
+ result.append("[");
+ for (int i = 0; i < objects.length; ++i) {
+ result.append(objectToString(objects[i]));
+ if (i != objects.length - 1) {
+ result.append(",");
+ }
+ }
+ result.append("]");
+ break;
+ default:
+ result.append(Arrays.toString((Object[]) array));
+ break;
+ }
+ } else {
+ result.append("[");
+ for (int i = 0; i < ((Object[]) array).length; i++) {
+ traverseArray(result, ((Object[]) array)[i]);
+ if (i != ((Object[]) array).length - 1) {
+ result.append(",");
+ }
+ }
+ result.append("]");
+ }
+ } else {
+ result.append("not a array!!");
+ }
+ }
+
+ private static String parseStringByObject(Object object, int childLevel) {
+ try {
+ JSONObject obj = new JSONObject();
+ getClassFields(object.getClass(), obj, object, childLevel);
+ Class> superClass = object.getClass().getSuperclass();
+ if (superClass != null) {
+ while (!superClass.equals(Object.class)) {
+ getClassFields(superClass, obj, object, childLevel);
+ superClass = superClass.getSuperclass();
+ }
+ } else {
+ obj.put("toString", object.toString());
+ }
+ return format(obj);
+ } catch (Throwable e) {
+ return object.toString();
+ }
+ }
+
+ private static String parseString(Activity activity) {
+ JSONObject obj = new JSONObject();
+ // Field[] fields = activity.getClass().getDeclaredFields();
+ Field[] fields = activity.getClass().getFields();
+ for (Field f : fields) {
+ f.setAccessible(true);
+ if ("org.aspectj.lang.JoinPoint$StaticPart".equals(f.getType().getName())) {
+ continue;
+ }
+ if (f.getName().equals("$change") || f.getName().equalsIgnoreCase("this$0")) {
+ continue;
+ }
+ try {
+ Object fieldValue = f.get(activity);
+ obj.put(f.getName(), objectToString(fieldValue));
+ } catch (Throwable e) {
+ }
+ }
+
+ StringBuilder builder = new StringBuilder(activity.getClass().getName());
+ builder.append(" {");
+ builder.append(BR);
+ for (Field field : fields) {
+ field.setAccessible(true);
+ if ("org.aspectj.lang.JoinPoint$StaticPart".equals(field.getType().getName())) {
+ continue;
+ }
+ if (field.getName().equals("$change") || field.getName().equalsIgnoreCase("this$0")) {
+ continue;
+ }
+ try {
+ Object fieldValue = field.get(activity);
+ builder.append(field.getName()).append("=>").append(objectToString(fieldValue)).append(BR);
+ } catch (IllegalAccessException e) {
+ }
+ }
+ builder.append("}");
+ Log.d("www", builder.toString());
+ return format(obj);
+ }
+
+ private static String parseString(Message message) {
+ if (message == null) {
+ return null;
+ }
+ JSONObject obj = new JSONObject();
+ try {
+ obj.put("what", message.what);
+ obj.put("when", message.getWhen());
+ obj.put("arg1", message.arg1);
+ obj.put("arg2", message.arg2);
+ obj.put("data", parseString(message.getData()));
+ obj.put("obj", objectToString(message.obj));
+ } catch (Exception e) {
+ }
+ return format(obj);
+ }
+
+ private static String parseString(Reference> reference) {
+ Object actual = reference.get();
+ return objectToString(actual);
+ }
+
+ private static String parseString(Map, ?> map) {
+ JSONObject obj = new JSONObject();
+ Set> keys = map.keySet();
+ for (Object key : keys) {
+ try {
+ Object value = map.get(key);
+ if (key == null) {
+ key = "null";
+ }
+ if (value != null) {
+ obj.put(objectToString(key), objectToString(value));
+ } else {
+ obj.put(objectToString(key), "null");
+ }
+ } catch (Throwable e) {
+ }
+ }
+ return format(obj);
+
+ }
+
+ private static String parseString(Collection> collection) {
+
+ JSONArray arr = new JSONArray();
+ Iterator> it = collection.iterator();
+ while (it.hasNext()) {
+ Object o = it.next();
+ arr.put(objectToString(o));
+ }
+ return format(arr);
+ }
+
+ @TargetApi(21)
+ private static String parseString(BaseBundle bundle) {
+ if (bundle != null) {
+ JSONObject bun = new JSONObject();
+ for (String key : bundle.keySet()) {
+ try {
+ bun.put(key, objectToString(bundle.get(key)));
+ } catch (Throwable e) {
+ }
+ }
+ return format(bun);
+ }
+ return null;
+ }
+
+ private static String parseString(Bundle bundle) {
+ if (bundle != null) {
+ JSONObject bun = new JSONObject();
+ for (String key : bundle.keySet()) {
+ try {
+ bun.put(key, objectToString(bundle.get(key)));
+ } catch (Throwable e) {
+ }
+ }
+ return format(bun);
+ }
+ return null;
+ }
+
+ /**
+ * 处理对象且返回.处理顺序是: JSONObject>JSONArray>XML
+ *
+ * @param src
+ * @return
+ */
+ private static String parseString(String src) {
+ try {
+ JSONObject oo = new JSONObject(src);
+ return format(oo);
+ } catch (JSONException e1) {
+ // 不是JSONObject
+ try {
+ JSONArray arr = new JSONArray(src);
+ return format(arr);
+ } catch (JSONException e2) {
+ // 不是JSONArray
+
+ StringReader reader = null;
+ try {
+ reader = new StringReader(src);
+ Source xmlInput = new StreamSource(reader);
+ StreamResult xmlOutput = new StreamResult(new StringWriter());
+ Transformer transformer = TransformerFactory.newInstance().newTransformer();
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+ transformer.transform(xmlInput, xmlOutput);
+ String xml = xmlOutput.getWriter().toString().replaceFirst(">", ">\n");
+ return xml;
+ } catch (Throwable e3) {
+ // 不是XML
+ return src;
+ } finally {
+ if (reader != null) {
+ reader.close();
+ }
+ }
+ }
+ } catch (Throwable e) {
+ return src;
+ }
+ }
+
+ /**
+ * 将异常信息打印出来。出来数据是带行前的双竖线(如果设置wrapper是true),不带头
+ *
+ * @param e
+ * @return
+ */
+ private static String parseString(Throwable e) {
+ // 可以使用系统的这个接口
+ // return Log.getStackTraceString(e);
+ // 自己实现堆栈,较之官方的增加了两个字符的缩进
+ StringWriter sw = null;
+ PrintWriter pw = null;
+ StringBuilder sb = new StringBuilder();
+ try {
+ sw = new StringWriter();
+ pw = new PrintWriter(sw);
+ e.printStackTrace(pw);
+ pw.flush();
+ sw.flush();
+ String result = sw.toString();
+ String[] ss = result.split("\n");
+ String s = null;
+ for (int i = 0; i < ss.length; i++) {
+ s = ss[i];
+ // 一般首第一个字符不知道是什么东西
+ if (s.substring(1, 3).equalsIgnoreCase("at")) {
+ // 部分堆栈怕其他行缩进失误
+ // if (i > 0) {
+ sb.append(CONTENT_SPACE).append(s);
+ } else {
+ sb.append(s);
+ }
+ if (i != ss.length - 1) {
+ sb.append("\n");
+ }
+ }
+ } catch (Throwable error) {
+ } finally {
+ if (sw != null) {
+ try {
+ sw.close();
+ } catch (IOException igone1) {
+ igone1.printStackTrace();
+ }
+ }
+ if (pw != null) {
+ pw.close();
+ }
+ }
+ return sb.toString();
+ }
+
+ private static String parseString(Intent intent) {
+ JSONObject obj = new JSONObject();
+ try {
+ if (!TextUtils.isEmpty(intent.getScheme())) {
+ obj.put("Scheme", intent.getScheme());
+ }
+ if (!TextUtils.isEmpty(intent.getAction())) {
+ obj.put("Action", intent.getAction());
+ }
+ if (!TextUtils.isEmpty(intent.getDataString())) {
+ obj.put("DataString", intent.getDataString());
+ }
+ if (!TextUtils.isEmpty(intent.getType())) {
+ obj.put("Type", intent.getType());
+ }
+ if (!TextUtils.isEmpty(intent.getPackage())) {
+ obj.put("Package", intent.getPackage());
+ }
+ if (!TextUtils.isEmpty(intent.getComponent().toString())) {
+ obj.put("ComponentInfo", intent.getComponent().toString());
+ }
+ if (!TextUtils.isEmpty(intent.getCategories().toString())) {
+ obj.put("Categories", intent.getCategories().toString());
+ }
+ String extras = parseString(intent.getExtras());
+ if (!TextUtils.isEmpty(extras)) {
+ obj.put("Extras", extras);
+ }
+ String flags = getFlags(intent.getFlags());
+ if (!TextUtils.isEmpty(flags)) {
+ obj.put("Flags", intent.getType());
+ }
+ } catch (JSONException e) {
+ }
+
+ return format(obj);
+ }
+
+ private static String getFlags(int flags) {
+ // 获取相应信息
+ SparseArray flagMap = new SparseArray();
+ Class> cla = Intent.class;
+ Field[] fields = cla.getDeclaredFields();
+ for (Field field : fields) {
+ try {
+ field.setAccessible(true);
+ if (field.getName().startsWith("FLAG_")) {
+ int value = 0;
+ Object object = field.get(cla);
+ if (object instanceof Integer || object.getClass().getSimpleName().equals("int")) {
+ value = (Integer) object;
+ }
+
+ if (flagMap.get(value) == null) {
+ flagMap.put(value, field.getName());
+ }
+ }
+ } catch (Throwable e) {
+ }
+ }
+
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < flagMap.size(); i++) {
+ int flagKey = flagMap.keyAt(i);
+ if ((flagKey & flags) == flagKey) {
+ builder.append(flagMap.get(flagKey));
+ builder.append(" | ");
+ }
+ }
+ if (TextUtils.isEmpty(builder.toString())) {
+ builder.append(flags);
+ } else if (builder.indexOf("|") != -1) {
+ builder.delete(builder.length() - 2, builder.length());
+ }
+ return builder.toString();
+ }
+
+ /**
+ * 格式化输出JSONArray
+ *
+ * @param arr
+ * @return
+ */
+ private static String format(JSONArray arr) {
+ if (arr != null) {
+ try {
+ return isFormat ? (arr.toString(JSON_INDENT)) : arr.toString();
+ } catch (Exception e) {
+ }
+ }
+ return "";
+ }
+
+ /**
+ * 格式化输出JSONObject
+ *
+ * @param obj
+ * @return
+ */
+ private static String format(JSONObject obj) {
+
+ if (obj != null) {
+ try {
+ return isFormat ? obj.toString(JSON_INDENT) : obj.toString();
+ } catch (Exception e) {
+ }
+ }
+ return "";
+ }
+
+ /**
+ * 字符串处理,wrapper选中情况下,行首加封闭符
+ *
+ * @param log
+ * @return
+ */
+ private static String wrapperString(String log) {
+ StringBuilder sb = new StringBuilder();
+
+ if (TextUtils.isEmpty(log)) {
+ if (isNeedWrapper) {
+ sb.append(CONTENT_LINE);
+ }
+ sb.append(CONTENT_LOG_EMPTY);
+ return sb.toString();
+ }
+ String ss[] = new String[]{};
+ String temp = null;
+ if (log.contains("\n")) {
+ ss = log.split("\n");
+ if (ss.length > 0) {
+ sb = new StringBuilder();
+ for (int i = 0; i < ss.length; i++) {
+ temp = ss[i];
+ if (isNeedWrapper && !temp.startsWith(CONTENT_A) && !temp.startsWith(CONTENT_B)
+ && !temp.startsWith(CONTENT_C) && !temp.startsWith(CONTENT_D)
+ && !temp.startsWith(CONTENT_LOG_INFO) && !TextUtils.isEmpty(temp)
+ && !temp.startsWith(CONTENT_E)) {
+ sb.append(CONTENT_LINE);
+ }
+ sb.append(temp);
+
+ if (i != ss.length - 1) {
+ sb.append("\n");
+ }
+ }
+ }
+ } else if (log.contains("\r")) {
+ ss = log.split("\r");
+ if (ss.length > 0) {
+ sb = new StringBuilder();
+ for (int i = 0; i < ss.length; i++) {
+ temp = ss[i];
+
+ if (isNeedWrapper && !temp.startsWith(CONTENT_A) && !temp.startsWith(CONTENT_B)
+ && !temp.startsWith(CONTENT_D) && !temp.startsWith(CONTENT_E)
+ && !temp.startsWith(CONTENT_LOG_INFO) && !TextUtils.isEmpty(temp)
+ && !temp.startsWith(CONTENT_C)) {
+ sb.append(CONTENT_LINE);
+ }
+ sb.append(temp);
+ if (i != ss.length - 1) {
+ sb.append("\r");
+ }
+ }
+ }
+ } else if (log.contains("\r\n")) {
+ ss = log.split("\r\n");
+ if (ss.length > 0) {
+ sb = new StringBuilder();
+ for (int i = 0; i < ss.length; i++) {
+ temp = ss[i];
+
+ if (isNeedWrapper && !temp.startsWith(CONTENT_A) && !temp.startsWith(CONTENT_B)
+ && !temp.startsWith(CONTENT_D) && !temp.startsWith(CONTENT_E)
+ && !temp.startsWith(CONTENT_LOG_INFO) && !TextUtils.isEmpty(temp)
+ && !temp.startsWith(CONTENT_C)) {
+ sb.append(CONTENT_LINE);
+ }
+ sb.append(temp);
+
+ if (i != ss.length - 1) {
+ sb.append("\r\n");
+ }
+ }
+ }
+ } else if (log.contains("\n\r")) {
+ ss = log.split("\n\r");
+ if (ss.length > 0) {
+ sb = new StringBuilder();
+ for (int i = 0; i < ss.length; i++) {
+ temp = ss[i];
+ if (isNeedWrapper && !temp.startsWith(CONTENT_A) && !temp.startsWith(CONTENT_B)
+ && !temp.startsWith(CONTENT_D) && !temp.startsWith(CONTENT_E)
+ && !temp.startsWith(CONTENT_LOG_INFO) && !TextUtils.isEmpty(temp)
+ && !temp.startsWith(CONTENT_C)) {
+ sb.append(CONTENT_LINE);
+ }
+ sb.append(temp);
+
+ if (i != ss.length - 1) {
+ sb.append("\n\r");
+ }
+ }
+ }
+ } else {
+ if (isNeedWrapper && !log.startsWith(CONTENT_A) && !log.startsWith(CONTENT_B) && !log.startsWith(CONTENT_D)
+ && !log.startsWith(CONTENT_LOG_INFO) && !TextUtils.isEmpty(log) && !log.startsWith(CONTENT_E)
+ && !log.startsWith(CONTENT_C)) {
+ sb.append(CONTENT_LINE);
+ }
+ sb.append(log);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * 动态检查临时.切割大文件
+ *
+ * @param level
+ * @param msg
+ */
+ private static void preparePrint(int level, String msg) {
+ String tag = DEFAULT_TAG;
+ if (!TextUtils.isEmpty(TEMP_TAG)) {
+ tag = TEMP_TAG;
+ }
+
+ if (msg.length() > LOG_MAXLENGTH) {
+ List splitStr = getStringBysplitLine(msg, LOG_MAXLENGTH);
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < splitStr.size(); i++) {
+ /**
+ * 防止每行过短测试原始压缩
+ */
+ String line = splitStr.get(i);
+ if (sb.toString().getBytes().length + line.getBytes().length >= LOG_MAXLENGTH) {
+ realPrint(level, tag, wrapperString(sb.toString()));
+ sb = new StringBuffer().append(line);
+ } else {
+ sb.append(line);
+ }
+
+ }
+ if (sb.toString().length() > 0) {
+ realPrint(level, tag, wrapperString(sb.toString()));
+ sb = null;
+ }
+ } else {
+ realPrint(level, tag, wrapperString(msg));
+ }
+ TEMP_TAG = "";
+ }
+
+ /*********************************************************************************************************/
+ /**
+ * 格式化字符串、异常、JSONArray、JSONObject
+ */
+ /*********************************************************************************************************/
+
+ /**
+ * 真正打印单个信息
+ *
+ * @param level
+ * @param tag
+ * @param printStr
+ */
+ private static void realPrint(int level, String tag, String printStr) {
+ switch (level) {
+ case MLEVEL.DEBUG:
+ Log.d(tag, printStr);
+ break;
+ case MLEVEL.INFO:
+ Log.i(tag, printStr);
+ break;
+ case MLEVEL.ERROR:
+ Log.e(tag, printStr);
+ break;
+ case MLEVEL.VERBOSE:
+ Log.v(tag, printStr);
+ break;
+ case MLEVEL.WARN:
+ Log.w(tag, printStr);
+ break;
+ case MLEVEL.WTF:
+ Log.wtf(tag, printStr);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * 按行分割字符串
+ *
+ * @param msg
+ * @param maxLen
+ * @return
+ */
+ private static List getStringBysplitLine(String msg, int maxLen) {
+ List result = new ArrayList();
+ String[] lines = msg.split("\n");
+ if (lines.length == 1) {
+ lines = msg.split("\r");
+ if (lines.length == 1) {
+ lines = msg.split("\r\n");
+ if (lines.length == 1) {
+ lines = msg.split("\n\r");
+ }
+ }
+ }
+// Log.e("sanbo", msg.length() + "-----" + maxLen);
+// Log.e("sanbo", "分割成多行:" + lines.length);
+ if (lines.length > 1) {
+ for (int i = 0; i < lines.length; i++) {
+ String line = lines[i];
+ // 单行都超过最大长度,直接按照字符串分别来做
+ processLine(maxLen, result, line);
+ }
+ } else {
+ processLine(maxLen, result, msg);
+ }
+
+ return result;
+ }
+
+ /*********************************************************************************************************/
+ /**
+ * 字符串包裹处理
+ */
+ /*********************************************************************************************************/
+
+ /**
+ * 处理单行超长处理
+ *
+ * @param maxLen
+ * @param result
+ * @param line
+ */
+ private static void processLine(int maxLen, List result, String line) {
+ if (line.length() > maxLen) {
+ int current = 0;
+ String str;
+ while (true) {
+ try {
+ str = line.substring(current, current + maxLen);
+ result.add(str);
+ current += maxLen;
+ } catch (StringIndexOutOfBoundsException e) {
+ str = line.substring(current, line.length());
+ result.add(str);
+ break;
+ }
+ }
+ } else {
+ result.add(line);
+ }
+ }
+
+ /*********************************************************************************************************/
+ /**
+ * 打印方法
+ */
+ /*********************************************************************************************************/
+
+ /**
+ * 设置调试状态
+ *
+ * @param isShowLog
+ * @return
+ */
+ public EL setDebug(boolean isShowLog) {
+ USER_DEBUG = isShowLog;
+ return HLODER.INSTANCE;
+ }
+
+ /**
+ * 设置tag
+ *
+ * @param defaultTag
+ * @return
+ */
+ public EL setTag(String defaultTag) {
+ if (!TextUtils.isEmpty(defaultTag)) {
+ DEFAULT_TAG = defaultTag;
+ }
+ return HLODER.INSTANCE;
+ }
+
+
+ private static CopyOnWriteArrayList mIgnoreClasses = new CopyOnWriteArrayList();
+
+ /**
+ * 设置堆栈的类名字
+ *
+ * @param clazzes
+ * @return
+ */
+ public EL setIgnoreClass(Class>... clazzes) {
+ try {
+ for (int i = 0; i < clazzes.length; i++) {
+ String name = clazzes[i].getName();
+ if (!mIgnoreClasses.contains(name)) {
+ mIgnoreClasses.add(name);
+ }
+ }
+ } catch (Throwable e) {
+ Log.e(DEFAULT_TAG, Log.getStackTraceString(e));
+ }
+ return HLODER.INSTANCE;
+ }
+
+ public static final class MLEVEL {
+ public static final int VERBOSE = 0x1;
+ public static final int DEBUG = 0x2;
+ public static final int INFO = 0x3;
+ public static final int WARN = 0x4;
+ public static final int ERROR = 0x5;
+ public static final int WTF = 0x6;
+ }
+
+ private EL() {
+ setIgnoreClass(this.getClass());
+ setIgnoreClass(XLog.class);
+ }
+
+ public static EL getInstance() {
+ return HLODER.INSTANCE;
+ }
+
+ private static class HLODER {
+ private static final EL INSTANCE = new EL();
+ }
+}
diff --git a/netbare-core/src/main/res/values/styles.xml b/netbare/src/main/res/values/styles.xml
similarity index 100%
rename from netbare-core/src/main/res/values/styles.xml
rename to netbare/src/main/res/values/styles.xml
diff --git a/settings.gradle b/settings.gradle
index 79bd00c..e2fd1bc 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':netbare-core', ':netbare-injector', ':app'
+include ':netbare', ':app'