/* * Copyright (C) 2019 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.shared; import static android.net.shared.ParcelableUtil.fromParcelableArray; import static android.net.shared.ParcelableUtil.toParcelableArray; import android.net.PrivateDnsConfigParcel; import android.text.TextUtils; import java.net.InetAddress; import java.util.Arrays; /** @hide */ public class PrivateDnsConfig { public final boolean useTls; public final String hostname; public final InetAddress[] ips; public PrivateDnsConfig() { this(false); } public PrivateDnsConfig(boolean useTls) { this.useTls = useTls; this.hostname = ""; this.ips = new InetAddress[0]; } public PrivateDnsConfig(String hostname, InetAddress[] ips) { this.useTls = !TextUtils.isEmpty(hostname); this.hostname = useTls ? hostname : ""; this.ips = (ips != null) ? ips : new InetAddress[0]; } public PrivateDnsConfig(PrivateDnsConfig cfg) { useTls = cfg.useTls; hostname = cfg.hostname; ips = cfg.ips; } /** * Indicates whether this is a strict mode private DNS configuration. */ public boolean inStrictMode() { return useTls && !TextUtils.isEmpty(hostname); } @Override public String toString() { return PrivateDnsConfig.class.getSimpleName() + "{" + useTls + ":" + hostname + "/" + Arrays.toString(ips) + "}"; } /** * Create a stable AIDL-compatible parcel from the current instance. */ public PrivateDnsConfigParcel toParcel() { final PrivateDnsConfigParcel parcel = new PrivateDnsConfigParcel(); parcel.hostname = hostname; parcel.ips = toParcelableArray( Arrays.asList(ips), IpConfigurationParcelableUtil::parcelAddress, String.class); return parcel; } /** * Build a configuration from a stable AIDL-compatible parcel. */ public static PrivateDnsConfig fromParcel(PrivateDnsConfigParcel parcel) { InetAddress[] ips = new InetAddress[parcel.ips.length]; ips = fromParcelableArray(parcel.ips, IpConfigurationParcelableUtil::unparcelAddress) .toArray(ips); return new PrivateDnsConfig(parcel.hostname, ips); } }