merge in mnc-dr-release history after reset to mnc-dr-dev
diff --git a/service/java/com/android/server/wifi/WifiConfigStore.java b/service/java/com/android/server/wifi/WifiConfigStore.java
index f3bf62b..e344107 100644
--- a/service/java/com/android/server/wifi/WifiConfigStore.java
+++ b/service/java/com/android/server/wifi/WifiConfigStore.java
@@ -3839,6 +3839,11 @@
             mLocalLog.dump(fd, pw, args);
             pw.println("WifiConfigStore - Log End ----");
         }
+        if (mMOManager.isConfigured()) {
+            pw.println("Begin dump of ANQP Cache");
+            mAnqpCache.dump(pw);
+            pw.println("End dump of ANQP Cache");
+        }
     }
 
     public String getConfigFile() {
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index c74f29b..5337a71 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -811,7 +811,7 @@
      */
     public int addOrUpdateNetwork(WifiConfiguration config) {
         enforceChangePermission();
-        if (isValid(config)) {
+        if (isValid(config) && isValidPasspoint(config)) {
         
             WifiEnterpriseConfig enterpriseConfig = config.enterpriseConfig;
 
@@ -1953,6 +1953,11 @@
         return validity == null || logAndReturnFalse(validity);
     }
 
+    public static boolean isValidPasspoint(WifiConfiguration config) {
+        String validity = checkPasspointValidity(config);
+        return validity == null || logAndReturnFalse(validity);
+    }
+
     public static String checkValidity(WifiConfiguration config) {
         if (config.allowedKeyManagement == null)
             return "allowed kmgmt";
@@ -1969,7 +1974,10 @@
                 return "not PSK or 8021X";
             }
         }
+        return null;
+    }
 
+    public static String checkPasspointValidity(WifiConfiguration config) {
         if (!TextUtils.isEmpty(config.FQDN)) {
             /* this is passpoint configuration; it must not have an SSID */
             if (!TextUtils.isEmpty(config.SSID)) {
@@ -1993,8 +2001,6 @@
                 return "no CA certificate";
             }
         }
-
-        // TODO: Add more checks
         return null;
     }
 
diff --git a/service/java/com/android/server/wifi/hotspot2/ANQPData.java b/service/java/com/android/server/wifi/hotspot2/ANQPData.java
index d8dfec3..6db1f9e 100644
--- a/service/java/com/android/server/wifi/hotspot2/ANQPData.java
+++ b/service/java/com/android/server/wifi/hotspot2/ANQPData.java
@@ -67,8 +67,7 @@
                 mExpiry > System.currentTimeMillis();
     }
 
-    @Override
-    public String toString() {
+    public String toString(boolean brief) {
         StringBuilder sb = new StringBuilder();
         sb.append(mNetwork.toKeyString()).append(", domid ").append(mNetwork.getAnqpDomainID());
         if (mANQPElements == null) {
@@ -80,8 +79,18 @@
         long now = System.currentTimeMillis();
         sb.append(Utils.toHMS(now-mCtime)).append(" old, expires in ").
                 append(Utils.toHMS(mExpiry-now)).append(' ');
-        sb.append(expired(now) ? 'x' : '-');
-        sb.append(mANQPElements == null ? 'u' : '-');
+        if (brief) {
+            sb.append(expired(now) ? 'x' : '-');
+            sb.append(mANQPElements == null ? 'u' : '-');
+        }
+        else if (mANQPElements != null) {
+            sb.append(" data=").append(mANQPElements);
+        }
         return sb.toString();
     }
+
+    @Override
+    public String toString() {
+        return toString(true);
+    }
 }
diff --git a/service/java/com/android/server/wifi/hotspot2/AnqpCache.java b/service/java/com/android/server/wifi/hotspot2/AnqpCache.java
index 3ffe004..5ca642b 100644
--- a/service/java/com/android/server/wifi/hotspot2/AnqpCache.java
+++ b/service/java/com/android/server/wifi/hotspot2/AnqpCache.java
@@ -5,6 +5,7 @@
 import com.android.server.wifi.anqp.ANQPElement;
 import com.android.server.wifi.anqp.Constants;
 
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -179,4 +180,11 @@
             }
         }
     }
