am a785a59c: am 718e0033: Merge "SIP: add SERVER_UNREACHABLE error code." into gingerbread

Merge commit 'a785a59c831256f274627f8f8eb77f9d54508916'

* commit 'a785a59c831256f274627f8f8eb77f9d54508916':
  SIP: add SERVER_UNREACHABLE error code.
diff --git a/telephony/java/com/android/internal/telephony/Connection.java b/telephony/java/com/android/internal/telephony/Connection.java
index 0d983b5..07f90cd 100644
--- a/telephony/java/com/android/internal/telephony/Connection.java
+++ b/telephony/java/com/android/internal/telephony/Connection.java
@@ -40,6 +40,7 @@
         MMI,                            /* not presently used; dial() returns null */
         INVALID_NUMBER,                 /* invalid dial string */
         NUMBER_UNREACHABLE,             /* cannot reach the peer */
+        SERVER_UNREACHABLE,             /* cannot reach the server */
         INVALID_CREDENTIALS,            /* invalid credentials */
         OUT_OF_NETWORK,                 /* calling from out of network is not allowed */
         SERVER_ERROR,                   /* server error */
diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhone.java b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
index 55e3002..6ed9295 100755
--- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
@@ -874,6 +874,9 @@
         public void onError(SipAudioCall call, int errorCode,
                 String errorMessage) {
             switch (errorCode) {
+                case SipErrorCode.SERVER_UNREACHABLE:
+                    onError(Connection.DisconnectCause.SERVER_UNREACHABLE);
+                    break;
                 case SipErrorCode.PEER_NOT_REACHABLE:
                     onError(Connection.DisconnectCause.NUMBER_UNREACHABLE);
                     break;
diff --git a/voip/java/android/net/sip/SipErrorCode.java b/voip/java/android/net/sip/SipErrorCode.java
index eb7a1ae..a55ab25 100644
--- a/voip/java/android/net/sip/SipErrorCode.java
+++ b/voip/java/android/net/sip/SipErrorCode.java
@@ -61,6 +61,9 @@
     /** Cross-domain authentication required. */
     public static final int CROSS_DOMAIN_AUTHENTICATION = -11;
 
+    /** When the server is not reachable. */
+    public static final int SERVER_UNREACHABLE = -12;
+
     public static String toString(int errorCode) {
         switch (errorCode) {
             case NO_ERROR:
@@ -87,6 +90,8 @@
                 return "DATA_CONNECTION_LOST";
             case CROSS_DOMAIN_AUTHENTICATION:
                 return "CROSS_DOMAIN_AUTHENTICATION";
+            case SERVER_UNREACHABLE:
+                return "SERVER_UNREACHABLE";
             default:
                 return "UNKNOWN";
         }
diff --git a/voip/java/com/android/server/sip/SipSessionGroup.java b/voip/java/com/android/server/sip/SipSessionGroup.java
index bc377cf..37fffa8 100644
--- a/voip/java/com/android/server/sip/SipSessionGroup.java
+++ b/voip/java/com/android/server/sip/SipSessionGroup.java
@@ -480,7 +480,7 @@
                     public void run() {
                         try {
                             processCommand(command);
-                        } catch (SipException e) {
+                        } catch (Throwable e) {
                             Log.w(TAG, "command error: " + command, e);
                             onError(e);
                         }
@@ -1218,7 +1218,7 @@
         private int getErrorCode(Throwable exception) {
             String message = exception.getMessage();
             if (exception instanceof UnknownHostException) {
-                return SipErrorCode.INVALID_REMOTE_URI;
+                return SipErrorCode.SERVER_UNREACHABLE;
             } else if (exception instanceof IOException) {
                 return SipErrorCode.SOCKET_ERROR;
             } else {