aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-10-22 04:25:13 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-10-22 04:25:13 +0000
commit9564ebe2cd6fbc966289afdf566003f715afe392 (patch)
treecc4b669a458f7cc6fad81f4d7f51e97450da264d
parent92e363e120efc41ff4c41d1d95c10abcc3c4ae00 (diff)
Add announce feature to dial
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1657 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xapps/app_dial.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index 9f0550e3c..62838cd8e 100755
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -68,6 +68,7 @@ static char *descrip =
" '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 @@ static int dial_exec(struct ast_channel *chan, void *data)
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 @@ static int dial_exec(struct ast_channel *chan, void *data)
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 @@ static int dial_exec(struct ast_channel *chan, void *data)
} 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 +684,19 @@ static int dial_exec(struct ast_channel *chan, void *data)
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)
{