/usr/include/akonadi/private/imapparser_p.h is in libakonadi-dev 1.13.0-8ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | /*
Copyright (c) 2006 - 2007 Volker Krause <vkrause@kde.org>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#ifndef AKONADI_IMAPPARSER_P_H
#define AKONADI_IMAPPARSER_P_H
#include "akonadiprotocolinternals_export.h"
#include "imapset_p.h"
#include <QtCore/QByteArray>
#include <QtCore/QList>
#include <QtCore/QVarLengthArray>
namespace Akonadi {
/**
Parser for IMAP messages.
*/
class AKONADIPROTOCOLINTERNALS_EXPORT ImapParser
{
public:
/**
Parses the next parenthesized list in @p data starting from @p start
and puts the result into @p result. The number of used characters is
returned.
This does not recurse into sub-lists.
@param data Source data.
@param result The parsed list.
@param start Start parsing at this index.
*/
static int parseParenthesizedList( const QByteArray &data, QList<QByteArray> &result, int start = 0 );
static int parseParenthesizedList( const QByteArray &data, QVarLengthArray<QByteArray,16> &result, int start = 0 );
/**
Parse the next string in @p data (quoted or literal) starting from @p start
and puts the result into @p result. The number of used characters is returned
(this is not equal to result.length()!).
@param data Source data.
@param result Parsed string, quotation, literal marker, etc. are removed,
'NIL' is transformed into an empty QByteArray.
@param start start parsing at this index.
*/
static int parseString( const QByteArray &data, QByteArray &result, int start = 0 );
/**
Parses the next quoted string from @p data starting at @p start and puts it into
@p result. The number of parsed characters is returned (this is not equal to result.length()!).
@param data Source data.
@param result Parsed string, quotation is removed and 'NIL' is transformed to an empty QByteArray.
@param start Start parsing at this index.
*/
static int parseQuotedString( const QByteArray &data, QByteArray &result, int start = 0 );
/**
Returns the number of leading espaces in @p data starting from @p start.
@param data The source data.
@param start Start parsing at this index.
*/
static int stripLeadingSpaces( const QByteArray &data, int start = 0 );
/**
Returns the parentheses balance for the given data, considering quotes.
@param data The source data.
@param start Start parsing at this index.
*/
static int parenthesesBalance( const QByteArray &data, int start = 0 );
/**
Joins a QByteArray list with the given separator.
@param list The QByteArray list to join.
@param separator The separator.
*/
static QByteArray join( const QList<QByteArray> &list, const QByteArray &separator );
/**
Joins a QByteArray set with the given separator.
@param set The QByteArray set to join.
@param separator The separator.
*/
static QByteArray join( const QSet<QByteArray> &set, const QByteArray &separator );
/**
Same as parseString(), but with additional UTF-8 decoding of the result.
@param data Source data.
@param result Parsed string, quotation, literal marker, etc. are removed,
'NIL' is transformed into an empty QString. UTF-8 decoding is applied..
@param start Start parsing at this index.
*/
static int parseString( const QByteArray &data, QString &result, int start = 0 );
/**
Parses the next integer number from @p data starting at start and puts it into
@p result. The number of characters parsed is returned (this is not the parsed result!).
@param data Source data.
@param result Parsed integer number, invalid if ok is false.
@param ok Set to false if the parsing failed.
@param start Start parsing at this index.
*/
static int parseNumber( const QByteArray &data, qint64 &result, bool *ok = 0, int start = 0 );
/**
Quotes the given QByteArray.
@param data Source data.
*/
static QByteArray quote( const QByteArray &data );
/**
Parse an IMAP sequence set.
@param data source data.
@param result The parse sequence set.
@param start start parsing at this index.
@return end position of parsing.
*/
static int parseSequenceSet( const QByteArray &data, ImapSet &result, int start = 0 );
/**
Parse an IMAP date/time value.
@param data source data.
@param dateTime The result date/time.
@param start Start parsing at this index.
@return end position of parsing.
*/
static int parseDateTime( const QByteArray &data, QDateTime &dateTime, int start = 0 );
/**
Split a versioned key of the form 'key[version]' into its components.
@param data The versioned key.
@param key The unversioned key.
@param version The version of the key or 0 if no version was set.
*/
static void splitVersionedKey( const QByteArray &data, QByteArray &key, int &version );
/**
Constructs a new IMAP parser.
*/
ImapParser();
/**
Destroys an IMAP parser.
*/
~ImapParser();
/**
Parses the given line.
@returns True if an IMAP message was parsed completely, false if more data is needed.
@todo read from a QIODevice directly to avoid an extra line buffer
*/
bool parseNextLine( const QByteArray &readBuffer );
/**
Parses the given block of data.
Note: This currently only handles continuation blocks.
@param data The data to parse.
*/
void parseBlock( const QByteArray &data );
/**
Returns the tag of the parsed message.
Only valid if parseNextLine() returned true.
*/
QByteArray tag() const;
/**
Return the raw data of the parsed IMAP message.
Only valid if parseNextLine() returned true.
*/
QByteArray data() const;
/**
Resets the internal state of the parser. Call before parsing
a new IMAP message.
*/
void reset();
/**
Returns true if the last parsed line contained a literal continuation,
ie. readiness for receiving literal data needs to be indicated.
*/
bool continuationStarted() const;
/**
Returns the expected size of liteal data.
*/
qint64 continuationSize() const;
private:
Q_DISABLE_COPY( ImapParser )
class Private;
Private *const d;
};
}
#endif
|