]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-11824 [sofia-sip,mod_sofia,core] Added cause codes that map to SIP 600,603,604...
authorChris Rienzo <chris@signalwire.com>
Tue, 30 Apr 2019 23:26:41 +0000 (23:26 +0000)
committerMike Jerris <mike@signalwire.com>
Thu, 6 Jun 2019 15:51:51 +0000 (11:51 -0400)
libs/sofia-sip/libsofia-sip-ua/sip/sip_status.c
libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c
libs/sofia-sip/libsofia-sip-ua/sip/sofia-sip/sip_status.h
libs/sofia-sip/libsofia-sip-ua/sip/torture_sip.c
src/include/switch_types.h
src/mod/endpoints/mod_sofia/mod_sofia.c
src/switch_channel.c

index f75da713ebad3aa6d261944ca2c202a989b8afb7..2ea82963e60d97b97c29ce026891aff7bb32fb3d 100644 (file)
@@ -104,6 +104,7 @@ char const
   sip_603_Decline[] =                  "Decline",
   sip_604_Does_not_exist_anywhere[] =  "Does Not Exist Anywhere",
   sip_606_Not_acceptable[] =           "Not Acceptable",
+  sip_607_Unwanted[] =                 "Unwanted",
   sip_687_Dialog_terminated[] =        "Dialog Terminated"
   ;
 
@@ -191,6 +192,7 @@ char const *sip_status_phrase(int status)
   case 603: return sip_603_Decline;
   case 604: return sip_604_Does_not_exist_anywhere;
   case 606: return sip_606_Not_acceptable;
+  case 607: return sip_607_Unwanted;
   case 687: return sip_687_Dialog_terminated;
   }
 
index 051ba5ae39517f1109b45f442c66be29d7c7cd90..e5ef095eb0bceebf5e2330940ff11d801628907f 100644 (file)
@@ -1422,6 +1422,15 @@ int sip_response_terminates_dialog(int response_code,
     */
     *return_graceful_terminate_usage = 0;
     return 0;
+
+  case 607: /** @par 607 Unwanted
+
+      This response is similar to 603, except it informs the caller
+      that the call is unwanted and may be blacklisted.  Added by
+      RFC-8197
+    */
+    *return_graceful_terminate_usage = 0;
+    return 0;
   }
 
   /* Do not change graceful_terminate */
index c5a738927f0d7e09042419f22e16e6f0f201629e..b10d165e3a85c82fd3b1d13bac30357450d1f02f 100644 (file)
@@ -169,6 +169,8 @@ SOFIAPUBFUN char const *sip_status_phrase(int status);
 #define SIP_604_DOES_NOT_EXIST_ANYWHERE 604, sip_604_Does_not_exist_anywhere
 /** 606 Not Acceptable @HIDE */
 #define SIP_606_NOT_ACCEPTABLE          606, sip_606_Not_acceptable
+/** 607 Unwanted @HIDE */
+#define SIP_607_UNWANTED                607, sip_607_Unwanted
 /** 687 Dialog terminated @HIDE */
 #define SIP_687_DIALOG_TERMINATED       687, sip_687_Dialog_terminated
 
@@ -238,6 +240,7 @@ SOFIAPUBVAR char const sip_600_Busy_everywhere[];
 SOFIAPUBVAR char const sip_603_Decline[];
 SOFIAPUBVAR char const sip_604_Does_not_exist_anywhere[];
 SOFIAPUBVAR char const sip_606_Not_acceptable[];
+SOFIAPUBVAR char const sip_607_Unwanted[];
 SOFIAPUBVAR char const sip_687_Dialog_terminated[];
 
 SOFIA_END_DECLS
index 2927380728d3e40c9057d513700560a9e02b26ab..00514fbd2ca6cfda5a76fbd8b23e715582a2fbe4 100644 (file)
@@ -1511,6 +1511,7 @@ static int response_phrase_test(void)
                { SIP_603_DECLINE },
                { SIP_604_DOES_NOT_EXIST_ANYWHERE },
                { SIP_606_NOT_ACCEPTABLE },
+       { SIP_607_UNWANTED },
        { 0, NULL }
       };
     int i;
index eb45ec630a26805d617eb07aabd12be96f9b0784..52c2fef3b73ed09d5c4ce7477204d21fffb53e0a 100644 (file)
@@ -2175,7 +2175,12 @@ typedef enum {
        SWITCH_CAUSE_INVALID_PROFILE = 611,
        SWITCH_CAUSE_NO_PICKUP = 612,
        SWITCH_CAUSE_SRTP_READ_ERROR = 613,
-       SWITCH_CAUSE_BOWOUT = 614
+       SWITCH_CAUSE_BOWOUT = 614,
+       SWITCH_CAUSE_BUSY_EVERYWHERE = 615,
+       SWITCH_CAUSE_DECLINE = 616,
+       SWITCH_CAUSE_DOES_NOT_EXIST_ANYWHERE = 617,
+       SWITCH_CAUSE_NOT_ACCEPTABLE = 618,
+       SWITCH_CAUSE_UNWANTED = 619
 } switch_call_cause_t;
 
 typedef enum {
index a1aecbe0a3d3fef65135da7833d5fff30652004e..c2900cf51599cbf7e5ee4df69a365f7e37e4a60b 100644 (file)
@@ -340,6 +340,17 @@ static int hangup_cause_to_sip(switch_call_cause_t cause)
                return 487;
        case SWITCH_CAUSE_EXCHANGE_ROUTING_ERROR:
                return 483;
+       /* Custom mappings not part of RFC */
+       case SWITCH_CAUSE_BUSY_EVERYWHERE:
+               return 600;
+       case SWITCH_CAUSE_DECLINE:
+               return 603;
+       case SWITCH_CAUSE_DOES_NOT_EXIST_ANYWHERE:
+               return 604;
+       case SWITCH_CAUSE_NOT_ACCEPTABLE:
+               return 606;
+       case SWITCH_CAUSE_UNWANTED:
+               return 607;
        default:
                return 480;
        }
index f87b5a9e7143e3d2c2f122d216bbd33a264a5613..ad77b5fbc9cee370caa977f55f11c14ee9814284 100644 (file)
@@ -125,6 +125,10 @@ static struct switch_cause_table CAUSE_CHART[] = {
        {"NO_PICKUP", SWITCH_CAUSE_NO_PICKUP},
        {"SRTP_READ_ERROR", SWITCH_CAUSE_SRTP_READ_ERROR},
        {"BOWOUT", SWITCH_CAUSE_BOWOUT},
+       {"BUSY_EVERYWHERE", SWITCH_CAUSE_BUSY_EVERYWHERE},
+       {"DECLINE", SWITCH_CAUSE_DECLINE},
+       {"DOES_NOT_EXIST_ANYWHERE", SWITCH_CAUSE_DOES_NOT_EXIST_ANYWHERE},
+       {"UNWANTED", SWITCH_CAUSE_UNWANTED},
        {NULL, 0}
 };