diff options
author | Justin Klaassen <justinklaassen@google.com> | 2018-04-15 00:41:15 -0400 |
---|---|---|
committer | Justin Klaassen <justinklaassen@google.com> | 2018-04-15 00:41:15 -0400 |
commit | b8042fc9b036db0a6692ca853428fc6ab1e60892 (patch) | |
tree | 82669ea5d75238758e22d379a42baeada526219e /android/net/dns/ResolvUtil.java | |
parent | 4d01eeaffaa720e4458a118baa137a11614f00f7 (diff) | |
download | android-28-androidx-preference-release.tar.gz |
Import Android SDK Platform P [4719250]HEADmastermainandroidx-work-releaseandroidx-webkit-releaseandroidx-viewpager2-releaseandroidx-versionedparcelable-releaseandroidx-vectordrawable-releaseandroidx-transition-releaseandroidx-sqlite-releaseandroidx-sharetarget-releaseandroidx-security-security-crypto-releaseandroidx-savedstate-releaseandroidx-room-releaseandroidx-recyclerview-releaseandroidx-recyclerview-recyclerview-selection-releaseandroidx-preference-releaseandroidx-paging-releaseandroidx-paging-legacy-releaseandroidx-navigation-releaseandroidx-mediarouter-releaseandroidx-media2-releaseandroidx-media2-media2-widget-releaseandroidx-media-releaseandroidx-master-releaseandroidx-localbroadcastmanager-releaseandroidx-loader-releaseandroidx-lifecycle-releaseandroidx-jetifier-releaseandroidx-g3-releaseandroidx-fragment-releaseandroidx-exifinterface-releaseandroidx-enterprise-releaseandroidx-core-releaseandroidx-core-core-role-releaseandroidx-coordinatorlayout-releaseandroidx-concurrent-releaseandroidx-compose-releaseandroidx-collection-releaseandroidx-camerax-releaseandroidx-browser-releaseandroidx-biometric-releaseandroidx-benchmark-releaseandroidx-autofill-releaseandroidx-arch-core-releaseandroidx-appcompat-releaseandroidx-annotation-releaseandroidx-annotation-annotation-experimental-releaseandroidx-activity-releaseandroid-arch-work-releaseandroid-arch-navigation-release
/google/data/ro/projects/android/fetch_artifact \
--bid 4719250 \
--target sdk_phone_armv7-win_sdk \
sdk-repo-linux-sources-4719250.zip
AndroidVersion.ApiLevel has been modified to appear as 28
Change-Id: I9ec0a12c9251b8449dba0d86b0cfdbcca16b0a7c
Diffstat (limited to 'android/net/dns/ResolvUtil.java')
-rw-r--r-- | android/net/dns/ResolvUtil.java | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/android/net/dns/ResolvUtil.java b/android/net/dns/ResolvUtil.java new file mode 100644 index 00000000..97d20f4b --- /dev/null +++ b/android/net/dns/ResolvUtil.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.dns; + +import android.net.Network; +import android.net.NetworkUtils; +import android.system.GaiException; +import android.system.OsConstants; +import android.system.StructAddrinfo; + +import libcore.io.Libcore; + +import java.net.InetAddress; +import java.net.UnknownHostException; + + +/** + * DNS resolution utility class. + * + * @hide + */ +public class ResolvUtil { + // Non-portable DNS resolution flag. + private static final long NETID_USE_LOCAL_NAMESERVERS = 0x80000000L; + + private ResolvUtil() {} + + public static InetAddress[] blockingResolveAllLocally(Network network, String name) + throws UnknownHostException { + final StructAddrinfo hints = new StructAddrinfo(); + // Unnecessary, but expressly no AI_ADDRCONFIG. + hints.ai_flags = 0; + // Fetch all IP addresses at once to minimize re-resolution. + hints.ai_family = OsConstants.AF_UNSPEC; + hints.ai_socktype = OsConstants.SOCK_DGRAM; + + final Network networkForResolv = getNetworkWithUseLocalNameserversFlag(network); + + try { + return Libcore.os.android_getaddrinfo(name, hints, (int) networkForResolv.netId); + } catch (GaiException gai) { + gai.rethrowAsUnknownHostException(name + ": TLS-bypass resolution failed"); + return null; // keep compiler quiet + } + } + + public static Network getNetworkWithUseLocalNameserversFlag(Network network) { + final long netidForResolv = NETID_USE_LOCAL_NAMESERVERS | (long) network.netId; + return new Network((int) netidForResolv); + } +} |