[asterisk-commits] branch kpfleming/vldtmf r8944 - in /team/kpfleming/vldtmf: ./ include/asterisk/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Jan 31 14:21:01 MST 2006


Author: kpfleming
Date: Mon Jan 30 16:47:26 2006
New Revision: 8944

URL: http://svn.digium.com/view/asterisk?rev=8944&view=rev
Log:
create branch for variable-length DTMF support

Added:
    team/kpfleming/vldtmf/
      - copied from r8942, trunk/
Modified:
    team/kpfleming/vldtmf/include/asterisk/rtp.h
    team/kpfleming/vldtmf/rtp.c

Modified: team/kpfleming/vldtmf/include/asterisk/rtp.h
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/include/asterisk/rtp.h?rev=8944&r1=8942&r2=8944&view=diff
==============================================================================
--- team/kpfleming/vldtmf/include/asterisk/rtp.h (original)
+++ team/kpfleming/vldtmf/include/asterisk/rtp.h Mon Jan 30 16:47:26 2006
@@ -121,6 +121,10 @@
 
 int ast_rtp_senddigit(struct ast_rtp *rtp, char digit);
 
+int ast_rtp_send_digit_begin(struct ast_rtp *rtp, char digit);
+
+int ast_rtp_send_digit_end(struct ast_rtp *rtp);
+
 int ast_rtp_sendcng(struct ast_rtp *rtp, int level);
 
 int ast_rtp_settos(struct ast_rtp *rtp, int tos);

Modified: team/kpfleming/vldtmf/rtp.c
URL: http://svn.digium.com/view/asterisk/team/kpfleming/vldtmf/rtp.c?rev=8944&r1=8942&r2=8944&view=diff
==============================================================================
--- team/kpfleming/vldtmf/rtp.c (original)
+++ team/kpfleming/vldtmf/rtp.c Mon Jan 30 16:47:26 2006
@@ -1189,6 +1189,65 @@
 	return (unsigned int) ms;
 }
 
+struct rtp_header {
+	/* Always keep in network byte order */
+#if __BYTE_ORDER == __BIG_ENDIAN
+	/* first byte */
+        u_int32_t version:2;
+        u_int32_t flow:6;
+	/* second byte */
+	u_int32_t option:1;
+	u_int32_t sync:1;
+	u_int32_t format:6;
+	/* third and fourth bytes */
+	u_int32_t sequence:16;
+	/* fifth through eighth bytes */
+	u_int32_t timestamp;
+	/* ninth through twelfth bytes */
+	u_int32_t ssrc;
+#else
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#else
+#error Byte order not defined
+#endif
+#endif
+};
+
+static char prep_digit(char digit)
+{
+	if ((digit <= '9') && (digit >= '0'))
+		return digit - '0';
+	else if (digit == '*')
+		return 10;
+	else if (digit == '#')
+		return 11;
+	else if ((digit >= 'A') && (digit <= 'D')) 
+		return digit - 'A' + 12;
+	else if ((digit >= 'a') && (digit <= 'd')) 
+		return digit - 'a' + 12;
+	else {
+		ast_log(LOG_WARNING, "Don't know how to represent '%c'\n", digit);
+		return -1;
+	}
+}
+
+int ast_rtp_send_digit_begin(struct ast_rtp *rtp, char digit)
+{
+	/* If we have no peer, return immediately */	
+	if (!rtp->them.sin_addr.s_addr)
+		return 0;
+
+	if ((digit = prep_digit(digit)) == -1)
+		return -1;
+}
+
+int ast_rtp_send_digit_end(struct ast_rtp *rtp)
+{
+	/* If we have no peer, return immediately */	
+	if (!rtp->them.sin_addr.s_addr)
+		return 0;
+}
+
 int ast_rtp_senddigit(struct ast_rtp *rtp, char digit)
 {
 	unsigned int *rtpheader;
@@ -1199,25 +1258,14 @@
 	char data[256];
 	char iabuf[INET_ADDRSTRLEN];
 
-	if ((digit <= '9') && (digit >= '0'))
-		digit -= '0';
-	else if (digit == '*')
-		digit = 10;
-	else if (digit == '#')
-		digit = 11;
-	else if ((digit >= 'A') && (digit <= 'D')) 
-		digit = digit - 'A' + 12;
-	else if ((digit >= 'a') && (digit <= 'd')) 
-		digit = digit - 'a' + 12;
-	else {
-		ast_log(LOG_WARNING, "Don't know how to represent '%c'\n", digit);
-		return -1;
-	}
-	payload = ast_rtp_lookup_code(rtp, 0, AST_RTP_DTMF);
-
 	/* If we have no peer, return immediately */	
 	if (!rtp->them.sin_addr.s_addr)
 		return 0;
+
+	if ((digit = prep_digit(digit)) == -1)
+		return -1;
+
+	payload = ast_rtp_lookup_code(rtp, 0, AST_RTP_DTMF);
 
 	rtp->dtmfmute = ast_tvadd(ast_tvnow(), ast_tv(0, 500000));
 	
@@ -1268,6 +1316,7 @@
 	   that was sent
 	*/
 	rtp->seqno++;
+
 	return 0;
 }
 



More information about the asterisk-commits mailing list