+
+    public void dump(PrintWriter out) {
+        out.println("Last sweep " + Utils.toHMS(System.currentTimeMillis() - mLastSweep) + " ago.");
+        for (ANQPData anqpData : mANQPCache.values()) {
+            out.println(anqpData.toString(false));
+        }
+    }
 }
diff --git a/service/jni/com_android_server_wifi_WifiNative.cpp b/service/jni/com_android_server_wifi_WifiNative.cpp
index 6019f85..f7d3ca0 100644
--- a/service/jni/com_android_server_wifi_WifiNative.cpp
+++ b/service/jni/com_android_server_wifi_WifiNative.cpp
@@ -82,6 +82,7 @@
     hal_fn->wifi_set_log_handler = wifi_set_log_handler_stub;
     hal_fn->wifi_reset_log_handler = wifi_reset_log_handler_stub;
     hal_fn->wifi_set_alert_handler = wifi_set_alert_handler_stub;
+    hal_fn->wifi_reset_alert_handler = wifi_reset_alert_handler_stub;
     hal_fn->wifi_get_firmware_version = wifi_get_firmware_version_stub;
     hal_fn->wifi_get_ring_buffers_status = wifi_get_ring_buffers_status_stub;
     hal_fn->wifi_get_logger_supported_feature_set = wifi_get_logger_supported_feature_set_stub;
@@ -1789,10 +1790,26 @@
 
 static jboolean android_net_wifi_reset_log_handler(JNIEnv *env, jclass cls, jint iface, jint id) {
     wifi_interface_handle handle = getIfaceHandle(env, cls, iface);
+
+    //reset alter handler
+    ALOGD("android_net_wifi_reset_alert_handler = %p", handle);
+    int result = hal_fn.wifi_reset_alert_handler(id, handle);
+    if (result != WIFI_SUCCESS) {
+        ALOGE(" Fail to reset alert handler");
+        return false;
+    }
+
+    //reset log handler
     ALOGD("android_net_wifi_reset_log_handler = %p", handle);
-    int result = hal_fn.wifi_reset_log_handler(id,handle);
-    return result == WIFI_SUCCESS;
+    result = hal_fn.wifi_reset_log_handler(id, handle);
+    if (result != WIFI_SUCCESS) {
+        ALOGE("Fail to reset logging handler");
+        return false;
+    }
+
+    return true;
 }
+
 // ----------------------------------------------------------------------------
 // ePno framework
 // ----------------------------------------------------------------------------
diff --git a/service/jni/wifi_hal_stub.h b/service/jni/wifi_hal_stub.h
index e76b2b8..bd00947 100644
--- a/service/jni/wifi_hal_stub.h
+++ b/service/jni/wifi_hal_stub.h
@@ -79,6 +79,7 @@
 wifi_error wifi_reset_log_handler_stub(wifi_request_id id, wifi_interface_handle iface);
 wifi_error wifi_set_alert_handler_stub(wifi_request_id id, wifi_interface_handle iface,
         wifi_alert_handler handler);
+wifi_error wifi_reset_alert_handler_stub(wifi_request_id id, wifi_interface_handle iface);
 wifi_error wifi_get_firmware_version_stub(wifi_interface_handle iface, char *buffer,
         int buffer_size);
 wifi_error wifi_get_ring_buffers_status_stub(wifi_interface_handle iface,
diff --git a/service/lib/wifi_hal_stub.cpp b/service/lib/wifi_hal_stub.cpp
index 2e642de..65770f3 100644
--- a/service/lib/wifi_hal_stub.cpp
+++ b/service/lib/wifi_hal_stub.cpp
@@ -170,6 +170,10 @@
     return WIFI_ERROR_NOT_SUPPORTED;
 }
 
+wifi_error wifi_reset_alert_handler_stub(wifi_request_id id, wifi_interface_handle iface) {
+    return WIFI_ERROR_NOT_SUPPORTED;
+}
+
 wifi_error wifi_get_firmware_version_stub( wifi_interface_handle iface, char *buffer,
         int buffer_size) {
     return WIFI_ERROR_NOT_SUPPORTED;