summaryrefslogtreecommitdiffstats
path: root/wifi/java/android/net/wifi/p2p
diff options
context:
space:
mode:
Diffstat (limited to 'wifi/java/android/net/wifi/p2p')
-rw-r--r--wifi/java/android/net/wifi/p2p/WifiP2pService.java28
1 files changed, 23 insertions, 5 deletions
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
index 8b07208..a38f234 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
@@ -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);