Made rcode configurable

This commit is contained in:
M66B 2017-02-10 21:12:04 +01:00
parent ca65ab92a0
commit 589ac7db4d
8 changed files with 28 additions and 8 deletions

View File

@ -223,12 +223,14 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
EditTextPreference pref_dns1 = (EditTextPreference) screen.findPreference("dns");
EditTextPreference pref_dns2 = (EditTextPreference) screen.findPreference("dns2");
EditTextPreference pref_ttl = (EditTextPreference) screen.findPreference("ttl");
EditTextPreference pref_rcode = (EditTextPreference) screen.findPreference("rcode");
List<String> def_dns = Util.getDefaultDNS(this);
pref_dns1.getEditText().setHint(def_dns.get(0));
pref_dns2.getEditText().setHint(def_dns.get(1));
pref_dns1.setTitle(getString(R.string.setting_dns, prefs.getString("dns", def_dns.get(0))));
pref_dns2.setTitle(getString(R.string.setting_dns, prefs.getString("dns2", def_dns.get(1))));
pref_ttl.setTitle(getString(R.string.setting_ttl, prefs.getString("ttl", "259200")));
pref_rcode.setTitle(getString(R.string.setting_rcode, prefs.getString("rcode", "3")));
// SOCKS5 parameters
screen.findPreference("socks5_addr").setTitle(getString(R.string.setting_socks5_addr, prefs.getString("socks5_addr", "-")));
@ -245,9 +247,10 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
// Show resolved
Preference pref_show_resolved = screen.findPreference("show_resolved");
if (Util.isPlayStoreInstall(this))
if (Util.isPlayStoreInstall(this)) {
cat_advanced.removePreference(pref_show_resolved);
else
cat_advanced.removePreference(pref_rcode);
} else
pref_show_resolved.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
@ -671,7 +674,12 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
getPreferenceScreen().findPreference(name).setTitle(
getString(R.string.setting_ttl, prefs.getString(name, "259200")));
else if ("socks5_enabled".equals(name))
else if ("rcode".equals(name)) {
getPreferenceScreen().findPreference(name).setTitle(
getString(R.string.setting_rcode, prefs.getString(name, "3")));
ServiceSinkhole.reload("changed " + name, this);
} else if ("socks5_enabled".equals(name))
ServiceSinkhole.reload("changed " + name, this);
else if ("socks5_addr".equals(name)) {

View File

@ -176,7 +176,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
private native void jni_init();
private native void jni_start(int tun, boolean fwd53, int loglevel);
private native void jni_start(int tun, boolean fwd53, int rcode, int loglevel);
private native void jni_stop(int tun, boolean clr);
@ -1187,6 +1187,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
if (log || log_app || filter) {
int prio = Integer.parseInt(prefs.getString("loglevel", Integer.toString(Log.WARN)));
int rcode = Integer.parseInt(prefs.getString("rcode", "3"));
if (prefs.getBoolean("socks5_enabled", false))
jni_socks5(
prefs.getString("socks5_addr", ""),
@ -1195,7 +1196,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
prefs.getString("socks5_password", ""));
else
jni_socks5("", 0, "", "");
jni_start(vpn.getFd(), mapForward.containsKey(53), prio);
jni_start(vpn.getFd(), mapForward.containsKey(53), rcode, prio);
}
}

View File

@ -232,9 +232,9 @@ int check_domain(const struct arguments *args, const struct udp_session *u,
else
inet_pton(AF_INET6, "::1", addr);
// Experiment
// Send selected negative response
rlen = datalen;
rh->rcode = 3; // NXDOMAIN
rh->rcode = (uint16_t) args->rcode;
rh->ans_count = 0;
// Send response

View File

@ -130,7 +130,7 @@ Java_eu_faircode_netguard_ServiceSinkhole_jni_1init(JNIEnv *env, jobject instanc
JNIEXPORT void JNICALL
Java_eu_faircode_netguard_ServiceSinkhole_jni_1start(
JNIEnv *env, jobject instance, jint tun, jboolean fwd53, jint loglevel_) {
JNIEnv *env, jobject instance, jint tun, jboolean fwd53, jint rcode, jint loglevel_) {
loglevel = loglevel_;
max_tun_msg = 0;
@ -157,6 +157,7 @@ Java_eu_faircode_netguard_ServiceSinkhole_jni_1start(
args->instance = (*env)->NewGlobalRef(env, instance);
args->tun = tun;
args->fwd53 = fwd53;
args->rcode = rcode;
// Start native thread
int err = pthread_create(&thread_id, NULL, handle_events, (void *) args);

View File

@ -70,6 +70,7 @@ struct arguments {
jobject instance;
int tun;
jboolean fwd53;
jint rcode;
};
struct allowed {

View File

@ -96,6 +96,7 @@ however it is impossible to guarantee NetGuard will work correctly on every devi
<string name="setting_vpn6">VPN IPv6: %s</string>
<string name="setting_dns">VPN DNS: %s</string>
<string name="setting_ttl">Minimum DNS TTL: %s s</string>
<string name="setting_rcode">DNS response code: %s</string>
<string name="setting_socks5_enabled">Use SOCKS5 proxy</string>
<string name="setting_socks5_addr">SOCKS5 address: %s</string>
<string name="setting_socks5_port">SOCKS5 port: %s</string>

View File

@ -200,6 +200,10 @@
android:dependency="filter"
android:inputType="number"
android:key="ttl" />
<EditTextPreference
android:dependency="filter"
android:inputType="number"
android:key="rcode" />
<CheckBoxPreference
android:defaultValue="false"
android:dependency="filter"

View File

@ -200,6 +200,10 @@
android:dependency="filter"
android:inputType="number"
android:key="ttl" />
<EditTextPreference
android:dependency="filter"
android:inputType="number"
android:key="rcode" />
<eu.faircode.netguard.SwitchPreference
android:defaultValue="false"
android:dependency="filter"