]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm - SS7:Fix for VETO when trying to indicate ring-ready
authorDavid Yat Sin <dyatsin@sangoma.com>
Tue, 29 Mar 2011 15:50:05 +0000 (11:50 -0400)
committerDavid Yat Sin <dyatsin@sangoma.com>
Tue, 29 Mar 2011 15:51:06 +0000 (11:51 -0400)
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h

index 8e57473202cc8aebb2077de11cb0266064694aae..70a99ef901ab0602bd031d949b1201cb841b1ca5 100644 (file)
@@ -109,7 +109,15 @@ ftdm_state_map_t sangoma_ss7_state_map = {
        {FTDM_CHANNEL_STATE_RING, FTDM_END},
        {FTDM_CHANNEL_STATE_SUSPENDED, FTDM_CHANNEL_STATE_RESTART,
         FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP,
-        FTDM_CHANNEL_STATE_PROGRESS, FTDM_END}
+        FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS, FTDM_END}
+       },
+       {
+        ZSD_INBOUND,
+       ZSM_UNACCEPTABLE,
+       {FTDM_CHANNEL_STATE_RINGING, FTDM_END},
+       {FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP,
+        FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_PROGRESS_MEDIA,
+        FTDM_CHANNEL_STATE_UP, FTDM_END},
        },
    {
        ZSD_INBOUND,
@@ -609,6 +617,8 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
 
                break;
        /**************************************************************************/
+       /* We handle RING indication the same way we would indicate PROGRESS */
+       case FTDM_CHANNEL_STATE_RINGING:
        case FTDM_CHANNEL_STATE_PROGRESS:
 
                if (ftdmchan->last_state == FTDM_CHANNEL_STATE_SUSPENDED) {
@@ -626,7 +636,10 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
                        ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
                } else {
                        /* inbound call so we need to send out ACM */
-                       ft_to_sngss7_acm(ftdmchan);
+                       if (!sngss7_test_ckt_flag(sngss7_info, FLAG_SENT_ACM)) {
+                               sngss7_set_ckt_flag(sngss7_info, FLAG_SENT_ACM);
+                               ft_to_sngss7_acm(ftdmchan);
+                       }
                }
 
                break;
index df8b086c49e808d5609df9d054d2cee7a83c997e..c9ec787faeeca32b65b74b5210817727ca41d77e 100644 (file)
@@ -503,6 +503,7 @@ typedef enum {
        FLAG_GLARE                              = (1 << 13),
        FLAG_INFID_RESUME               = (1 << 14),
        FLAG_INFID_PAUSED               = (1 << 15),
+       FLAG_SENT_ACM                   = (1 << 16),
        FLAG_RELAY_DOWN                 = (1 << 30),
        FLAG_CKT_RECONFIG               = (1 << 31)
 } sng_ckt_flag_t;