Merge "Cumulative patch from commit 128f6a98b3d4d6ed103db759707309f451db9682"
diff --git a/hostapd/Android.mk b/hostapd/Android.mk
index 17cc391..b3deedd 100644
--- a/hostapd/Android.mk
+++ b/hostapd/Android.mk
@@ -27,6 +27,9 @@
 # Disable unused parameter warnings
 L_CFLAGS += -Wno-unused-parameter
 
+# Disable macro redefined warnings
+L_CFLAGS += -Wno-macro-redefined
+
 # Set Android extended P2P functionality
 L_CFLAGS += -DANDROID_P2P
 
@@ -152,7 +155,6 @@
 
 OBJS += src/eapol_auth/eapol_auth_sm.c
 
-
 ifndef CONFIG_NO_DUMP_STATE
 # define HOSTAPD_DUMP_STATE to include support for dumping internal state
 # through control interface commands (undefine it, if you want to save in
diff --git a/wpa_supplicant/Android.mk b/wpa_supplicant/Android.mk
index 91f42dc..f15121f 100644
--- a/wpa_supplicant/Android.mk
+++ b/wpa_supplicant/Android.mk
@@ -25,6 +25,9 @@
 # Disable unused parameter warnings
 L_CFLAGS += -Wno-unused-parameter
 
+# Disable redefined macro warnings
+L_CFLAGS += -Wno-macro-redefined
+
 # Set Android extended P2P functionality
 L_CFLAGS += -DANDROID_P2P
 
diff --git a/wpa_supplicant/hidl/hidl_manager.cpp b/wpa_supplicant/hidl/hidl_manager.cpp
index bd63f36..703bf25 100644
--- a/wpa_supplicant/hidl/hidl_manager.cpp
+++ b/wpa_supplicant/hidl/hidl_manager.cpp
@@ -414,16 +414,28 @@
 		if (addHidlObjectToMap<P2pIface>(
 			wpa_s->ifname,
 			new P2pIface(wpa_s->global, wpa_s->ifname),
-			p2p_iface_object_map_))
+			p2p_iface_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to register P2P interface with HIDL "
+			    "control: %s",
+			    wpa_s->ifname);
 			return 1;
+		}
 		p2p_iface_callbacks_map_[wpa_s->ifname] =
 		    std::vector<android::sp<ISupplicantP2pIfaceCallback>>();
 	} else {
 		if (addHidlObjectToMap<StaIface>(
 			wpa_s->ifname,
 			new StaIface(wpa_s->global, wpa_s->ifname),
-			sta_iface_object_map_))
+			sta_iface_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to register STA interface with HIDL "
+			    "control: %s",
+			    wpa_s->ifname);
 			return 1;
+		}
 		sta_iface_callbacks_map_[wpa_s->ifname] =
 		    std::vector<android::sp<ISupplicantStaIfaceCallback>>();
 	}
@@ -449,16 +461,28 @@
 
 	if (isP2pIface(wpa_s)) {
 		if (removeHidlObjectFromMap(
-			wpa_s->ifname, p2p_iface_object_map_))
+			wpa_s->ifname, p2p_iface_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to unregister P2P interface with HIDL "
+			    "control: %s",
+			    wpa_s->ifname);
 			return 1;
+		}
 		if (removeAllIfaceCallbackHidlObjectsFromMap(
 			wpa_s->ifname, p2p_iface_callbacks_map_)) {
 			return 1;
 		}
 	} else {
 		if (removeHidlObjectFromMap(
-			wpa_s->ifname, sta_iface_object_map_))
+			wpa_s->ifname, sta_iface_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to unregister STA interface with HIDL "
+			    "control: %s",
+			    wpa_s->ifname);
 			return 1;
+		}
 		if (removeAllIfaceCallbackHidlObjectsFromMap(
 			wpa_s->ifname, sta_iface_callbacks_map_)) {
 			return 1;
@@ -495,8 +519,14 @@
 		if (addHidlObjectToMap<P2pNetwork>(
 			network_key,
 			new P2pNetwork(wpa_s->global, wpa_s->ifname, ssid->id),
-			p2p_network_object_map_))
+			p2p_network_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to register P2P network with HIDL "
+			    "control: %d",
+			    ssid->id);
 			return 1;
