Merge "DO NOT MERGE refactor wifi p2p's startDhcpServer function"
This commit is contained in:
@@ -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.
|
* Get the set of tethered interfaces.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ interface IConnectivityManager
|
|||||||
|
|
||||||
String[] getTetherableIfaces();
|
String[] getTetherableIfaces();
|
||||||
|
|
||||||
|
String[] getTetheredDhcpRanges();
|
||||||
|
|
||||||
String[] getTetheredIfaces();
|
String[] getTetheredIfaces();
|
||||||
|
|
||||||
String[] getTetheringErroredIfaces();
|
String[] getTetheringErroredIfaces();
|
||||||
|
|||||||
@@ -3297,6 +3297,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
return mTethering.getTetherableIfaces();
|
return mTethering.getTetherableIfaces();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String[] getTetheredDhcpRanges() {
|
||||||
|
enforceConnectivityInternalPermission();
|
||||||
|
return mTethering.getTetheredDhcpRanges();
|
||||||
|
}
|
||||||
|
|
||||||
public String[] getTetheredIfaces() {
|
public String[] getTetheredIfaces() {
|
||||||
enforceTetherAccessPermission();
|
enforceTetherAccessPermission();
|
||||||
return mTethering.getTetheredIfaces();
|
return mTethering.getTetheredIfaces();
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ public class Tethering extends BaseNetworkObserver {
|
|||||||
|
|
||||||
// USB is 192.168.42.1 and 255.255.255.0
|
// USB is 192.168.42.1 and 255.255.255.0
|
||||||
// Wifi is 192.168.43.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
|
// BT is limited to max default of 5 connections. 192.168.44.1 to 192.168.48.1
|
||||||
// with 255.255.255.0
|
// 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.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.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.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;
|
private String[] mDefaultDnsServers;
|
||||||
@@ -699,6 +700,10 @@ public class Tethering extends BaseNetworkObserver {
|
|||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String[] getTetheredDhcpRanges() {
|
||||||
|
return mDhcpRange;
|
||||||
|
}
|
||||||
|
|
||||||
public String[] getErroredIfaces() {
|
public String[] getErroredIfaces() {
|
||||||
ArrayList<String> list = new ArrayList<String>();
|
ArrayList<String> list = new ArrayList<String>();
|
||||||
synchronized (mPublicSync) {
|
synchronized (mPublicSync) {
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
|
|||||||
|
|
||||||
INetworkManagementService mNwService;
|
INetworkManagementService mNwService;
|
||||||
private DhcpStateMachine mDhcpStateMachine;
|
private DhcpStateMachine mDhcpStateMachine;
|
||||||
|
private ConnectivityManager mCm;
|
||||||
|
|
||||||
private P2pStateMachine mP2pStateMachine;
|
private P2pStateMachine mP2pStateMachine;
|
||||||
private AsyncChannel mReplyChannel = new AsyncChannel();
|
private AsyncChannel mReplyChannel = new AsyncChannel();
|
||||||
@@ -226,9 +227,6 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
|
|||||||
/* clients(application) information list. */
|
/* clients(application) information list. */
|
||||||
private HashMap<Messenger, ClientInfo> mClientInfoList = new HashMap<Messenger, ClientInfo>();
|
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";
|
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);
|
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkAndSetConnectivityInstance() {
|
||||||
|
if (mCm == null) {
|
||||||
|
mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void startDhcpServer(String intf) {
|
private void startDhcpServer(String intf) {
|
||||||
InterfaceConfiguration ifcg = null;
|
InterfaceConfiguration ifcg = null;
|
||||||
|
checkAndSetConnectivityInstance();
|
||||||
try {
|
try {
|
||||||
ifcg = mNwService.getInterfaceConfig(intf);
|
ifcg = mNwService.getInterfaceConfig(intf);
|
||||||
ifcg.setLinkAddress(new LinkAddress(NetworkUtils.numericToInetAddress(
|
ifcg.setLinkAddress(new LinkAddress(NetworkUtils.numericToInetAddress(
|
||||||
@@ -2067,17 +2072,30 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
|
|||||||
ifcg.setInterfaceUp();
|
ifcg.setInterfaceUp();
|
||||||
mNwService.setInterfaceConfig(intf, ifcg);
|
mNwService.setInterfaceConfig(intf, ifcg);
|
||||||
/* This starts the dnsmasq server */
|
/* 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) {
|
} catch (Exception e) {
|
||||||
loge("Error configuring interface " + intf + ", :" + e);
|
loge("Error configuring interface " + intf + ", :" + e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
logd("Started Dhcp server on " + intf);
|
logd("Started Dhcp server on " + intf);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopDhcpServer(String intf) {
|
private void stopDhcpServer(String intf) {
|
||||||
try {
|
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();
|
mNwService.stopTethering();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
loge("Error stopping Dhcp server" + e);
|
loge("Error stopping Dhcp server" + e);
|
||||||
|
|||||||
Reference in New Issue
Block a user