Merge change 7069 into donut

* changes:
  Make VPN connect even when DNS is not present and other fixes.
diff --git a/packages/VpnServices/src/com/android/server/vpn/AndroidServiceProxy.java b/packages/VpnServices/src/com/android/server/vpn/AndroidServiceProxy.java
index 7e8185e..c6c9452 100644
--- a/packages/VpnServices/src/com/android/server/vpn/AndroidServiceProxy.java
+++ b/packages/VpnServices/src/com/android/server/vpn/AndroidServiceProxy.java
@@ -84,6 +84,7 @@
                 throw new RuntimeException(e);
             }
         }
+        Log.d(mTag, "-----  Stop: " + mServiceName);
         SystemProperties.set(SVC_STOP_CMD, mServiceName);
     }
 
@@ -105,7 +106,7 @@
     @Override
     protected void performTask() throws IOException {
         String svc = mServiceName;
-        Log.d(mTag, "+++++  Execute: " + svc);
+        Log.d(mTag, "+++++  Start: " + svc);
         SystemProperties.set(SVC_START_CMD, svc);
 
         boolean success = blockUntil(SVC_STATE_RUNNING, WAITING_TIME);
diff --git a/packages/VpnServices/src/com/android/server/vpn/VpnService.java b/packages/VpnServices/src/com/android/server/vpn/VpnService.java
index b2a9445..26322f4 100644
--- a/packages/VpnServices/src/com/android/server/vpn/VpnService.java
+++ b/packages/VpnServices/src/com/android/server/vpn/VpnService.java
@@ -299,12 +299,12 @@
 
     private void saveVpnDnsProperties() {
         mOriginalDns1 = mOriginalDns2 = "";
-        for (int i = 0; i < 10; i++) {
+        for (int i = 0; i < 5; i++) {
             mVpnDns1 = SystemProperties.get(VPN_DNS1);
             mVpnDns2 = SystemProperties.get(VPN_DNS2);
             if (mOriginalDns1.equals(mVpnDns1)) {
                 Log.d(TAG, "wait for vpn dns to settle in..." + i);
-                sleep(500);
+                sleep(200);
             } else {
                 mOriginalDns1 = SystemProperties.get(DNS1);
                 mOriginalDns2 = SystemProperties.get(DNS2);
@@ -317,7 +317,9 @@
                 return;
             }
         }
-        Log.e(TAG, "saveVpnDnsProperties(): DNS not updated??");
+        Log.d(TAG, "saveVpnDnsProperties(): DNS not updated??");
+        mOriginalDns1 = mVpnDns1 = SystemProperties.get(DNS1);
+        mOriginalDns2 = mVpnDns2 = SystemProperties.get(DNS2);
     }
 
     private void saveAndSetDomainSuffices() {
@@ -374,7 +376,7 @@
     private void checkDnsProperties() {
         String dns1 = SystemProperties.get(DNS1);
         if (!mVpnDns1.equals(dns1)) {
-            Log.w(TAG, "   @@ !!!    dns being overridden");
+            Log.w(TAG, "   dns being overridden by: " + dns1);
             onError();
         }
     }
diff --git a/vpn/java/android/net/vpn/VpnState.java b/vpn/java/android/net/vpn/VpnState.java
index ebd9364..6e61f9c 100644
--- a/vpn/java/android/net/vpn/VpnState.java
+++ b/vpn/java/android/net/vpn/VpnState.java
@@ -26,8 +26,13 @@
  * {@link DISCONNECTING} and then {@link IDLE}.
  * {@link CANCELLED} is a state when a VPN connection attempt is aborted, and
  * is in transition to {@link IDLE}.
+ * The {@link UNUSABLE} state indicates that the profile is not in a state for
+ * connecting due to possibly the integrity of the fields or another profile is
+ * connecting etc.
+ * The {@link UNKNOWN} state indicates that the profile state is to be
+ * determined.
  * {@hide}
  */
 public enum VpnState {
-    CONNECTING, DISCONNECTING, CANCELLED, CONNECTED, IDLE
+    CONNECTING, DISCONNECTING, CANCELLED, CONNECTED, IDLE, UNUSABLE, UNKNOWN
 }