From 751cbfb6d19863f4813f7f483cef4ce78f3fb597 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Thu, 20 Nov 2008 23:46:15 +0000 Subject: [PATCH] OPENZAP-30 add support for flash hook as part of the dial string using 'F' git-svn-id: http://svn.openzap.org/svn/openzap/trunk@612 a93c3328-9c30-0410-af19-c9cd2b2d52af --- libs/freetdm/src/include/zap_types.h | 1 + libs/freetdm/src/ozmod/ozmod_zt/ozmod_zt.c | 9 +++++++++ libs/freetdm/src/zap_io.c | 9 ++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/src/include/zap_types.h b/libs/freetdm/src/include/zap_types.h index 1998465bbb..57013ff3a1 100644 --- a/libs/freetdm/src/include/zap_types.h +++ b/libs/freetdm/src/include/zap_types.h @@ -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, diff --git a/libs/freetdm/src/ozmod/ozmod_zt/ozmod_zt.c b/libs/freetdm/src/ozmod/ozmod_zt/ozmod_zt.c index 4d5c7c7c01..9ab48c4b94 100644 --- a/libs/freetdm/src/ozmod/ozmod_zt/ozmod_zt.c +++ b/libs/freetdm/src/ozmod/ozmod_zt/ozmod_zt.c @@ -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; diff --git a/libs/freetdm/src/zap_io.c b/libs/freetdm/src/zap_io.c index fb6abf3931..3535049064 100644 --- a/libs/freetdm/src/zap_io.c +++ b/libs/freetdm/src/zap_io.c @@ -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);