From f8b23330bc9885278b6689e4314a36432645ce4d Mon Sep 17 00:00:00 2001
From: Michael Jerris <mike@jerris.com>
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/openzap/src/include/zap_types.h       | 1 +
 libs/openzap/src/ozmod/ozmod_zt/ozmod_zt.c | 9 +++++++++
 libs/openzap/src/zap_io.c                  | 9 ++++++++-
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/libs/openzap/src/include/zap_types.h b/libs/openzap/src/include/zap_types.h
index 1998465bbb..57013ff3a1 100644
--- a/libs/openzap/src/include/zap_types.h
+++ b/libs/openzap/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/openzap/src/ozmod/ozmod_zt/ozmod_zt.c b/libs/openzap/src/ozmod/ozmod_zt/ozmod_zt.c
index 4d5c7c7c01..9ab48c4b94 100644
--- a/libs/openzap/src/ozmod/ozmod_zt/ozmod_zt.c
+++ b/libs/openzap/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/openzap/src/zap_io.c b/libs/openzap/src/zap_io.c
index fb6abf3931..3535049064 100644
--- a/libs/openzap/src/zap_io.c
+++ b/libs/openzap/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);