Apply API review to android.net.Network:
- socketFactory() renamed to getSocketFactory() - Make sure bindProcess() documentation points developers to getSocketFactory() as the preferred approach - Move bindProcess() and unbindProcess() to ConnectivityManager.setProcessBoundNetwork() -- passing null clears it. - Move getProcessBoundNetwork() to ConnectivityManager.getProcessBoundNetwork(). Bug:15142362 Bug:13885501 Change-Id: Ia55c59d52e1ec8bf10dd0d9d037bd04c0998bc71
This commit is contained in:
committed by
Robert Greenwalt
parent
4a52c697d2
commit
8cdda64b9c
@@ -22,6 +22,7 @@ import android.annotation.SdkConstant.SdkConstantType;
|
|||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.net.NetworkUtils;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.Build.VERSION_CODES;
|
import android.os.Build.VERSION_CODES;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -982,13 +983,13 @@ public class ConnectivityManager {
|
|||||||
public void onAvailable(NetworkRequest request, Network network) {
|
public void onAvailable(NetworkRequest request, Network network) {
|
||||||
currentNetwork = network;
|
currentNetwork = network;
|
||||||
Log.d(TAG, "startUsingNetworkFeature got Network:" + network);
|
Log.d(TAG, "startUsingNetworkFeature got Network:" + network);
|
||||||
network.bindProcessForHostResolution();
|
setProcessDefaultNetworkForHostResolution(network);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void onLost(NetworkRequest request, Network network) {
|
public void onLost(NetworkRequest request, Network network) {
|
||||||
if (network.equals(currentNetwork)) {
|
if (network.equals(currentNetwork)) {
|
||||||
currentNetwork = null;
|
currentNetwork = null;
|
||||||
network.unbindProcessForHostResolution();
|
setProcessDefaultNetworkForHostResolution(null);
|
||||||
}
|
}
|
||||||
Log.d(TAG, "startUsingNetworkFeature lost Network:" + network);
|
Log.d(TAG, "startUsingNetworkFeature lost Network:" + network);
|
||||||
}
|
}
|
||||||
@@ -1072,7 +1073,7 @@ public class ConnectivityManager {
|
|||||||
* @return {@code true} on success, {@code false} on failure
|
* @return {@code true} on success, {@code false} on failure
|
||||||
*
|
*
|
||||||
* @deprecated Deprecated in favor of the {@link #requestNetwork},
|
* @deprecated Deprecated in favor of the {@link #requestNetwork},
|
||||||
* {@link Network#bindProcess} and {@link Network#socketFactory} api.
|
* {@link #setProcessDefaultNetwork} and {@link Network#getSocketFactory} api.
|
||||||
*/
|
*/
|
||||||
public boolean requestRouteToHost(int networkType, int hostAddress) {
|
public boolean requestRouteToHost(int networkType, int hostAddress) {
|
||||||
InetAddress inetAddress = NetworkUtils.intToInetAddress(hostAddress);
|
InetAddress inetAddress = NetworkUtils.intToInetAddress(hostAddress);
|
||||||
@@ -1096,7 +1097,7 @@ public class ConnectivityManager {
|
|||||||
* @return {@code true} on success, {@code false} on failure
|
* @return {@code true} on success, {@code false} on failure
|
||||||
* @hide
|
* @hide
|
||||||
* @deprecated Deprecated in favor of the {@link #requestNetwork} and
|
* @deprecated Deprecated in favor of the {@link #requestNetwork} and
|
||||||
* {@link Network#bindProcess} api.
|
* {@link #setProcessDefaultNetwork} api.
|
||||||
*/
|
*/
|
||||||
public boolean requestRouteToHostAddress(int networkType, InetAddress hostAddress) {
|
public boolean requestRouteToHostAddress(int networkType, InetAddress hostAddress) {
|
||||||
byte[] address = hostAddress.getAddress();
|
byte[] address = hostAddress.getAddress();
|
||||||
@@ -2348,4 +2349,64 @@ public class ConnectivityManager {
|
|||||||
mService.releaseNetworkRequest(networkRequest);
|
mService.releaseNetworkRequest(networkRequest);
|
||||||
} catch (RemoteException e) {}
|
} catch (RemoteException e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds the current process to {@code network}. All Sockets created in the future
|
||||||
|
* (and not explicitly bound via a bound SocketFactory from
|
||||||
|
* {@link Network#getSocketFactory() Network.getSocketFactory()}) will be bound to
|
||||||
|
* {@code network}. All host name resolutions will be limited to {@code network} as well.
|
||||||
|
* Note that if {@code network} ever disconnects, all Sockets created in this way will cease to
|
||||||
|
* work and all host name resolutions will fail. This is by design so an application doesn't
|
||||||
|
* accidentally use Sockets it thinks are still bound to a particular {@link Network}.
|
||||||
|
* To clear binding pass {@code null} for {@code network}. Using individually bound
|
||||||
|
* Sockets created by Network.getSocketFactory().createSocket() and
|
||||||
|
* performing network-specific host name resolutions via
|
||||||
|
* {@link Network#getAllByName Network.getAllByName} is preferred to calling
|
||||||
|
* {@code setProcessDefaultNetwork}.
|
||||||
|
*
|
||||||
|
* @param network The {@link Network} to bind the current process to, or {@code null} to clear
|
||||||
|
* the current binding.
|
||||||
|
* @return {@code true} on success, {@code false} if the {@link Network} is no longer valid.
|
||||||
|
*/
|
||||||
|
public static boolean setProcessDefaultNetwork(Network network) {
|
||||||
|
if (network == null) {
|
||||||
|
NetworkUtils.unbindProcessToNetwork();
|
||||||
|
} else {
|
||||||
|
NetworkUtils.bindProcessToNetwork(network.netId);
|
||||||
|
}
|
||||||
|
// TODO fix return value
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link Network} currently bound to this process via
|
||||||
|
* {@link #setProcessDefaultNetwork}, or {@code null} if no {@link Network} is explicitly bound.
|
||||||
|
*
|
||||||
|
* @return {@code Network} to which this process is bound, or {@code null}.
|
||||||
|
*/
|
||||||
|
public static Network getProcessDefaultNetwork() {
|
||||||
|
int netId = NetworkUtils.getNetworkBoundToProcess();
|
||||||
|
if (netId == 0) return null;
|
||||||
|
return new Network(netId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds host resolutions performed by this process to {@code network}.
|
||||||
|
* {@link #setProcessDefaultNetwork} takes precedence over this setting.
|
||||||
|
*
|
||||||
|
* @param network The {@link Network} to bind host resolutions from the current process to, or
|
||||||
|
* {@code null} to clear the current binding.
|
||||||
|
* @return {@code true} on success, {@code false} if the {@link Network} is no longer valid.
|
||||||
|
* @hide
|
||||||
|
* @deprecated This is strictly for legacy usage to support {@link #startUsingNetworkFeature}.
|
||||||
|
*/
|
||||||
|
public static boolean setProcessDefaultNetworkForHostResolution(Network network) {
|
||||||
|
if (network == null) {
|
||||||
|
NetworkUtils.unbindProcessToNetworkForHostResolution();
|
||||||
|
} else {
|
||||||
|
NetworkUtils.bindProcessToNetworkForHostResolution(network.netId);
|
||||||
|
}
|
||||||
|
// TODO hook up the return value.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,8 @@ import javax.net.SocketFactory;
|
|||||||
* {@link ConnectivityManager.NetworkCallbackListener} in response to
|
* {@link ConnectivityManager.NetworkCallbackListener} in response to
|
||||||
* {@link ConnectivityManager#requestNetwork} or {@link ConnectivityManager#listenForNetwork}.
|
* {@link ConnectivityManager#requestNetwork} or {@link ConnectivityManager#listenForNetwork}.
|
||||||
* It is used to direct traffic to the given {@code Network}, either on a {@link Socket} basis
|
* It is used to direct traffic to the given {@code Network}, either on a {@link Socket} basis
|
||||||
* through a targeted {@link SocketFactory} or process-wide via {@link #bindProcess}.
|
* through a targeted {@link SocketFactory} or process-wide via
|
||||||
|
* {@link ConnectivityManager#setProcessDefaultNetwork}.
|
||||||
*/
|
*/
|
||||||
public class Network implements Parcelable {
|
public class Network implements Parcelable {
|
||||||
|
|
||||||
@@ -160,63 +161,13 @@ public class Network implements Parcelable {
|
|||||||
* @return a {@link SocketFactory} which produces {@link Socket} instances bound to this
|
* @return a {@link SocketFactory} which produces {@link Socket} instances bound to this
|
||||||
* {@code Network}.
|
* {@code Network}.
|
||||||
*/
|
*/
|
||||||
public SocketFactory socketFactory() {
|
public SocketFactory getSocketFactory() {
|
||||||
if (mNetworkBoundSocketFactory == null) {
|
if (mNetworkBoundSocketFactory == null) {
|
||||||
mNetworkBoundSocketFactory = new NetworkBoundSocketFactory(netId);
|
mNetworkBoundSocketFactory = new NetworkBoundSocketFactory(netId);
|
||||||
}
|
}
|
||||||
return mNetworkBoundSocketFactory;
|
return mNetworkBoundSocketFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Binds the current process to this network. All sockets created in the future (and not
|
|
||||||
* explicitly bound via a bound {@link SocketFactory} (see {@link Network#socketFactory})
|
|
||||||
* will be bound to this network. Note that if this {@code Network} ever disconnects
|
|
||||||
* all sockets created in this way will cease to work. This is by design so an application
|
|
||||||
* doesn't accidentally use sockets it thinks are still bound to a particular {@code Network}.
|
|
||||||
*/
|
|
||||||
public void bindProcess() {
|
|
||||||
NetworkUtils.bindProcessToNetwork(netId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Binds host resolutions performed by this process to this network. {@link #bindProcess}
|
|
||||||
* takes precedence over this setting.
|
|
||||||
*
|
|
||||||
* @hide
|
|
||||||
* @deprecated This is strictly for legacy usage to support startUsingNetworkFeature().
|
|
||||||
*/
|
|
||||||
public void bindProcessForHostResolution() {
|
|
||||||
NetworkUtils.bindProcessToNetworkForHostResolution(netId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears any process specific {@link Network} binding for host resolution. This does
|
|
||||||
* not clear bindings enacted via {@link #bindProcess}.
|
|
||||||
*
|
|
||||||
* @hide
|
|
||||||
* @deprecated This is strictly for legacy usage to support startUsingNetworkFeature().
|
|
||||||
*/
|
|
||||||
public void unbindProcessForHostResolution() {
|
|
||||||
NetworkUtils.unbindProcessToNetworkForHostResolution();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A static utility method to return any {@code Network} currently bound by this process.
|
|
||||||
*
|
|
||||||
* @return {@code Network} to which this process is bound.
|
|
||||||
*/
|
|
||||||
public static Network getProcessBoundNetwork() {
|
|
||||||
return new Network(NetworkUtils.getNetworkBoundToProcess());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear any process specific {@code Network} binding. This reverts a call to
|
|
||||||
* {@link Network#bindProcess}.
|
|
||||||
*/
|
|
||||||
public static void unbindProcess() {
|
|
||||||
NetworkUtils.unbindProcessToNetwork();
|
|
||||||
}
|
|
||||||
|
|
||||||
// implement the Parcelable interface
|
// implement the Parcelable interface
|
||||||
public int describeContents() {
|
public int describeContents() {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ public class NetworkUtils {
|
|||||||
/**
|
/**
|
||||||
* Binds the current process to the network designated by {@code netId}. All sockets created
|
* Binds the current process to the network designated by {@code netId}. All sockets created
|
||||||
* in the future (and not explicitly bound via a bound {@link SocketFactory} (see
|
* in the future (and not explicitly bound via a bound {@link SocketFactory} (see
|
||||||
* {@link Network#socketFactory}) will be bound to this network. Note that if this
|
* {@link Network#getSocketFactory}) will be bound to this network. Note that if this
|
||||||
* {@code Network} ever disconnects all sockets created in this way will cease to work. This
|
* {@code Network} ever disconnects all sockets created in this way will cease to work. This
|
||||||
* is by design so an application doesn't accidentally use sockets it thinks are still bound to
|
* is by design so an application doesn't accidentally use sockets it thinks are still bound to
|
||||||
* a particular {@code Network}.
|
* a particular {@code Network}.
|
||||||
|
|||||||
Reference in New Issue
Block a user