summaryrefslogtreecommitdiff
path: root/project2/validDateCheck.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'project2/validDateCheck.cpp')
-rw-r--r--project2/validDateCheck.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/project2/validDateCheck.cpp b/project2/validDateCheck.cpp
new file mode 100644
index 0000000..410a003
--- /dev/null
+++ b/project2/validDateCheck.cpp
@@ -0,0 +1,68 @@
+#include "logger.h"
+#include "xmlObjectLoader.h"
+#include "commonObjects.h"
+#include "paramChecker.h"
+#include "variables.h"
+
+class ValidDateCheck : public ParamChecker {
+ public:
+ ValidDateCheck(const xmlpp::Element * p) :
+ ParamChecker(p),
+ applyTo(p, "apply-to"),
+ format(p, "format"),
+ warnLev(p->get_attribute_value("warn") == "no" ? LOG_INFO : LOG_WARNING)
+ {
+ }
+
+ ~ValidDateCheck()
+ {
+ }
+
+ void
+ loadComplete(const CommonObjects *)
+ {
+ }
+
+ bool
+ performCheck() const
+ {
+ struct tm tm, ftm;
+ memset(&tm, 0, sizeof(struct tm));
+ mktime(&tm);
+ const char * at = applyTo();
+ const char * f = format();
+ const char * s = strptime(at, f, &tm);
+ if (!s || *s) {
+ Logger()->messagef(warnLev, "%s: check failed (parse) for '%s' against '%s'",
+ __PRETTY_FUNCTION__, at, f);
+ return false;
+ }
+ ftm = tm;
+ if (mktime(&ftm) == -1) {
+ Logger()->messagef(warnLev, "%s: check failed (normalise) for '%s' against '%s'",
+ __PRETTY_FUNCTION__, at, f);
+ return false;
+ }
+ if (tm.tm_year != ftm.tm_year ||
+ tm.tm_mon != ftm.tm_mon ||
+ tm.tm_mday != ftm.tm_mday ||
+ tm.tm_hour != (ftm.tm_hour - ftm.tm_isdst) ||
+ tm.tm_min != ftm.tm_min ||
+ tm.tm_sec != ftm.tm_sec) {
+ Logger()->messagef(LOG_INFO, "tm: %d %d %d %d %d %d",
+ tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
+ Logger()->messagef(LOG_INFO, "ftm: %d %d %d %d %d %d",
+ ftm.tm_year, ftm.tm_mon, ftm.tm_mday, ftm.tm_hour, ftm.tm_min, ftm.tm_sec);
+ Logger()->messagef(warnLev, "%s: check failed (verify) for '%s' against '%s'",
+ __PRETTY_FUNCTION__, at, f);
+ return false;
+ }
+ return true;
+ }
+ Variable applyTo;
+ Variable format;
+ int warnLev;
+};
+
+DECLARE_LOADER("validdatecheck", ValidDateCheck);
+