]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
ftmod_libpri: Check for '#' key to leave overlap receiving state.
authorStefan Knoblich <stkn@openisdn.net>
Thu, 23 Aug 2012 20:26:49 +0000 (22:26 +0200)
committerStefan Knoblich <stkn@openisdn.net>
Thu, 23 Aug 2012 20:26:49 +0000 (22:26 +0200)
Same as ftmod_isdn, '#' key ends overlap receive and moves the incoming
call to RING state.

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c

index 41f6718353cd83e9d1a279eeac67b142aabeafef..0b3a999ee10d29a2209c662d52feac727df56689 100644 (file)
@@ -1232,15 +1232,22 @@ static int on_info(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event
                if (!ftdm_strlen_zero(pevent->ring.callednum)) {
                        int digits = strlen(pevent->ring.callednum);
                        int offset = strlen(caller_data->dnis.digits);
-                       int len    = ftdm_min(sizeof(caller_data->dnis.digits) - 1 - offset, digits);   /* max. length without terminator */
+                       int len    = 0;
 
+                       if (strchr(pevent->ring.callednum, '#')) {
+                               pevent->ring.complete = 1;
+                               digits--;
+                       }
+
+                       len = ftdm_min(sizeof(caller_data->dnis.digits) - 1 - offset, digits);  /* max. length without terminator */
                        if (len < digits) {
                                ftdm_log_chan(chan, FTDM_LOG_WARNING, "Length %d of digit string exceeds available space %d of DNIS, truncating!\n",
                                        digits, len);
                        }
-
-                       ftdm_copy_string(&caller_data->dnis.digits[offset], (char *)pevent->ring.callednum, len + 1);   /* max. length with terminator */
-                       caller_data->dnis.digits[offset + len] = '\0';
+                       if (len) {
+                               ftdm_copy_string(&caller_data->dnis.digits[offset], (char *)pevent->ring.callednum, len + 1);   /* max. length with terminator */
+                               caller_data->dnis.digits[offset + len] = '\0';
+                       }
                }
                if (pevent->ring.complete) {
                        ftdm_log_chan_msg(chan, FTDM_LOG_DEBUG, "Number complete indicated, moving channel to RING state\n");