diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-10-22 04:25:13 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-10-22 04:25:13 +0000 |
commit | 9564ebe2cd6fbc966289afdf566003f715afe392 (patch) | |
tree | cc4b669a458f7cc6fad81f4d7f51e97450da264d | |
parent | 92e363e120efc41ff4c41d1d95c10abcc3c4ae00 (diff) |
Add announce feature to dial
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1657 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | apps/app_dial.c | 27 |
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) { |