]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: Added SS7 variables for location number (pending SIP-X header integration)
authorMoises Silva <moy@sangoma.com>
Thu, 6 Oct 2011 16:45:00 +0000 (12:45 -0400)
committerMoises Silva <moy@sangoma.com>
Thu, 6 Oct 2011 16:48:07 +0000 (12:48 -0400)
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c

index 213c4c8d4dd8ad0b68ff61a164a8b637b4d3a6cf..cacb85437206518089b96234ff722f93ecfe4a3d 100644 (file)
@@ -93,7 +93,7 @@ ftdm_status_t handle_con_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ
 
        sngss7_chan_data_t *sngss7_info = NULL;
        ftdm_channel_t *ftdmchan = NULL;
-       char var[10];
+       char var[FTDM_DIGITS_LIMIT];
 
        memset(var, '\0', sizeof(var));
 
@@ -216,6 +216,34 @@ ftdm_status_t handle_con_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ
                        sprintf(var, "%d", siConEvnt->cdPtyNum.natAddrInd.val);
                        sngss7_add_var(sngss7_info, "ss7_cld_nadi", var);
 
+                       /* Retrieve the Location Number if present (see ITU Q.763, 3.30) */
+                       if (siConEvnt->cgPtyNum1.eh.pres) {
+                               if (siConEvnt->cgPtyNum1.addrSig.pres) {
+                                       /* fill in the ss7 location address number */
+                                       copy_tknStr_from_sngss7(siConEvnt->cgPtyNum1.addrSig, var, siConEvnt->cgPtyNum1.oddEven);
+                                       sngss7_add_var(sngss7_info, "ss7_loc_digits", var);
+                               }
+
+                               if (siConEvnt->cgPtyNum1.scrnInd.pres) {
+                                       /* fill in the screening indication value */
+                                       sprintf(var, "%d", siConEvnt->cgPtyNum1.scrnInd.val);
+                                       sngss7_add_var(sngss7_info, "ss7_loc_screen_ind", var);
+                               }
+
+                               if (siConEvnt->cgPtyNum1.presRest.pres) {
+                                       /* fill in the presentation value */
+                                       sprintf(var, "%d", siConEvnt->cgPtyNum1.presRest.val);
+                                       sngss7_add_var(sngss7_info, "ss7_loc_pres_ind", var);
+                               }
+
+                               if (siConEvnt->cgPtyNum1.natAddrInd.pres) {
+                                       sprintf(var, "%d", siConEvnt->cgPtyNum1.natAddrInd.val);
+                                       sngss7_add_var(sngss7_info, "ss7_loc_nadi", var);
+                               }
+                       } else {
+                               SS7_DEBUG_CHAN(ftdmchan, "No Location Number information in IAM%s\n", " ");
+                       }
+
                        sprintf(var, "%d", sngss7_info->circuit->cic);
                        sngss7_add_var(sngss7_info, "ss7_cic", var);