Restore STA reconnection behavior

Have the customized retry behavior only for P2P & do group failure indication
beyond 5 retries

Bug: b/6674338, b/6910598, b/6400311
Change-Id: I58cba356ebdb7fc4eaa9bedfa417b7d5d35bb306

Conflicts:

	wpa_supplicant/events.c
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index e729e82..ee0af50 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -2263,23 +2263,39 @@
 		if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME)
 			sme_event_assoc_reject(wpa_s, data);
 #ifdef ANDROID_P2P
-		/* If assoc reject is reported by the driver, then avoid
-		 * waiting for  the authentication timeout. Cancel the
-		 * authentication timeout and retry the assoc.
-		 */
-		if(wpa_s->assoc_retries++ < 5) {
-			wpa_printf(MSG_ERROR, "Retrying assoc "
-			"Iteration:%d", wpa_s->assoc_retries);
-			wpa_supplicant_cancel_auth_timeout(wpa_s);
+#ifdef CONFIG_P2P
+		else if (wpa_s->p2p_group_interface != NOT_P2P_GROUP_INTERFACE) {
+			if (!wpa_s->current_ssid) {
+				wpa_printf(MSG_ERROR, "current_ssid == NULL");
+				break;
+			}
+			/* If assoc reject is reported by the driver, then avoid
+			 * waiting for  the authentication timeout. Cancel the
+			 * authentication timeout and retry the assoc.
+			 */
+			if (wpa_s->current_ssid->assoc_retry++ < 5) {
+				wpa_printf(MSG_ERROR, "Retrying assoc: %d ",
+								wpa_s->current_ssid->assoc_retry);
+				wpa_supplicant_cancel_auth_timeout(wpa_s);
 
-			/* Clear the states */
-			wpa_sm_notify_disassoc(wpa_s->wpa);
-			wpa_supplicant_disassociate(wpa_s, WLAN_REASON_DEAUTH_LEAVING);
+				/* Clear the states */
+				wpa_sm_notify_disassoc(wpa_s->wpa);
+				wpa_supplicant_deauthenticate(wpa_s, WLAN_REASON_DEAUTH_LEAVING);
 
-			wpa_s->reassociate = 1;
-			wpa_supplicant_req_scan(wpa_s, 1, 0);
-		} else
-			wpa_s->assoc_retries = 0;
+				wpa_s->reassociate = 1;
+				wpa_supplicant_req_scan(wpa_s, 1, 0);
+			} else {
+				/* If we ASSOC_REJECT's hits threshold, disable the 
+				 * network
+				 */
+				wpa_printf(MSG_ERROR, "Assoc retry threshold reached. "
+				"Disabling the network");
+				wpa_s->current_ssid->assoc_retry = 0;
+				wpa_supplicant_disable_network(wpa_s, wpa_s->current_ssid);
+				wpas_p2p_group_remove(wpa_s, wpa_s->ifname);
+			}
+		}
+#endif
 #endif /* ANDROID_P2P */
 		break;
 	case EVENT_AUTH_TIMED_OUT: