[Asterisk-Users] [PATCH] allow announcements in app_dial

Brancaleoni Matteo mbrancaleoni at espia.it
Tue Oct 7 15:27:54 MST 2003


He he ... too early
Thanks to a quick info from Mark on irc,
I've added the autoservice stuff on the other
channel, that's doing nothing meanwhile.

So here's the correct patch. discard the previous one.

Matteo

Il mer, 2003-10-08 alle 00:11, Brancaleoni Matteo ha scritto:
> Hi.
> 
> Since a customer requested us that feature, I wrote this
> little patch for app_dial to allow to play an
> announcement to the called party, as soon he answers.
> you can define the file to play in the dial() option,
> using A(filename).
> for example:
> 
> exten => blah,1,Dial(Zap/blah,30,rA(/my/own/announce)Tt)
> 
> that doesn't break anything ...
> feel free to blame me for anything bad this patch could do ;)
> 
> if for the list is ok, I'll submit to the bug tracker, under
> a feature-request.
> 
> Matteo
-- 
Brancaleoni Matteo <mbrancaleoni at espia.it>
Espia - Emmegi Srl
-------------- next part --------------
--- asterisk/apps/app_dial.c	2003-10-08 00:05:43.000000000 +0200
+++ dial-asterisk/apps/app_dial.c	2003-10-08 00:25:19.000000000 +0200
@@ -337,6 +337,7 @@
 	struct localuser *u;
 	char info[256], *peers, *timeout, *tech, *number, *rest, *cur;
 	char  privdb[256] = "", *s;
+	char  announcemsg[256] = "", *ann;
 	struct localuser *outgoing=NULL, *tmp;
 	struct ast_channel *peer;
 	int to;
@@ -344,8 +345,10 @@
 	int allowredir_out=0;
 	int allowdisconnect=0;
 	int privacy=0;
+	int announce=0;
 	int resetcdr=0;
 	int clearchannel=0;
+	int cnt=0;
 	char numsubst[AST_MAX_EXTENSION];
 	char restofit[AST_MAX_EXTENSION];
 	char *transfer = NULL;
@@ -419,6 +422,16 @@
 		} else if (strchr(transfer, 'C')) {
 			resetcdr = 1;
 		}
+		/* XXX ANNOUNCE SUPPORT */
+		else if ((ann = strstr(transfer, "A("))) {
+			announce = 1;
+			strncpy(announcemsg, ann + 2, sizeof(announcemsg) - 1);
+			cnt=0;
+			while(announcemsg[cnt] != ')') {
+				cnt++;
+				}
+			announcemsg[cnt]='\0';
+		}
 	}
 	if (resetcdr && chan->cdr)
 		ast_cdr_reset(chan->cdr, 0);
@@ -670,6 +683,19 @@
 			ast_channel_setoption(chan,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);
 			ast_channel_setoption(peer,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);
 		}
+		if (announce && announcemsg)
+		{
+			int res2;
+			// Start autoservice on the other chan
+			res2 = ast_autoservice_start(chan);
+			// Now Stream the File
+			if (!res2)
+				res2 = ast_streamfile(peer,announcemsg,peer->language);
+			if (!res2)
+				res2 = ast_waitstream(peer,"");
+			// Ok, done. stop autoservice
+			res2 = ast_autoservice_stop(chan);
+		}
 		res = ast_bridge_call(chan, peer, allowredir_in, allowredir_out, allowdisconnect | clearchannel);
 		if (clearchannel)
 		{


More information about the asterisk-users mailing list