aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2009-11-02 18:09:38 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2009-11-02 18:09:38 +0000
commit2e77780cc9a06ec0599d96bc2ac464e12a81cbe3 (patch)
tree71de1ef38502720dca7bc325e2864a3ac7979eb3
parentcaca9f17a0d3e1ca534c5b8727efb1b20e15b7bb (diff)
Merged revisions 226890 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r226890 | file | 2009-11-02 14:08:54 -0400 (Mon, 02 Nov 2009) | 18 lines Merged revisions 226889 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r226889 | file | 2009-11-02 14:08:11 -0400 (Mon, 02 Nov 2009) | 11 lines Fix a bug where the recorded privacy introduction file would not get removed if the caller hung up while the called party had not yet answered. This was fixed by introducing an argument to the 'n' option which, when enabled, removes the introduction file under all scenarios. This was done to preserve the behavior that has existed for quite some time. (closes issue #14674) Reported by: ulogic Patches: bug14674.patch uploaded by jpeeler (license 325) ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@226891 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_dial.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index 7b3f3ef27..655f43897 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -166,9 +166,12 @@ static char *descrip =
" so you will not be able to set timeouts via the TIMEOUT() function in this macro.\n"
" Be aware of the limitations that macros have, specifically with regards to use of\n"
" the WaitExten application. For more information, see the documentation for Macro()\n"
-" n - This option is a modifier for the screen/privacy mode. It specifies\n"
-" that no introductions are to be saved in the priv-callerintros\n"
-" directory.\n"
+" n([x]) - This option is a modifier for the screen/privacy mode. It specifies\n"
+" that no introductions are to be saved in the priv-callerintros\n"
+" directory.\n"
+" Specified without an arg, or with 0, the introduction is saved after\n"
+" an unanswered call originating from the same CallerID. With\n"
+" a 1 specified, the introduction is always deleted and rerequested.\n"
" N - This option is a modifier for the screen/privacy mode. It specifies\n"
" that if callerID is present, do not screen the call.\n"
" o - Specify that the CallerID that was present on the *calling* channel\n"
@@ -292,6 +295,7 @@ enum {
OPT_ARG_PRIVACY,
OPT_ARG_DURATION_STOP,
OPT_ARG_OPERMODE,
+ OPT_ARG_SCREEN_NOINTRO,
/* note: this entry _MUST_ be the last one in the enum */
OPT_ARG_ARRAY_SIZE,
};
@@ -314,7 +318,7 @@ AST_APP_OPTIONS(dial_exec_options, BEGIN_OPTIONS
AST_APP_OPTION_ARG('L', OPT_DURATION_LIMIT, OPT_ARG_DURATION_LIMIT),
AST_APP_OPTION_ARG('m', OPT_MUSICBACK, OPT_ARG_MUSICBACK),
AST_APP_OPTION_ARG('M', OPT_CALLEE_MACRO, OPT_ARG_CALLEE_MACRO),
- AST_APP_OPTION('n', OPT_SCREEN_NOINTRO),
+ AST_APP_OPTION_ARG('n', OPT_SCREEN_NOINTRO, OPT_ARG_SCREEN_NOINTRO),
AST_APP_OPTION('N', OPT_SCREEN_NOCLID),
AST_APP_OPTION('o', OPT_ORIGINAL_CLID),
AST_APP_OPTION_ARG('O', OPT_OPERMODE, OPT_ARG_OPERMODE),
@@ -1310,6 +1314,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
int result = 0;
char *parse;
int opermode = 0;
+ int delprivintro = 0;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(peers);
AST_APP_ARG(timeout);
@@ -1350,6 +1355,14 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
goto done;
}
+ if (ast_test_flag64(&opts, OPT_SCREEN_NOINTRO) && !ast_strlen_zero(opt_args[OPT_ARG_SCREEN_NOINTRO])) {
+ delprivintro = atoi(opt_args[OPT_ARG_SCREEN_NOINTRO]);
+ if (delprivintro < 0 || delprivintro > 1) {
+ ast_log(LOG_WARNING, "Unknown argument %d to n option, ignoring\n", delprivintro);
+ delprivintro = 0;
+ }
+ }
+
if (ast_test_flag64(&opts, OPT_OPERMODE)) {
opermode = ast_strlen_zero(opt_args[OPT_ARG_OPERMODE]) ? 1 : atoi(opt_args[OPT_ARG_OPERMODE]);
ast_verb(3, "Setting operator services mode to %d.\n", opermode);
@@ -1981,6 +1994,16 @@ out:
sentringing = 0;
ast_indicate(chan, -1);
}
+
+ if (delprivintro && ast_fileexists(pa.privintro, NULL, NULL) > 0) {
+ ast_filedelete(pa.privintro, NULL);
+ if (ast_fileexists(pa.privintro, NULL, NULL) > 0) {
+ ast_log(LOG_NOTICE, "privacy: ast_filedelete didn't do its job on %s\n", pa.privintro);
+ } else {
+ ast_verb(3, "Successfully deleted %s intro file\n", pa.privintro);
+ }
+ }
+
ast_channel_early_bridge(chan, NULL);
hanguptree(outgoing, NULL, 0); /* In this case, there's no answer anywhere */
pbx_builtin_setvar_helper(chan, "DIALSTATUS", pa.status);