diff options
author | Jianzheng Zhou <jianzheng.zhou@freescale.com> | 2014-02-08 12:43:07 +0800 |
---|---|---|
committer | Robert Greenwalt <rgreenwalt@google.com> | 2014-06-23 21:02:45 +0000 |
commit | 78c8e7c8bfd816a2466f858ff26ab12ea7a2e510 (patch) | |
tree | 19451469855533ecbb9fa866a72e7646090d8ec3 /wifi | |
parent | a06f5fa6563f7fc08b7bb2305f61bf649add0b5a (diff) | |
download | frameworks_base-78c8e7c8bfd816a2466f858ff26ab12ea7a2e510.zip frameworks_base-78c8e7c8bfd816a2466f858ff26ab12ea7a2e510.tar.gz frameworks_base-78c8e7c8bfd816a2466f858ff26ab12ea7a2e510.tar.bz2 |
DO NOT MERGE refactor wifi p2p's startDhcpServer function
Add getTetheredDhcpRanges() interface and call it before calling
mNwService.startTethering() to update dhcp ranges. This will allow p2p app
to run well concurrently with other tethering app(e.g. usb tethering).
Change-Id: I5e8ffeb5d2d396f48b897cd9396f133e25ecca57
Signed-off-by: Jianzheng Zhou <jianzheng.zhou@freescale.com>
Diffstat (limited to 'wifi')
-rw-r--r-- | wifi/java/android/net/wifi/p2p/WifiP2pService.java | 28 |
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); |