Merge "Fix issue for DnsResolver#query"
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
|
||||
package android.net;
|
||||
|
||||
import static android.net.NetworkUtils.getDnsNetId;
|
||||
import static android.net.NetworkUtils.getDnsNetwork;
|
||||
import static android.net.NetworkUtils.resNetworkCancel;
|
||||
import static android.net.NetworkUtils.resNetworkQuery;
|
||||
import static android.net.NetworkUtils.resNetworkResult;
|
||||
@@ -333,7 +333,7 @@ public final class DnsResolver {
|
||||
final Object lock = new Object();
|
||||
final Network queryNetwork;
|
||||
try {
|
||||
queryNetwork = (network != null) ? network : new Network(getDnsNetId());
|
||||
queryNetwork = (network != null) ? network : getDnsNetwork();
|
||||
} catch (ErrnoException e) {
|
||||
executor.execute(() -> callback.onError(new DnsException(ERROR_SYSTEM, e)));
|
||||
return;
|
||||
@@ -433,7 +433,7 @@ public final class DnsResolver {
|
||||
final FileDescriptor queryfd;
|
||||
final Network queryNetwork;
|
||||
try {
|
||||
queryNetwork = (network != null) ? network : new Network(getDnsNetId());
|
||||
queryNetwork = (network != null) ? network : getDnsNetwork();
|
||||
queryfd = resNetworkQuery(queryNetwork.getNetIdForResolv(), domain, CLASS_IN, nsType,
|
||||
flags);
|
||||
} catch (ErrnoException e) {
|
||||
|
||||
@@ -153,10 +153,9 @@ public class NetworkUtils {
|
||||
|
||||
/**
|
||||
* DNS resolver series jni method.
|
||||
* Attempts to get netid of network which resolver will
|
||||
* use if no network is explicitly selected.
|
||||
* Attempts to get network which resolver will use if no network is explicitly selected.
|
||||
*/
|
||||
public static native int getDnsNetId() throws ErrnoException;
|
||||
public static native Network getDnsNetwork() throws ErrnoException;
|
||||
|
||||
/**
|
||||
* Get the tcp repair window associated with the {@code fd}.
|
||||
|
||||
@@ -304,13 +304,19 @@ static void android_net_utils_resNetworkCancel(JNIEnv *env, jobject thiz, jobjec
|
||||
jniSetFileDescriptorOfFD(env, javaFd, -1);
|
||||
}
|
||||
|
||||
static jint android_net_utils_getDnsNetId(JNIEnv *env, jobject thiz) {
|
||||
int dnsNetId = getNetworkForDns();
|
||||
if (dnsNetId < 0) {
|
||||
throwErrnoException(env, "getDnsNetId", -dnsNetId);
|
||||
static jobject android_net_utils_getDnsNetwork(JNIEnv *env, jobject thiz) {
|
||||
unsigned dnsNetId = 0;
|
||||
if (int res = getNetworkForDns(&dnsNetId) < 0) {
|
||||
throwErrnoException(env, "getDnsNetId", -res);
|
||||
return nullptr;
|
||||
}
|
||||
bool privateDnsBypass = dnsNetId & NETID_USE_LOCAL_NAMESERVERS;
|
||||
|
||||
return dnsNetId;
|
||||
static jclass class_Network = MakeGlobalRefOrDie(
|
||||
env, FindClassOrDie(env, "android/net/Network"));
|
||||
static jmethodID ctor = env->GetMethodID(class_Network, "<init>", "(IZ)V");
|
||||
return env->NewObject(
|
||||
class_Network, ctor, dnsNetId & ~NETID_USE_LOCAL_NAMESERVERS, privateDnsBypass);
|
||||
}
|
||||
|
||||
static jobject android_net_utils_getTcpRepairWindow(JNIEnv *env, jobject thiz, jobject javaFd) {
|
||||
@@ -369,7 +375,7 @@ static const JNINativeMethod gNetworkUtilMethods[] = {
|
||||
{ "resNetworkQuery", "(ILjava/lang/String;III)Ljava/io/FileDescriptor;", (void*) android_net_utils_resNetworkQuery },
|
||||
{ "resNetworkResult", "(Ljava/io/FileDescriptor;)Landroid/net/DnsResolver$DnsResponse;", (void*) android_net_utils_resNetworkResult },
|
||||
{ "resNetworkCancel", "(Ljava/io/FileDescriptor;)V", (void*) android_net_utils_resNetworkCancel },
|
||||
{ "getDnsNetId", "()I", (void*) android_net_utils_getDnsNetId },
|
||||
{ "getDnsNetwork", "()Landroid/net/Network;", (void*) android_net_utils_getDnsNetwork },
|
||||
};
|
||||
|
||||
int register_android_net_NetworkUtils(JNIEnv* env)
|
||||
|
||||
Reference in New Issue
Block a user