Merge "DO NOT MERGE refactor wifi p2p's startDhcpServer function"

This commit is contained in:
Robert Greenwalt
2014-06-23 21:56:52 +00:00
committed by Gerrit Code Review
5 changed files with 53 additions and 6 deletions

View File

@@ -928,6 +928,23 @@ public class ConnectivityManager {
}
}
/**
* Get the set of tethered dhcp ranges.
*
* @return an array of 0 or more Strings of tethered dhcp ranges.
*
* <p>This method requires the call to hold the permission
* {@link android.Manifest.permission#ACCESS_NETWORK_STATE}.
* {@hide}
*/
public String[] getTetheredDhcpRanges() {
try {
return mService.getTetheredDhcpRanges();
} catch (RemoteException e) {
return new String[0];
}
}
/**
* Get the set of tethered interfaces.
*

View File

@@ -91,6 +91,8 @@ interface IConnectivityManager
String[] getTetherableIfaces();
String[] getTetheredDhcpRanges();
String[] getTetheredIfaces();
String[] getTetheringErroredIfaces();

View File

@@ -3297,6 +3297,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
return mTethering.getTetherableIfaces();
}
public String[] getTetheredDhcpRanges() {
enforceConnectivityInternalPermission();
return mTethering.getTetheredDhcpRanges();
}
public String[] getTetheredIfaces() {
enforceTetherAccessPermission();
return mTethering.getTetheredIfaces();

View File

@@ -109,6 +109,7 @@ public class Tethering extends BaseNetworkObserver {
// USB is 192.168.42.1 and 255.255.255.0
// Wifi is 192.168.43.1 and 255.255.255.0
// P2P is 192.168.49.1 and 255.255.255.0
// BT is limited to max default of 5 connections. 192.168.44.1 to 192.168.48.1
// with 255.255.255.0
@@ -117,7 +118,7 @@ public class Tethering extends BaseNetworkObserver {
"192.168.42.2", "192.168.42.254", "192.168.43.2", "192.168.43.254",
"192.168.44.2", "192.168.44.254", "192.168.45.2", "192.168.45.254",
"192.168.46.2", "192.168.46.254", "192.168.47.2", "192.168.47.254",
"192.168.48.2", "192.168.48.254",
"192.168.48.2", "192.168.48.254", "192.168.49.2", "192.168.49.254",
};
private String[] mDefaultDnsServers;
@@ -699,6 +700,10 @@ public class Tethering extends BaseNetworkObserver {
return retVal;
}
public String[] getTetheredDhcpRanges() {
return mDhcpRange;
}
public String[] getErroredIfaces() {
ArrayList<String> list = new ArrayList<String>();
synchronized (mPublicSync) {

View File

@@ -109,6 +109,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
INetworkManagementService mNwService;
private DhcpStateMachine mDhcpStateMachine;
private ConnectivityManager mCm;
private P2pStateMachine mP2pStateMachine;
private AsyncChannel mReplyChannel = new AsyncChannel();
@@ -226,9 +227,6 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
/* clients(application) information list. */
private HashMap<Messenger, ClientInfo> mClientInfoList = new HashMap<Messenger, ClientInfo>();
/* Is chosen as a unique range to avoid conflict with
the range defined in Tethering.java */
private static final String[] DHCP_RANGE = {"192.168.49.2", "192.168.49.254"};
private static final String SERVER_ADDRESS = "192.168.49.1";
/**
@@ -2058,8 +2056,15 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
}
private void checkAndSetConnectivityInstance() {
if (mCm == null) {
mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
}
}
private void startDhcpServer(String intf) {
InterfaceConfiguration ifcg = null;
checkAndSetConnectivityInstance();
try {
ifcg = mNwService.getInterfaceConfig(intf);
ifcg.setLinkAddress(new LinkAddress(NetworkUtils.numericToInetAddress(
@@ -2067,17 +2072,30 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
ifcg.setInterfaceUp();
mNwService.setInterfaceConfig(intf, ifcg);
/* This starts the dnsmasq server */
mNwService.startTethering(DHCP_RANGE);
String[] tetheringDhcpRanges = mCm.getTetheredDhcpRanges();
if (mNwService.isTetheringStarted()) {
if (DBG) logd("Stop exist tethering and will restart it");
mNwService.stopTethering();
mNwService.tetherInterface(intf);
}
mNwService.startTethering(tetheringDhcpRanges);
} catch (Exception e) {
loge("Error configuring interface " + intf + ", :" + e);
return;
}
logd("Started Dhcp server on " + intf);
}
private void stopDhcpServer(String intf) {
try {
for (String temp : mNwService.listTetheredInterfaces()) {
logd("List all interfaces " + temp);
if (temp.compareTo(intf) != 0 ) {
logd("Found other tethering interface so keep tethering alive");
mNwService.untetherInterface(intf);
return;
}
}
mNwService.stopTethering();
} catch (Exception e) {
loge("Error stopping Dhcp server" + e);