--- /dev/null
+/*
+ * Copyright (C) 2017 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.ip;
+
+import android.content.Context;
+import android.net.INetd;
+import android.net.LinkProperties;
+import android.net.Network;
+import android.net.StaticIpConfiguration;
+import android.net.apf.ApfCapabilities;
+import android.net.util.NetdService;
+import android.os.INetworkManagementService;
+import android.os.ServiceManager;
+import android.net.apf.ApfCapabilities;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+
+/*
+ * TODO: Delete this altogether in favor of its renamed successor: IpClient.
+ *
+ * @hide
+ */
+public class IpManager extends IpClient {
+ public static class ProvisioningConfiguration extends IpClient.ProvisioningConfiguration {
+ public ProvisioningConfiguration(IpClient.ProvisioningConfiguration ipcConfig) {
+ super(ipcConfig);
+ }
+
+ public static class Builder extends IpClient.ProvisioningConfiguration.Builder {
+ @Override
+ public Builder withoutIPv4() {
+ super.withoutIPv4();
+ return this;
+ }
+ @Override
+ public Builder withoutIPv6() {
+ super.withoutIPv6();
+ return this;
+ }
+ @Override
+ public Builder withoutIpReachabilityMonitor() {
+ super.withoutIpReachabilityMonitor();
+ return this;
+ }
+ @Override
+ public Builder withPreDhcpAction() {
+ super.withPreDhcpAction();
+ return this;
+ }
+ @Override
+ public Builder withPreDhcpAction(int dhcpActionTimeoutMs) {
+ super.withPreDhcpAction(dhcpActionTimeoutMs);
+ return this;
+ }
+ // No Override; locally defined type.
+ public Builder withInitialConfiguration(InitialConfiguration initialConfig) {
+ super.withInitialConfiguration((IpClient.InitialConfiguration) initialConfig);
+ return this;
+ }
+ @Override
+ public Builder withStaticConfiguration(StaticIpConfiguration staticConfig) {
+ super.withStaticConfiguration(staticConfig);
+ return this;
+ }
+ @Override
+ public Builder withApfCapabilities(ApfCapabilities apfCapabilities) {
+ super.withApfCapabilities(apfCapabilities);
+ return this;
+ }
+ @Override
+ public Builder withProvisioningTimeoutMs(int timeoutMs) {
+ super.withProvisioningTimeoutMs(timeoutMs);
+ return this;
+ }
+ @Override
+ public Builder withIPv6AddrGenModeEUI64() {
+ super.withIPv6AddrGenModeEUI64();
+ return this;
+ }
+ @Override
+ public Builder withIPv6AddrGenModeStablePrivacy() {
+ super.withIPv6AddrGenModeStablePrivacy();
+ return this;
+ }
+ @Override
+ public Builder withNetwork(Network network) {
+ super.withNetwork(network);
+ return this;
+ }
+ @Override
+ public Builder withDisplayName(String displayName) {
+ super.withDisplayName(displayName);
+ return this;
+ }
+ @Override
+ public ProvisioningConfiguration build() {
+ return new ProvisioningConfiguration(super.build());
+ }
+ }
+ }
+
+ public static ProvisioningConfiguration.Builder buildProvisioningConfiguration() {
+ return new ProvisioningConfiguration.Builder();
+ }
+
+ public static class InitialConfiguration extends IpClient.InitialConfiguration {
+ }
+
+ public static class Callback extends IpClient.Callback {
+ }
+
+ public static class WaitForProvisioningCallback extends Callback {
+ private LinkProperties mCallbackLinkProperties;
+
+ public LinkProperties waitForProvisioning() {
+ synchronized (this) {
+ try {
+ wait();
+ } catch (InterruptedException e) {}
+ return mCallbackLinkProperties;
+ }
+ }
+
+ @Override
+ public void onProvisioningSuccess(LinkProperties newLp) {
+ synchronized (this) {
+ mCallbackLinkProperties = newLp;
+ notify();
+ }
+ }
+
+ @Override
+ public void onProvisioningFailure(LinkProperties newLp) {
+ synchronized (this) {
+ mCallbackLinkProperties = null;
+ notify();
+ }
+ }
+ }
+
+ public IpManager(Context context, String ifName, Callback callback) {
+ this(context, ifName, callback, INetworkManagementService.Stub.asInterface(
+ ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE)),
+ NetdService.getInstance());
+ }
+
+ public IpManager(Context context, String ifName, Callback callback,
+ INetworkManagementService nwService) {
+ this(context, ifName, callback, nwService, NetdService.getInstance());
+ }
+
+ @VisibleForTesting
+ public IpManager(Context context, String ifName, Callback callback,
+ INetworkManagementService nwService, INetd netd) {
+ super(context, ifName, callback, nwService, netd);
+ }
+
+ public void startProvisioning(ProvisioningConfiguration req) {
+ super.startProvisioning((IpClient.ProvisioningConfiguration) req);
+ }
+}