[asterisk-commits] tilghman: trunk r156388 - in /trunk: ./ apps/app_dial.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Nov 12 15:34:51 CST 2008
Author: tilghman
Date: Wed Nov 12 15:34:51 2008
New Revision: 156388
URL: http://svn.digium.com/view/asterisk?view=rev&rev=156388
Log:
Merged revisions 156386 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r156386 | tilghman | 2008-11-12 15:18:57 -0600 (Wed, 12 Nov 2008) | 5 lines
When using call limits under 1 second, infinite call lengths are allowed,
instead.
(closes issue #13851)
Reported by: ruddy
........
Modified:
trunk/ (props changed)
trunk/apps/app_dial.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: trunk/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_dial.c?view=diff&rev=156388&r1=156387&r2=156388
==============================================================================
--- trunk/apps/app_dial.c (original)
+++ trunk/apps/app_dial.c Wed Nov 12 15:34:51 2008
@@ -1110,7 +1110,7 @@
}
static int do_timelimit(struct ast_channel *chan, struct ast_bridge_config *config,
- char *parse, unsigned int *calldurationlimit)
+ char *parse, struct timeval *calldurationlimit)
{
char *stringp = ast_strdupa(parse);
char *limit_str, *warning_str, *warnfreq_str;
@@ -1187,12 +1187,15 @@
ast_channel_unlock(chan);
/* undo effect of S(x) in case they are both used */
- *calldurationlimit = 0;
+ calldurationlimit->tv_sec = 0;
+ calldurationlimit->tv_usec = 0;
+
/* more efficient to do it like S(x) does since no advanced opts */
if (!config->play_warning && !config->start_sound && !config->end_sound && config->timelimit) {
- *calldurationlimit = config->timelimit / 1000;
- ast_verb(3, "Setting call duration limit to %d seconds.\n",
- *calldurationlimit);
+ calldurationlimit->tv_sec = config->timelimit / 1000;
+ calldurationlimit->tv_usec = (config->timelimit % 1000) * 1000;
+ ast_verb(3, "Setting call duration limit to %.3lf seconds.\n",
+ calldurationlimit->tv_sec + calldurationlimit->tv_usec / 1000000.0);
config->timelimit = play_to_caller = play_to_callee =
config->play_warning = config->warning_freq = 0;
} else {
@@ -1500,7 +1503,7 @@
char cidname[AST_MAX_EXTENSION] = "";
struct ast_bridge_config config = { { 0, } };
- unsigned int calldurationlimit = 0;
+ struct timeval calldurationlimit = { 0, };
char *dtmfcalled = NULL, *dtmfcalling = NULL;
struct privacy_args pa = {
.sentringing = 0,
@@ -1561,13 +1564,13 @@
}
if (ast_test_flag64(&opts, OPT_DURATION_STOP) && !ast_strlen_zero(opt_args[OPT_ARG_DURATION_STOP])) {
- calldurationlimit = atoi(opt_args[OPT_ARG_DURATION_STOP]);
- if (!calldurationlimit) {
+ calldurationlimit.tv_sec = atoi(opt_args[OPT_ARG_DURATION_STOP]);
+ if (!calldurationlimit.tv_sec) {
ast_log(LOG_WARNING, "Dial does not accept S(%s), hanging up.\n", opt_args[OPT_ARG_DURATION_STOP]);
pbx_builtin_setvar_helper(chan, "DIALSTATUS", pa.status);
goto done;
}
- ast_verb(3, "Setting call duration limit to %d seconds.\n", calldurationlimit);
+ ast_verb(3, "Setting call duration limit to %.3lf seconds.\n", calldurationlimit.tv_sec + calldurationlimit.tv_usec / 1000000.0);
}
if (ast_test_flag64(&opts, OPT_SENDDTMF) && !ast_strlen_zero(opt_args[OPT_ARG_SENDDTMF])) {
@@ -2125,8 +2128,8 @@
}
if (!res) {
- if (calldurationlimit > 0) {
- struct timeval whentohangup = { calldurationlimit, 0 };
+ if (!ast_tvzero(calldurationlimit)) {
+ struct timeval whentohangup = calldurationlimit;
peer->whentohangup = ast_tvadd(ast_tvnow(), whentohangup);
}
if (!ast_strlen_zero(dtmfcalled)) {
@@ -2254,7 +2257,7 @@
ast_debug(1, "Exiting with DIALSTATUS=%s.\n", pa.status);
if ((ast_test_flag64(peerflags, OPT_GO_ON)) && !ast_check_hangup(chan) && (res != AST_PBX_KEEPALIVE) && (res != AST_PBX_INCOMPLETE)) {
- if (calldurationlimit)
+ if (!ast_tvzero(calldurationlimit))
memset(&chan->whentohangup, 0, sizeof(chan->whentohangup));
res = 0;
}
More information about the asterisk-commits
mailing list