Mercurial > trustbridge
diff ui/certificatelist.cpp @ 9:2ad9a96518e3
Actually parse all elements in the list
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 12 Feb 2014 18:45:13 +0000 |
parents | 992c0ec57660 |
children | dc1e1e9e62ce |
line wrap: on
line diff
--- a/ui/certificatelist.cpp Wed Feb 12 17:17:44 2014 +0000 +++ b/ui/certificatelist.cpp Wed Feb 12 18:45:13 2014 +0000 @@ -2,6 +2,8 @@ #include <QDebug> +#define PARSER_VERSION "1" + CertificateList::CertificateList(const char *fileName) { char *data = NULL; @@ -9,7 +11,46 @@ mStatus = readAndVerifyList(fileName, &data, &size); - if (isValid()) { - mFileContent = QByteArray::fromRawData(data, size); + if (!isValid()) { + return; + } + + // Take the data into the Qt Universe where memory is plentiful + // and CPU's are fast :) + QStringList lines = QString::fromLatin1(data, size).split("\n"); + free(data); + data = NULL; + + for (int i = 0; i < lines.size(); ++i) { + QString curLine = lines[i].trimmed(); + if (curLine.startsWith("F:")) { + if (curLine.right(1) != PARSER_VERSION) { + qDebug() << "Invalid Format Version"; + mStatus = IncompatibleVersion; + return; + } + } else if (curLine.startsWith("D:")) { + bool ok = false; + qlonglong timestamp = 0; + + curLine.remove(0, 2); + timestamp = curLine.toLongLong(&ok); + if (!ok) { + qDebug() << "Invalid Date"; + mStatus = InvalidFormat; + return; + } + + mDate = QDateTime::fromMSecsSinceEpoch(timestamp * 1000); + } else if (curLine.startsWith("I:")) { + mCertificatesInstall << QByteArray::fromBase64(curLine.remove(0,2).toLatin1()); + } else if (curLine.startsWith("R:")) { + mCertificatesInstall << QByteArray::fromBase64(curLine.remove(0,2).toLatin1()); + } else if (curLine.startsWith("S:")) { + // Signature is verified in readAndVerifyList + continue; + } else if (!curLine.isEmpty()){ + qDebug () << "Don't know how to handle: " << curLine; + } } }