3333 */
3434public class WifiP2pGroup implements Parcelable {
3535
36+ /** The temporary network id.
37+ * {@hide} */
38+ public static final int TEMPORARY_NET_ID = -1 ;
39+
40+ /** The persistent network id.
41+ * If a matching persistent profile is found, use it.
42+ * Otherwise, create a new persistent profile.
43+ * {@hide} */
44+ public static final int PERSISTENT_NET_ID = -2 ;
45+
3646 /** The network name */
3747 private String mNetworkName ;
3848
@@ -50,13 +60,17 @@ public class WifiP2pGroup implements Parcelable {
5060
5161 private String mInterface ;
5262
63+ /** The network id in the wpa_supplicant */
64+ private int mNetId ;
65+
5366 /** P2P group started string pattern */
5467 private static final Pattern groupStartedPattern = Pattern .compile (
5568 "ssid=\" (.+)\" " +
5669 "freq=(\\ d+) " +
5770 "(?:psk=)?([0-9a-fA-F]{64})?" +
5871 "(?:passphrase=)?(?:\" (.{8,63})\" )? " +
59- "go_dev_addr=((?:[0-9a-f]{2}:){5}[0-9a-f]{2})"
72+ "go_dev_addr=((?:[0-9a-f]{2}:){5}[0-9a-f]{2})" +
73+ " ?(\\ [PERSISTENT\\ ])?"
6074 );
6175
6276 public WifiP2pGroup () {
@@ -67,13 +81,15 @@ public WifiP2pGroup() {
6781 *
6882 * P2P-GROUP-STARTED p2p-wlan0-0 [client|GO] ssid="DIRECT-W8" freq=2437
6983 * [psk=2182b2e50e53f260d04f3c7b25ef33c965a3291b9b36b455a82d77fd82ca15bc|
70- * passphrase="fKG4jMe3"] go_dev_addr=fa:7b:7a:42:02:13
84+ * passphrase="fKG4jMe3"] go_dev_addr=fa:7b:7a:42:02:13 [PERSISTENT]
7185 *
7286 * P2P-GROUP-REMOVED p2p-wlan0-0 [client|GO] reason=REQUESTED
7387 *
7488 * P2P-INVITATION-RECEIVED sa=fa:7b:7a:42:02:13 go_dev_addr=f8:7b:7a:42:02:13
7589 * bssid=fa:7b:7a:42:82:13 unknown-network
7690 *
91+ * P2P-INVITATION-RECEIVED sa=b8:f9:34:2a:c7:9d persistent=0
92+ *
7793 * Note: The events formats can be looked up in the wpa_supplicant code
7894 * @hide
7995 */
@@ -100,16 +116,38 @@ public WifiP2pGroup(String supplicantEvent) throws IllegalArgumentException {
100116 //String psk = match.group(3);
101117 mPassphrase = match .group (4 );
102118 mOwner = new WifiP2pDevice (match .group (5 ));
103-
119+ if (match .group (6 ) != null ) {
120+ mNetId = PERSISTENT_NET_ID ;
121+ } else {
122+ mNetId = TEMPORARY_NET_ID ;
123+ }
104124 } else if (tokens [0 ].equals ("P2P-INVITATION-RECEIVED" )) {
125+ String sa = null ;
126+ mNetId = PERSISTENT_NET_ID ;
105127 for (String token : tokens ) {
106128 String [] nameValue = token .split ("=" );
107129 if (nameValue .length != 2 ) continue ;
108130
131+ if (nameValue [0 ].equals ("sa" )) {
132+ sa = nameValue [1 ];
133+
134+ // set source address into the client list.
135+ WifiP2pDevice dev = new WifiP2pDevice ();
136+ dev .deviceAddress = nameValue [1 ];
137+ mClients .add (dev );
138+ continue ;
139+ }
140+
109141 if (nameValue [0 ].equals ("go_dev_addr" )) {
110142 mOwner = new WifiP2pDevice (nameValue [1 ]);
111143 continue ;
112144 }
145+
146+ if (nameValue [0 ].equals ("persistent" )) {
147+ mOwner = new WifiP2pDevice (sa );
148+ mNetId = Integer .parseInt (nameValue [1 ]);
149+ continue ;
150+ }
113151 }
114152 } else {
115153 throw new IllegalArgumentException ("Malformed supplicant event" );
@@ -212,6 +250,16 @@ public String getInterface() {
212250 return mInterface ;
213251 }
214252
253+ /** @hide */
254+ public int getNetworkId () {
255+ return mNetId ;
256+ }
257+
258+ /** @hide */
259+ public void setNetworkId (int netId ) {
260+ this .mNetId = netId ;
261+ }
262+
215263 public String toString () {
216264 StringBuffer sbuf = new StringBuffer ();
217265 sbuf .append ("network: " ).append (mNetworkName );
@@ -221,6 +269,7 @@ public String toString() {
221269 sbuf .append ("\n Client: " ).append (client );
222270 }
223271 sbuf .append ("\n interface: " ).append (mInterface );
272+ sbuf .append ("\n networkId: " ).append (mNetId );
224273 return sbuf .toString ();
225274 }
226275
@@ -238,6 +287,7 @@ public WifiP2pGroup(WifiP2pGroup source) {
238287 for (WifiP2pDevice d : source .getClientList ()) mClients .add (d );
239288 mPassphrase = source .getPassphrase ();
240289 mInterface = source .getInterface ();
290+ mNetId = source .getNetworkId ();
241291 }
242292 }
243293
@@ -252,6 +302,7 @@ public void writeToParcel(Parcel dest, int flags) {
252302 }
253303 dest .writeString (mPassphrase );
254304 dest .writeString (mInterface );
305+ dest .writeInt (mNetId );
255306 }
256307
257308 /** Implement the Parcelable interface */
@@ -268,6 +319,7 @@ public WifiP2pGroup createFromParcel(Parcel in) {
268319 }
269320 group .setPassphrase (in .readString ());
270321 group .setInterface (in .readString ());
322+ group .setNetworkId (in .readInt ());
271323 return group ;
272324 }
273325
0 commit comments