+		}
 		p2p_network_callbacks_map_[network_key] =
 		    std::vector<android::sp<ISupplicantP2pNetworkCallback>>();
 		// Invoke the |onNetworkAdded| method on all registered
@@ -510,8 +540,14 @@
 		if (addHidlObjectToMap<StaNetwork>(
 			network_key,
 			new StaNetwork(wpa_s->global, wpa_s->ifname, ssid->id),
-			sta_network_object_map_))
+			sta_network_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to register STA network with HIDL "
+			    "control: %d",
+			    ssid->id);
 			return 1;
+		}
 		sta_network_callbacks_map_[network_key] =
 		    std::vector<android::sp<ISupplicantStaNetworkCallback>>();
 		// Invoke the |onNetworkAdded| method on all registered
@@ -545,8 +581,15 @@
 	    getNetworkObjectMapKey(wpa_s->ifname, ssid->id);
 
 	if (isP2pIface(wpa_s)) {
-		if (removeHidlObjectFromMap(network_key, p2p_iface_object_map_))
+		if (removeHidlObjectFromMap(
+			network_key, p2p_network_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to unregister P2P network with HIDL "
+			    "control: %d",
+			    ssid->id);
 			return 1;
+		}
 		if (removeAllNetworkCallbackHidlObjectsFromMap(
 			network_key, p2p_network_callbacks_map_))
 			return 1;
@@ -559,8 +602,15 @@
 			&ISupplicantP2pIfaceCallback::onNetworkRemoved,
 			std::placeholders::_1, ssid->id));
 	} else {
-		if (removeHidlObjectFromMap(network_key, sta_iface_object_map_))
+		if (removeHidlObjectFromMap(
+			network_key, sta_network_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to unregister STA network with HIDL "
+			    "control: %d",
+			    ssid->id);
 			return 1;
+		}
 		if (removeAllNetworkCallbackHidlObjectsFromMap(
 			network_key, sta_network_callbacks_map_))
 			return 1;
diff --git a/wpa_supplicant/hidl/sta_iface.cpp b/wpa_supplicant/hidl/sta_iface.cpp
index 8ce80bb..ee38088 100644
--- a/wpa_supplicant/hidl/sta_iface.cpp
+++ b/wpa_supplicant/hidl/sta_iface.cpp
@@ -37,7 +37,7 @@
 constexpr char kSetBtCoexistenceScanStop[] = "BTCOEXSCAN-STOP";
 constexpr char kSetSupendModeEnabled[] = "SETSUSPENDMODE 1";
 constexpr char kSetSupendModeDisabled[] = "SETSUSPENDMODE 0";
-constexpr char kSetCountryCode[] = "COUNTRY ";
+constexpr char kSetCountryCode[] = "COUNTRY";
 constexpr uint32_t kExtRadioWorkDefaultTimeoutInSec = static_cast<uint32_t>(
     ISupplicantStaIface::ExtRadioWorkDefaults::TIMEOUT_IN_SECS);
 constexpr char kExtRadioWorkNamePrefix[] = "ext:";
diff --git a/wpa_supplicant/hidl/sta_network.cpp b/wpa_supplicant/hidl/sta_network.cpp
index b58d85b..e985994 100644
--- a/wpa_supplicant/hidl/sta_network.cpp
+++ b/wpa_supplicant/hidl/sta_network.cpp
@@ -1575,14 +1575,7 @@
     const std::vector<uint8_t> &identity)
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
-	// Convert the incoming parameters to a string to pass to
-	// wpa_supplicant.
-	uint32_t identity_hex_len = identity.size() * 2 + 1;
-	std::vector<char> identity_hex(identity_hex_len);
-	wpa_snprintf_hex(
-	    identity_hex.data(), identity_hex.size(), identity.data(),
-	    identity.size());
-	std::string ctrl_rsp_param = identity_hex.data();
+	std::string ctrl_rsp_param(identity.begin(), identity.end());
 	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_EAP_IDENTITY;
 	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
 	if (wpa_supplicant_ctrl_rsp_handle(