diff options
Diffstat (limited to '3rdParty/Unbound')
-rw-r--r-- | 3rdParty/Unbound/01_android_fixes.diff | 31 | ||||
-rw-r--r-- | 3rdParty/Unbound/SConscript | 188 | ||||
-rw-r--r-- | 3rdParty/Unbound/src/android/dns/dns_android.cpp | 82 | ||||
-rw-r--r-- | 3rdParty/Unbound/src/android/dns/dns_android.h | 41 |
4 files changed, 242 insertions, 100 deletions
diff --git a/3rdParty/Unbound/01_android_fixes.diff b/3rdParty/Unbound/01_android_fixes.diff index c8144ad..40b01e0 100644 --- a/3rdParty/Unbound/01_android_fixes.diff +++ b/3rdParty/Unbound/01_android_fixes.diff @@ -1,13 +1,30 @@ ---- a/3rdParty/Unbound/src/unbound/libunbound/libunbound.c -+++ b/3rdParty/Unbound/src/unbound/libunbound/libunbound.c -@@ -812,6 +812,10 @@ ub_ctx_resolvconf(struct ub_ctx* ctx, char* fname) +diff -rupN ./3rdParty/Unbound/src/unbound/libunbound/libunbound.c ./3rdParty/Unbound/src/unbound/libunbound/libunbound.c +--- ./3rdParty/Unbound/src/unbound/libunbound/libunbound.c 2012-01-12 13:52:38.000000000 +0000 ++++ ./3rdParty/Unbound/src/unbound/libunbound/libunbound.c 2014-07-10 09:21:22.999839053 +0100 +@@ -66,6 +66,10 @@ + #include <iphlpapi.h> + #endif /* UB_ON_WINDOWS */ + ++#ifdef __ANDROID__ ++#include "dns_android.h" ++#endif ++ + struct ub_ctx* + ub_ctx_create(void) + { +@@ -811,6 +815,15 @@ ub_ctx_resolvconf(struct ub_ctx* ctx, ch + char buf[1024]; char* parse, *addr; int r; - +#ifdef __ANDROID__ -+ ub_ctx_set_fwd(ctx, "8.8.8.8"); -+ ub_ctx_set_fwd(ctx, "8.8.4.4"); ++ int i; ++ r = dns_android_server_count(); ++ for (i = 0; i < r; ++i) { ++ if (dns_android_server_get(i, buf, sizeof(buf)) == DNS_ANDROID_SUCCESS) { ++ ub_ctx_set_fwd(ctx, buf); ++ } ++ } +#endif + if(fname == NULL) { #if !defined(UB_ON_WINDOWS) || !defined(HAVE_WINDOWS_H) - fname = "/etc/resolv.conf";
\ No newline at end of file diff --git a/3rdParty/Unbound/SConscript b/3rdParty/Unbound/SConscript index 99cd6a3..fee2fa3 100644 --- a/3rdParty/Unbound/SConscript +++ b/3rdParty/Unbound/SConscript @@ -2,107 +2,109 @@ Import("env") if env.get("UNBOUND_BUNDLED", False) : - if env["PLATFORM"] == "win32" : - cppflags = ["/I" + Dir("#/3rdParty/Unbound/src/unbound").abspath] - else : - cppflags = [("-isystem", Dir("#/3rdParty/Unbound/src/unbound").abspath)] + if env["PLATFORM"] == "win32" : + cppflags = ["/I" + Dir("#/3rdParty/Unbound/src/unbound").abspath] + else : + cppflags = [("-isystem", Dir("#/3rdParty/Unbound/src/unbound").abspath)] ################################################################################ # Flags ################################################################################ - - if env["SCONS_STAGE"] == "flags" : - env["UNBOUND_FLAGS"] = { - "CPPPATH": [Dir("src/unbound/libunbound")], - "CPPFLAGS": cppflags, - "LIBPATH": [env.Dir(".")], - "LIBS": ["Swiften_Unbound"], - } - if env["target"] == "android" : - env["UNBOUND_FLAGS"]["CPPPATH"].append(Dir("src/android/compat")) + + if env["SCONS_STAGE"] == "flags" : + env["UNBOUND_FLAGS"] = { + "CPPPATH": [Dir("src/unbound/libunbound")], + "CPPFLAGS": cppflags, + "LIBPATH": [env.Dir(".")], + "LIBS": ["Swiften_Unbound"], + } + if env["target"] == "android" : + env["UNBOUND_FLAGS"]["CPPPATH"].append(Dir("src/android/compat")) ################################################################################ # Build ################################################################################ - if env["SCONS_STAGE"] == "build" : - myenv = env.Clone() - myenv.Append(CPPDEFINES = [("UNBOUND_STATICLIB")]) - myenv.Append(CPPPATH = ["../Ldns/src/ldns", "src/unbound", "."]) - if env["target"] == "android" : - myenv.Append(CPPPATH = ["src/android/compat", "src/android/config"]) - myenv.Append(CPPPATH = ["../Ldns/src/android"]) - myenv.UseFlags(env["OPENSSL_FLAGS"]) + if env["SCONS_STAGE"] == "build" : + myenv = env.Clone() + myenv.Append(CPPDEFINES = [("UNBOUND_STATICLIB")]) + myenv.Append(CPPPATH = ["../Ldns/src/ldns", "src/unbound", "."]) + if env["target"] == "android" : + myenv.Append(CPPPATH = ["src/android/compat", "src/android/config"]) + myenv.Append(CPPPATH = ["src/android/dns"]) + myenv.Append(CPPPATH = ["../Ldns/src/android"]) + myenv.UseFlags(env["OPENSSL_FLAGS"]) - unbound_objects = [ - "src/unbound/daemon/acl_list.c", - "src/unbound/daemon/cachedump.c", - "src/unbound/daemon/daemon.c", - "src/unbound/daemon/remote.c", - "src/unbound/daemon/stats.c", - "src/unbound/daemon/unbound.c", - # duplicate symbols: "src/src/daemon/worker.c", - "src/unbound/iterator/iter_delegpt.c", - "src/unbound/iterator/iter_donotq.c", - "src/unbound/iterator/iter_fwd.c", - "src/unbound/iterator/iter_hints.c", - "src/unbound/iterator/iter_priv.c", - "src/unbound/iterator/iter_resptype.c", - "src/unbound/iterator/iter_scrub.c", - "src/unbound/iterator/iter_utils.c", - "src/unbound/iterator/iterator.c", - "src/unbound/libunbound/context.c", - "src/unbound/libunbound/libunbound.c", - "src/unbound/libunbound/libworker.c", - "src/unbound/services/cache/dns.c", - "src/unbound/services/cache/infra.c", - "src/unbound/services/cache/rrset.c", - "src/unbound/services/listen_dnsport.c", - "src/unbound/services/localzone.c", - "src/unbound/services/mesh.c", - "src/unbound/services/modstack.c", - "src/unbound/services/outbound_list.c", - "src/unbound/services/outside_network.c", - "src/unbound/util/alloc.c", - "src/unbound/util/config_file.c", - "src/unbound/util/configlexer.c", - "src/unbound/util/configparser.c", - "src/unbound/util/data/dname.c", - "src/unbound/util/data/msgencode.c", - "src/unbound/util/data/msgparse.c", - "src/unbound/util/data/msgreply.c", - "src/unbound/util/data/packed_rrset.c", - "src/unbound/util/fptr_wlist.c", - "src/unbound/util/locks.c", - "src/unbound/util/log.c", - "src/unbound/util/mini_event.c", - "src/unbound/util/module.c", - "src/unbound/util/net_help.c", - "src/unbound/util/netevent.c", - "src/unbound/util/random.c", - "src/unbound/util/rbtree.c", - "src/unbound/util/regional.c", - "src/unbound/util/rtt.c", - "src/unbound/util/storage/dnstree.c", - "src/unbound/util/storage/lookup3.c", - "src/unbound/util/storage/lruhash.c", - "src/unbound/util/storage/slabhash.c", - "src/unbound/util/timehist.c", - "src/unbound/util/tube.c", - #src/unbound/util/winsock_event.c - "src/unbound/validator/autotrust.c", - "src/unbound/validator/val_anchor.c", - "src/unbound/validator/val_kcache.c", - "src/unbound/validator/val_kentry.c", - "src/unbound/validator/val_neg.c", - "src/unbound/validator/val_nsec.c", - "src/unbound/validator/val_nsec3.c", - "src/unbound/validator/val_secalgo.c", - "src/unbound/validator/val_sigcrypt.c", - "src/unbound/validator/val_utils.c", - "src/unbound/validator/validator.c", - ] - if env["target"] == "android" : - unbound_objects.append("src/android/compat/glob.c") - env["UNBOUND_OBJECTS"] = myenv.SwiftenObject(unbound_objects) + unbound_objects = [ + "src/unbound/daemon/acl_list.c", + "src/unbound/daemon/cachedump.c", + "src/unbound/daemon/daemon.c", + "src/unbound/daemon/remote.c", + "src/unbound/daemon/stats.c", + "src/unbound/daemon/unbound.c", + # duplicate symbols: "src/src/daemon/worker.c", + "src/unbound/iterator/iter_delegpt.c", + "src/unbound/iterator/iter_donotq.c", + "src/unbound/iterator/iter_fwd.c", + "src/unbound/iterator/iter_hints.c", + "src/unbound/iterator/iter_priv.c", + "src/unbound/iterator/iter_resptype.c", + "src/unbound/iterator/iter_scrub.c", + "src/unbound/iterator/iter_utils.c", + "src/unbound/iterator/iterator.c", + "src/unbound/libunbound/context.c", + "src/unbound/libunbound/libunbound.c", + "src/unbound/libunbound/libworker.c", + "src/unbound/services/cache/dns.c", + "src/unbound/services/cache/infra.c", + "src/unbound/services/cache/rrset.c", + "src/unbound/services/listen_dnsport.c", + "src/unbound/services/localzone.c", + "src/unbound/services/mesh.c", + "src/unbound/services/modstack.c", + "src/unbound/services/outbound_list.c", + "src/unbound/services/outside_network.c", + "src/unbound/util/alloc.c", + "src/unbound/util/config_file.c", + "src/unbound/util/configlexer.c", + "src/unbound/util/configparser.c", + "src/unbound/util/data/dname.c", + "src/unbound/util/data/msgencode.c", + "src/unbound/util/data/msgparse.c", + "src/unbound/util/data/msgreply.c", + "src/unbound/util/data/packed_rrset.c", + "src/unbound/util/fptr_wlist.c", + "src/unbound/util/locks.c", + "src/unbound/util/log.c", + "src/unbound/util/mini_event.c", + "src/unbound/util/module.c", + "src/unbound/util/net_help.c", + "src/unbound/util/netevent.c", + "src/unbound/util/random.c", + "src/unbound/util/rbtree.c", + "src/unbound/util/regional.c", + "src/unbound/util/rtt.c", + "src/unbound/util/storage/dnstree.c", + "src/unbound/util/storage/lookup3.c", + "src/unbound/util/storage/lruhash.c", + "src/unbound/util/storage/slabhash.c", + "src/unbound/util/timehist.c", + "src/unbound/util/tube.c", + #src/unbound/util/winsock_event.c + "src/unbound/validator/autotrust.c", + "src/unbound/validator/val_anchor.c", + "src/unbound/validator/val_kcache.c", + "src/unbound/validator/val_kentry.c", + "src/unbound/validator/val_neg.c", + "src/unbound/validator/val_nsec.c", + "src/unbound/validator/val_nsec3.c", + "src/unbound/validator/val_secalgo.c", + "src/unbound/validator/val_sigcrypt.c", + "src/unbound/validator/val_utils.c", + "src/unbound/validator/validator.c", + ] + if env["target"] == "android" : + unbound_objects.append("src/android/compat/glob.c") + unbound_objects.append("src/android/dns/dns_android.cpp") + env["UNBOUND_OBJECTS"] = myenv.SwiftenObject(unbound_objects) diff --git a/3rdParty/Unbound/src/android/dns/dns_android.cpp b/3rdParty/Unbound/src/android/dns/dns_android.cpp new file mode 100644 index 0000000..d7cfa15 --- /dev/null +++ b/3rdParty/Unbound/src/android/dns/dns_android.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "dns_android.h" +#include <vector> +#include <string> +#include <jni.h> + +JavaVM* javaVM = 0; + +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* /*aReserved*/) { + javaVM = vm; + return JNI_VERSION_1_6; +} + +std::vector<std::string> get_servers() { + std::vector<std::string> servers; + if (javaVM == 0) { + return servers; + } + + JNIEnv* env = 0; + int result = javaVM->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6); + if (result == JNI_EDETACHED) { + if (javaVM->AttachCurrentThread(&env, 0) != 0) { + return servers; + } + } else if (result != JNI_OK) { + return servers; + } + + jclass systemProperties = env->FindClass("android.os.SystemProperties"); + if (!systemProperties) { + return servers; + } + + jmethodID method = env->GetStaticMethodID(systemProperties, "get", "(Ljava/lang/String;)Ljava/lang/String;"); + if (!method) { + return servers; + } + + const char* parameters[] = { + "net.dns1", + "net.dns2", + "net.dns3", + "net.dns4" + }; + + for (size_t i = 0; i < sizeof(parameters)/sizeof(*parameters); ++i) { + jstring parameter = env->NewStringUTF(parameters[i]); + jstring value = jstring(env->CallStaticObjectMethod(systemProperties, method, parameter)); + const char* server = env->GetStringUTFChars(value, JNI_FALSE); + if (strcmp(server, "")) { + servers.push_back(server); + } + env->ReleaseStringUTFChars(value, server); + } + + return servers; +} + +size_t dns_android_server_count() { + std::vector<std::string> servers = get_servers(); + return servers.size(); +} + +dns_android_result dns_android_server_get(size_t index, char* buffer, size_t length) { + std::vector<std::string> servers = get_servers(); + if (index >= servers.size()) { + return DNS_ANDROID_FAILURE; /* invalid server index */ + } + + if (length < servers[index].length() + 1) { + return DNS_ANDROID_FAILURE; /* insufficient buffer space */ + } + + strncpy(buffer, servers[index].c_str(), length); + return DNS_ANDROID_SUCCESS; +} diff --git a/3rdParty/Unbound/src/android/dns/dns_android.h b/3rdParty/Unbound/src/android/dns/dns_android.h new file mode 100644 index 0000000..6d38a6f --- /dev/null +++ b/3rdParty/Unbound/src/android/dns/dns_android.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#ifndef __DNS_ANDROID_H__ +#define __DNS_ANDROID_H__ + +#include <string.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/*! Result codes for dns_android_server_get */ +typedef enum { + DNS_ANDROID_SUCCESS = 0, + DNS_ANDROID_FAILURE +} dns_android_result; + +/*! + \brief Retrieve the number of dns servers available. + \return Zero in case of error. +*/ +size_t dns_android_server_count(); + +/*! + \brief Retrieve the address of a dns server + \param index The server index between zero and the number returned by the count function + \param buffer Output buffer into which the null terminated dns server string is written + \param length Size in bytes available in the output buffer + \return Error code. The buffer contents are invalid if an error occurs. +*/ +dns_android_result dns_android_server_get(size_t index, char* buffer, size_t length); + +#ifdef __cplusplus +} +#endif + +#endif // __DNS_ANDROID_H__ |