aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-04-24 19:37:45 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-04-24 19:37:45 +0000
commit898eaffe2ba79f6949a28b81c6577b1dabfa34eb (patch)
tree0a57a65902708284757d69fd6594439ae0e83e12 /apps
parent74bfb6e0b5a640e6f55d38e1a71fcc2b5de17c87 (diff)
Merged revisions 114617 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r114617 | tilghman | 2008-04-24 14:24:31 -0500 (Thu, 24 Apr 2008) | 6 lines Fix DST calculation, and fix bug in calculation of whether conf has started yet or not (Closes issue #12292) Reported by: DEA Patches: app_meetme-rt-dst-sched-fix.txt uploaded by DEA (license 3) ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@114619 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r--apps/app_meetme.c70
1 files changed, 39 insertions, 31 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 5e72096e7..1bf0ba3e9 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -2707,36 +2707,57 @@ static struct ast_conference *find_conf_realtime(struct ast_channel *chan, char
char useropts[32] = "";
char adminopts[32] = "";
struct ast_tm tm, etm;
- struct timeval starttime = { .tv_sec = 0 }, endtime = { .tv_sec = 0 };
+ struct timeval endtime = { .tv_sec = 0 };
if (rt_schedule) {
now = ast_tvnow();
- if (fuzzystart)
- now.tv_sec += fuzzystart;
-
ast_localtime(&now, &tm, NULL);
ast_strftime(currenttime, sizeof(currenttime), DATE_FORMAT, &tm);
- if (earlyalert) {
+ ast_debug(1, "Looking for conference %s that starts after %s\n", confno, eatime);
+
+ var = ast_load_realtime("meetme", "confno",
+ confno, "starttime <= ", currenttime, "endtime >= ",
+ currenttime, NULL);
+
+ if (!var && fuzzystart) {
+ now = ast_tvnow();
+ now.tv_sec += fuzzystart;
+
+ ast_localtime(&now, &tm, NULL);
+ ast_strftime(currenttime, sizeof(currenttime), DATE_FORMAT, &tm);
+ var = ast_load_realtime("meetme", "confno",
+ confno, "starttime <= ", currenttime, "endtime >= ",
+ currenttime, NULL);
+ }
+
+ if (!var && earlyalert) {
+ now = ast_tvnow();
now.tv_sec += earlyalert;
ast_localtime(&now, &etm, NULL);
ast_strftime(eatime, sizeof(eatime), DATE_FORMAT, &etm);
- } else {
- ast_copy_string(eatime, currenttime, sizeof(eatime));
+ var = ast_load_realtime("meetme", "confno",
+ confno, "starttime <= ", eatime, "endtime >= ",
+ currenttime, NULL);
+ if (var)
+ *too_early = 1;
}
- ast_debug(1, "Looking for conference %s that starts after %s\n", confno, eatime);
-
- var = ast_load_realtime("meetme", "confno",
- confno, "starttime <= ", eatime, "endtime >= ",
- currenttime, NULL);
} else
var = ast_load_realtime("meetme", "confno", confno, NULL);
if (!var)
return NULL;
+ if (rt_schedule && *too_early) {
+ /* Announce that the caller is early and exit */
+ if (!ast_streamfile(chan, "conf-has-not-started", chan->language))
+ ast_waitstream(chan, "");
+ ast_variables_destroy(var);
+ return NULL;
+ }
+
while (var) {
if (!strcasecmp(var->name, "pin")) {
pin = ast_strdupa(var->value);
@@ -2754,31 +2775,18 @@ static struct ast_conference *find_conf_realtime(struct ast_channel *chan, char
struct tm tm;
} t = { { 0, }, };
strptime(var->value, "%Y-%m-%d %H:%M:%S", &t.tm);
+ /* strptime does not determine if a time is
+ * in DST or not. Set tm_isdst to -1 to
+ * allow ast_mktime to adjust for DST
+ * if needed */
+ t.tm.tm_isdst = -1;
endtime = ast_mktime(&t.atm, NULL);
- } else if (!strcasecmp(var->name, "starttime")) {
- union {
- struct ast_tm atm;
- struct tm tm;
- } t = { { 0, }, };
- strptime(var->value, "%Y-%m-%d %H:%M:%S", &t.tm);
- starttime = ast_mktime(&t.atm, NULL);
}
var = var->next;
}
- ast_variables_destroy(var);
-
- if (earlyalert) {
- now = ast_tvnow();
- if (now.tv_sec + fuzzystart < starttime.tv_sec) {
- /* Announce that the caller is early and exit */
- if (!ast_streamfile(chan, "conf-has-not-started", chan->language))
- ast_waitstream(chan, "");
- *too_early = 1;
- return NULL;
- }
- }
+ ast_variables_destroy(var);
cnf = build_conf(confno, pin ? pin : "", pinadmin ? pinadmin : "", make, dynamic, refcount, chan);