[Asterisk-cvs] asterisk/apps app_dial.c,1.92,1.93
mattf at lists.digium.com
mattf at lists.digium.com
Thu Sep 9 22:29:26 CDT 2004
Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv10442/apps
Modified Files:
app_dial.c
Log Message:
macro support in the dial command
Index: app_dial.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_dial.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -d -r1.92 -r1.93
--- app_dial.c 27 Aug 2004 03:16:16 -0000 1.92
+++ app_dial.c 10 Sep 2004 02:31:30 -0000 1.93
@@ -67,6 +67,7 @@
" that are assigned to you.\n"
" 'r' -- indicate ringing to the calling party, pass no audio until answered.\n"
" 'm' -- provide hold music to the calling party until answered.\n"
+" 'M(x) -- Executes the macro (x) upon connect of the call\n"
" 'h' -- allow callee to hang up by hitting *.\n"
" 'H' -- allow caller to hang up by hitting *.\n"
" 'C' -- reset call detail record for this call.\n"
@@ -420,6 +421,7 @@
int allowredir_out=0;
int allowdisconnect_in=0;
int allowdisconnect_out=0;
+ int hasmacro = 0;
int privacy=0;
int announce=0;
int resetcdr=0;
@@ -448,6 +450,7 @@
char *sdtmfptr;
char sdtmfdata[256] = "";
char *stack,*var;
+ char *mac = NULL, macroname[256] = "";
char status[256]="";
char toast[80];
int play_to_caller=0,play_to_callee=0;
@@ -610,6 +613,27 @@
announce = 0;
}
}
+
+ /* Get the macroname from the dial option string */
+ if ((mac = strstr(transfer, "M("))) {
+ hasmacro = 1;
+ strncpy(macroname, mac + 2, sizeof(macroname) - 1);
+ while (*mac && (*mac != ')'))
+ *(mac++) = 'X';
+ if (*mac)
+ *mac = 'X';
+ else {
+ ast_log(LOG_WARNING, "Could not find macro to which we should jump.\n");
+ hasmacro = 0;
+ }
+ mac = strchr(macroname, ')');
+ if (mac)
+ *mac = '\0';
+ else {
+ ast_log(LOG_WARNING, "Macro flag set without trailing ')'\n");
+ hasmacro = 0;
+ }
+ }
/* Extract privacy info from transfer */
if ((s = strstr(transfer, "P("))) {
privacy = 1;
@@ -907,6 +931,32 @@
} else
res = 0;
+ if (hasmacro && macroname) {
+ void *app = NULL;
+
+ res = ast_autoservice_start(chan);
+ if (res) {
+ ast_log(LOG_ERROR, "Unable to start autoservice on calling channel\n");
+ res = -1;
+ }
+
+ app = pbx_findapp("Macro");
+
+ if (app && !res) {
+ res = pbx_exec(peer, app, macroname, 1);
+ ast_log(LOG_DEBUG, "Macro exited with status %d\n", res);
+ res = 0;
+ } else {
+ ast_log(LOG_ERROR, "Could not find application Macro\n");
+ res = -1;
+ }
+
+ if (ast_autoservice_stop(chan) < 0) {
+ ast_log(LOG_ERROR, "Could not stop autoservice on calling channel\n");
+ res = -1;
+ }
+ }
+
if (!res) {
if (calldurationlimit > 0) {
time(&now);
More information about the svn-commits
mailing list