diff options
Diffstat (limited to 'project2/validDateCheck.cpp')
-rw-r--r-- | project2/validDateCheck.cpp | 68 |
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); + |