]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
ftmod_libpri: Incoming overlap receiving digits have to be appended to the DNIS.
authorStefan Knoblich <s.knoblich@axsentis.de>
Thu, 30 Jun 2011 10:55:56 +0000 (12:55 +0200)
committerStefan Knoblich <s.knoblich@axsentis.de>
Thu, 30 Jun 2011 11:01:19 +0000 (13:01 +0200)
Libpri doesn't do that for us, so handle things on our end.
Other parts of the previous patch seem to work fine.

Signed-off-by: Stefan Knoblich <s.knoblich@axsentis.de>
libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c

index 7271d3be1a5eccc7eba55f9b733ecf1cf0de1d96..8bebbbe242df43e7d6ec92a690ef536c73d399ca 100644 (file)
 #include "private/ftdm_core.h"
 #include "ftmod_libpri.h"
 
+#ifndef MIN
+#define MIN(x,y)       (((x) < (y)) ? (x) : (y))
+#endif
+
 static void _ftdm_channel_set_state_force(ftdm_channel_t *chan, const ftdm_channel_state_t state)
 {
        assert(chan);
@@ -882,10 +886,22 @@ static int on_info(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_event
                ftdm_log_chan(chan, FTDM_LOG_DEBUG, "-- Incoming INFORMATION indication, current called number: '%s', number complete: %s\n",
                        pevent->ring.callednum, pevent->ring.complete ? "yes" : "no");
 
+               /* append digits to dnis */
+               if (!ftdm_strlen_zero(pevent->ring.callednum)) {
+                       int digits = strlen(pevent->ring.callednum);
+                       int offset = strlen(caller_data->dnis.digits);
+                       int len    = MIN(sizeof(caller_data->dnis.digits) - 1 - offset, digits);
+
+                       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);
+                       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");
-                       /* copy final value */
-                       ftdm_set_string(caller_data->dnis.digits, (char *)pevent->ring.callednum);
                        /* notify switch */
                        ftdm_set_state(chan, FTDM_CHANNEL_STATE_RING);
                }