Warning, file /pim/kmime/src/kmime_parsers_p.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 kmime_parsers.h 0003 0004 KMime, the KDE Internet mail/usenet news message library. 0005 SPDX-FileCopyrightText: 2001 the KMime authors. 0006 See file AUTHORS for details 0007 0008 SPDX-License-Identifier: LGPL-2.0-or-later 0009 */ 0010 #pragma once 0011 0012 #include <QByteArray> 0013 #include <QList> 0014 0015 namespace KMime 0016 { 0017 0018 namespace Parser 0019 { 0020 0021 /** Helper-class: splits a multipart-message into single 0022 parts as described in RFC 2046 0023 @internal 0024 */ 0025 class MultiPart 0026 { 0027 public: 0028 MultiPart(const QByteArray &src, const QByteArray &boundary); 0029 0030 [[nodiscard]] bool parse(); 0031 [[nodiscard]] QList<QByteArray> parts() const { return m_parts; } 0032 [[nodiscard]] QByteArray preamble() const { return m_preamble; } 0033 [[nodiscard]] QByteArray epilouge() const { return m_epilouge; } 0034 0035 private: 0036 QByteArray m_src; 0037 const QByteArray m_boundary; 0038 QByteArray m_preamble; 0039 QByteArray m_epilouge; 0040 QList<QByteArray> m_parts; 0041 }; 0042 0043 /** Helper-class: abstract base class of all parsers for 0044 non-mime binary data (uuencoded, yenc) 0045 @internal 0046 */ 0047 class NonMimeParser 0048 { 0049 public: 0050 [[nodiscard]] bool isPartial() const { 0051 return (m_partNr > -1 && m_totalNr > -1 && m_totalNr != 1); 0052 } 0053 [[nodiscard]] int partialNumber() const { return m_partNr; } 0054 [[nodiscard]] int partialCount() const { return m_totalNr; } 0055 [[nodiscard]] bool hasTextPart() const { return (m_text.length() > 1); } 0056 [[nodiscard]] QByteArray textPart() const { return m_text; } 0057 [[nodiscard]] QList<QByteArray> binaryParts() const { return m_bins; } 0058 [[nodiscard]] QList<QByteArray> filenames() const { return m_filenames; } 0059 [[nodiscard]] QList<QByteArray> mimeTypes() const { return m_mimeTypes; } 0060 0061 protected: 0062 explicit NonMimeParser(const QByteArray &src); 0063 ~NonMimeParser(); 0064 0065 static QByteArray guessMimeType(const QByteArray &fileName); 0066 0067 QByteArray m_src, m_text; 0068 QList<QByteArray> m_bins, m_filenames, m_mimeTypes; 0069 int m_partNr, m_totalNr; 0070 }; 0071 0072 /** Helper-class: tries to extract the data from a possibly 0073 uuencoded message 0074 @internal 0075 */ 0076 class UUEncoded : public NonMimeParser 0077 { 0078 public: 0079 UUEncoded(const QByteArray &src, const QByteArray &subject); 0080 0081 [[nodiscard]] bool parse(); 0082 0083 private: 0084 QByteArray m_subject; 0085 }; 0086 0087 /** Helper-class: tries to extract the data from a possibly 0088 yenc encoded message 0089 @internal 0090 */ 0091 class YENCEncoded : public NonMimeParser 0092 { 0093 public: 0094 explicit YENCEncoded(const QByteArray &src); 0095 0096 [[nodiscard]] bool parse(); 0097 0098 private: 0099 static bool yencMeta(QByteArray &src, const QByteArray &name, int *value); 0100 }; 0101 0102 } // namespace Parser 0103 0104 } // namespace KMime 0105