Skip protect socket from Lollipop

This commit is contained in:
M66B 2017-10-22 08:00:08 +02:00
parent d8cb7939b0
commit c5d583d425
3 changed files with 24 additions and 4 deletions

View File

@ -193,7 +193,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
private static final String ACTION_SCREEN_OFF_DELAYED = "eu.faircode.netguard.SCREEN_OFF_DELAYED";
private static final String ACTION_WATCHDOG = "eu.faircode.netguard.WATCHDOG";
private native void jni_init();
private native void jni_init(int sdk);
private native void jni_start(int tun, boolean fwd53, int rcode, int loglevel);
@ -1345,7 +1345,12 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
} catch (PackageManager.NameNotFoundException ex) {
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
}
else if (filter)
else if (filter) {
try {
builder.addDisallowedApplication(getPackageName());
} catch (PackageManager.NameNotFoundException ex) {
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
}
for (Rule rule : listRule)
if (!rule.apply || (!system && rule.system))
try {
@ -1354,6 +1359,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
} catch (PackageManager.NameNotFoundException ex) {
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
}
}
// Build configure intent
Intent configure = new Intent(this, ActivityMain.class);
@ -2164,7 +2170,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// Native init
jni_init();
jni_init(Build.VERSION.SDK_INT);
boolean pcap = prefs.getBoolean("pcap", false);
setPcap(pcap, this);

View File

@ -101,12 +101,13 @@ void JNI_OnUnload(JavaVM *vm, void *reserved) {
// JNI ServiceSinkhole
JNIEXPORT void JNICALL
Java_eu_faircode_netguard_ServiceSinkhole_jni_1init(JNIEnv *env, jobject instance) {
Java_eu_faircode_netguard_ServiceSinkhole_jni_1init(JNIEnv *env, jobject instance, jint sdk) {
loglevel = ANDROID_LOG_WARN;
struct arguments args;
args.env = env;
args.instance = instance;
args.sdk = sdk;
init(&args);
*socks5_addr = 0;
@ -417,9 +418,21 @@ void report_error(const struct arguments *args, jint error, const char *fmt, ...
static jmethodID midProtect = NULL;
int protect_socket(const struct arguments *args, int socket) {
if (args->sdk >= 21)
return 0;
jclass cls = (*args->env)->GetObjectClass(args->env, args->instance);
if (cls == NULL) {
log_android(ANDROID_LOG_ERROR, "protect socket failed to get class");
return -1;
}
if (midProtect == NULL)
midProtect = jniGetMethodID(args->env, cls, "protect", "(I)Z");
if (midProtect == NULL) {
log_android(ANDROID_LOG_ERROR, "protect socket failed to get method");
return -1;
}
jboolean isProtected = (*args->env)->CallBooleanMethod(
args->env, args->instance, midProtect, socket);

View File

@ -67,6 +67,7 @@
struct arguments {
JNIEnv *env;
jobject instance;
int sdk;
int tun;
jboolean fwd53;
jint rcode;