]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
OPENZAP-30 add support for flash hook as part of the dial string using 'F'
authorMichael Jerris <mike@jerris.com>
Thu, 20 Nov 2008 23:46:15 +0000 (23:46 +0000)
committerMichael Jerris <mike@jerris.com>
Thu, 20 Nov 2008 23:46:15 +0000 (23:46 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@612 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/freetdm/src/include/zap_types.h
libs/freetdm/src/ozmod/ozmod_zt/ozmod_zt.c
libs/freetdm/src/zap_io.c

index 1998465bbb51829b9ccb5b80a17d909fe81b56e8..57013ff3a11252292a0ea216ff419d9cd1e56ac4 100644 (file)
@@ -261,6 +261,7 @@ typedef enum {
        ZAP_COMMAND_GENERATE_RING_OFF,
        ZAP_COMMAND_OFFHOOK,
        ZAP_COMMAND_ONHOOK,
+       ZAP_COMMAND_FLASH,
        ZAP_COMMAND_ENABLE_PROGRESS_DETECT,
        ZAP_COMMAND_DISABLE_PROGRESS_DETECT,
        ZAP_COMMAND_TRACE_INPUT,
index 4d5c7c7c014ada47c6416471c000cd6404010e78..9ab48c4b94d3facc7b4526cc31a1360f85731416 100644 (file)
@@ -443,6 +443,15 @@ static ZIO_COMMAND_FUNCTION(zt_command)
                        zap_clear_flag_locked(zchan, ZAP_CHANNEL_OFFHOOK);
                }
                break;
+       case ZAP_COMMAND_FLASH:
+               {
+                       int command = ZT_FLASH;
+                       if (ioctl(zchan->sockfd, ZT_HOOK, &command)) {
+                               snprintf(zchan->last_error, sizeof(zchan->last_error), "FLASH Failed");
+                               return ZAP_FAIL;
+                       }
+               }
+               break;
        case ZAP_COMMAND_GENERATE_RING_ON:
                {
                        int command = ZT_RING;
index fb6abf39317003762fdaad6b8d96534c80b5f442..3535049064b96059b78e19a65a61825247618dad 100644 (file)
@@ -1712,7 +1712,14 @@ static zap_status_t handle_dtmf(zap_channel_t *zchan, zap_size_t datalen)
                if (zap_buffer_read(zchan->gen_dtmf_buffer, digits, dblen) && !zap_strlen_zero_buf(digits)) {
                        zap_log(ZAP_LOG_DEBUG, "%d:%d GENERATE DTMF [%s]\n", zchan->span_id, zchan->chan_id, digits);   
                
-                       for (cur = digits; *cur; cur++) {
+                       cur = digits;
+
+                       if (*cur == 'F') {
+                               zap_channel_command(zchan, ZAP_COMMAND_FLASH, NULL);
+                               cur++;
+                       }
+
+                       for (; *cur; cur++) {
                                int wrote = 0;
                                if ((wrote = teletone_mux_tones(&zchan->tone_session, &zchan->tone_session.TONES[(int)*cur]))) {
                                        zap_buffer_write(zchan->dtmf_buffer, zchan->tone_session.buffer, wrote * 2);