[asterisk-commits] file: trunk r78278 - in /trunk: apps/ include/asterisk/ main/ res/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Aug 6 16:52:30 CDT 2007


Author: file
Date: Mon Aug  6 16:52:30 2007
New Revision: 78278

URL: http://svn.digium.com/view/asterisk?view=rev&rev=78278
Log:
Extend the ast_senddigit and ast_dtmf_stream API calls to allow the duration of the DTMF digit(s) to be specified and make the SendDTMF application have the capability to use it.

Modified:
    trunk/apps/app_dial.c
    trunk/apps/app_senddtmf.c
    trunk/apps/app_test.c
    trunk/include/asterisk/app.h
    trunk/include/asterisk/channel.h
    trunk/main/app.c
    trunk/main/channel.c
    trunk/res/res_features.c

Modified: trunk/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_dial.c?view=diff&rev=78278&r1=78277&r2=78278
==============================================================================
--- trunk/apps/app_dial.c (original)
+++ trunk/apps/app_dial.c Mon Aug  6 16:52:30 2007
@@ -1527,7 +1527,7 @@
 			/* Ok, done. stop autoservice */
 			res = ast_autoservice_stop(chan);
 			if (digit > 0 && !res)
-				res = ast_senddigit(chan, digit); 
+				res = ast_senddigit(chan, digit, 0); 
 			else
 				res = digit;
 
@@ -1696,12 +1696,12 @@
 			if (!ast_strlen_zero(dtmfcalled)) { 
 				if (option_verbose > 2)
 					ast_verbose(VERBOSE_PREFIX_3 "Sending DTMF '%s' to the called party.\n", dtmfcalled);
-				res = ast_dtmf_stream(peer,chan,dtmfcalled,250);
+				res = ast_dtmf_stream(peer,chan,dtmfcalled,250,0);
 			}
 			if (!ast_strlen_zero(dtmfcalling)) {
 				if (option_verbose > 2)
 					ast_verbose(VERBOSE_PREFIX_3 "Sending DTMF '%s' to the calling party.\n", dtmfcalling);
-				res = ast_dtmf_stream(chan,peer,dtmfcalling,250);
+				res = ast_dtmf_stream(chan,peer,dtmfcalling,250,0);
 			}
 		}
 		

Modified: trunk/apps/app_senddtmf.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_senddtmf.c?view=diff&rev=78278&r1=78277&r2=78278
==============================================================================
--- trunk/apps/app_senddtmf.c (original)
+++ trunk/apps/app_senddtmf.c Mon Aug  6 16:52:30 2007
@@ -60,10 +60,11 @@
 {
 	int res = 0;
 	char *data;
-	int timeout;
+	int timeout, duration;
 	AST_DECLARE_APP_ARGS(args,
 		AST_APP_ARG(digits);
 		AST_APP_ARG(timeout);
+		AST_APP_ARG(duration);
 	);
 
 	if (ast_strlen_zero(vdata)) {
@@ -75,7 +76,8 @@
 	AST_STANDARD_APP_ARGS(args, data);
 
 	timeout = atoi(args.timeout);
-	res = ast_dtmf_stream(chan, NULL, args.digits, timeout <= 0 ? 250 : timeout);
+	duration = atoi(args.duration);
+	res = ast_dtmf_stream(chan, NULL, args.digits, timeout <= 0 ? 250 : timeout, duration);
 
 	return res;
 }
@@ -102,7 +104,7 @@
 		return 0;
 	}
 
-	ast_senddigit(chan, *digit);
+	ast_senddigit(chan, *digit, 0);
 
 	ast_mutex_unlock(&chan->lock);
 	astman_send_ack(s, m, "DTMF successfully queued");

Modified: trunk/apps/app_test.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_test.c?view=diff&rev=78278&r1=78277&r2=78278
==============================================================================
--- trunk/apps/app_test.c (original)
+++ trunk/apps/app_test.c Mon Aug  6 16:52:30 2007
@@ -148,7 +148,7 @@
 	res = ast_safe_sleep(chan, 3000);
 	/* Transmit client version */
 	if (!res)
-		res = ast_dtmf_stream(chan, NULL, "8378*1#", 0);
+		res = ast_dtmf_stream(chan, NULL, "8378*1#", 0, 0);
 	ast_debug(1, "Transmit client version\n");
 	
 	/* Read server version */
@@ -166,9 +166,9 @@
 		res = ast_safe_sleep(chan, 1000);
 	/* Send test id */
 	if (!res) 
-		res = ast_dtmf_stream(chan, NULL, testid, 0);		
+		res = ast_dtmf_stream(chan, NULL, testid, 0, 0);		
 	if (!res) 
