]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
update more sip cause code to qsig cause code mappings from rfc 4497 sections 8.4...
authorMichael Jerris <mike@jerris.com>
Wed, 25 Oct 2006 03:45:20 +0000 (03:45 +0000)
committerMichael Jerris <mike@jerris.com>
Wed, 25 Oct 2006 03:45:20 +0000 (03:45 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3190 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_types.h
src/mod/endpoints/mod_sofia/mod_sofia.c
src/switch_channel.c

index 1be4403a74ee9af716e12a19aa9215484eab30ed..a9f0b43c33406f4c6b7198222217b962703b3c79 100644 (file)
@@ -680,8 +680,11 @@ typedef enum {
        SWITCH_CAUSE_USER_BUSY = 17,
        SWITCH_CAUSE_NO_USER_RESPONSE = 18,
        SWITCH_CAUSE_NO_ANSWER = 19,
+       SWITCH_CAUSE_SUBSCRIBER_ABSENT = 20,
        SWITCH_CAUSE_CALL_REJECTED = 21,
        SWITCH_CAUSE_NUMBER_CHANGED = 22,
+       SWITCH_CAUSE_REDIRECTION_TO_NEW_DESTINATION = 23,
+       SWITCH_CAUSE_EXCHANGE_ROUTING_ERROR = 25,
        SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER = 27,
        SWITCH_CAUSE_INVALID_NUMBER_FORMAT = 28,
        SWITCH_CAUSE_FACILITY_REJECTED = 29,
@@ -699,9 +702,11 @@ typedef enum {
        SWITCH_CAUSE_INCOMING_CALL_BARRED = 54,
        SWITCH_CAUSE_BEARERCAPABILITY_NOTAUTH = 57,
        SWITCH_CAUSE_BEARERCAPABILITY_NOTAVAIL = 58,
+       SWITCH_CAUSE_SERVICE_UNAVAILABLE = 63,
        SWITCH_CAUSE_BEARERCAPABILITY_NOTIMPL = 65,
        SWITCH_CAUSE_CHAN_NOT_IMPLEMENTED = 66,
        SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED = 69,
+       SWITCH_CAUSE_SERVICE_NOT_IMPLEMENTED = 79,
        SWITCH_CAUSE_INVALID_CALL_REFERENCE = 81,
        SWITCH_CAUSE_INCOMPATIBLE_DESTINATION = 88,
        SWITCH_CAUSE_INVALID_MSG_UNSPECIFIED = 95,
index 645c573ac1fcb79d1af154e5cd0c73f71dba95a8..93d4f7a8ce2c6cbbcb2255f0eb46279de5f47429 100644 (file)
@@ -1075,7 +1075,7 @@ static switch_status_t sofia_on_execute(switch_core_session_t *session)
        return SWITCH_STATUS_SUCCESS;
 }
 
-// map QSIG cause codes to SIP ala RFC4497
+// map QSIG cause codes to SIP from RFC4497 section 8.4.1
 static int hangup_cause_to_sip(switch_call_cause_t cause) {
        switch (cause) {
                case SWITCH_CAUSE_UNALLOCATED: 
@@ -1088,9 +1088,12 @@ static int hangup_cause_to_sip(switch_call_cause_t cause) {
                        return 408;
                case SWITCH_CAUSE_NO_ANSWER:
                        return 480;
+               case SWITCH_CAUSE_SUBSCRIBER_ABSENT:
+                       return 480;
                case SWITCH_CAUSE_CALL_REJECTED:
                        return 603;
                case SWITCH_CAUSE_NUMBER_CHANGED:
+               case SWITCH_CAUSE_REDIRECTION_TO_NEW_DESTINATION:
                        return 410;
                case SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER:
                        return 502;
@@ -1114,6 +1117,7 @@ static int hangup_cause_to_sip(switch_call_cause_t cause) {
                case SWITCH_CAUSE_BEARERCAPABILITY_NOTIMPL:
                        return 488;
                case SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED:
+               case SWITCH_CAUSE_SERVICE_NOT_IMPLEMENTED:
                        return 501;
                case SWITCH_CAUSE_INCOMPATIBLE_DESTINATION:
                        return 503;
@@ -2026,7 +2030,7 @@ static uint8_t negotiate_sdp(switch_core_session_t *session, sdp_session_t *sdp)
        return match;
 }
 
-// map sip responses to QSIG cause codes ala RFC4497
+// map sip responses to QSIG cause codes ala RFC4497 section 8.4.4
 static switch_call_cause_t sip_cause_to_freeswitch(int status) {
        switch (status) {
                case 200:
@@ -2072,6 +2076,15 @@ static switch_call_cause_t sip_cause_to_freeswitch(int status) {
                        return SWITCH_CAUSE_BEARERCAPABILITY_NOTIMPL;
                case 502:
                        return SWITCH_CAUSE_NETWORK_OUT_OF_ORDER;
+               case 405:
+                       return SWITCH_CAUSE_SERVICE_UNAVAILABLE;
+               case 406:
+               case 415:
+               case 501:
+                       return SWITCH_CAUSE_SERVICE_NOT_IMPLEMENTED;
+               case 482:
+               case 483:
+                       return SWITCH_CAUSE_EXCHANGE_ROUTING_ERROR;
                default: 
                        return SWITCH_CAUSE_NORMAL_UNSPECIFIED;
        }
index 71d07fa7e0ba81172d4939da866dc2e026a9bab9..ed9b4fb0e37a3d3e4fea23f9cc0af8ac7d5afc2b 100644 (file)
@@ -48,8 +48,11 @@ static struct switch_cause_table CAUSE_CHART[] = {
        { "USER_BUSY", SWITCH_CAUSE_USER_BUSY },
        { "NO_USER_RESPONSE", SWITCH_CAUSE_NO_USER_RESPONSE },
        { "NO_ANSWER", SWITCH_CAUSE_NO_ANSWER },
+       { "SUBSCRIBER_ABSENT", SWITCH_CAUSE_SUBSCRIBER_ABSENT },
        { "CALL_REJECTED", SWITCH_CAUSE_CALL_REJECTED },
        { "NUMBER_CHANGED", SWITCH_CAUSE_NUMBER_CHANGED },
+       { "REDIRECTION_TO_NEW_DESTINATION", SWITCH_CAUSE_REDIRECTION_TO_NEW_DESTINATION },
+       { "EXCHANGE_ROUTING_ERROR", SWITCH_CAUSE_EXCHANGE_ROUTING_ERROR },
        { "DESTINATION_OUT_OF_ORDER", SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER },
        { "INVALID_NUMBER_FORMAT", SWITCH_CAUSE_INVALID_NUMBER_FORMAT },
        { "FACILITY_REJECTED", SWITCH_CAUSE_FACILITY_REJECTED },
@@ -67,9 +70,10 @@ static struct switch_cause_table CAUSE_CHART[] = {
        { "INCOMING_CALL_BARRED", SWITCH_CAUSE_INCOMING_CALL_BARRED },
        { "BEARERCAPABILITY_NOTAUTH", SWITCH_CAUSE_BEARERCAPABILITY_NOTAUTH },
        { "BEARERCAPABILITY_NOTAVAIL", SWITCH_CAUSE_BEARERCAPABILITY_NOTAVAIL },
-       { "BEARERCAPABILITY_NOTIMPL", SWITCH_CAUSE_BEARERCAPABILITY_NOTIMPL },
+       { "SERVICE_UNAVAILABLE", SWITCH_CAUSE_SERVICE_UNAVAILABLE },
        { "CHAN_NOT_IMPLEMENTED", SWITCH_CAUSE_CHAN_NOT_IMPLEMENTED },
        { "FACILITY_NOT_IMPLEMENTED", SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED },
+       { "SERVICE_NOT_IMPLEMENTED", SWITCH_CAUSE_SERVICE_NOT_IMPLEMENTED },
        { "INVALID_CALL_REFERENCE", SWITCH_CAUSE_INVALID_CALL_REFERENCE },
        { "INCOMPATIBLE_DESTINATION", SWITCH_CAUSE_INCOMPATIBLE_DESTINATION },
        { "INVALID_MSG_UNSPECIFIED", SWITCH_CAUSE_INVALID_MSG_UNSPECIFIED },