aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorseanbright <seanbright@f38db490-d61c-443f-a65b-d21fe96a405b>2008-11-09 01:08:07 +0000
committerseanbright <seanbright@f38db490-d61c-443f-a65b-d21fe96a405b>2008-11-09 01:08:07 +0000
commit40819770fceb2b8e2674886118f831f54970931e (patch)
tree95f635c52445006c6dcc0805238818a8d4cd2edc /apps
parent5cc3d309912dcd57d205dde9a6bef46e1ac74b4b (diff)
Use static functions here instead of nested ones. This requires a small
change to the ast_bridge_config struct as well. To understand the reason for this change, see the following post: http://gcc.gnu.org/ml/gcc-help/2008-11/msg00049.html git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@155553 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r--apps/app_dial.c43
-rw-r--r--apps/app_followme.c43
2 files changed, 44 insertions, 42 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index db2e43b2d..72ad5a6c4 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -832,6 +832,27 @@ static void set_dial_features(struct ast_flags *opts, struct ast_dial_features *
ast_set_flag(&(features->features_caller), AST_FEATURE_PARKCALL);
}
+static void end_bridge_callback (void *data)
+{
+ char buf[80];
+ time_t end;
+ struct ast_channel *chan = data;
+
+ time(&end);
+
+ ast_channel_lock(chan);
+ if (chan->cdr->answer.tv_sec) {
+ snprintf(buf, sizeof(buf), "%ld", end - chan->cdr->answer.tv_sec);
+ pbx_builtin_setvar_helper(chan, "ANSWEREDTIME", buf);
+ }
+
+ if (chan->cdr->start.tv_sec) {
+ snprintf(buf, sizeof(buf), "%ld", end - chan->cdr->start.tv_sec);
+ pbx_builtin_setvar_helper(chan, "DIALEDTIME", buf);
+ }
+ ast_channel_unlock(chan);
+}
+
static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags *peerflags, int *continue_exec)
{
int res = -1;
@@ -1735,27 +1756,6 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
if (!res) {
struct ast_bridge_config config;
- auto void end_bridge_callback(void);
- void end_bridge_callback (void)
- {
- char buf[80];
- time_t end;
-
- time(&end);
-
- ast_channel_lock(chan);
- if (chan->cdr->answer.tv_sec) {
- snprintf(buf, sizeof(buf), "%ld", end - chan->cdr->answer.tv_sec);
- pbx_builtin_setvar_helper(chan, "ANSWEREDTIME", buf);
- }
-
- if (chan->cdr->start.tv_sec) {
- snprintf(buf, sizeof(buf), "%ld", end - chan->cdr->start.tv_sec);
- pbx_builtin_setvar_helper(chan, "DIALEDTIME", buf);
- }
- ast_channel_unlock(chan);
- }
-
memset(&config,0,sizeof(struct ast_bridge_config));
if (play_to_caller)
ast_set_flag(&(config.features_caller), AST_FEATURE_PLAY_WARNING);
@@ -1787,6 +1787,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
config.end_sound = end_sound;
config.start_sound = start_sound;
config.end_bridge_callback = end_bridge_callback;
+ config.end_bridge_callback_data = chan;
if (moh) {
moh = 0;
ast_moh_stop(chan);
diff --git a/apps/app_followme.c b/apps/app_followme.c
index 654bf373c..3de1a4608 100644
--- a/apps/app_followme.c
+++ b/apps/app_followme.c
@@ -914,6 +914,27 @@ static void findmeexec(struct fm_args *tpargs)
}
+static void end_bridge_callback (void *data)
+{
+ char buf[80];
+ time_t end;
+ struct ast_channel *chan = data;
+
+ time(&end);
+
+ ast_channel_lock(chan);
+ if (chan->cdr->answer.tv_sec) {
+ snprintf(buf, sizeof(buf), "%ld", end - chan->cdr->answer.tv_sec);
+ pbx_builtin_setvar_helper(chan, "ANSWEREDTIME", buf);
+ }
+
+ if (chan->cdr->start.tv_sec) {
+ snprintf(buf, sizeof(buf), "%ld", end - chan->cdr->start.tv_sec);
+ pbx_builtin_setvar_helper(chan, "DIALEDTIME", buf);
+ }
+ ast_channel_unlock(chan);
+}
+
static int app_exec(struct ast_channel *chan, void *data)
{
struct fm_args targs;
@@ -1025,27 +1046,6 @@ static int app_exec(struct ast_channel *chan, void *data)
ast_stream_and_wait(chan, targs.sorryprompt, chan->language, "");
res = 0;
} else {
- auto void end_bridge_callback(void);
- void end_bridge_callback (void)
- {
- char buf[80];
- time_t end;
-
- time(&end);
-
- ast_channel_lock(chan);
- if (chan->cdr->answer.tv_sec) {
- snprintf(buf, sizeof(buf), "%ld", end - chan->cdr->answer.tv_sec);
- pbx_builtin_setvar_helper(chan, "ANSWEREDTIME", buf);
- }
-
- if (chan->cdr->start.tv_sec) {
- snprintf(buf, sizeof(buf), "%ld", end - chan->cdr->start.tv_sec);
- pbx_builtin_setvar_helper(chan, "DIALEDTIME", buf);
- }
- ast_channel_unlock(chan);
- }
-
caller = chan;
outbound = targs.outbound;
/* Bridge the two channels. */
@@ -1056,6 +1056,7 @@ static int app_exec(struct ast_channel *chan, void *data)
ast_set_flag(&(config.features_caller), AST_FEATURE_AUTOMON);
config.end_bridge_callback = end_bridge_callback;
+ config.end_bridge_callback_data = chan;
ast_moh_stop(caller);
/* Be sure no generators are left on it */