WifiP2pGroup.java revision 61472a8314e6716f231ec1c0aba73e005935829b
155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/* 255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Copyright (C) 2011 The Android Open Source Project 355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Licensed under the Apache License, Version 2.0 (the "License"); 555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * you may not use this file except in compliance with the License. 655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * You may obtain a copy of the License at 755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * http://www.apache.org/licenses/LICENSE-2.0 955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 1055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Unless required by applicable law or agreed to in writing, software 1155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * distributed under the License is distributed on an "AS IS" BASIS, 1255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * See the License for the specific language governing permissions and 1455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * limitations under the License. 1555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */ 1655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpackage android.net.wifi.p2p; 1855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Parcelable; 2055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Parcel; 2155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 2255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.ArrayList; 2355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.List; 2455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.Collection; 2555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport java.util.Collections; 2661472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenagaimport java.util.regex.Pattern; 2761472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenagaimport java.util.regex.Matcher; 2855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 2955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/** 3055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * A class representing a Wi-Fi P2p group 316f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * 326f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * {@see WifiP2pManager} 3355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */ 3455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpublic class WifiP2pGroup implements Parcelable { 3555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 3655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync /** The network name */ 3755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync private String mNetworkName; 3855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 3955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync /** Group owner */ 4055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync private WifiP2pDevice mOwner; 4155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 4255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync /** Device is group owner */ 4355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync private boolean mIsGroupOwner; 4455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 4555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync /** Group clients */ 4655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync private List<WifiP2pDevice> mClients = new ArrayList<WifiP2pDevice>(); 4755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 484be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** The passphrase used for WPA2-PSK */ 4955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync private String mPassphrase; 5055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 5155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync private String mInterface; 5255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 5361472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga /** P2P group started string pattern */ 5461472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga private static final Pattern groupStartedPattern = Pattern.compile( 5561472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga "ssid=\"(.+)\" " + 5661472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga "freq=(\\d+) " + 5761472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga "(?:psk=)?([0-9a-fA-F]{64})?" + 5861472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga "(?:passphrase=)?(?:\"(.{8,63})\")? " + 5961472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga "go_dev_addr=((?:[0-9a-f]{2}:){5}[0-9a-f]{2})" 6061472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga ); 6161472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga 62651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff public WifiP2pGroup() { 6355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 6455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 6555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync /** 669cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff * @param supplicantEvent formats supported include 6755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 6855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * P2P-GROUP-STARTED p2p-wlan0-0 [client|GO] ssid="DIRECT-W8" freq=2437 6955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * [psk=2182b2e50e53f260d04f3c7b25ef33c965a3291b9b36b455a82d77fd82ca15bc| 7055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * passphrase="fKG4jMe3"] go_dev_addr=fa:7b:7a:42:02:13 7155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 7255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * P2P-GROUP-REMOVED p2p-wlan0-0 [client|GO] reason=REQUESTED 7355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 7455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * P2P-INVITATION-RECEIVED sa=fa:7b:7a:42:02:13 go_dev_addr=f8:7b:7a:42:02:13 7555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * bssid=fa:7b:7a:42:82:13 unknown-network 7655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 7755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Note: The events formats can be looked up in the wpa_supplicant code 784be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff * @hide 7955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */ 8055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pGroup(String supplicantEvent) throws IllegalArgumentException { 8155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 8255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync String[] tokens = supplicantEvent.split(" "); 8355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 8455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (tokens.length < 3) { 8555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync throw new IllegalArgumentException("Malformed supplicant event"); 8655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 8755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 8855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (tokens[0].startsWith("P2P-GROUP")) { 8955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync mInterface = tokens[1]; 9055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync mIsGroupOwner = tokens[2].equals("GO"); 9155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 9261472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga Matcher match = groupStartedPattern.matcher(supplicantEvent); 9361472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga if (!match.find()) { 9461472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga return; 9561472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga } 9655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 9761472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga mNetworkName = match.group(1); 9861472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga //freq and psk are unused right now 9961472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga //int freq = Integer.parseInt(match.group(2)); 10061472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga //String psk = match.group(3); 10161472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga mPassphrase = match.group(4); 10261472a8314e6716f231ec1c0aba73e005935829bYoshihiko Ikenaga mOwner = new WifiP2pDevice(match.group(5)); 10355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 10455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } else if (tokens[0].equals("P2P-INVITATION-RECEIVED")) { 10555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync for (String token : tokens) { 10655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync String[] nameValue = token.split("="); 10755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (nameValue.length != 2) continue; 10855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 10955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (nameValue[0].equals("go_dev_addr")) { 11055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync mOwner = new WifiP2pDevice(nameValue[1]); 11155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync continue; 11255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 11355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 11455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } else { 11555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync throw new IllegalArgumentException("Malformed supplicant event"); 11655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 11755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 11855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1194be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 1204be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff public void setNetworkName(String networkName) { 1214be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff mNetworkName = networkName; 1224be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 1234be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff 1244be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** 1254be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff * Get the network name (SSID) of the group. Legacy Wi-Fi clients will discover 1264be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff * the p2p group using the network name. 1274be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff */ 1284be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff public String getNetworkName() { 1294be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff return mNetworkName; 1304be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 1314be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff 1324be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 1334be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff public void setIsGroupOwner(boolean isGo) { 1344be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff mIsGroupOwner = isGo; 1354be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 1364be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff 1374be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** Check whether this device is the group owner of the created p2p group */ 13855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public boolean isGroupOwner() { 13955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return mIsGroupOwner; 14055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 14155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1424be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 1434be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff public void setOwner(WifiP2pDevice device) { 1444be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff mOwner = device; 1454be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 1464be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff 1474be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** Get the details of the group owner as a {@link WifiP2pDevice} object */ 14855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pDevice getOwner() { 14955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return mOwner; 15055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 15155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1524be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 15355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public void addClient(String address) { 15455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync addClient(new WifiP2pDevice(address)); 15555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 15655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1574be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 15855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public void addClient(WifiP2pDevice device) { 15955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync for (WifiP2pDevice client : mClients) { 16055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (client.equals(device)) return; 16155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 16255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync mClients.add(device); 16355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 16455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1654be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 16655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public boolean removeClient(String address) { 16755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return mClients.remove(new WifiP2pDevice(address)); 16855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 16955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1704be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 17155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public boolean removeClient(WifiP2pDevice device) { 17255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return mClients.remove(device); 17355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 17455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1754be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 17655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public boolean isClientListEmpty() { 17755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return mClients.size() == 0; 17855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 17955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 180530040e0b9458994c02f4392765db168128d48daIrfan Sheriff /** @hide Returns {@code true} if the device is part of the group */ 181530040e0b9458994c02f4392765db168128d48daIrfan Sheriff public boolean contains(WifiP2pDevice device) { 182530040e0b9458994c02f4392765db168128d48daIrfan Sheriff if (mOwner.equals(device) || mClients.contains(device)) return true; 183530040e0b9458994c02f4392765db168128d48daIrfan Sheriff return false; 184530040e0b9458994c02f4392765db168128d48daIrfan Sheriff } 185530040e0b9458994c02f4392765db168128d48daIrfan Sheriff 1864be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** Get the list of clients currently part of the p2p group */ 18755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public Collection<WifiP2pDevice> getClientList() { 18855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return Collections.unmodifiableCollection(mClients); 18955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 19055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1914be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 1924be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff public void setPassphrase(String passphrase) { 1934be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff mPassphrase = passphrase; 1944be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 1954be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff 1964be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** 1974be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff * Get the passphrase of the group. This function will return a valid passphrase only 1984be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff * at the group owner. Legacy Wi-Fi clients will need this passphrase alongside 1994be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff * network name obtained from {@link #getNetworkName()} to join the group 2004be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff */ 2014be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff public String getPassphrase() { 2024be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff return mPassphrase; 2034be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 2044be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff 2054be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** @hide */ 2064be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff public void setInterface(String intf) { 2074be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff mInterface = intf; 2084be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 2094be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff 2104be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff /** Get the interface name on which the group is created */ 21155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public String getInterface() { 21255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return mInterface; 21355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 21455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 21555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public String toString() { 21655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync StringBuffer sbuf = new StringBuffer(); 2174be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff sbuf.append("network: ").append(mNetworkName); 2184be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff sbuf.append("\n isGO: ").append(mIsGroupOwner); 2194be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff sbuf.append("\n GO: ").append(mOwner); 2204be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff for (WifiP2pDevice client : mClients) { 2214be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff sbuf.append("\n Client: ").append(client); 2224be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 2234be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff sbuf.append("\n interface: ").append(mInterface); 22455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return sbuf.toString(); 22555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 22655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 227651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff /** Implement the Parcelable interface */ 22855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public int describeContents() { 22955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return 0; 23055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 23155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 232651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff /** copy constructor */ 23355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pGroup(WifiP2pGroup source) { 23455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (source != null) { 235651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff mNetworkName = source.getNetworkName(); 236651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff mOwner = new WifiP2pDevice(source.getOwner()); 237651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff mIsGroupOwner = source.mIsGroupOwner; 238651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff for (WifiP2pDevice d : source.getClientList()) mClients.add(d); 239651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff mPassphrase = source.getPassphrase(); 240651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff mInterface = source.getInterface(); 241651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff } 24255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 24355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 244651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff /** Implement the Parcelable interface */ 24555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public void writeToParcel(Parcel dest, int flags) { 2464be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff dest.writeString(mNetworkName); 2474be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff dest.writeParcelable(mOwner, flags); 2484be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff dest.writeByte(mIsGroupOwner ? (byte) 1: (byte) 0); 2494be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff dest.writeInt(mClients.size()); 2504be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff for (WifiP2pDevice client : mClients) { 2514be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff dest.writeParcelable(client, flags); 2524be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 2534be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff dest.writeString(mPassphrase); 2544be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff dest.writeString(mInterface); 25555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 25655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 257651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff /** Implement the Parcelable interface */ 25855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public static final Creator<WifiP2pGroup> CREATOR = 25955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync new Creator<WifiP2pGroup>() { 26055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pGroup createFromParcel(Parcel in) { 26155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync WifiP2pGroup group = new WifiP2pGroup(); 2624be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff group.setNetworkName(in.readString()); 2634be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff group.setOwner((WifiP2pDevice)in.readParcelable(null)); 2644be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff group.setIsGroupOwner(in.readByte() == (byte)1); 2654be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff int clientCount = in.readInt(); 2664be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff for (int i=0; i<clientCount; i++) { 2674be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff group.addClient((WifiP2pDevice) in.readParcelable(null)); 2684be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff } 2694be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff group.setPassphrase(in.readString()); 2704be4d31f34a0fd0e23de1cbda311c07412f8d0b8Irfan Sheriff group.setInterface(in.readString()); 27155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return group; 27255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 27355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 27455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pGroup[] newArray(int size) { 27555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return new WifiP2pGroup[size]; 27655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 27755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync }; 27855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync} 279