27 #include "imap4-config.h"
29 #include "imapcommand.h"
31 #include "mailheader.h"
33 #include <kio/authinfo.h>
34 #include <kio/slavebase.h>
38 #include <QStringList>
55 char operator[](
int i)
const {
return data.length() > (i + pos) ? data[i + pos] :
'\0'; }
56 bool isEmpty()
const {
return pos >= data.size(); }
57 QByteArray cstr()
const
59 if (pos >= data.size())
return QByteArray();
60 return QByteArray(data.data() + pos, data.size() - pos);
62 int find(
char c,
int index = 0)
const
64 int res = data.indexOf(c, index + pos);
65 return (res == -1) ? res : (res - pos);
68 void takeLeftNoResize(QByteArray& dest, uint len)
const
70 memmove(dest.data(), data.data() + pos, len);
73 void takeMidNoResize(QByteArray& dest, uint start, uint len)
const
75 memmove(dest.data(), data.data() + pos + start, len);
84 return data.size() - pos;
86 void fromString(
const QString &s)
124 void setSize (ulong inSize)
133 void setUid (ulong inUid)
142 void setFlags (ulong inFlags)
147 QByteArray getDate ()
151 void setDate (
const QByteArray & _str)
161 myDate = QByteArray();
190 virtual ~ imapParser ();
193 enum IMAP_STATE getState () {
return currentState; }
195 void setState(
enum IMAP_STATE state) { currentState = state; }
198 const QString getCurrentBox ()
200 return KIMAP::decodeImapFolderName(currentBox);
208 CommandPtr sendCommand (CommandPtr aCmd);
214 CommandPtr doCommand (CommandPtr aCmd);
224 bool clientLogin (
const QString & aUser,
const QString & aPass, QString & resultInfo);
234 bool clientAuthenticate (KIO::SlaveBase *slave, KIO::AuthInfo &ai,
const QString & aFQDN,
235 const QString & aAuth,
bool isSSL, QString & resultInfo);
250 void parseRecent (ulong value,
parseString & result);
252 void parseResult (QByteArray & result,
parseString & rest,
253 const QString & command = QString());
271 void parseExists (ulong value,
parseString & result);
273 void parseExpunge (ulong value,
parseString & result);
297 void parseFetch (ulong value,
parseString & inWords);
302 void parseAddressList (
parseString & inWords, QList<mailAddress *>& list);
304 const mailAddress& parseAddress (
parseString & inWords, mailAddress& buffer);
311 QString & section,
mimeHeader * inHeader = 0);
318 QHash< QByteArray, QString > parseParameters (
parseString & inWords);
324 QHash< QByteArray, QString > parseDisposition (
parseString & inWords);
329 virtual void parseRelay (
const QByteArray & buffer);
333 virtual void parseRelay (ulong);
336 virtual bool parseRead (QByteArray & buffer,
long len,
long relay = 0);
339 virtual bool parseReadLine (QByteArray & buffer,
long relay = 0);
342 virtual void parseWriteLine (
const QString &);
350 QByteArray parseLiteral(
parseString & inWords,
bool relay =
false,
351 bool stopAtBracket =
false);
356 static QByteArray parseOneWord (
parseString & inWords,
357 bool stopAtBracket =
false);
360 static bool parseOneNumber (
parseString & inWords, ulong & num);
363 static void parseURL (
const KUrl & _url, QString & _box, QString & _section,
364 QString & _type, QString & _uid, QString & _validity,
371 imapCache *getLastHandled ()
377 const QStringList & getResults ()
383 const imapInfo & getStatus ()
388 const imapInfo & getSelected ()
393 const QByteArray & getContinuation ()
399 bool hasCapability (
const QString &);
401 void removeCapability (
const QString & cap);
406 while (!inWords.isEmpty() &&
407 ((c = inWords[0]) ==
' ' || c ==
'\t' || c ==
'\r' || c ==
'\n'))
414 QString namespaceForBox(
const QString & box );
420 enum IMAP_STATE currentState;
432 QStringList imapCapabilities;
435 QList < imapList > listResponses;
438 QList <CommandPtr> sentQueue;
439 QList <CommandPtr> completeQueue;
444 QStringList unhandled;
447 QByteArray continuation;
451 imapCache *lastHandled;
453 ulong commandCounter;
456 QStringList lastResults;
462 QMap<QString, QString> namespaceToDelimiter;
468 QStringList imapNamespaces;
473 imapParser & operator = (
const imapParser &);