Cumulative patch from commit 3eaaca1a0b372f31ddc43d152c3681dce48889bb

3eaaca1 P2P: Allow GO Negotiation Request to update peer entry after PD
443427e P2P: Add missing direct global ctrl_iface commands for P2P
37b4198 P2P: Use GO's operating channel to optimize scan during join
a691d99 P2P: Don't expire the peer, if GO Negotiation is in progress
a0e9d89 Use minimal scan delay upon EVENT_INTERFACE_ADDED
5ddd07c Reset normal_scans counter upon entering INTERFACE_DISABLED state

Change-Id: I07ea029ba6d473af39c74c10b7058de0056695da
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 2b3b182..138ba16 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -41,40 +41,10 @@
  * P2P_PEER_EXPIRATION_AGE - Number of seconds after which inactive peer
  * entries will be removed
  */
-#ifdef ANDROID_P2P
-#define P2P_PEER_EXPIRATION_AGE 30
-#else
 #define P2P_PEER_EXPIRATION_AGE 300
-#endif
 
 #define P2P_PEER_EXPIRATION_INTERVAL (P2P_PEER_EXPIRATION_AGE / 2)
 
-#ifdef ANDROID_P2P
-int p2p_connection_in_progress(struct p2p_data *p2p)
-{
-	int ret = 0;
-
-	switch (p2p->state) {
-		case P2P_CONNECT:
-		case P2P_CONNECT_LISTEN:
-		case P2P_GO_NEG:
-		case P2P_WAIT_PEER_CONNECT:
-		case P2P_WAIT_PEER_IDLE:
-		case P2P_PROVISIONING:
-		case P2P_INVITE:
-		case P2P_INVITE_LISTEN:
-			ret = 1;
-			break;
-
-		default:
-			wpa_printf(MSG_DEBUG, "p2p_connection_in_progress state %d", p2p->state);
-			ret = 0;
-	}
-
-	return ret;
-}
-#endif
-
 static void p2p_expire_peers(struct p2p_data *p2p)
 {
 	struct p2p_device *dev, *n;
@@ -86,6 +56,15 @@
 		if (dev->last_seen.sec + P2P_PEER_EXPIRATION_AGE >= now.sec)
 			continue;
 
+		if (dev == p2p->go_neg_peer) {
+			/*
+			 * GO Negotiation is in progress with the peer, so
+			 * don't expire the peer entry until GO Negotiation
+			 * fails or times out.
+			 */
+			continue;
+		}
+
 		if (p2p->cfg->go_connected &&
 		    p2p->cfg->go_connected(p2p->cfg->cb_ctx,
 					   dev->info.p2p_device_addr)) {
@@ -111,13 +90,6 @@
 			continue;
 		}
 
-#ifdef ANDROID_P2P
-		/* If Connection is in progress, don't expire the peer
-		*/
-		if (p2p_connection_in_progress(p2p))
-			continue;
-#endif
-
 		p2p_dbg(p2p, "Expiring old peer entry " MACSTR,
 			MAC2STR(dev->info.p2p_device_addr));
 		dl_list_del(&dev->list);