[Asterisk-cvs] asterisk/apps app_dial.c,1.27,1.28

markster at lists.digium.com markster at lists.digium.com
Tue Oct 21 22:59:12 CDT 2003


Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv4858/apps

Modified Files:
	app_dial.c 
Log Message:
Add announce feature to dial


Index: app_dial.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_dial.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- app_dial.c	1 Oct 2003 16:05:40 -0000	1.27
+++ app_dial.c	22 Oct 2003 04:25:13 -0000	1.28
@@ -68,6 +68,7 @@
 "      'C' -- reset call detail record for this call.\n"
 "      'P[(x)]' -- privacy mode, using 'x' as database if provided.\n"
 "      'g' -- goes on in context if the destination channel hangs up\n"
+"      'A(x)' -- play an announcement to the called party, using x as file\n"
 "  In addition to transferring the call, a call may be parked and then picked\n"
 "up by another user.\n"
 "  The optionnal URL will be sent to the called party if the channel supports\n"
@@ -337,6 +338,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 +346,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 +423,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);
@@ -669,6 +683,19 @@
 			int x = 0;
 			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 svn-commits mailing list