Loading services/net/java/android/net/ip/IpManager.java +97 −23 Original line number Original line Diff line number Diff line Loading @@ -115,6 +115,64 @@ public class IpManager extends StateMachine { public void onReachabilityLost(String logMsg) {} public void onReachabilityLost(String logMsg) {} } } /** * This class encapsulates parameters to be passed to * IpManager#startProvisioning(). A defensive copy is made by IpManager * and the values specified herein are in force until IpManager#stop() * is called. * * Example use: * * final ProvisioningConfiguration config = * mIpManager.buildProvisioningConfiguration() * .withPreDhcpAction() * .build(); * mIpManager.startProvisioning(config); * ... * mIpManager.stop(); * * The specified provisioning configuration will only be active until * IpManager#stop() is called. Future calls to IpManager#startProvisioning() * must specify the configuration again. */ public static class ProvisioningConfiguration { public static class Builder { private ProvisioningConfiguration mConfig = new ProvisioningConfiguration(); public Builder withoutIpReachabilityMonitor() { mConfig.mUsingIpReachabilityMonitor = false; return this; } public Builder withPreDhcpAction() { mConfig.mRequestedPreDhcpAction = true; return this; } public Builder withStaticConfiguration(StaticIpConfiguration staticConfig) { mConfig.mStaticIpConfig = staticConfig; return this; } public ProvisioningConfiguration build() { return new ProvisioningConfiguration(mConfig); } } /* package */ boolean mUsingIpReachabilityMonitor = true; /* package */ boolean mRequestedPreDhcpAction; /* package */ StaticIpConfiguration mStaticIpConfig; public ProvisioningConfiguration() {} public ProvisioningConfiguration(ProvisioningConfiguration other) { mUsingIpReachabilityMonitor = other.mUsingIpReachabilityMonitor; mRequestedPreDhcpAction = other.mRequestedPreDhcpAction; mStaticIpConfig = other.mStaticIpConfig; } } private static final int CMD_STOP = 1; private static final int CMD_STOP = 1; private static final int CMD_START = 2; private static final int CMD_START = 2; private static final int CMD_CONFIRM = 3; private static final int CMD_CONFIRM = 3; Loading Loading @@ -145,7 +203,7 @@ public class IpManager extends StateMachine { private IpReachabilityMonitor mIpReachabilityMonitor; private IpReachabilityMonitor mIpReachabilityMonitor; private BaseDhcpStateMachine mDhcpStateMachine; private BaseDhcpStateMachine mDhcpStateMachine; private DhcpResults mDhcpResults; private DhcpResults mDhcpResults; private StaticIpConfiguration mStaticIpConfig; private ProvisioningConfiguration mConfiguration; /** /** * Member variables accessed both from within the StateMachine thread * Member variables accessed both from within the StateMachine thread Loading Loading @@ -211,14 +269,24 @@ public class IpManager extends StateMachine { mNetlinkTracker = null; mNetlinkTracker = null; } } public void startProvisioning(StaticIpConfiguration staticIpConfig) { public static ProvisioningConfiguration.Builder buildProvisioningConfiguration() { return new ProvisioningConfiguration.Builder(); } public void startProvisioning(ProvisioningConfiguration req) { getInterfaceIndex(); getInterfaceIndex(); sendMessage(CMD_START, staticIpConfig); sendMessage(CMD_START, new ProvisioningConfiguration(req)); } // TODO: Delete this. public void startProvisioning(StaticIpConfiguration staticIpConfig) { startProvisioning(buildProvisioningConfiguration() .withStaticConfiguration(staticIpConfig) .build()); } } public void startProvisioning() { public void startProvisioning() { getInterfaceIndex(); startProvisioning(new ProvisioningConfiguration()); sendMessage(CMD_START); } } public void stop() { public void stop() { Loading Loading @@ -296,7 +364,7 @@ public class IpManager extends StateMachine { private void resetLinkProperties() { private void resetLinkProperties() { mNetlinkTracker.clearLinkProperties(); mNetlinkTracker.clearLinkProperties(); mDhcpResults = null; mDhcpResults = null; mStaticIpConfig = null; mConfiguration = null; synchronized (mLock) { synchronized (mLock) { mLinkProperties = new LinkProperties(); mLinkProperties = new LinkProperties(); Loading Loading @@ -533,7 +601,7 @@ public class IpManager extends StateMachine { break; break; case CMD_START: case CMD_START: mStaticIpConfig = (StaticIpConfiguration) msg.obj; mConfiguration = (ProvisioningConfiguration) msg.obj; transitionTo(mStartedState); transitionTo(mStartedState); break; break; Loading Loading @@ -591,23 +659,23 @@ public class IpManager extends StateMachine { Log.e(mTag, "Unable to change interface settings: " + ie); Log.e(mTag, "Unable to change interface settings: " + ie); } } if (mConfiguration.mUsingIpReachabilityMonitor) { mIpReachabilityMonitor = new IpReachabilityMonitor( mIpReachabilityMonitor = new IpReachabilityMonitor( mContext, mContext, mInterfaceName, mInterfaceName, new IpReachabilityMonitor.Callback() { new IpReachabilityMonitor.Callback() { @Override @Override public void notifyLost(InetAddress ip, String logMsg) { public void notifyLost(InetAddress ip, String logMsg) { if (mCallback.usingIpReachabilityMonitor()) { mCallback.onReachabilityLost(logMsg); mCallback.onReachabilityLost(logMsg); } } } }); }); } // If we have a StaticIpConfiguration attempt to apply it and // If we have a StaticIpConfiguration attempt to apply it and // handle the result accordingly. // handle the result accordingly. if (mStaticIpConfig != null) { if (mConfiguration.mStaticIpConfig != null) { if (applyStaticIpConfig()) { if (applyStaticIpConfig()) { handleIPv4Success(new DhcpResults(mStaticIpConfig)); handleIPv4Success(new DhcpResults(mConfiguration.mStaticIpConfig)); } else { } else { if (VDBG) { Log.d(mTag, "onProvisioningFailure()"); } if (VDBG) { Log.d(mTag, "onProvisioningFailure()"); } mCallback.onProvisioningFailure(getLinkProperties()); mCallback.onProvisioningFailure(getLinkProperties()); Loading @@ -623,8 +691,10 @@ public class IpManager extends StateMachine { @Override @Override public void exit() { public void exit() { if (mIpReachabilityMonitor != null) { mIpReachabilityMonitor.stop(); mIpReachabilityMonitor.stop(); mIpReachabilityMonitor = null; mIpReachabilityMonitor = null; } if (mDhcpStateMachine != null) { if (mDhcpStateMachine != null) { mDhcpStateMachine.sendMessage(DhcpClient.CMD_STOP_DHCP); mDhcpStateMachine.sendMessage(DhcpClient.CMD_STOP_DHCP); Loading @@ -650,7 +720,7 @@ public class IpManager extends StateMachine { // that both probes (a) on-link neighbors and (b) does // that both probes (a) on-link neighbors and (b) does // a DHCPv4 RENEW. We used to do this on Wi-Fi framework // a DHCPv4 RENEW. We used to do this on Wi-Fi framework // roams. // roams. if (mCallback.usingIpReachabilityMonitor()) { if (mIpReachabilityMonitor != null) { mIpReachabilityMonitor.probeAll(); mIpReachabilityMonitor.probeAll(); } } break; break; Loading Loading @@ -679,7 +749,11 @@ public class IpManager extends StateMachine { case DhcpClient.CMD_PRE_DHCP_ACTION: case DhcpClient.CMD_PRE_DHCP_ACTION: if (VDBG) { Log.d(mTag, "onPreDhcpAction()"); } if (VDBG) { Log.d(mTag, "onPreDhcpAction()"); } if (mConfiguration.mRequestedPreDhcpAction) { mCallback.onPreDhcpAction(); mCallback.onPreDhcpAction(); } else { sendMessage(EVENT_PRE_DHCP_ACTION_COMPLETE); } break; break; case DhcpClient.CMD_POST_DHCP_ACTION: { case DhcpClient.CMD_POST_DHCP_ACTION: { Loading Loading @@ -717,7 +791,7 @@ public class IpManager extends StateMachine { private boolean applyStaticIpConfig() { private boolean applyStaticIpConfig() { final InterfaceConfiguration ifcg = new InterfaceConfiguration(); final InterfaceConfiguration ifcg = new InterfaceConfiguration(); ifcg.setLinkAddress(mStaticIpConfig.ipAddress); ifcg.setLinkAddress(mConfiguration.mStaticIpConfig.ipAddress); ifcg.setInterfaceUp(); ifcg.setInterfaceUp(); try { try { mNwService.setInterfaceConfig(mInterfaceName, ifcg); mNwService.setInterfaceConfig(mInterfaceName, ifcg); Loading Loading
services/net/java/android/net/ip/IpManager.java +97 −23 Original line number Original line Diff line number Diff line Loading @@ -115,6 +115,64 @@ public class IpManager extends StateMachine { public void onReachabilityLost(String logMsg) {} public void onReachabilityLost(String logMsg) {} } } /** * This class encapsulates parameters to be passed to * IpManager#startProvisioning(). A defensive copy is made by IpManager * and the values specified herein are in force until IpManager#stop() * is called. * * Example use: * * final ProvisioningConfiguration config = * mIpManager.buildProvisioningConfiguration() * .withPreDhcpAction() * .build(); * mIpManager.startProvisioning(config); * ... * mIpManager.stop(); * * The specified provisioning configuration will only be active until * IpManager#stop() is called. Future calls to IpManager#startProvisioning() * must specify the configuration again. */ public static class ProvisioningConfiguration { public static class Builder { private ProvisioningConfiguration mConfig = new ProvisioningConfiguration(); public Builder withoutIpReachabilityMonitor() { mConfig.mUsingIpReachabilityMonitor = false; return this; } public Builder withPreDhcpAction() { mConfig.mRequestedPreDhcpAction = true; return this; } public Builder withStaticConfiguration(StaticIpConfiguration staticConfig) { mConfig.mStaticIpConfig = staticConfig; return this; } public ProvisioningConfiguration build() { return new ProvisioningConfiguration(mConfig); } } /* package */ boolean mUsingIpReachabilityMonitor = true; /* package */ boolean mRequestedPreDhcpAction; /* package */ StaticIpConfiguration mStaticIpConfig; public ProvisioningConfiguration() {} public ProvisioningConfiguration(ProvisioningConfiguration other) { mUsingIpReachabilityMonitor = other.mUsingIpReachabilityMonitor; mRequestedPreDhcpAction = other.mRequestedPreDhcpAction; mStaticIpConfig = other.mStaticIpConfig; } } private static final int CMD_STOP = 1; private static final int CMD_STOP = 1; private static final int CMD_START = 2; private static final int CMD_START = 2; private static final int CMD_CONFIRM = 3; private static final int CMD_CONFIRM = 3; Loading Loading @@ -145,7 +203,7 @@ public class IpManager extends StateMachine { private IpReachabilityMonitor mIpReachabilityMonitor; private IpReachabilityMonitor mIpReachabilityMonitor; private BaseDhcpStateMachine mDhcpStateMachine; private BaseDhcpStateMachine mDhcpStateMachine; private DhcpResults mDhcpResults; private DhcpResults mDhcpResults; private StaticIpConfiguration mStaticIpConfig; private ProvisioningConfiguration mConfiguration; /** /** * Member variables accessed both from within the StateMachine thread * Member variables accessed both from within the StateMachine thread Loading Loading @@ -211,14 +269,24 @@ public class IpManager extends StateMachine { mNetlinkTracker = null; mNetlinkTracker = null; } } public void startProvisioning(StaticIpConfiguration staticIpConfig) { public static ProvisioningConfiguration.Builder buildProvisioningConfiguration() { return new ProvisioningConfiguration.Builder(); } public void startProvisioning(ProvisioningConfiguration req) { getInterfaceIndex(); getInterfaceIndex(); sendMessage(CMD_START, staticIpConfig); sendMessage(CMD_START, new ProvisioningConfiguration(req)); } // TODO: Delete this. public void startProvisioning(StaticIpConfiguration staticIpConfig) { startProvisioning(buildProvisioningConfiguration() .withStaticConfiguration(staticIpConfig) .build()); } } public void startProvisioning() { public void startProvisioning() { getInterfaceIndex(); startProvisioning(new ProvisioningConfiguration()); sendMessage(CMD_START); } } public void stop() { public void stop() { Loading Loading @@ -296,7 +364,7 @@ public class IpManager extends StateMachine { private void resetLinkProperties() { private void resetLinkProperties() { mNetlinkTracker.clearLinkProperties(); mNetlinkTracker.clearLinkProperties(); mDhcpResults = null; mDhcpResults = null; mStaticIpConfig = null; mConfiguration = null; synchronized (mLock) { synchronized (mLock) { mLinkProperties = new LinkProperties(); mLinkProperties = new LinkProperties(); Loading Loading @@ -533,7 +601,7 @@ public class IpManager extends StateMachine { break; break; case CMD_START: case CMD_START: mStaticIpConfig = (StaticIpConfiguration) msg.obj; mConfiguration = (ProvisioningConfiguration) msg.obj; transitionTo(mStartedState); transitionTo(mStartedState); break; break; Loading Loading @@ -591,23 +659,23 @@ public class IpManager extends StateMachine { Log.e(mTag, "Unable to change interface settings: " + ie); Log.e(mTag, "Unable to change interface settings: " + ie); } } if (mConfiguration.mUsingIpReachabilityMonitor) { mIpReachabilityMonitor = new IpReachabilityMonitor( mIpReachabilityMonitor = new IpReachabilityMonitor( mContext, mContext, mInterfaceName, mInterfaceName, new IpReachabilityMonitor.Callback() { new IpReachabilityMonitor.Callback() { @Override @Override public void notifyLost(InetAddress ip, String logMsg) { public void notifyLost(InetAddress ip, String logMsg) { if (mCallback.usingIpReachabilityMonitor()) { mCallback.onReachabilityLost(logMsg); mCallback.onReachabilityLost(logMsg); } } } }); }); } // If we have a StaticIpConfiguration attempt to apply it and // If we have a StaticIpConfiguration attempt to apply it and // handle the result accordingly. // handle the result accordingly. if (mStaticIpConfig != null) { if (mConfiguration.mStaticIpConfig != null) { if (applyStaticIpConfig()) { if (applyStaticIpConfig()) { handleIPv4Success(new DhcpResults(mStaticIpConfig)); handleIPv4Success(new DhcpResults(mConfiguration.mStaticIpConfig)); } else { } else { if (VDBG) { Log.d(mTag, "onProvisioningFailure()"); } if (VDBG) { Log.d(mTag, "onProvisioningFailure()"); } mCallback.onProvisioningFailure(getLinkProperties()); mCallback.onProvisioningFailure(getLinkProperties()); Loading @@ -623,8 +691,10 @@ public class IpManager extends StateMachine { @Override @Override public void exit() { public void exit() { if (mIpReachabilityMonitor != null) { mIpReachabilityMonitor.stop(); mIpReachabilityMonitor.stop(); mIpReachabilityMonitor = null; mIpReachabilityMonitor = null; } if (mDhcpStateMachine != null) { if (mDhcpStateMachine != null) { mDhcpStateMachine.sendMessage(DhcpClient.CMD_STOP_DHCP); mDhcpStateMachine.sendMessage(DhcpClient.CMD_STOP_DHCP); Loading @@ -650,7 +720,7 @@ public class IpManager extends StateMachine { // that both probes (a) on-link neighbors and (b) does // that both probes (a) on-link neighbors and (b) does // a DHCPv4 RENEW. We used to do this on Wi-Fi framework // a DHCPv4 RENEW. We used to do this on Wi-Fi framework // roams. // roams. if (mCallback.usingIpReachabilityMonitor()) { if (mIpReachabilityMonitor != null) { mIpReachabilityMonitor.probeAll(); mIpReachabilityMonitor.probeAll(); } } break; break; Loading Loading @@ -679,7 +749,11 @@ public class IpManager extends StateMachine { case DhcpClient.CMD_PRE_DHCP_ACTION: case DhcpClient.CMD_PRE_DHCP_ACTION: if (VDBG) { Log.d(mTag, "onPreDhcpAction()"); } if (VDBG) { Log.d(mTag, "onPreDhcpAction()"); } if (mConfiguration.mRequestedPreDhcpAction) { mCallback.onPreDhcpAction(); mCallback.onPreDhcpAction(); } else { sendMessage(EVENT_PRE_DHCP_ACTION_COMPLETE); } break; break; case DhcpClient.CMD_POST_DHCP_ACTION: { case DhcpClient.CMD_POST_DHCP_ACTION: { Loading Loading @@ -717,7 +791,7 @@ public class IpManager extends StateMachine { private boolean applyStaticIpConfig() { private boolean applyStaticIpConfig() { final InterfaceConfiguration ifcg = new InterfaceConfiguration(); final InterfaceConfiguration ifcg = new InterfaceConfiguration(); ifcg.setLinkAddress(mStaticIpConfig.ipAddress); ifcg.setLinkAddress(mConfiguration.mStaticIpConfig.ipAddress); ifcg.setInterfaceUp(); ifcg.setInterfaceUp(); try { try { mNwService.setInterfaceConfig(mInterfaceName, ifcg); mNwService.setInterfaceConfig(mInterfaceName, ifcg); Loading