[Asterisk-Users] Fwd:patch

Roy Sigurd Karlsbakk roy at karlsbakk.net
Mon Mar 10 08:14:45 MST 2003


hi

this should be it

----------  Forwarded Message  ----------

Subject: 
Date: Mon, 10 Mar 2003 16:10:13 +0100
From: root <root at mail.pronto.tv>
To: roy at karlsbakk.net

diff -u -r1.13 chan_mgcp.c
--- channels/chan_mgcp.c	8 Mar 2003 17:30:11 -0000	1.13
+++ channels/chan_mgcp.c	10 Mar 2003 15:12:32 -0000
@@ -39,6 +39,7 @@
 #include <netdb.h>
 #include <arpa/inet.h>
 #include <sys/signal.h>
+#include <asterisk/dsp.h>

 #define MGCPDUMPER
 #define DEFAULT_EXPIREY 120
@@ -132,6 +133,7 @@
 	int needdestroy;
 	int capability;
 	int outgoing;
+	struct ast_dsp *vad;
 	struct ast_channel *owner;
 	struct ast_rtp *rtp;
 	struct sockaddr_in tmpdest;
@@ -145,6 +147,7 @@
 	struct sockaddr_in addr;
 	struct sockaddr_in defaddr;
 	struct in_addr ourip;
+	int inbandDTMF;
 	int dynamic;
 	int expire;		/* XXX Should we ever expire dynamic registrations? XXX */
 	struct mgcp_endpoint *endpoints;
@@ -327,6 +330,9 @@
 		ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
 		return 0;
 	}
+	if ((p->parent->inbandDTMF == 1) && (p->vad != NULL)){
+	    ast_dsp_free(p->vad);
+	}
 	ast_pthread_mutex_lock(&p->lock);
 	p->owner = NULL;
 	if (strlen(p->cxident))
@@ -515,6 +521,12 @@
 		if (i->rtp)
 			tmp->fds[0] = ast_rtp_fd(i->rtp);
 		tmp->type = type;
+		if (i->parent->inbandDTMF == 1) {
+		    i->vad = ast_dsp_new();
+		    ast_dsp_set_features(i->vad,DSP_FEATURE_DTMF_DETECT);
+		} else {
+		    i->vad = NULL;
+		}
 		ast_setstate(tmp, state);
 		if (state == AST_STATE_RING)
 			tmp->rings = 1;
@@ -617,6 +629,9 @@
 					ast_set_read_format(p->owner, p->owner->readformat);
 					ast_set_write_format(p->owner, p->owner->writeformat);
 				}
+				if (p->parent->inbandDTMF == 1) {
+				    f = ast_dsp_process(p->owner,p->vad,f,0);
+				}
 			}
 			ast_queue_frame(p->owner, f, 0);
 			pthread_mutex_unlock(&p->owner->lock);
@@ -1478,6 +1493,7 @@
 	char context[AST_MAX_EXTENSION] = "default";
 	char language[80] = "";
 	char callerid[AST_MAX_EXTENSION] = "";
+	int inbanddtmf = 0;
 	int nat = 0;

 	gw = malloc(sizeof(struct mgcp_gateway));
@@ -1519,6 +1535,8 @@
 				gw->addr.sin_port = htons(atoi(v->value));
 			} else if (!strcasecmp(v->name, "context")) {
 				strncpy(context, v->value, sizeof(context) - 1);
+			} else if (!strcasecmp(v->name, "inbanddtmf")) {
+				inbanddtmf = atoi(v->value);
 			} else if (!strcasecmp(v->name, "nat")) {
 				nat = ast_true(v->value);
 			} else if (!strcasecmp(v->name, "callerid")) {
@@ -1555,6 +1573,9 @@
 		}

 	}
+	gw->inbandDTMF = inbanddtmf;
+	ast_log(LOG_NOTICE,"inbanddtmf = %d\n",gw->inbandDTMF);
+
 	if (!ntohl(gw->addr.sin_addr.s_addr) && !gw->dynamic) {
 		ast_log(LOG_WARNING, "Gateway '%s' lacks IP address and isn't dynamic\n",
 gw->name); free(gw);

-------------------------------------------------------

-- 
Roy Sigurd Karlsbakk, Datavaktmester
ProntoTV AS - http://www.pronto.tv/
Tel: +47 9801 3356

Computers are like air conditioners.
They stop working when you open Windows.





More information about the asterisk-users mailing list