|
|
|
@ -169,7 +169,7 @@ struct fm_args {
|
|
|
|
|
unsigned int pending_out_connected_update:1;
|
|
|
|
|
int status;
|
|
|
|
|
char context[AST_MAX_CONTEXT];
|
|
|
|
|
char namerecloc[AST_MAX_CONTEXT];
|
|
|
|
|
char namerecloc[PATH_MAX];
|
|
|
|
|
char takecall[MAX_YN_STRING]; /*!< Digit mapping to take a call */
|
|
|
|
|
char nextindp[MAX_YN_STRING]; /*!< Digit mapping to decline a call */
|
|
|
|
|
char callfromprompt[PATH_MAX]; /*!< Sound prompt name and path */
|
|
|
|
@ -1151,7 +1151,6 @@ static int app_exec(struct ast_channel *chan, const char *data)
|
|
|
|
|
struct number *nm, *newnm;
|
|
|
|
|
int res = 0;
|
|
|
|
|
char *argstr;
|
|
|
|
|
char namerecloc[255];
|
|
|
|
|
struct ast_channel *caller;
|
|
|
|
|
struct ast_channel *outbound;
|
|
|
|
|
AST_DECLARE_APP_ARGS(args,
|
|
|
|
@ -1223,7 +1222,6 @@ static int app_exec(struct ast_channel *chan, const char *data)
|
|
|
|
|
ast_clear_flag(&targs.followmeflags, FOLLOWMEFLAG_NOANSWER);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namerecloc[0] = '\0';
|
|
|
|
|
if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_NOANSWER)) {
|
|
|
|
|
ast_indicate(chan, AST_CONTROL_RINGING);
|
|
|
|
|
} else {
|
|
|
|
@ -1238,14 +1236,14 @@ static int app_exec(struct ast_channel *chan, const char *data)
|
|
|
|
|
if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_RECORDNAME)) {
|
|
|
|
|
int duration = 5;
|
|
|
|
|
|
|
|
|
|
snprintf(namerecloc, sizeof(namerecloc), "%s/followme.%s",
|
|
|
|
|
snprintf(targs.namerecloc, sizeof(targs.namerecloc), "%s/followme.%s",
|
|
|
|
|
ast_config_AST_SPOOL_DIR, ast_channel_uniqueid(chan));
|
|
|
|
|
if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration,
|
|
|
|
|
if (ast_play_and_record(chan, "vm-rec-name", targs.namerecloc, 5, "sln", &duration,
|
|
|
|
|
NULL, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE), 0, NULL) < 0) {
|
|
|
|
|
goto outrun;
|
|
|
|
|
}
|
|
|
|
|
if (!ast_fileexists(namerecloc, NULL, ast_channel_language(chan))) {
|
|
|
|
|
namerecloc[0] = '\0';
|
|
|
|
|
if (!ast_fileexists(targs.namerecloc, NULL, ast_channel_language(chan))) {
|
|
|
|
|
targs.namerecloc[0] = '\0';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1260,19 +1258,11 @@ static int app_exec(struct ast_channel *chan, const char *data)
|
|
|
|
|
|
|
|
|
|
targs.status = 0;
|
|
|
|
|
targs.chan = chan;
|
|
|
|
|
ast_copy_string(targs.namerecloc, namerecloc, sizeof(targs.namerecloc));
|
|
|
|
|
ast_channel_lock(chan);
|
|
|
|
|
ast_connected_line_copy_from_caller(&targs.connected_in, ast_channel_caller(chan));
|
|
|
|
|
ast_channel_unlock(chan);
|
|
|
|
|
|
|
|
|
|
findmeexec(&targs);
|
|
|
|
|
|
|
|
|
|
while ((nm = AST_LIST_REMOVE_HEAD(&targs.cnumbers, entry)))
|
|
|
|
|
ast_free(nm);
|
|
|
|
|
|
|
|
|
|
if (!ast_strlen_zero(namerecloc))
|
|
|
|
|
unlink(namerecloc);
|
|
|
|
|
|
|
|
|
|
if (targs.status != 100) {
|
|
|
|
|
if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_NOANSWER)) {
|
|
|
|
|
if (ast_channel_state(chan) != AST_STATE_UP) {
|
|
|
|
@ -1337,8 +1327,15 @@ static int app_exec(struct ast_channel *chan, const char *data)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
outrun:
|
|
|
|
|
while ((nm = AST_LIST_REMOVE_HEAD(&targs.cnumbers, entry))) {
|
|
|
|
|
ast_free(nm);
|
|
|
|
|
}
|
|
|
|
|
if (!ast_strlen_zero(targs.namerecloc)) {
|
|
|
|
|
unlink(targs.namerecloc);
|
|
|
|
|
}
|
|
|
|
|
ast_party_connected_line_free(&targs.connected_in);
|
|
|
|
|
ast_party_connected_line_free(&targs.connected_out);
|
|
|
|
|
|
|
|
|
|
if (f->realtime) {
|
|
|
|
|
/* Not in list */
|
|
|
|
|
free_numbers(f);
|
|
|
|
|