File indexing completed on 2025-03-09 04:54:29
0001 /* 0002 SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "messageviewer_export.h" 0010 0011 #include <QByteArray> 0012 #include <QList> 0013 namespace MessageViewer 0014 { 0015 /** 0016 * @brief The DKIMHeaderParser class 0017 * @author Laurent Montel <montel@kde.org> 0018 */ 0019 class MESSAGEVIEWER_EXPORT DKIMHeaderParser 0020 { 0021 private: 0022 struct Header { 0023 QString headerName; 0024 QString headerValue; 0025 QByteArray codec; 0026 [[nodiscard]] bool isValid() const 0027 { 0028 return !headerName.isEmpty(); 0029 } 0030 0031 [[nodiscard]] bool operator==(const Header &other) const 0032 { 0033 return other.headerName == headerName && other.headerValue == headerValue && other.codec == codec; 0034 } 0035 }; 0036 0037 public: 0038 DKIMHeaderParser(); 0039 ~DKIMHeaderParser(); 0040 void parse(); 0041 void setHead(const QByteArray &head); 0042 0043 [[nodiscard]] QByteArray head() const; 0044 0045 [[nodiscard]] QString headerType(const QString &str); 0046 [[nodiscard]] bool wasAlreadyParsed() const; 0047 void setWasAlreadyParsed(bool wasAlreadyParsed); 0048 0049 [[nodiscard]] bool operator==(const DKIMHeaderParser &other) const; 0050 [[nodiscard]] QList<DKIMHeaderParser::Header> listHeaders() const; 0051 0052 private: 0053 [[nodiscard]] static int findHeaderLineEnd(const QByteArray &src, int &dataBegin, bool *folded); 0054 [[nodiscard]] MESSAGEVIEWER_NO_EXPORT MessageViewer::DKIMHeaderParser::Header 0055 extractHeader(const QByteArray &head, const int headerStart, int &endOfFieldBody); 0056 [[nodiscard]] static QByteArray unfoldHeader(const char *header, size_t headerSize); 0057 QByteArray mHead; 0058 QList<DKIMHeaderParser::Header> mListHeaders; 0059 bool mWasAlreadyParsed = false; 0060 }; 0061 }