[asterisk-commits] branch bweschke/findme_followme r32498 -
/team/bweschke/findme_followme/apps/
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Tue Jun 6 00:09:56 MST 2006
Author: bweschke
Date: Tue Jun 6 02:09:55 2006
New Revision: 32498
URL: http://svn.digium.com/view/asterisk?rev=32498&view=rev
Log:
Ready to be merged...
Modified:
team/bweschke/findme_followme/apps/app_followme.c
Modified: team/bweschke/findme_followme/apps/app_followme.c
URL: http://svn.digium.com/view/asterisk/team/bweschke/findme_followme/apps/app_followme.c?rev=32498&r1=32497&r2=32498&view=diff
==============================================================================
--- team/bweschke/findme_followme/apps/app_followme.c (original)
+++ team/bweschke/findme_followme/apps/app_followme.c Tue Jun 6 02:09:55 2006
@@ -120,6 +120,7 @@
char plsholdprompt[AST_CONFIG_MAX_PATH];
char statusprompt[AST_CONFIG_MAX_PATH];
char sorryprompt[AST_CONFIG_MAX_PATH];
+ struct ast_flags followmeflags;
};
struct findme_user {
@@ -132,6 +133,18 @@
int cleared;
AST_LIST_ENTRY(findme_user) entry;
};
+
+enum {
+ FOLLOWMEFLAG_STATUSMSG = (1 << 0),
+ FOLLOWMEFLAG_RECORDNAME = (1 << 1),
+ FOLLOWMEFLAG_UNREACHABLEMSG = (1 << 2)
+};
+
+AST_APP_OPTIONS(followme_opts, {
+ AST_APP_OPTION('s', FOLLOWMEFLAG_STATUSMSG ),
+ AST_APP_OPTION('a', FOLLOWMEFLAG_RECORDNAME ),
+ AST_APP_OPTION('n', FOLLOWMEFLAG_UNREACHABLEMSG ),
+});
static int ynlongest = 0;
static char toast[80];
@@ -376,9 +389,9 @@
numorder = 0;
timeout = atoi(timeoutstr);
if (timeout < 0)
- timeout = 12;
+ timeout = 25;
} else {
- timeout = 12;
+ timeout = 25;
numorder = 0;
}
@@ -503,15 +516,27 @@
if (tmpuser->digts && (tmpuser->digts > featuredigittimeout)) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "We've been waiting for digits longer than we should have.\n");
- tmpuser->state = 1;
- tmpuser->digts = 0;
- if (!ast_streamfile(tmpuser->ochan, callfromname, tmpuser->ochan->language)) {
- ast_sched_runq(tmpuser->ochan->sched);
+ if (!ast_strlen_zero(namerecloc)) {
+ tmpuser->state = 1;
+ tmpuser->digts = 0;
+ if (!ast_streamfile(tmpuser->ochan, callfromname, tmpuser->ochan->language)) {
+ ast_sched_runq(tmpuser->ochan->sched);
+ } else {
+ ast_log(LOG_WARNING, "Unable to playback %s.\n", callfromname);
+ free(to);
+ return NULL;
+ }
} else {
- ast_log(LOG_WARNING, "Unable to playback %s.\n", callfromname);
- free(to);
- return NULL;
- }
+ tmpuser->state = 2;
+ tmpuser->digts = 0;
+ if (!ast_streamfile(tmpuser->ochan, tpargs->norecordingprompt, tmpuser->ochan->language))
+ ast_sched_runq(tmpuser->ochan->sched);
+ else {
+ ast_log(LOG_WARNING, "Unable to playback %s.\n", tpargs->norecordingprompt);
+ free(to);
+ return NULL;
+ }
+ }
}
if (tmpuser->ochan->stream) {
ast_sched_runq(tmpuser->ochan->sched);
@@ -601,7 +626,6 @@
}
break;
case AST_CONTROL_ANSWER:
- /* This is our guy if someone answered. */
if (option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "%s answered %s\n", winner->name, caller->name);
/* If call has been answered, then the eventual hangup is likely to be normal hangup */
@@ -610,14 +634,25 @@
if (option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "Starting playback of %s\n", callfromname);
if (dg > 0) {
- if (!ast_streamfile(winner, callfromname, winner->language)) {
- ast_sched_runq(winner->sched);
- tmpuser->state = 1;
- } else {
- ast_log(LOG_WARNING, "Unable to playback %s.\n", callfromname);
- free(to);
- return NULL;
- }
+ if (!ast_strlen_zero(namerecloc)) {
+ if (!ast_streamfile(winner, callfromname, winner->language)) {
+ ast_sched_runq(winner->sched);
+ tmpuser->state = 1;
+ } else {
+ ast_log(LOG_WARNING, "Unable to playback %s.\n", callfromname);
+ free(to);
+ return NULL;
+ }
+ } else {
+ tmpuser->state = 2;
+ if (!ast_streamfile(tmpuser->ochan, tpargs->norecordingprompt, tmpuser->ochan->language))
+ ast_sched_runq(tmpuser->ochan->sched);
+ else {
+ ast_log(LOG_WARNING, "Unable to playback %s.\n", tpargs->norecordingprompt);
+ free(to);
+ return NULL;
+ }
+ }
}
break;
case AST_CONTROL_BUSY:
@@ -905,6 +940,7 @@
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(followmeid);
+ AST_APP_ARG(options);
);
if (!(argstr = ast_strdupa((char *)data))) {
@@ -921,7 +957,7 @@
AST_STANDARD_APP_ARGS(args, argstr);
- if (!ast_strlen_zero(args.followmeid) && (option_debug > 2))
+ if (!ast_strlen_zero(args.followmeid))
AST_LIST_LOCK(&followmes);
AST_LIST_TRAVERSE(&followmes, f, entry) {
@@ -941,6 +977,11 @@
{
/* XXX TODO: Reinsert the db check value to see whether or not follow-me is on or off */
+
+
+ if (args.options) {
+ ast_app_parse_options(followme_opts, &targs.followmeflags, NULL, args.options);
+ }
/* Lock the profile lock and copy out everything we need to run with before unlocking it again */
ast_mutex_lock(&f->lock);
@@ -963,10 +1004,21 @@
}
ast_mutex_unlock(&f->lock);
+ if (targs.followmeflags.flags & FOLLOWMEFLAG_STATUSMSG)
+ ast_stream_and_wait(chan, targs.statusprompt, chan->language, "");
+
snprintf(namerecloc,sizeof(namerecloc),"%s/followme.%s",ast_config_AST_SPOOL_DIR,chan->uniqueid);
duration = 5;
- if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration, 128, 0, NULL) < 0)
- goto outrun;
+
+ if (targs.followmeflags.flags & FOLLOWMEFLAG_RECORDNAME)
+ if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration, 128, 0, NULL) < 0)
+ goto outrun;
+
+ /* The following call looks like we're going to playback the file, but we're actually */
+ /* just checking to see if we *can* play it. */
+ if (ast_streamfile(chan, namerecloc, chan->language))
+ ast_copy_string(namerecloc, "", sizeof(namerecloc));
+
if (ast_streamfile(chan, targs.plsholdprompt, chan->language))
goto outrun;
if (ast_waitstream(chan, "") < 0)
@@ -990,10 +1042,14 @@
}
AST_LIST_TRAVERSE_SAFE_END
- unlink(namerecloc);
+ if (!ast_strlen_zero(namerecloc))
+ unlink(namerecloc);
+
if (targs.status != 100)
{
ast_moh_stop(chan);
+ if (targs.followmeflags.flags & FOLLOWMEFLAG_UNREACHABLEMSG)
+ ast_stream_and_wait(chan, targs.sorryprompt, chan->language, "");
res = 0;
}
else
More information about the asterisk-commits
mailing list