Merge change 23067 into eclair

* changes:
  allow delaying after yielding
diff --git a/packages/VpnServices/src/com/android/server/vpn/VpnService.java b/packages/VpnServices/src/com/android/server/vpn/VpnService.java
index e3ac996..53167f6 100644
--- a/packages/VpnServices/src/com/android/server/vpn/VpnService.java
+++ b/packages/VpnServices/src/com/android/server/vpn/VpnService.java
@@ -56,10 +56,6 @@
     private static final String REMOTE_IP = "net.ipremote";
     private static final String DNS_DOMAIN_SUFFICES = "net.dns.search";
 
-    private static final int CHALLENGE_ERROR_CODE = 5;
-    private static final int REMOTE_HUNG_UP_ERROR_CODE = 7;
-    private static final int AUTH_ERROR_CODE = 51;
-
     private final String TAG = VpnService.class.getSimpleName();
 
     // FIXME: profile is only needed in connecting phase, so we can just save
@@ -202,7 +198,7 @@
 
     private void waitUntilConnectedOrTimedout() throws IOException {
         sleep(2000); // 2 seconds
-        for (int i = 0; i < 60; i++) {
+        for (int i = 0; i < 80; i++) {
             if (mState != VpnState.CONNECTING) {
                 break;
             } else if (VPN_IS_UP.equals(
@@ -464,22 +460,8 @@
 
         synchronized int getSocketError() {
             for (DaemonProxy s : mDaemonList) {
-                switch (getResultFromSocket(s)) {
-                    case 0:
-                        continue;
-
-                    case AUTH_ERROR_CODE:
-                        return VpnManager.VPN_ERROR_AUTH;
-
-                    case CHALLENGE_ERROR_CODE:
-                        return VpnManager.VPN_ERROR_CHALLENGE;
-
-                    case REMOTE_HUNG_UP_ERROR_CODE:
-                        return VpnManager.VPN_ERROR_REMOTE_HUNG_UP;
-
-                    default:
-                        return VpnManager.VPN_ERROR_CONNECTION_FAILED;
-                }
+                int errCode = getResultFromSocket(s);
+                if (errCode != 0) return errCode;
             }
             return 0;
         }
diff --git a/packages/VpnServices/src/com/android/server/vpn/VpnServiceBinder.java b/packages/VpnServices/src/com/android/server/vpn/VpnServiceBinder.java
index 4892a7b..e5be847 100644
--- a/packages/VpnServices/src/com/android/server/vpn/VpnServiceBinder.java
+++ b/packages/VpnServices/src/com/android/server/vpn/VpnServiceBinder.java
@@ -91,7 +91,8 @@
 
     void removeStates() {
         try {
-            new File(STATES_FILE_PATH).delete();
+            File f = new File(STATES_FILE_PATH);
+            if (f.exists()) f.delete();
         } catch (Throwable e) {
             if (DBG) Log.d("VpnServiceBinder", "     remove states: " + e);
         }
diff --git a/vpn/java/android/net/vpn/VpnManager.java b/vpn/java/android/net/vpn/VpnManager.java
index f71bbea..6df612e 100644
--- a/vpn/java/android/net/vpn/VpnManager.java
+++ b/vpn/java/android/net/vpn/VpnManager.java
@@ -45,18 +45,25 @@
     /** Key to the error code of a connectivity broadcast event. */
     public static final String BROADCAST_ERROR_CODE = "err";
     /** Error code to indicate an error from authentication. */
-    public static final int VPN_ERROR_AUTH = 1;
+    public static final int VPN_ERROR_AUTH = 51;
     /** Error code to indicate the connection attempt failed. */
-    public static final int VPN_ERROR_CONNECTION_FAILED = 2;
+    public static final int VPN_ERROR_CONNECTION_FAILED = 101;
     /** Error code to indicate the server is not known. */
-    public static final int VPN_ERROR_UNKNOWN_SERVER = 3;
+    public static final int VPN_ERROR_UNKNOWN_SERVER = 102;
     /** Error code to indicate an error from challenge response. */
-    public static final int VPN_ERROR_CHALLENGE = 4;
+    public static final int VPN_ERROR_CHALLENGE = 5;
     /** Error code to indicate an error of remote server hanging up. */
-    public static final int VPN_ERROR_REMOTE_HUNG_UP = 5;
+    public static final int VPN_ERROR_REMOTE_HUNG_UP = 7;
+    /** Error code to indicate an error of remote PPP server hanging up. */
+    public static final int VPN_ERROR_REMOTE_PPP_HUNG_UP = 48;
+    /** Error code to indicate a PPP negotiation error. */
+    public static final int VPN_ERROR_PPP_NEGOTIATION_FAILED = 42;
     /** Error code to indicate an error of losing connectivity. */
-    public static final int VPN_ERROR_CONNECTION_LOST = 6;
-    private static final int VPN_ERROR_NO_ERROR = 0;
+    public static final int VPN_ERROR_CONNECTION_LOST = 103;
+    /** Largest error code used by VPN. */
+    public static final int VPN_ERROR_LARGEST = 200;
+    /** Error code to indicate a successful connection. */
+    public static final int VPN_ERROR_NO_ERROR = 0;
 
     public static final String PROFILES_PATH = "/data/misc/vpn/profiles";