-		res = ast_dtmf_stream(chan, NULL, "#", 0);		
+		res = ast_dtmf_stream(chan, NULL, "#", 0, 0);		
 	ast_debug(1, "send test identifier: %s\n", testid);
 
 	if ((res >=0) && (!ast_strlen_zero(testid))) {
@@ -198,7 +198,7 @@
 			if (!res) {
 				/* Step 2: Send "2" */
 				ast_debug(1, "TestClient: 2.  Send DTMF 2\n");
-				res = ast_dtmf_stream(chan, NULL, "2", 0);
+				res = ast_dtmf_stream(chan, NULL, "2", 0, 0);
 				fprintf(f, "SEND DTMF 2:   %s\n", (res < 0) ? "FAIL" : "PASS");
 				if (res > 0)
 					res = 0;
@@ -265,7 +265,7 @@
 			if (!res) {
 				/* Step 10: Send "7" */
 				ast_debug(1, "TestClient: 7.  Send DTMF 7\n");
-				res = ast_dtmf_stream(chan, NULL, "7", 0);
+				res = ast_dtmf_stream(chan, NULL, "7", 0, 0);
 				fprintf(f, "SEND DTMF 7:   %s\n", (res < 0) ? "FAIL" : "PASS");
 				if (res > 0)
 					res =0;
@@ -318,7 +318,7 @@
 
 	res = ast_safe_sleep(chan, 1000);
 	if (!res)
-		res = ast_dtmf_stream(chan, NULL, "8378*1#", 0);
+		res = ast_dtmf_stream(chan, NULL, "8378*1#", 0, 0);
 	if (res > 0)
 		res = 0;
 
@@ -344,7 +344,7 @@
 			if (!res) {
 				/* Step 1: Send "1" */
 				ast_debug(1, "TestServer: 1.  Send DTMF 1\n");
-				res = ast_dtmf_stream(chan, NULL, "1", 0);
+				res = ast_dtmf_stream(chan, NULL, "1", 0,0 );
 				fprintf(f, "SEND DTMF 1:   %s\n", (res < 0) ? "FAIL" : "PASS");
 				if (res > 0)
 					res = 0;
@@ -370,7 +370,7 @@
 			if (!res) {
 				/* Step 4: Send "4" */
 				ast_debug(1, "TestServer: 4.  Send DTMF 4\n");
-				res = ast_dtmf_stream(chan, NULL, "4", 0);
+				res = ast_dtmf_stream(chan, NULL, "4", 0, 0);
 				fprintf(f, "SEND DTMF 4:   %s\n", (res < 0) ? "FAIL" : "PASS");
 				if (res > 0)
 					res = 0;
@@ -397,7 +397,7 @@
 			if (!res) {
 				/* Step 7: Send "5" */
 				ast_debug(1, "TestServer: 7.  Send DTMF 5\n");
-				res = ast_dtmf_stream(chan, NULL, "5", 0);
+				res = ast_dtmf_stream(chan, NULL, "5", 0, 0);
 				fprintf(f, "SEND DTMF 5:   %s\n", (res < 0) ? "FAIL" : "PASS");
 				if (res > 0)
 					res = 0;
@@ -426,7 +426,7 @@
 			if (!res) {
 				/* Step 10: Send "8" */
 				ast_debug(1, "TestServer: 10.  Send DTMF 8\n");
-				res = ast_dtmf_stream(chan, NULL, "8", 0);
+				res = ast_dtmf_stream(chan, NULL, "8", 0, 0);
 				fprintf(f, "SEND DTMF 8:   %s\n", (res < 0) ? "FAIL" : "PASS");
 				if (res > 0)
 					res = 0;

Modified: trunk/include/asterisk/app.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/app.h?view=diff&rev=78278&r1=78277&r2=78278
==============================================================================
--- trunk/include/asterisk/app.h (original)
+++ trunk/include/asterisk/app.h Mon Aug  6 16:52:30 2007
@@ -157,8 +157,9 @@
   \param between This is the number of milliseconds to wait in between each
                  DTMF digit.  If zero milliseconds is specified, then the
                  default value of 100 will be used.
+  \param duration This is the duration that each DTMF digit should have.
 */
-int ast_dtmf_stream(struct ast_channel *chan, struct ast_channel *peer, const char *digits, int between);
+int ast_dtmf_stream(struct ast_channel *chan, struct ast_channel *peer, const char *digits, int between, unsigned int duration);
 
 /*! Stream a filename (or file descriptor) as a generator. */
 int ast_linear_stream(struct ast_channel *chan, const char *filename, int fd, int allowoverride);

Modified: trunk/include/asterisk/channel.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/channel.h?view=diff&rev=78278&r1=78277&r2=78278
==============================================================================
--- trunk/include/asterisk/channel.h (original)
+++ trunk/include/asterisk/channel.h Mon Aug  6 16:52:30 2007
@@ -950,9 +950,10 @@
  * Send a DTMF digit to a channel.
  * \param chan channel to act upon
  * \param digit the DTMF digit to send, encoded in ASCII
+ * \param duration the duration of the digit ending in ms
  * \return Returns 0 on success, -1 on failure
  */
-int ast_senddigit(struct ast_channel *chan, char digit);
+int ast_senddigit(struct ast_channel *chan, char digit, unsigned int duration);
 
 /*! \brief Send a DTMF digit to a channel
  * Send a DTMF digit to a channel.

Modified: trunk/main/app.c
URL: http://svn.digium.com/view/asterisk/trunk/main/app.c?view=diff&rev=78278&r1=78277&r2=78278
==============================================================================
--- trunk/main/app.c (original)
+++ trunk/main/app.c Mon Aug  6 16:52:30 2007
@@ -245,7 +245,7 @@
 	return 0;
 }
 
-int ast_dtmf_stream(struct ast_channel *chan, struct ast_channel *peer, const char *digits, int between) 
+int ast_dtmf_stream(struct ast_channel *chan, struct ast_channel *peer, const char *digits, int between, unsigned int duration) 
 {
 	const char *ptr;
 	int res = 0;
@@ -274,7 +274,7 @@
 				/* ignore return values if not supported by channel */
 				ast_indicate(chan, AST_CONTROL_FLASH);
 			} else
-				ast_senddigit(chan, *ptr);
+				ast_senddigit(chan, *ptr, duration);
 			/* pause between digits */
 			if ((res = ast_safe_sleep(chan, between)))
 				break;

Modified: trunk/main/channel.c
URL: http://svn.digium.com/view/asterisk/trunk/main/channel.c?view=diff&rev=78278&r1=78277&r2=78278
==============================================================================
--- trunk/main/channel.c (original)
+++ trunk/main/channel.c Mon Aug  6 16:52:30 2007
@@ -2657,14 +2657,14 @@
 	return 0;
 }
 
-int ast_senddigit(struct ast_channel *chan, char digit)
+int ast_senddigit(struct ast_channel *chan, char digit, unsigned int duration)
 {
 	if (chan->tech->send_digit_begin) {
 		ast_senddigit_begin(chan, digit);
-		ast_safe_sleep(chan, AST_DEFAULT_EMULATE_DTMF_DURATION);
-	}
-	
-	return ast_senddigit_end(chan, digit, AST_DEFAULT_EMULATE_DTMF_DURATION);
+		ast_safe_sleep(chan, (duration >= AST_DEFAULT_EMULATE_DTMF_DURATION ? duration : AST_DEFAULT_EMULATE_DTMF_DURATION));
+	}
+	
+	return ast_senddigit_end(chan, digit, (duration >= AST_DEFAULT_EMULATE_DTMF_DURATION ? duration : AST_DEFAULT_EMULATE_DTMF_DURATION));
 }
 
 int ast_prod(struct ast_channel *chan)

Modified: trunk/res/res_features.c
URL: http://svn.digium.com/view/asterisk/trunk/res/res_features.c?view=diff&rev=78278&r1=78277&r2=78278
==============================================================================
--- trunk/res/res_features.c (original)
+++ trunk/res/res_features.c Mon Aug  6 16:52:30 2007
@@ -1678,11 +1678,11 @@
 					   digits to come in for features. */
 					ast_debug(1, "Timed out for feature!\n");
 					if (!ast_strlen_zero(peer_featurecode)) {
-						ast_dtmf_stream(chan, peer, peer_featurecode, 0);
+						ast_dtmf_stream(chan, peer, peer_featurecode, 0, 0);
 						memset(peer_featurecode, 0, sizeof(peer_featurecode));
 					}
 					if (!ast_strlen_zero(chan_featurecode)) {
-						ast_dtmf_stream(peer, chan, chan_featurecode, 0);
+						ast_dtmf_stream(peer, chan, chan_featurecode, 0, 0);
 						memset(chan_featurecode, 0, sizeof(chan_featurecode));
 					}
 					if (f)
@@ -1774,7 +1774,7 @@
 			res = ast_feature_interpret(chan, peer, config, featurecode, sense);
 			switch(res) {
 			case FEATURE_RETURN_PASSDIGITS:
-				ast_dtmf_stream(other, who, featurecode, 0);
+				ast_dtmf_stream(other, who, featurecode, 0, 0);
 				/* Fall through */
 			case FEATURE_RETURN_SUCCESS:
 				memset(featurecode, 0, sizeof(chan_featurecode));




More information about the asterisk-commits mailing list