summaryrefslogtreecommitdiffstats
path: root/api/logic/net/ChecksumValidator.h
diff options
context:
space:
mode:
Diffstat (limited to 'api/logic/net/ChecksumValidator.h')
-rw-r--r--api/logic/net/ChecksumValidator.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/api/logic/net/ChecksumValidator.h b/api/logic/net/ChecksumValidator.h
new file mode 100644
index 00000000..3cd25bc3
--- /dev/null
+++ b/api/logic/net/ChecksumValidator.h
@@ -0,0 +1,57 @@
+#pragma once
+
+#include "Validator.h"
+#include <QCryptographicHash>
+#include <memory>
+#include <QFile>
+
+namespace Net {
+class ChecksumValidator: public Validator
+{
+public: /* con/des */
+ ChecksumValidator(QCryptographicHash::Algorithm algorithm, QByteArray expected = QByteArray())
+ :m_checksum(algorithm), m_expected(expected)
+ {
+ };
+ virtual ~ChecksumValidator() {};
+
+public: /* methods */
+ bool init(QNetworkRequest &) override
+ {
+ m_checksum.reset();
+ return true;
+ }
+ bool write(QByteArray & data) override
+ {
+ m_checksum.addData(data);
+ this->data.append(data);
+ return true;
+ }
+ bool abort() override
+ {
+ return true;
+ }
+ bool validate(QNetworkReply &) override
+ {
+ if(m_expected.size() && m_expected != hash())
+ {
+ qWarning() << "Checksum mismatch, download is bad.";
+ return false;
+ }
+ return true;
+ }
+ QByteArray hash()
+ {
+ return m_checksum.result();
+ }
+ void setExpected(QByteArray expected)
+ {
+ m_expected = expected;
+ }
+
+private: /* data */
+ QByteArray data;
+ QCryptographicHash m_checksum;
+ QByteArray m_expected;
+};
+} \ No newline at end of file