| /* |
| * 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); |
| } |
| } |