[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