]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: ss7 - fixed bug in dnis if ST character present
authorKonrad Hammel <konrad@sangoma.com>
Thu, 16 Sep 2010 20:50:36 +0000 (16:50 -0400)
committerKonrad Hammel <konrad@sangoma.com>
Thu, 16 Sep 2010 20:53:14 +0000 (16:53 -0400)
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c

index 6fba4e9e0a649c34cfd4099e632e8f1bea134fa3..0d52dfada73ee72217436b9f1d59895db86c8a70 100644 (file)
@@ -483,14 +483,17 @@ static void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
                        i++;
                }
 
-               /* check if the end of pulsing character has arrived or the right number of digits */
-               if (ftdmchan->caller_data.dnis.digits[i] == 0xF) {
+               /* check if the end of pulsing (ST) character has arrived or the right number of digits */
+               if (ftdmchan->caller_data.dnis.digits[i-1] == 'F') {
                        SS7_DEBUG_CHAN(ftdmchan, "Received the end of pulsing character %s\n", "");
 
+                       /* remove the ST */
+                       ftdmchan->caller_data.dnis.digits[i-1] = '\0';
+                       
                        /*now go to the RING state */
                        ftdm_set_state_locked (ftdmchan, FTDM_CHANNEL_STATE_RING);
                        
-               } else if (i >= g_ftdm_sngss7_data.min_digits) {
+               } else if (i > g_ftdm_sngss7_data.min_digits) {
                        SS7_DEBUG_CHAN(ftdmchan, "Received %d digits (min digits = %d)\n", i, g_ftdm_sngss7_data.min_digits);
 
                        /*now go to the RING state */
index 1e8e54a5ee8793a09a2b64f3b4d0b93312645454..5086d11a7187d57321aa6260280c5951292a33ca 100644 (file)
@@ -306,9 +306,9 @@ uint8_t copy_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven)
                j = 0;
 
                for (i = 0; i < str.len; i++) {
-                       sprintf(&ftdm[j], "%d", (str.val[i] & 0x0F));
+                       sprintf(&ftdm[j], "%X", (str.val[i] & 0x0F));
                        j++;
-                       sprintf(&ftdm[j], "%d", ((str.val[i] & 0xF0) >> 4));
+                       sprintf(&ftdm[j], "%X", ((str.val[i] & 0xF0) >> 4));
                        j++;
                }
 
@@ -318,6 +318,8 @@ uint8_t copy_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven)
                } else {
                        ftdm[j] = '\0';
                }
+
+               
        } else {
                SS7_ERROR("Asked to copy tknStr that is not present!\n");
                return 1;